Mercurial > hg > beaglert
annotate projects/basic/render.cpp @ 56:3c3a1357657d newapi
Further API update to name three primary functions setup(), render() and cleanup(). Changed include paths so now can #include <BeagleRT.h>. Removed stale pru_rtaudio.bin file as this is now done as pru_rtaudio_bin.h. Updated examples to new API and fixed minor compiler warnings along the way. Network example needs further attention to compile.
author | andrewm |
---|---|
date | Wed, 15 Jul 2015 12:10:51 +0100 |
parents | 579c86316008 |
children | 07cfd337ad18 |
rev | line source |
---|---|
andrewm@0 | 1 /* |
andrewm@0 | 2 * render.cpp |
andrewm@0 | 3 * |
andrewm@0 | 4 * Created on: Oct 24, 2014 |
andrewm@0 | 5 * Author: parallels |
andrewm@0 | 6 */ |
andrewm@0 | 7 |
andrewm@0 | 8 |
andrewm@56 | 9 #include <BeagleRT.h> |
andrewm@0 | 10 #include <cmath> |
andrewm@0 | 11 |
andrewm@56 | 12 float gFrequency = 440.0; |
andrewm@0 | 13 float gPhase; |
andrewm@0 | 14 float gInverseSampleRate; |
andrewm@0 | 15 |
andrewm@56 | 16 // setup() is called once before the audio rendering starts. |
andrewm@0 | 17 // Use it to perform any initialisation and allocation which is dependent |
andrewm@0 | 18 // on the period size or sample rate. |
andrewm@0 | 19 // |
andrewm@0 | 20 // userData holds an opaque pointer to a data structure that was passed |
andrewm@0 | 21 // in from the call to initAudio(). |
andrewm@0 | 22 // |
andrewm@0 | 23 // Return true on success; returning false halts the program. |
andrewm@0 | 24 |
andrewm@56 | 25 bool setup(BeagleRTContext *context, void *userData) |
andrewm@0 | 26 { |
andrewm@0 | 27 // Retrieve a parameter passed in from the initAudio() call |
andrewm@56 | 28 if(userData != 0) |
andrewm@56 | 29 gFrequency = *(float *)userData; |
andrewm@0 | 30 |
andrewm@45 | 31 gInverseSampleRate = 1.0 / context->audioSampleRate; |
andrewm@0 | 32 gPhase = 0.0; |
andrewm@0 | 33 |
andrewm@0 | 34 return true; |
andrewm@0 | 35 } |
andrewm@0 | 36 |
andrewm@0 | 37 // render() is called regularly at the highest priority by the audio engine. |
andrewm@0 | 38 // Input and output are given from the audio hardware and the other |
andrewm@0 | 39 // ADCs and DACs (if available). If only audio is available, numMatrixFrames |
andrewm@0 | 40 // will be 0. |
andrewm@0 | 41 |
andrewm@45 | 42 void render(BeagleRTContext *context, void *userData) |
andrewm@0 | 43 { |
andrewm@45 | 44 for(unsigned int n = 0; n < context->audioFrames; n++) { |
andrewm@0 | 45 float out = 0.8f * sinf(gPhase); |
andrewm@0 | 46 gPhase += 2.0 * M_PI * gFrequency * gInverseSampleRate; |
andrewm@0 | 47 if(gPhase > 2.0 * M_PI) |
andrewm@0 | 48 gPhase -= 2.0 * M_PI; |
andrewm@0 | 49 |
andrewm@45 | 50 for(unsigned int channel = 0; channel < context->audioChannels; channel++) |
andrewm@45 | 51 context->audioOut[n * context->audioChannels + channel] = out; |
andrewm@0 | 52 } |
andrewm@0 | 53 } |
andrewm@0 | 54 |
andrewm@56 | 55 // cleanup() is called once at the end, after the audio has stopped. |
andrewm@56 | 56 // Release any resources that were allocated in setup(). |
andrewm@0 | 57 |
andrewm@56 | 58 void cleanup(BeagleRTContext *context, void *userData) |
andrewm@0 | 59 { |
andrewm@0 | 60 |
andrewm@0 | 61 } |