为了使用 OpenSL ES 的 URI 播放器获得无缝循环,我尝试运行代码,取自这个问题(查询音频的长度):
SLmillisecond msec;
result = (*fdPlayerPlay)->GetDuration(fdPlayerPlay, &msec);
assert(SL_RESULT_SUCCESS == result);
__android_log_print(ANDROID_LOG_DEBUG, "NDK_debug_tag: ", "fdPlayerPlay GetDuration msec: %d", (int)msec);
结果我得到-1,无论如何。
除了整个文件循环工作之外,我似乎什么也做不了。当我设置循环时:
// enable whole file looping
result = (*uriPlayerSeek)->SetLoop(uriPlayerSeek, SL_BOOLEAN_TRUE, 0, 200);
assert(SL_RESULT_SUCCESS == result);
然后查询循环点:
SLboolean b;
SLmillisecond start;
SLmillisecond end;
result = (*uriPlayerSeek)->GetLoop(uriPlayerSeek, &b, &start, &end);
assert(SL_RESULT_SUCCESS == result);
__android_log_print(ANDROID_LOG_DEBUG, "NDK_debug_tag: ", "start: %d end: %d", (int)start, (int)end);
我得到“开始:0 结束:-1”,文件从头到尾循环,而不是仅仅循环一小部分(这就是我所追求的)。这里的文档只提到了整个文件循环:
寻找
SetLoop 启用整个文件循环。startPos 参数应为零,endPos 参数应为 SL_TIME_UNKNOWN。
但它并没有具体说明不支持循环文件的一部分。有没有人在这方面取得任何成功?或者可以验证 OpenSL ES Android 实现不支持此功能?