Mercurial > hg > beaglert
diff projects/basic_analog_output/render.cpp @ 12:a6beeba3a648
Initial support for higher matrix sample rates by reducing the number of channels. Input not tested yet, and not all examples updated to new format.
author | andrewm |
---|---|
date | Thu, 22 Jan 2015 19:00:22 +0000 |
parents | 09f03ac40fcc |
children | 6adb088196a7 |
line wrap: on
line diff
--- a/projects/basic_analog_output/render.cpp Thu Nov 13 16:02:59 2014 +0100 +++ b/projects/basic_analog_output/render.cpp Thu Jan 22 19:00:22 2015 +0000 @@ -19,6 +19,8 @@ float gPhase; float gInverseSampleRate; +int gMatrixChannels; + // initialise_render() is called once before the audio rendering starts. // Use it to perform any initialisation and allocation which is dependent // on the period size or sample rate. @@ -28,19 +30,22 @@ // // Return true on success; returning false halts the program. -bool initialise_render(int numChannels, int numMatrixFramesPerPeriod, - int numAudioFramesPerPeriod, float matrixSampleRate, - float audioSampleRate, void *userData) +bool initialise_render(int numMatrixChannels, int numAudioChannels, + int numMatrixFramesPerPeriod, + int numAudioFramesPerPeriod, + float matrixSampleRate, float audioSampleRate, + void *userData) { // Retrieve a parameter passed in from the initAudio() call gFrequency = *(float *)userData; - if(numMatrixFramesPerPeriod*2 != numAudioFramesPerPeriod) { - rt_printf("Error: this example needs the matrix enabled, running at half audio rate\n"); + if(numMatrixFramesPerPeriod == 0) { + rt_printf("Error: this example needs the matrix enabled\n"); return false; } - gInverseSampleRate = 1.0 / audioSampleRate; + gMatrixChannels = numMatrixChannels; + gInverseSampleRate = 1.0 / matrixSampleRate; gPhase = 0.0; return true; @@ -57,12 +62,13 @@ for(int n = 0; n < numMatrixFrames; n++) { // Set LED to different phase for each matrix channel float relativePhase = 0.0; - for(int channel = 0; channel < 8; channel++) { + for(int channel = 0; channel < gMatrixChannels; channel++) { float out = kMinimumAmplitude + kAmplitudeRange * 0.5f * (1.0f + sinf(gPhase + relativePhase)); if(out > MATRIX_MAX) out = MATRIX_MAX; - analogWrite(channel, n, out); + matrixOut[n * gMatrixChannels + channel] = (uint16_t)out; + //analogWrite(channel, n, out); // Advance by pi/4 (1/8 of a full rotation) for each channel relativePhase += M_PI * 0.25;