3

バッファキューに記録するためにバッファをエンキューすると、そのバッファが実際にいついっぱいになったかを知る方法があるので、それを使用できますか?

同様に、バッファがいつ再生されたかを知る方法はありますか?

文脈のために:「native-audio」と呼ばれるNDKの例をいじっています。再生には SLAndroidSimpleBufferQueueItf を使用し、ストリームの記録にはこのようなキューも使用する必要があるとコメントしています。どこかで読んだことを覚えているので、録音コールバックの次の呼び出しでバッファがいっぱいになる(または、再生中のコールバックで再生される)ことは保証されていないので、今私は疑問に思っています.バッファーは使用されていますか? 何らかの方法があるに違いありません。^^

4

1 に答える 1

4

記録の場合、 を登録するslBufferQueueCallbackIBufferQueue_RegisterCallback、バッファがいっぱいになったときにコールバックを取得する必要があります。

android-ndk リストのこのディスカッションも参照してください。

私がよく理解していれば、レコーダーはキュー内のバッファーがいっぱいになるたびにコールバックし、これらのバッファーはキューに入れられた順序で埋められます。しかし、コールバックは、対応する満たされたバッファへのポインタを公開していないようです。では、これを取得する方法は何でしょうか。OpenSL ES 仕様のサンプル コードは、これらを追跡するためにコールバックのコンテキストとして渡された構造体を使用した再生の例を示していますが、その方法はありますか?
...
そうですね。これは、OpenSL ES 1.0.1 仕様の既知の欠陥です。OpenSL ES 1.1 はバッファを識別する明示的なパラメータを追加しますが、Android は現在 1.0.1 仕様に基づいています。回避策は、インデックスを自分で維持して、どのバッファが完了しているかを示すことです。

于 2012-12-19T16:24:04.207 に答える