870920 Menu

AudioSource之PositionableAudioSource

AudioSource有一个直接派生类:PositionableAudioSource(可定位的音频来源,即:该AudioSource产生音频流后,可设置从某个具体位置开始输出,相当于可对所生成的音频流随意定位,并可实现循环式输出)。PositionableAudioSource又派生出3个子类。这4个类性质特殊,地位显赫。

整个AudioSource类系的本质性作用就是产生各种所需的音频流。但是,普通的AudioSource只能产生,而无法获悉所产生的音频流的时间和长度,更无法随意定位到所产生的音频流的某个位置。PositionableAudioSource及其3个派生类弥补了这个缺憾,不仅可以获悉所产生的音频流的时间和长度,还可以随意定位到所产生的音频流的某个具体位置,基于该能力,可以实现循环式输出。

PositionableAudioSource继承了AudioSource的3个纯虚函数,但并没有实现之,并且该类又新增了4个纯虚函数和1个虚函数,其成员函数为:
 setNextReadPosition (int64值) getNextAudioBlock()产生音频流后,从给定位置处输出
 getNextReadPosition () 获取上个函数所设置的位置
 getTotalLength () 返回数据流的总长度(总的采样数)
 setLooping (bool值) 设置是否循环输出音频流,唯一一个非纯虚函数
 isLooping () 检测当前是否处于循环模式
 prepareToPlay (采样数,采样率) 准备产生音频流
 releaseResources () 停止生成音频流
 getNextAudioBlock (…) 生成音频流,所产生的数据保存到本函数的参数中

PositionableAudioSource有3个派生类,这3个类拓展并完善了基类的功能,更加具体化和专门化,同时,在自定义AudioSource或PositionableAudioSource类时也极具参考价值。

  1. AudioFormatReaderSource 音频格式读取器。专用于读取AudioFormatReader的数据,基于所读取的数据生成PositionableAudioSource音频流,所产生的音频流为系统内部可处理的采样数据。
  2. BufferingAudioSource 使用后台线程对另一个PositionableAudioSource进行缓冲,即读取该来源的数据后,将数据置入缓冲区,而后输出。此类运行于后台线程,既避免另一个PositionableAudioSource所产生的音频流在使用时出现断续和爆音,又不影响主线程和前台UI的显示与响应,并发执行,一举两得。
  3. AudioTransportSource 音频传输(中转并控制)。其内部使用BufferingAudioSource对象,对另一个PositionableAudioSource所产生的数据进行缓冲和并发处理,并可实现输出时的诸多控制,比如:开始传输、暂停传输、增益处理等等。

这三个类的详解请参见后文。