整合 10楼到14楼的步骤,我们终于得到了一个声音播放器对象 _aud_plyobj
![[狂汗]](/static/emoticons/u72c2u6c57.png)
,最终指令如下:
(*_aud_eng)->CreateAudioPlayer(_aud_eng, &_aud_plyobj, &sndsrc, &sndsnk, 3, ids, req);
/* 从声音引擎_aud_eng中创建 声音播放器对象_aud_plyobj
同其它对象一样,我们来实现声音播放器对象_aud_plyobj:
(*_aud_plyobj)->Realize(_aud_plyobj, SL_BOOLEAN_FALSE); /*实现声音播放器对象 */
这样一来,声音播放器对象就创建好了。
在4楼,我们知道opensl es 主要操作的是介面(interface),所以我们要从播放器中获得一些介面,这样在对介面进行操作时,就能控制声音播放器。在这里,我们从声音播放器中获得4种不同类型的介面,首先进行全局变量声明:
SLPlayItf _aud_ply; /* 播放介面(播放,暂停...) */
SLBufferQueueItf _aud_buf; /*缓冲区介面 */
SLEffectSendItf _aud_bufefx; /*音效介面,在本播放器中将用于缓冲区 */
SLVolumeItf _aud_vol; /*音量介面 */
然后通过GetInterface成员函数从播放器对象中获得介面:
(*_aud_plyobj)->GetInterface(_aud_plyobj, SL_IID_PLAY, &_aud_ply); /*获得播放介面, 存至_aud_ply*/
(*_aud_plyobj)->GetInterface(_aud_plyobj, SL_IID_BUFFERQUEUE, &_aud_buf); /*获得缓冲区介面,存至 _aud_buf */
(*_aud_plyobj)->GetInterface(_aud_plyobj, SL_IID_EFFECTSEND, &_aud_bufefx); /*获得音效介面,存至 _aud_bufefx */
(*_aud_plyobj)->GetInterface(_aud_plyobj, SL_IID_VOLUME, &_aud_vol); /*获得音量介面,存至 _aud_vol */
从现在起,所有对上述4个介面的操作都将影响到播放器