无法播放pcm>;带AndroidImpleBufferQueue的60kb

无法播放pcm>;带AndroidImpleBufferQueue的60kb,android,opensl,Android,Opensl,我已初始化AndroidSimpleBufferQueue,例如值: SLDataLocator_AndroidSimpleBufferQueue bufferLocator = { SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2}; SLDataFormat_PCM pcmFormat = { SL_DATAFORMAT_PCM, 1, SL_SAMPLINGRATE_44_1, SL_PCMSAMPLEFOR

我已初始化AndroidSimpleBufferQueue,例如值:

SLDataLocator_AndroidSimpleBufferQueue bufferLocator = {
  SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
SLDataFormat_PCM pcmFormat = {
  SL_DATAFORMAT_PCM,           1,
  SL_SAMPLINGRATE_44_1,        SL_PCMSAMPLEFORMAT_FIXED_16,
  SL_PCMSAMPLEFORMAT_FIXED_16, SL_SPEAKER_FRONT_CENTER,
  SL_BYTEORDER_LITTLEENDIAN};

SLDataSource            audioSource      = {&bufferLocator, &pcmFormat};
SLDataLocator_OutputMix locatorOutputMix = {SL_DATALOCATOR_OUTPUTMIX,
                                            outputMixObj.getObject()};
SLDataSink audioSink = {&locatorOutputMix, nullptr};
[...]
然后,当我需要播放声音时,我会排队,例如:

bufferQueue->Enqueue(bufferQueue, (uint8_t*)buffer.data(),
          buffer.size())

它适用于小于60k的缓冲区,但当缓冲区较大时,不会播放声音或有时只是一个伪影。

来自规范:

排队的缓冲区就地使用,不需要 被设备复制,尽管这可能是 依赖于实现。应用程序开发人员应该知道 在缓冲区排队后修改其内容是 未定义,可能导致音频损坏

因此,在声音完全播放之前,存储器必须保持有效

阅读文档并注意意外的结构副本:)