0

私の質問は次のようなものかもしれません: AudioQueueOutputCallback が呼び出されないのはなぜですか?

メインスレッドでオーディオを実行することで修正できたようです。私はそんなことはできません。

オーディオ Q を準備するバッファをエンキューしてから、オーディオ Q を開始します。キューを開始すると、これらのバッファはすぐに完了するべきではありませんか?

データサイズを正しく設定しています。

ハックとして、cablback によって完了として報告されるのを待たずに、バッファーを再利用するだけです。これを行うと、このように数秒間実行すると、バッファコールバックがそれらから機能し始めます。

4

1 に答える 1

0

コアオーディオをハッキングするのは絶対に良い考えではありません..それは簡単な修正かもしれませんが、長期的にはあいまいな方法で間違いなくあなたを傷つけます.

あなたの問題はあなたが投稿したリンクと同じではありません.彼らの問題は間違ったスレッドにコールバックを割り当てることでした..あなたの場合、あなたのコールバックは正しいスレッドにあります.最初にフィードしているオーディオバッファがどちらかです空、小さすぎる、またはオーディオ再生に適さないデータが含まれています

コールバックの目的は、オーディオ キューに供給された各オーディオ バッファが再生された (つまり、消費された) 後に起動することであることに注意してください。キューを開始した後、コールバックが起動されていないという事実.. つまり、消費するオーディオ バッファに何もないか、消費する意味のある情報が少なすぎます。

手動で行うと、Audio Queue が指定した空/エラーのあるバッファを処理しようとしているときに遅延が発生します。その後、キューが最終的に再生する有効なデータを同じバッファに再供給し、コールバックを起動します。

解決策: キューを開始する前にバッファーに入れられたデータと、手動で提供しているデータを比較してください..違いがあると確信しています..それが機能しない場合は、さらに分析するためにコードを表示してください

于 2012-09-30T08:52:53.523 に答える