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 }