annotate projects/basic/render.cpp @ 13:6adb088196a7

Fixed ADC bug; added a simple passthrough test
author andrewm
date Fri, 23 Jan 2015 15:17:09 +0000
parents a6beeba3a648
children ad5cd8dd99b3
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@0 9 #include "../../include/render.h"
andrewm@0 10 #include <cmath>
andrewm@0 11
andrewm@0 12 float gFrequency;
andrewm@0 13 float gPhase;
andrewm@0 14 float gInverseSampleRate;
andrewm@0 15
andrewm@0 16 // initialise_render() 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@12 25 bool initialise_render(int numMatrixChannels, int numAudioChannels,
andrewm@12 26 int numMatrixFramesPerPeriod,
andrewm@12 27 int numAudioFramesPerPeriod,
andrewm@12 28 float matrixSampleRate, float audioSampleRate,
andrewm@12 29 void *userData)
andrewm@0 30 {
andrewm@0 31 // Retrieve a parameter passed in from the initAudio() call
andrewm@0 32 gFrequency = *(float *)userData;
andrewm@0 33
andrewm@0 34 gInverseSampleRate = 1.0 / audioSampleRate;
andrewm@0 35 gPhase = 0.0;
andrewm@0 36
andrewm@0 37 return true;
andrewm@0 38 }
andrewm@0 39
andrewm@0 40 // render() is called regularly at the highest priority by the audio engine.
andrewm@0 41 // Input and output are given from the audio hardware and the other
andrewm@0 42 // ADCs and DACs (if available). If only audio is available, numMatrixFrames
andrewm@0 43 // will be 0.
andrewm@0 44
andrewm@0 45 void render(int numMatrixFrames, int numAudioFrames, float *audioIn, float *audioOut,
andrewm@0 46 uint16_t *matrixIn, uint16_t *matrixOut)
andrewm@0 47 {
andrewm@0 48 for(int n = 0; n < numAudioFrames; n++) {
andrewm@0 49 float out = 0.8f * sinf(gPhase);
andrewm@0 50 gPhase += 2.0 * M_PI * gFrequency * gInverseSampleRate;
andrewm@0 51 if(gPhase > 2.0 * M_PI)
andrewm@0 52 gPhase -= 2.0 * M_PI;
andrewm@0 53
andrewm@13 54 for(int channel = 0; channel < gNumAudioChannels; channel++)
andrewm@13 55 audioOut[n * gNumAudioChannels + channel] = out;
andrewm@0 56 }
andrewm@0 57 }
andrewm@0 58
andrewm@0 59 // cleanup_render() is called once at the end, after the audio has stopped.
andrewm@0 60 // Release any resources that were allocated in initialise_render().
andrewm@0 61
andrewm@0 62 void cleanup_render()
andrewm@0 63 {
andrewm@0 64
andrewm@0 65 }