870920 Menu

AudioSourcePlayer与AudioProcessorPlayer

AudioSourcePlayer是AudioIODeviceCallback类的派生类之一,AudioDeviceManager类添加音频回调的addAudioCallback()函数中,可添加本类对象,将AudioSource类所产生的音频流连续不断的发送给当前所设置的音频驱动,完成音频播放的最后一个环节。

AudioSourcePlayer类的构造函数无参,其成员函数有:
 setSource () 设置要播放的AudioSource
 getCurrentSource () 返回本类所持有的AudioSource
 setGain () 设置增益
 getGain () 返回当前的增益
 audioDeviceIOCallback () 不间断地被回调,将AudioSource所产生的音频流发送出去
 audioDeviceAboutToStart () 设置采样率和缓冲大小,通知AudioSource准备产生音频流
 audioDeviceStopped () 停止发送AudioSource的音频流

由上可知:音频播放的整个流程很像一个“链”,这条链的每个环节及顺序为:

  • AudioFormatManager 注册音频格式,创建某个音频文件的AudioFormatReader
  • AudioFormatReaderSource 以AudioFormatReader对象构造自己,获取其数据
  • AudioTransportSource 使用后台线程缓冲并中转AudioFormatReaderSource的数据
  • AudioSourcePlayer 将AudioTransportSource设置为要播放的音频来源,等候回调
  • AudioDeviceManager 添加并回调AudioSourcePlayer的数据,将其发送至音频驱动

AudioProcessorPlayer
可对比AudioSourcePlayer来理解AudioProcessorPlayer,两者的异同:
 两者均继承自AudioIODeviceCallback,均用于播放自身所持有的音频数据。可简单理解为:一个常用于(单纯的)音频软件,一个常用于音频插件。
 两者的构造函数均无参,创建对象后均需显式设置要播放的数据来源。
 AudioDeviceManager可通过其addAudioCallback()添加这两者的对象,以完成最终的音频播放。即:两者均可被AudioDeviceManager所持有并管理的AudioIODevice音频设备来回调。
 AudioSourcePlayer用于播放AudioSource所产生的音频流;而AudioProcessorPlayer则用于播放AudioProcessor所产生的音频流。
 AudioProcessorPlayer同时继承了MidiInputCallback,可处理MidiInput的MIDI消息。
 AudioProcessorPlayer持有一个MidiMessageCollector对象,该对象可保存接收到的MIDI消息并等候处理。
 AudioDeviceManager可通过其addMidiInputCallback()添加AudioProcessorPlayer对象,以实现MIDI数据的实时接收和录制。

AudioProcessorPlayer的构造函数无参,其成员函数为:
 setProcessor () 设置播放的AudioProcessor
 getCurrentProcessor () 返回本类所持有的AudioProcessor
 getMidiMessageCollector () 返回本类所持有的MidiMessageCollector
 audioDeviceIOCallback () 将AudioProcessor所产生的音频流发送出去
 audioDeviceAboutToStart () 做好发送音频数据的准备
 audioDeviceStopped () 停止发送AudioProcessor的音频流
 handleIncomingMidiMessage () MIDI消息采集器将收到的MIDI消息添加到MIDI序列中