annotate projects/empty_project/render.cpp @ 269:ac8eb07afcf5

Oxygen text added to each render.cpp file for the default projects. Text includes project explanation from Wiki, edited in places. Empty project added as a default project. Doxyfile updated. Each of the project locations added to INPUT configuration option. Consider just watching the whole project file so all new projects are automatically pulled through.
author Robert Jack <robert.h.jack@gmail.com>
date Tue, 17 May 2016 15:40:16 +0100
parents
children
rev   line source
robert@269 1 /*
robert@269 2 ____ _____ _ _
robert@269 3 | __ )| ____| | / \
robert@269 4 | _ \| _| | | / _ \
robert@269 5 | |_) | |___| |___ / ___ \
robert@269 6 |____/|_____|_____/_/ \_\.io
robert@269 7
robert@269 8 */
robert@269 9
robert@269 10 /**
robert@269 11 \example 1_empty_project
robert@269 12
robert@269 13 The bare bones
robert@269 14 ----------------------
robert@269 15
robert@269 16 The structure of a render.cpp file
robert@269 17 ----------------------------------
robert@269 18 A render.cpp file has three functions: `setup()`, `render()` and `cleanup()`.
robert@269 19
robert@269 20 `setup()` is an initialisation function which runs before audio rendering begins.
robert@269 21 It is called once when the project starts. Use it to prepare any memory or
robert@269 22 resources that will be needed in `render()`.
robert@269 23
robert@269 24 `render()` is a function that is regularly called, over and over continuously, at
robert@269 25 the highest priority by the audio engine. It is used to process audio and
robert@269 26 sensor data. This function is called regularly by the system every time there
robert@269 27 is a new block of audio and/or sensor data to process.
robert@269 28
robert@269 29 `cleanup()` is a function that is called when the program stops, to finish up any
robert@269 30 processes that might still be running.
robert@269 31
robert@269 32 Here we will briefly explain each function and the structure of the render.cpp
robert@269 33
robert@269 34 Before any of the functions
robert@269 35 ---------------------------
robert@269 36 At the top of the file, include any libraries you might need.
robert@269 37
robert@269 38 Additionally, declare any global variables. In these tutorial sketches, all
robert@269 39 global variables are preceded by a `g` so we always know which variables are
robert@269 40 global - `gSampleData`, for example. It's not mandatory but is a really good way
robert@269 41 of keeping track of what's global and what's not.
robert@269 42
robert@269 43 Sometimes it's necessary to access a variable from another file, such as
robert@269 44 main.cpp. In this case, precede this variable with the keyword `extern`.
robert@269 45
robert@269 46 Function arguments
robert@269 47 ------------------
robert@269 48 `setup()`, `render()` and `cleanup()` each take the same arguments. These are:
robert@269 49
robert@269 50 `0ext *context`
robert@269 51 `void *userData`
robert@269 52
robert@269 53 These arguments are pointers to data structures. The main one that's used is
robert@269 54 `context`, which is a pointer to a data structure containing lots of information
robert@269 55 you need.
robert@269 56
robert@269 57 Take a look at what's in the data structure [here]
robert@269 58 (https://code.soundsoftware.ac.uk/projects/beaglert/embedded/structBeagleRTContext.html).
robert@269 59
robert@269 60 You can access any of these bits of information about current audio and sensor
robert@269 61 settings and pointers to data buffers that are contained in the data structure
robert@269 62 like this: `context->name_of_item`.
robert@269 63
robert@269 64 For example, `context->audioChannels` returns the number of audio channels.
robert@269 65 `context->audioSampleRate` returns the audio sample rate.
robert@269 66 `context->audioIn[n]` would give you the current input sample (assuming that
robert@269 67 your input is mono - if it's not you will have to account for multiple channels).
robert@269 68
robert@269 69 Note that `audioIn`, `audioOut`, `analogIn`, `analogOut` are all arrays (buffers).
robert@269 70
robert@269 71 */
robert@269 72
robert@269 73
robert@269 74
robert@269 75
robert@269 76 #include <BeagleRT.h>
robert@269 77 #include <Utilities.h>
robert@269 78 #include <rtdk.h>
robert@269 79 #include <cmath>
robert@269 80
robert@269 81 // setup() is called once before the audio rendering starts.
robert@269 82 // Use it to perform any initialisation and allocation which is dependent
robert@269 83 // on the period size or sample rate.
robert@269 84 //
robert@269 85 // userData holds an opaque pointer to a data structure that was passed
robert@269 86 // in from the call to initAudio().
robert@269 87 //
robert@269 88 // Return true on success; returning false halts the program.
robert@269 89
robert@269 90 bool setup(BeagleRTContext *context, void *userData)
robert@269 91 {
robert@269 92
robert@269 93 return true;
robert@269 94 }
robert@269 95
robert@269 96 // render() is called regularly at the highest priority by the audio engine.
robert@269 97 // Input and output are given from the audio hardware and the other
robert@269 98 // ADCs and DACs (if available). If only audio is available, numMatrixFrames
robert@269 99 // will be 0.
robert@269 100
robert@269 101 void render(BeagleRTContext *context, void *userData)
robert@269 102 {
robert@269 103
robert@269 104 }
robert@269 105
robert@269 106 // cleanup() is called once at the end, after the audio has stopped.
robert@269 107 // Release any resources that were allocated in setup().
robert@269 108
robert@269 109 void cleanup(BeagleRTContext *context, void *userData)
robert@269 110 {
robert@269 111
robert@269 112 }