The Open Master Hearing Aid (openMHA)  openMHA
Open community platform for hearing aid algorithm research
MHASignal::ringbuffer_t Class Reference

A ringbuffer class for time domain audio signal, which makes no assumptions with respect to fragment size. More...

Inheritance diagram for MHASignal::ringbuffer_t:
Inheritance graph

Public Member Functions

 ringbuffer_t (unsigned frames, unsigned channels, unsigned prefilled_frames)
 Creates new ringbuffer for time domain signal. More...
 
unsigned contained_frames () const
 number of currently contained frames More...
 
mha_real_tvalue (unsigned frame, unsigned channel)
 Access to value stored in ringbuffer. More...
 
void discard (unsigned frames)
 Discards the oldest frames. More...
 
void write (mha_wave_t &signal)
 Copies the contents of the signal into the ringbuffer if there is enough space. More...
 

Private Attributes

unsigned next_read_frame_index
 Index of oldest frame in underlying storage for the ringbuffer. More...
 
unsigned next_write_frame_index
 Index of first free frame in underlying storage. More...
 
- Private Attributes inherited from mha_wave_t
mha_real_tbuf
 signal buffer More...
 
unsigned int num_channels
 number of channels More...
 
unsigned int num_frames
 number of frames in each channel More...
 
mha_channel_info_tchannel_info
 detailed channel description More...
 

Additional Inherited Members

- Private Member Functions inherited from MHASignal::waveform_t
 waveform_t (const unsigned int &frames, const unsigned int &channels)
 constructor of waveform_t More...
 
 waveform_t (const mhaconfig_t &cf)
 Constructor to create a waveform from plugin configuration. More...
 
 waveform_t (const mha_wave_t &src)
 Copy contructor for mha_wave_t source. More...
 
 waveform_t (const MHASignal::waveform_t &src)
 Copy contructor. More...
 
 waveform_t (const std::vector< mha_real_t > &src)
 Copy contructor for std::vector<mha_real_t> source. More...
 
virtual ~waveform_t (void)
 
std::vector< mha_real_tflatten () const
 
 operator std::vector< mha_real_t > () const
 
void operator= (const mha_real_t &v)
 
mha_real_toperator[] (unsigned int k)
 
const mha_real_toperator[] (unsigned int k) const
 
mha_real_tvalue (unsigned int t, unsigned int ch)
 Element accessor. More...
 
mha_real_toperator() (unsigned int t, unsigned int ch)
 Element accessor. More...
 
const mha_real_tvalue (unsigned int t, unsigned int ch) const
 Constant element accessor. More...
 
const mha_real_toperator() (unsigned int t, unsigned int ch) const
 Constant element accessor. More...
 
mha_real_t sum (const unsigned int &a, const unsigned int &b)
 sum of all elements between [a,b) in all channels More...
 
mha_real_t sum (const unsigned int &a, const unsigned int &b, const unsigned int &ch)
 sum of all elements between [a,b) in channel ch More...
 
mha_real_t sum ()
 sum of all elements More...
 
mha_real_t sumsqr ()
 sum of square of all elements More...
 
mha_real_t sum_channel (const unsigned int &)
 return sum of all elements in one channel More...
 
void assign (const unsigned int &k, const unsigned int &ch, const mha_real_t &val)
 set frame "k" in channel "ch" to value "val" More...
 
void assign (const mha_real_t &)
 set all elements to value More...
 
void assign_frame (const unsigned int &k, const mha_real_t &val)
 assign value "val" to frame k in all channels More...
 
void assign_channel (const unsigned int &c, const mha_real_t &val)
 assign value "val" to channel ch in all frames More...
 
void copy (const std::vector< mha_real_t > &v)
 
void copy (const mha_wave_t &)
 copy data from source into current waveform More...
 
void copy (const mha_wave_t *)
 
void copy_channel (const mha_wave_t &, unsigned int, unsigned int)
 Copy one channel of a given waveform signal to a target channel. More...
 
