繁体   English   中英

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

[英]NDK OpenSL ES looping sound with a buffer queue

我正在为所有音频文件使用SLDataLocator_AndroidSimpleBufferQueue。 它运作良好,但......它不支持搜索和循环。

OpenSL不能要求SL_IID_SEEK使用缓冲区队列数据源

我如何使用循环文件? 不能使用流媒体 - 低延迟。

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

像这样的示例代码......

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 ......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM