带有缓冲队列的NDK OpenSL ES循环声音



我对所有音频文件使用SLDataLocator_AndroidSimpleBufferQueue。效果不错,但是。。。它不支持查找和循环。

OpenSL不能要求具有缓冲队列数据源的SL_IID_SEEK

如何对文件使用循环?无法使用流媒体-低延迟。

我用播放器回调函数上的缓冲队列排队函数解决了这个问题。

像这样的示例代码。。。

struct PARAM { char* buffer;  long  size; };
void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bqPlayerBufferQueue, void *context)
{
    ...
    PARAM* param = (PARAM*)context;
    result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, param->buffer, nparam->size);
}
void createAudioPlayer... {
    (*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, ...);
    ...
    PARAM* param = new PARAM{buffer, size};
    result = (*bqPlayerBufferQueue)->RegisterCallback(bqPlayerBufferQueue, bqPlayerCallback, param);
}

事实证明,SLDataLocator_AndroidSimpleBufferQueue不可能做到这一点。不得不使用SLDataLocator_AndroidFD。。。

最新更新