void copy_from_at (unsigned int, unsigned int, const mha_wave_t &, unsigned int)
 Copy part of the source signal into part of this waveform object. More...
 
void export_to (mha_wave_t &)
 copy data into allocated mha_wave_t structure More...
 
void limit (const mha_real_t &min, const mha_real_t &max)
 limit target to range [min,max] More...
 
void power (const waveform_t &)
 transform waveform signal (in Pa) to squared signal (in W/m^2) More...
 
void powspec (const mha_spec_t &)
 get the power spectrum (in W/m^2) from a complex spectrum More...
 
void scale (const unsigned int &a, const unsigned int &b, const unsigned int &ch, const mha_real_t &val)
 scale section [a,b) in channel "ch" by "val" More...
 
void scale (const unsigned int &k, const unsigned int &ch, const mha_real_t &val)
 scale one element More...
 
void scale_channel (const unsigned int &, const mha_real_t &)
 scale one channel of target with a scalar More...
 
void scale_frame (const unsigned int &, const mha_real_t &)
 
unsigned int get_size () const
 

Detailed Description

A ringbuffer class for time domain audio signal, which makes no assumptions with respect to fragment size.

Blocks of audio signal can be placed into the ringbuffer using the write method. Individual audio samples can be accessed and altered using the value method. Blocks of audio data can be deleted from the ringbuffer using the discard method.

Constructor & Destructor Documentation

◆ ringbuffer_t()

ringbuffer_t::ringbuffer_t ( unsigned  frames,
unsigned  channels,
unsigned  prefilled_frames 
)

Creates new ringbuffer for time domain signal.

Constructor allocates enough storage so that frames audio samples can be stored in the ringbuffer.

Parameters
framesSize of ringbuffer in samples per channel. Maximum number of frames that can be stored in the ringbuffer at one time. This number cannot be changed after instance creation.
channelsNumber of audio channels.
prefilled_framesNumber of frames to be prefilled with zero values. Many applications of a ringbuffer require the introduction of a delay. In practice, this delay is achieved by inserting silence audio samples (zeros) into the ringbuffer before the start of the actual signal is inserted for the first time.
Exceptions
MHA_Errorif prefilled_frames > frames

Member Function Documentation

◆ contained_frames()

unsigned MHASignal::ringbuffer_t::contained_frames ( ) const
inline

number of currently contained frames

◆ value()

mha_real_t& MHASignal::ringbuffer_t::value ( unsigned  frame,
unsigned  channel 
)
inline

Access to value stored in ringbuffer.

frame index is relative to the oldest frame stored in the ringbuffer, therefore, the meaning of the frame changes when the discard method is called.

Parameters
frameframe index, 0 corresponds to oldest frame stored.
channelaudio channel
Returns
reference to contained sample value
Exceptions
MHA_Errorif channel or frame out of bounds.

◆ discard()

void MHASignal::ringbuffer_t::discard ( unsigned  frames)
inline

Discards the oldest frames.

Makes room for new write, alters base frame index for value

Parameters
frameshow many frames to discard.
Exceptions
MHA_Errorif frames > contained_frames

◆ write()

void MHASignal::ringbuffer_t::write ( mha_wave_t signal)
inline

Copies the contents of the signal into the ringbuffer if there is enough space.

Parameters
signalNew signal to be appended to the signal already present in the ringbuffer
Exceptions
MHA_Errorif there is not enough space or if the channel count mismatches. Nothing is copied if the space is insufficient.

Member Data Documentation

◆ next_read_frame_index

unsigned MHASignal::ringbuffer_t::next_read_frame_index
private

Index of oldest frame in underlying storage for the ringbuffer.

This value is added to the frame parameter of the value method, and this value is altered when discard is called.

◆ next_write_frame_index

unsigned MHASignal::ringbuffer_t::next_write_frame_index
private

Index of first free frame in underlying storage.

Next frame to be stored will be placed here.


The documentation for this class was generated from the following files: