Component uses CoreAudio audio drivers for playback.
Output channel data is obtained from Inputs property which must be assigned before the playback starts. Typically TSignalDemuxList would be assigned to Inputs and TSignalDemuxList.Inputs to TSignalRead.
Before the playback can start:
- The SamplingFrequency for the CoreAudio component must always be set manually and needs to be supported by the driver. The component will perform rate conversion if input signal does not have the same SamplingFrequency.
- ChannelCount and Inputs.Count need to match. An exception is the mono single channel signal. Mono signal will always play on all channels.
- Precision property must be set to reflect the format of the data to be played back. In case of 16bit, it should be set to prSmallInt. If data is stored as double precision and normalized to have a maximum value of 1 then this setting should be prDouble.
- Define PrecisionHw property. This is the precision of the audio engine. Choose values supported by the audio drivers and hardware. Precision and PrecisionHW are used together to determine the correct scaling.
- Exclusive can be set to true or false. When access to the device is exclusive, the latency can be less, audio quality higher, but audio device cannot be shared with other applications. Most importantly, all pre and post processing filters used by Windows are bypassed. (Like Dolby Digital, Room Correction, etc...)
Once a new buffer is ready, the driver will call OnProcessRealTime event. This event is executed within the drivers thread and should not interact directly with the user interface. From this event OutputBuffers can be accessed and processed with minimum delay time.