openSL
の 1 つで ES を使用していAndroid apps
ます。アプリがフォアグラウンドにある場合、コールバックはかなり規則的です。マイク コールバックは約 10 ミリ秒ごとに呼び出され、スピーカー コールバックも同様です。ただし、アプリをバックグラウンドに置いてブラウザー (または別のアプリ) を開くと、ブラウザーを開く (またはブラウジングする) ときにコールバックの「嵐」がトリガーされることがわかります。それを回避する方法はありますか?そして、なぜそれが起こるのですか?openSL は、コールバックを実行できなかった期間を補償していますか? (追いつこうとしているように)。
私のソースコードが入ってC
いて、私はオンですJelly Bean 4.3.
AudioTrack
とのスレッドの優先順位を上げようとしましたが、AudioRecorder
それが役立つようですが、それが正しい方法かどうかはわかりません。
追加の質問
つまり、スレッドの優先度を上げても、コールバックのバーストが発生する可能性があり、それらを破棄する必要があると言っているのですか?
それはどのように良い解決策ですか?マイク パケットをドロップする (またはスピーカー パケットのソースを排出する) ことになりますよね? マイク パケットをドロップしない場合、マイク パケットの受信者はマイク パケットのバーストを過度のジッターと解釈しますよね?
さらに重要なこと: AudioTrack と AudioRecorder のスレッド優先度を手動で上げ、sched ポリシーをラウンド ロビンに変更しました。ルート アクセスと BusyBox のインストールの両方が必要でした (これには、スレッドの優先度/スケジュール ポリシーを変更するためのコマンド ライン ユーティリティが付属しています)。これは C からプログラムでどのように行われますか? アプリ(プロセス)の優先度だけでなく、個々のスレッドの優先度が上がることを確認したいと思います。