Bela
Real-time, ultra-low-latency audio and sensor processing system for BeagleBone Black
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
Classes | Macros | Typedefs | Enumerations | Functions | Variables
Bela.h File Reference

Main Bela public API. More...

#include <stdint.h>
#include <unistd.h>
#include <stdbool.h>
#include <stdio.h>
#include <GPIOcontrol.h>
#include <Utilities.h>

Go to the source code of this file.

Classes

struct  _BelaHwConfig
 
struct  BelaContext
 Structure holding audio and sensor settings and pointers to I/O data buffers. More...
 
struct  BelaInitSettings
 Structure containing initialisation parameters for the real-time audio control system. More...
 

Macros

#define BELA_MAJOR_VERSION   1
 
#define BELA_MINOR_VERSION   9
 
#define BELA_BUGFIX_VERSION   0
 
#define BELA_AUDIO_PRIORITY   95
 
#define DEFAULT_DAC_LEVEL   0.0
 
#define DEFAULT_ADC_LEVEL   0.0
 
#define DEFAULT_PGA_GAIN   16
 
#define DEFAULT_HP_LEVEL   -6.0
 
#define BELA_FLAG_INTERLEAVED   (1 << 0)
 
#define BELA_FLAG_ANALOG_OUTPUTS_PERSIST   (1 << 1)
 
#define BELA_FLAG_DETECT_UNDERRUNS   (1 << 2)
 

Typedefs

typedef struct _BelaHwConfig BelaHwConfig
 
typedef void * AuxiliaryTask
 

Enumerations

enum  BelaHw {
  BelaHw_NoHw = -1, BelaHw_Bela, BelaHw_BelaMini, BelaHw_Salt,
  BelaHw_CtagFace, BelaHw_CtagBeast, BelaHw_CtagFaceBela, BelaHw_CtagBeastBela
}
 
enum  { INPUT = 0, OUTPUT = 1 }
 

Functions

int rt_printf (const char *format,...)
 
int rt_fprintf (FILE *stream, const char *format,...)
 
int rt_vprintf (const char *format, va_list ap)
 
int rt_vfprintf (FILE *stream, const char *format, va_list ap)
 
BelaHwConfigBela_HwConfig_new (BelaHw hw)
 
void Bela_HwConfig_delete (BelaHwConfig *cfg)
 
bool setup (BelaContext *context, void *userData)
 User-defined initialisation function which runs before audio rendering begins. More...
 
void render (BelaContext *context, void *userData)
 User-defined callback function to process audio and sensor data. More...
 
void cleanup (BelaContext *context, void *userData)
 User-defined cleanup function which runs when the program finishes. More...
 
BelaInitSettingsBela_InitSettings_alloc ()
 Allocate the data structure containing settings for Bela. More...
 
void Bela_InitSettings_free (BelaInitSettings *settings)
 De-allocate the data structure containing settings for Bela. More...
 
void Bela_defaultSettings (BelaInitSettings *settings)
 Initialise the data structure containing settings for Bela. More...
 
void Bela_userSettings (BelaInitSettings *settings)
 Initialise the data structure containing settings for Bela. More...
 
int Bela_getopt_long (int argc, char *const argv[], const char *customShortOptions, const struct option *customLongOptions, BelaInitSettings *settings)
 Get long options from command line argument list, including Bela standard options. More...
 
void Bela_usage ()
 Print usage information for Bela standard options. More...
 
void Bela_getVersion (int *major, int *minor, int *bugfix)
 Get the version of Bela you are running.
 
void Bela_setVerboseLevel (int level)
 Set level of verbose (debugging) printing. More...
 
BelaHw Bela_detectHw (void)
 Detect what hardware we are running on.
 
int Bela_initAudio (BelaInitSettings *settings, void *userData)
 Initialise audio and sensor rendering environment. More...
 
int Bela_startAudio ()
 Begin processing audio and sensor data. More...
 
int Bela_runInSameThread ()
 Begin processing audio and sensor data in the same thread as the caller. More...
 
void Bela_stopAudio ()
 Stop processing audio and sensor data. More...
 
void Bela_cleanupAudio ()
 Clean up resources from audio and sensor processing. More...
 
void Bela_setUserData (void *newUserData)
 Set the userData variable, which is passed to setup(), render() and cleanup(). More...
 
void Bela_requestStop ()
 Tell the Bela program to stop. More...
 
int Bela_stopRequested ()
 Check whether the program should stop. More...
 
int Bela_setDACLevel (float decibels)
 Set the level of the audio DAC. More...
 
int Bela_setADCLevel (float decibels)
 Set the level of the audio ADC. More...
 
int Bela_setPgaGain (float decibels, int channel)
 Set the gain of the audio preamplifier. More...
 
