diff projects/basic_sensor/render.cpp @ 52:a6d223473ea2 newapi

Updated examples for new API. tank_wars not yet updated; audio_in_FFT and oscillator_bank not working properly yet.
author andrewm
date Sun, 31 May 2015 02:13:39 -0500
parents 6adb088196a7
children
line wrap: on
line diff
--- a/projects/basic_sensor/render.cpp	Sat May 30 13:25:51 2015 -0500
+++ b/projects/basic_sensor/render.cpp	Sun May 31 02:13:39 2015 -0500
@@ -6,14 +6,14 @@
  */
 
 
-#include "../../include/render.h"
+#include "../../include/BeagleRT.h"
 #include "../../include/Utilities.h"
 #include <rtdk.h>
 #include <cmath>
 
 float gPhase;
 float gInverseSampleRate;
-int gMatrixFramesPerAudioFrame;
+int gAudioFramesPerAnalogFrame;
 
 // These settings are carried over from main.cpp
 // Setting global variables is an alternative approach
@@ -31,19 +31,15 @@
 //
 // Return true on success; returning false halts the program.
 
-bool initialise_render(int numMatrixChannels, int numAudioChannels,
-					   int numMatrixFramesPerPeriod,
-					   int numAudioFramesPerPeriod,
-					   float matrixSampleRate, float audioSampleRate,
-					   void *userData)
+bool initialise_render(BeagleRTContext *context, void *userData)
 {
-	if(numMatrixFramesPerPeriod == 0 || numMatrixFramesPerPeriod > numAudioFramesPerPeriod) {
-		rt_printf("Error: this example needs the matrix enabled, with 4 or 8 channels\n");
+	if(context->analogFrames == 0 || context->analogFrames > context->audioFrames) {
+		rt_printf("Error: this example needs analog enabled, with 4 or 8 channels\n");
 		return false;
 	}
 
-	gMatrixFramesPerAudioFrame = numAudioFramesPerPeriod / numMatrixFramesPerPeriod;
-	gInverseSampleRate = 1.0 / audioSampleRate;
+	gAudioFramesPerAnalogFrame = context->audioFrames / context->analogFrames;
+	gInverseSampleRate = 1.0 / context->audioSampleRate;
 	gPhase = 0.0;
 
 	return true;
@@ -54,26 +50,25 @@
 // ADCs and DACs (if available). If only audio is available, numMatrixFrames
 // will be 0.
 
-void render(int numMatrixFrames, int numAudioFrames, float *audioIn, float *audioOut,
-			uint16_t *matrixIn, uint16_t *matrixOut)
+void render(BeagleRTContext *context, void *userData)
 {
-	float frequency = 0;
-	float amplitude = 0;
+	float frequency = 440.0;
+	float amplitude = 0.8;
 
 	// There are twice as many audio frames as matrix frames since audio sample rate
 	// is twice as high
 
-	for(int n = 0; n < numAudioFrames; n++) {
-		if(!(n % gMatrixFramesPerAudioFrame)) {
+	for(unsigned int n = 0; n < context->audioFrames; n++) {
+		if(!(n % gAudioFramesPerAnalogFrame)) {
 			// Even audio samples: update frequency and amplitude from the matrix
-			frequency = map(analogRead(gSensorInputFrequency, n/gMatrixFramesPerAudioFrame), 0, MATRIX_MAX, 100, 1000);
-			amplitude = (float)analogRead(gSensorInputAmplitude, n/gMatrixFramesPerAudioFrame) / MATRIX_MAX;
+			frequency = map(analogReadFrame(context, n/gAudioFramesPerAnalogFrame, gSensorInputFrequency), 0, 1, 100, 1000);
+			amplitude = analogReadFrame(context, n/gAudioFramesPerAnalogFrame, gSensorInputAmplitude);
 		}
 
 		float out = amplitude * sinf(gPhase);
 
-		for(int channel = 0; channel < gNumAudioChannels; channel++)
-			audioOut[n * gNumAudioChannels + channel] = out;
+		for(unsigned int channel = 0; channel < context->audioChannels; channel++)
+			context->audioOut[n * context->audioChannels + channel] = out;
 
 		gPhase += 2.0 * M_PI * frequency * gInverseSampleRate;
 		if(gPhase > 2.0 * M_PI)
@@ -84,7 +79,7 @@
 // cleanup_render() is called once at the end, after the audio has stopped.
 // Release any resources that were allocated in initialise_render().
 
-void cleanup_render()
+void cleanup_render(BeagleRTContext *context, void *userData)
 {
 
 }