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 <time.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  BelaChannelGain
 
struct  BelaChannelGainArray
 
struct  BelaInitSettings
 Structure containing initialisation parameters for the real-time audio control system. More...
 
struct  BelaCpuData
 

Macros

#define BELA_MAJOR_VERSION   1
 
#define BELA_MINOR_VERSION   13
 
#define BELA_BUGFIX_VERSION   0
 
#define BELA_AUDIO_PRIORITY   95
 
#define DEFAULT_LINE_OUT_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)
 
#define BELA_FLAG_OFFLINE   (1 << 3)
 

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,
  BelaHw_BelaMiniMultiAudio, BelaHw_BelaMiniMultiTdm, BelaHw_BelaMultiTdm, BelaHw_BelaMiniMultiI2s,
  BelaHw_BelaEs9080, BelaHw_BelaRevC, BelaHw_Batch
}
 
enum  BelaHwDetectMode {
  BelaHwDetectMode_Scan, BelaHwDetectMode_Cache, BelaHwDetectMode_CacheOnly, BelaHwDetectMode_User,
  BelaHwDetectMode_UserOnly
}
 
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 (BelaHwDetectMode mode)
 Detect what hardware we are running on. More...
 
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_cpuMonitoringInit (int count)
 
BelaCpuDataBela_cpuMonitoringGet ()
 
void Bela_cpuTic (BelaCpuData *data)
 
void Bela_cpuToc (BelaCpuData *data)
 
int Bela_setLineOutLevel (int channel, float decibel)
 Set the level of the audio line out. More...
 
int Bela_setDacLevel (int channel, float decibels)
 Set the level of the audio DAC. More...
 
int Bela_setDACLevel (float decibels)
 
int Bela_setAdcLevel (int channel, float decibels)
 Set the level of the audio ADC. More...
 
int Bela_setADCLevel (float decibels)
 
int Bela_setAudioInputGain (int channel, float decibels)
 Set the gain of the audio input preamplifier. More...
 
int Bela_setPgaGain (float decibels, int channel)
 
int Bela_setHpLevel (int channel, float decibels)
 Set the level of the onboard headphone amplifier. More...
 
int Bela_setHeadphoneLevel (float decibels)
 
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:
Communication/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

#define BELA_FLAG_OFFLINE   (1 << 3)

Flag for BelaContext. If set, it means that render() is called offline, i.e.: the audio time does not correspond to wall clock time.

Enumeration Type Documentation

enum BelaHw

A type of Bela hardware.

Enumerator
BelaHw_NoHw 

No hardware.

BelaHw_Bela 

Bela.

BelaHw_BelaMini 

Bela Mini.

BelaHw_Salt 

Salt.

BelaHw_CtagFace 

Ctag Face.

BelaHw_CtagBeast 

Ctag Beast.

BelaHw_CtagFaceBela 

Ctag Face and Bela cape.

BelaHw_CtagBeastBela 

Ctag Beast and Bela cape.

BelaHw_BelaMiniMultiAudio 

Bela Mini with extra codecs.

BelaHw_BelaMiniMultiTdm 

Bela Mini with extra codecs and/or tdm devices.

BelaHw_BelaMultiTdm 

Bela with extra codecs and/or tdm devices.

BelaHw_BelaMiniMultiI2s 

Bela Mini with extra rx and tx I2S data lines.

BelaHw_BelaEs9080 

A Bela cape with Es9080 EVB on top, all as audio.

BelaHw_BelaRevC 

A Bela cape rev C: Es9080 is used for analog outs.

BelaHw_Batch 

Dummy offline.

Arguments to be passed to Bela_detectHw()

Enumerator
BelaHwDetectMode_Scan 

perform an automatic detection by scanning the peripherals and busses available, and cache value in /run/bela/belaconfig

BelaHwDetectMode_Cache 

read cached value from /run/bela/belaconfig first. If it does not exist, fall back to BelaHwDetectMode_Scan

BelaHwDetectMode_CacheOnly 

read cached value from /run/bela/belaconfig. If it does not exist, return BelaHw_NoHw

BelaHwDetectMode_User 

read user-specified value from ~/.bela/belaconfig. If it does not exist, fall back to BelaHwDetectMode_Cache

BelaHwDetectMode_UserOnly 

read user-specified value from ~/.bela/belaconfig. If it does not exist, return BelaHw_NoHw

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()