int Bela_setHeadphoneLevel (float decibels)
 Set the level of the onboard headphone amplifier. More...
 
int Bela_muteSpeakers (int mute)
 Mute or unmute the onboard speaker amplifiers. More...
 
AuxiliaryTask Bela_createAuxiliaryTask (void(*callback)(void *), int priority, const char *name, void *arg=NULL)
 Create a new auxiliary task. More...
 
int Bela_scheduleAuxiliaryTask (AuxiliaryTask task)
 Run an auxiliary task which has previously been created. More...
 
AuxiliaryTask Bela_runAuxiliaryTask (void(*callback)(void *), int priority=0, void *arg=nullptr)
 Create and start an AuxiliaryTask. More...
 
int Bela_startAuxiliaryTask (AuxiliaryTask task)
 Initialize an auxiliary task so that it can be scheduled. More...
 
int Bela_startAllAuxiliaryTasks ()
 
void Bela_stopAllAuxiliaryTasks ()
 
void Bela_deleteAllAuxiliaryTasks ()
 
static float audioRead (BelaContext *context, int frame, int channel)
 Read an audio input, specifying the frame number (when to read) and the channel. More...
 
static float audioReadNI (BelaContext *context, int frame, int channel)
 Non-interleaved version of audioRead() More...
 
static void audioWrite (BelaContext *context, int frame, int channel, float value)
 Write an audio output, specifying the frame number (when to write) and the channel. More...
 
static void audioWriteNI (BelaContext *context, int frame, int channel, float value)
 Non-interleaved version of audioWrite() More...
 
static float analogRead (BelaContext *context, int frame, int channel)
 Read an analog input, specifying the frame number (when to read) and the channel. More...
 
static float analogReadNI (BelaContext *context, int frame, int channel)
 Non-interleaved version of analogRead() More...
 
static void analogWrite (BelaContext *context, int frame, int channel, float value)
 Write an analog output, specifying the frame number (when to write) and the channel. More...
 
static void analogWriteNI (BelaContext *context, int frame, int channel, float value)
 Non-interleaved version of analogWrite() More...
 
static void analogWriteOnce (BelaContext *context, int frame, int channel, float value)
 Write an analog output, specifying the frame number (when to write) and the channel. More...
 
static void analogWriteOnceNI (BelaContext *context, int frame, int channel, float value)
 Non-interleaved version of analogWriteNI() More...
 
static int digitalRead (BelaContext *context, int frame, int channel)
 Read a digital input, specifying the frame number (when to read) and the pin. More...
 
static void digitalWrite (BelaContext *context, int frame, int channel, int value)
 Write a digital output, specifying the frame number (when to write) and the pin. More...
 
static void digitalWriteOnce (BelaContext *context, int frame, int channel, int value)
 Write a digital output, specifying the frame number (when to write) and the pin. More...
 
static void pinMode (BelaContext *context, int frame, int channel, int mode)
 Set the direction of a digital pin to input or output. More...
 
static void pinModeOnce (BelaContext *context, int frame, int channel, int mode)
 Set the direction of a digital pin to input or output. More...
 
static float multiplexerAnalogRead (BelaContext *context, int input, int muxChannel)
 Read an audio input, specifying the frame number (when to read) and the channel. More...
 
static unsigned int multiplexerChannelForFrame (BelaContext *context, int frame)
 Read an audio input, specifying the frame number (when to read) and the channel. More...
 

Variables

int volatile gShouldStop
 

Detailed Description

Main Bela public API.

Central control code for hard real-time audio on BeagleBone Black using PRU and Xenomai Linux extensions. This code began as part of the Hackable Instruments project (EPSRC) at Queen Mary University of London, 2013-14.

(c) 2014-15 Andrew McPherson, Victor Zappi and Giulio Moro, Queen Mary University of London

Macro Definition Documentation

#define BELA_FLAG_INTERLEAVED   (1 << 0)

Flag for BelaContext. If set, indicates the audio and analog buffers are interleaved.

Examples:
logging-sensors/render.cpp.
#define BELA_FLAG_ANALOG_OUTPUTS_PERSIST   (1 << 1)

Flag for BelaContext. If set, indicates analog outputs persist for future frames.

#define BELA_FLAG_DETECT_UNDERRUNS   (1 << 2)

Flag for BelaContext. If set, indicates the user will be warned if an underrun occurs

Function Documentation

BelaHwConfig* Bela_HwConfig_new ( BelaHw  hw)

Returns the configuration for a given BelaHw or nullptr if hw is invalid.

The returned pointer has to be deleted with Bela_HwConfig_delete().

void Bela_HwConfig_delete ( BelaHwConfig cfg)

Use this to delete a pointer returned by Bela_HwConfig_new()