概念1:Audio Playback channel:
Audio Playback channel可以将之理解为“一个可以解析并播放PCM数据的硬件单元”。
既然是硬件,那就可以打开,关闭,设置,并向其中填充(PCM)数据.
1.1:Open Audio Playback channel:
打开硬件。
1.2: Setting Audio Playback channel and start :
设置硬件接收数据的格式,并开始播放。(但此时buffer 中没有数据,所以不会发出声音)
1.3: 将Audio Playback channel与硬件Output连起来:
Audio Playback channel就是一个解析和播放PCM的硬件,但这个硬件要与Output联系起来,才可以将声音播放出来。(注意,在关闭Audio Playback channel时,也要断开此连接)
1.4: Get Audio Playback channel Buffer.
得到向Audio Playback Buffer.
如果长度为0. 则表明当前没有可用的buffer用来传数据。此时则可以使用BKNI_WaitForEvent(event,1000)来等待buffer可用时回调函数发出的event.
在得到buffer头之后,可以向其中填充PCM数据。
1.5:通知Nexus Playback channel向buffer中填充了多少数据:
注意,因为之前已经使用NEXUS_AudioPlayback_Start(),所以当向 Nexus Audio Playback Channel buffer中填充数据后,Hardware会去播放这些数据。
1.6:Audio Playback Stop Play :
停止播放数据并清空buffer.
1.7: 与Audio Output断开连接:
1.8: Close Audio Playback channel:
关闭硬件。
概念2:Mixer:
Mixer就是一个混音器,多路AudioPlayback和Audio Decoder可以作为Mixer的Input. 而Mixer又作为Audio Output(DAC)的Input. 这样就可以做到多路混音。
Audio Decoder应该是硬件接入的Audio信号(如DVR的麦)。我们主要讲Audio Playback.
Audio Playback可以有2路,所以就可以做到2路混音。
此时再按照上一节的例子,分别往2路Audio Playback Buffer中填充PCM数据。则可以发现成功混音了。
概念3:Audio Output(DAC)
Audio Output就是一个将数据转换为模拟信号发出的设备。简单的说,Audio Playback是将PCM数据解析出来,并把此数据传递给Audio Output。Audio Output 则将此数据转化为模拟信号。(模拟信号就是可以通过音响播放出来)
设置:
讲解:
NEXUS_AudioVolumeType volumeType; //音量设置单位
音量设置单位有2种:
NEXUS_AudioVolumeType_eDecibel: dB(Decibel:分贝)。
NEXUS_AudioVolumeType_eLinear:线性变化。
如果设置如下:
volumeType = NEXUS_AudioVolumeType_eDecibel;
则音量 0 - -9000 之间变化。