PeriodicStreaming
Overview
Repetitively outputs a block of data as pulled by a downstream module
Discussion
This module has an internal circular buffer containing audio data and works in conjunction with some of the other modules which "pull data" in real-time. The module has an internal circular buffer which is initialized with a block of audio data. The module is then ready to output data.
The variable, currentFillLevel indicates how many data samples are available in the circular buffer to the output. This always equals the size of the circular buffer and indicates to the downstream puller module that data is available to be ready out of the buffer. The variable, underflowCount indicates how many output samples could not be supplied due to lack of data. underflowCount is not incremented during the initial prefill operation. underflowCount remains for compatibility with other puller modules and will always equal zero.
The output of the module is a single integer which points to a data structure in memory. By manipulating the data structure, a downstream module can pull data out of the module's circular buffer. This module currently works with file-based decoders and also the raw_streaming_source_module.m.
Type Definition
typedef struct _ModulePeriodicStreaming
{
ModuleInstanceDescriptor instance; // Common Audio Weaver module instance structure
INT32 transferBufferSize; // NOT USED. Size of the transfer buffer, in 32-bit words.
INT32 circularBufferSize; // Size of the circular buffer, in 32-bit words.
INT32 prefillLevel; // NOT USED. Circular buffer fills to this number of words before data is output.
INT32 underflowCount; // Number of output samples that could not be serviced.
INT32 currentFillLevel; // Number of available data samples in the circular buffer.
INT32 isReady; // Boolean that indicates whether the module is ready to output data.
INT32 isPrefilling; // Boolean that indicates whether the module is waiting for prefill data. While waiting, the module does not output data.
INT32 asyncStatus; // Used to pass asynchronous messages (pause/stop/play) from the PC to the target.
INT32 playbackState; // Indicates the current state of the player: FIOS_Stopped, FIOS_Playing, FIOS_Paused. Starts out in FIOS_Stopped.
INT32 isNewStream; // Boolean that indicates whether the player has just output the first block of a new file.
INT32 fileExtension; // First 4 letters of the file extension each packed as a byte into the word (for commonality with the file_streaming_module.m).
INT32 writeIndex; // Index at which to write data into the circular buffer.
INT32 readIndex; // Index at which to read data out of the circular buffer.
INT32* transferBuffer; // NOT USED. Data transferred from PC to target DSP via this buffer.
INT32* circularBuffer; // Data transferred from PC to target DSP via this buffer.
} ModulePeriodicStreamingClass;
Variables
Properties
Name | Type | Usage | isHidden | Default value | Range | Units |
transferBufferSize | int | const | 0 | 0 | 1:1000000 | 32-bit words |
circularBufferSize | int | const | 0 | 1024 | 1:1000000 | 32-bit words |
prefillLevel | int | parameter | 0 | 512 | Unrestricted | 32-bit words |
underflowCount | int | state | 0 | 0 | Unrestricted | |
currentFillLevel | int | state | 0 | 0 | 0:1024 | 32-bit words |
isReady | int | state | 0 | 1 | 0:1 | |
isPrefilling | int | state | 0 | 0 | 0:1 | |
asyncStatus | int | state | 0 | 0 | Unrestricted | |
playbackState | int | state | 0 | 7 | Unrestricted | |
isNewStream | int | state | 0 | 0 | Unrestricted | |
fileExtension | int | state | 0 | 0 | Unrestricted | |
writeIndex | int | state | 1 | 0 | Unrestricted | |
readIndex | int | state | 1 | 0 | Unrestricted | |
transferBuffer | int* | parameter | 0 | [1 x 1] | Unrestricted | |
circularBuffer | int* | parameter | 0 | [1024 x 1] | Unrestricted |
Pins
Output Pins
Name: ID
Description: Module objectID
Data type: int
MATLAB Usage
File Name: periodic_streaming_module.m
M=periodic_streaming_module(NAME, CIRCBUFSIZE)
Creates a streaming source module that can be connected to one of the
modules which "pulls" data, such as: raw_streaming_source_module.m or
one of the audio decoders. The module has an internal buffer
of audio data and continuously outputs the same block of data.
Arguments:
NAME - name of the module.
CIRBUFSIZE - size of the internal circular buffer, in 32-bit words.
The data is from the circular buffer to output.