Mercurial > hg > beaglert
comparison projects/basic_passthru/render.cpp @ 67:472e892c6e41
Merge newapi into default
author | Andrew McPherson <a.mcpherson@qmul.ac.uk> |
---|---|
date | Fri, 17 Jul 2015 15:28:18 +0100 |
parents | 3c3a1357657d |
children | 1e629f126322 |
comparison
equal
deleted
inserted
replaced
21:0d80ff9e2227 | 67:472e892c6e41 |
---|---|
4 * Created on: Oct 24, 2014 | 4 * Created on: Oct 24, 2014 |
5 * Author: parallels | 5 * Author: parallels |
6 */ | 6 */ |
7 | 7 |
8 | 8 |
9 #include "../../include/render.h" | 9 #include <BeagleRT.h> |
10 #include "../../include/Utilities.h" | 10 #include <Utilities.h> |
11 #include <rtdk.h> | 11 #include <rtdk.h> |
12 | 12 |
13 // initialise_render() is called once before the audio rendering starts. | 13 // setup() is called once before the audio rendering starts. |
14 // Use it to perform any initialisation and allocation which is dependent | 14 // Use it to perform any initialisation and allocation which is dependent |
15 // on the period size or sample rate. | 15 // on the period size or sample rate. |
16 // | 16 // |
17 // userData holds an opaque pointer to a data structure that was passed | 17 // userData holds an opaque pointer to a data structure that was passed |
18 // in from the call to initAudio(). | 18 // in from the call to initAudio(). |
19 // | 19 // |
20 // Return true on success; returning false halts the program. | 20 // Return true on success; returning false halts the program. |
21 | 21 |
22 bool initialise_render(int numMatrixChannels, int numAudioChannels, | 22 bool setup(BeagleRTContext *context, void *userData) |
23 int numMatrixFramesPerPeriod, | |
24 int numAudioFramesPerPeriod, | |
25 float matrixSampleRate, float audioSampleRate, | |
26 void *userData) | |
27 { | 23 { |
28 // Nothing to do here... | 24 // Nothing to do here... |
29 | 25 |
30 return true; | 26 return true; |
31 } | 27 } |
33 // render() is called regularly at the highest priority by the audio engine. | 29 // render() is called regularly at the highest priority by the audio engine. |
34 // Input and output are given from the audio hardware and the other | 30 // Input and output are given from the audio hardware and the other |
35 // ADCs and DACs (if available). If only audio is available, numMatrixFrames | 31 // ADCs and DACs (if available). If only audio is available, numMatrixFrames |
36 // will be 0. | 32 // will be 0. |
37 | 33 |
38 void render(int numMatrixFrames, int numAudioFrames, float *audioIn, float *audioOut, | 34 void render(BeagleRTContext *context, void *userData) |
39 uint16_t *matrixIn, uint16_t *matrixOut) | |
40 { | 35 { |
41 // Simplest possible case: pass inputs through to outputs | 36 // Simplest possible case: pass inputs through to outputs |
42 for(int n = 0; n < numAudioFrames; n++) { | 37 for(unsigned int n = 0; n < context->audioFrames; n++) { |
43 for(int ch = 0; ch < gNumAudioChannels; ch++) | 38 for(unsigned int ch = 0; ch < context->audioChannels; ch++) |
44 audioOut[n * gNumAudioChannels + ch] = audioIn[n * gNumAudioChannels + ch]; | 39 context->audioOut[n * context->audioChannels + ch] = context->audioIn[n * context->audioChannels + ch]; |
45 } | 40 } |
46 | 41 |
47 // Same with matrix, only if matrix is enabled | 42 // Same with matrix, only if matrix is enabled |
48 if(numMatrixFrames != 0) { | 43 if(context->analogFrames != 0) { |
49 for(int n = 0; n < numMatrixFrames; n++) { | 44 for(unsigned int n = 0; n < context->analogFrames; n++) { |
50 for(int ch = 0; ch < gNumMatrixChannels; ch++) { | 45 for(unsigned int ch = 0; ch < context->analogChannels; ch++) { |
51 // Two equivalent ways to write this code | 46 // Two equivalent ways to write this code |
52 // The long way, using the buffers directly: | 47 // The long way, using the buffers directly: |
53 // matrixOut[n * gNumMatrixChannels + ch] = matrixIn[n * gNumMatrixChannels + ch]; | 48 // context->analogOut[n * context->analogChannels + ch] = context->analogIn[n * context->analogChannels + ch]; |
54 | 49 |
55 // Or using the macros: | 50 // Or using the macros: |
56 analogWrite(ch, n, analogRead(ch, n)); | 51 analogWriteFrame(context, n, ch, analogReadFrame(context, n, ch)); |
57 } | 52 } |
58 } | 53 } |
59 } | 54 } |
60 } | 55 } |
61 | 56 |
62 // cleanup_render() is called once at the end, after the audio has stopped. | 57 // cleanup() is called once at the end, after the audio has stopped. |
63 // Release any resources that were allocated in initialise_render(). | 58 // Release any resources that were allocated in setup(). |
64 | 59 |
65 void cleanup_render() | 60 void cleanup(BeagleRTContext *context, void *userData) |
66 { | 61 { |
67 | 62 |
68 } | 63 } |