Mercurial > hg > beaglert
diff projects/scope/render.cpp @ 94:2fe6690fcab7
Added scope project, copied and edited from nodejsbeaglert
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Wed, 22 Jul 2015 11:38:41 +0100 |
parents | |
children | ad8a93cd7c39 a94c8e0f4ec7 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/projects/scope/render.cpp Wed Jul 22 11:38:41 2015 +0100 @@ -0,0 +1,75 @@ +#include <BeagleRT.h> +#include <Scope.h> +#include <cmath> + +float gPhase1, gPhase2; +float gFrequency1, gFrequency2; +float gInverseSampleRate; + +Scope scope; //create a scope object + +// 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. +// +// userData holds an opaque pointer to a data structure that was passed +// in from the call to initAudio(). +// +// Return true on success; returning false halts the program. +bool setup(BeagleRTContext *context, void *userData) +{ + scope.setup(context->audioSampleRate); //call this once in setup to initialise the scope + + gInverseSampleRate = 1.0/context->audioSampleRate; + + gPhase1 = 0.0; + gPhase2 = 0.0; + + gFrequency1 = 200.0; + gFrequency2 = 201.0; + return true; +} + +// render() is called regularly at the highest priority by the audio engine. +// Input and output are given from the audio hardware and the other +// ADCs and DACs (if available). If only audio is available, numMatrixFrames +// will be 0. + +void render(BeagleRTContext *context, void *userData) +{ + for(unsigned int n = 0; n < context->audioFrames; n++) { + + float chn1 = sinf(gPhase1); + float chn2 = sinf(gPhase2); + + float chn3 = context->audioIn[n*2 + 0]; + float chn4 = context->audioIn[n*2 + 1]; + + float chn5 = context->analogIn[(int)n/2*8 + 0]; + float chn6 = context->analogIn[(int)n/2*8 + 1]; + +// scope.log(chn1, chn2, chn3, chn4, chn5, chn6); + scope.log(chn1); + //call this once every audio frame + //takes six or fewer floats as parameters + //first parameter becomes channel 1 etc + //to view, click the 'oscilloscope' button on the toolbar while BeagleRT is NOT running + //then click the big red button on the toolbar on this page + + gPhase1 += 2.0 * M_PI * gFrequency1 * gInverseSampleRate; + gPhase2 += 2.0 * M_PI * gFrequency2 * gInverseSampleRate; + if(gPhase1 > 2.0 * M_PI) + gPhase1 -= 2.0 * M_PI; + if(gPhase2 > 2.0 * M_PI) + gPhase2 -= 2.0 * M_PI; + + } +} + +// cleanup_render() is called once at the end, after the audio has stopped. +// Release any resources that were allocated in initialise_render(). + +void cleanup(BeagleRTContext *context, void *userData) +{ + +}