2017-07-06 2 views
0

AndroidSimpleBufferQueueとPCM> 60キロバイトを再生することはできません:それは作品は、私がこのような値としてAndroidSimpleBufferQueueを初期化してきました

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

:私はサウンドを再生する必要がある場合

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}; 
[...] 

は、その後、私はエンキューなどバッファが60kより小さいバッファの場合はバッファが大きいほどサウンドが再生されないか、まれにアーティファクトのみが再生されます。

答えて

0

仕様から:これは 実装依存であってもよいが、デバイスによってコピーさ

キューイングされているバッファが代わりに使用され、 に必要とされません。アプリケーション開発者は、それがキューイングされた後にバッファの内容を変更することは 未定義で、音が完全に再生されるまでのオーディオ汚職

だからメモリ必見有効なまま引き起こす可能性があること 注意する必要があります。

ドキュメントを読み、意図しない構造体のコピーに気づいてください。

関連する問題