-
Notifications
You must be signed in to change notification settings - Fork 2
AudYoFlo: Behavior: Data Transfers between Components
The main purpose of AudYoFlo is to process data. Principally, it can be used for any kind of digital data, however, the main focus lies on the processing of audio data.
From the software perspective, all data enters the signal processing at a "source" and leaves the signal processing - typically in a modified version - at a "sink". Coming from the audio world where, typically, each soundcard has input (microphone) and output capabilities, the union of "source" and "sink" is represented as a device. A typical audio device may be an ASIO compatible soundcard that is operated at a fixed samplerate, with a fixed buffersize and certain input and output channels.
Signal processing in AudYoFlo is defined as the process to transfer the input data towards the output applying certain changes on the way. For the purpose of the modification, nodes can be connected from the "source" towards the "sink" to form a signal processing graph. In that processing graph, the connection from the source to the sink is a signal processing chain. An exemplary signal processing chain is depicted in the following simple figure:
On its way, the data is passed from node to node. In that context, the representation of the data and the placement in memory is very import. Also, the nodes shall not only accept data as provided but should also have the opportunity to influence the format in which the data is handed over to them. Therefore, a mechanism of negotiation between nodes is a key element in the preparation of each data signal processing chain.
In this chapter, we will explain the basics regarding the component chains and the principles regarding the negotiation of the parameters during data transfers in AudYoFlo.
In the construction of the data processing chains, the data flow graphs are defined by means of the following building blocks:
- Each component in AudYoFlo can act as a Connection Master. The connection master is responsible for the input and the output of the data in one data flow graph.
- Each component in AudYoFlo can expose input and output connectors. Typically, an output connector emits data whereas an input connector receives data.
- Bridges can be specified to connect input and output connectors. This is always a one-to-one connection in which the data flows from the output connector to the input connector.
- A data flow chain is the amount of one master, the involved input and output connectors and the bridges to define the linkage between the connectors.
With this definition, a typical data flow chain is for example defined as follows:
There is one connection master with one output connector and one input connector as well as two node components exposing an input and an output connector each. The bridges Bridge #0
, Bridge #1
and Bridge #2
define the data flow from output connector to input connector, and the overall structure of the chain is from the source to the sink.
Once all connections are established and data processing is started, the data flows as shown by the red line on the right side of the Figure.
One specific constraint in the shown example is that the data flows from the Connection Master component to the Connectin Master component. This is a very useful constraint for Duplex Signal Processing of a device that has input as well as output capabilities: Typically, in this case, input and output are handled in a common I/O thread. This is required to guarantee low signal processing delay as well as a deterministic delay in the signal processing chain. Most audio technologies for professional audio follow this approach for Duplex Signal Processing.
In AudYoFlo, all devices are assumed to support duplex data input and output. Therefore, it is always required that data flows from the same Connection Master source to its sink. If a technology such as a camera only has input capabilities, the device is duplex but has a sink which accepts only 0 channels of data.