web-dev-qa-db-ja.com

AudioTrack:サンプルレートが一致しないため、AUDIO_OUTPUT_FLAG_FASTがクライアントによって拒否されました

この警告メッセージを修正する方法を知っている人はいますか?

07-14 10:38:55.411 V/tracker-audiotest(22426):録音スレッド:: run():audioRecordの録音を開始します。 07-14 10:45:51.490 "W/AudioTrack(607):サンプルレートの不一致(44100対48000)のため、クライアントによってAUDIO_OUTPUT_FLAG_FASTが拒否されました"

Android 4.4でオーディオレイテンシをテストすると、この警告メッセージが表示された後、突然遅延が増加します。ただし、テスト中にサンプルレートを変更せず、初期設定は48kHz。この警告メッセージは、7分間の録音開始後に発生します。

必要に応じて、デバイスでこのプロジェクトをテストできます。プロジェクトはGitHubにあります:

https://github.com/garyyu/OpenSL-ES-Android-DelayTest

14
gary

AUDIO_OUTPUT_FLAG_FASTは、ハードウェアでサポートされているレートとは異なるレートを使用しているため、拒否されます。ハードウェアでサポートされているサンプリングレートを照会し、48kHzにハードコーディングするのではなく、そのレートで記録する必要があります。

3
ChocoBilly

Java関数インターフェイスを使用してみてください:
AudioManager myAudioMgr =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
nativeSampleRate = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);

電話機のハードウェアのデフォルトサンプルレートを取得するには、それを使用してプレーヤーを作成します。
次も使用してみてください:nativeSampleBufSize = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);

デフォルトのオーディオバッファサイズ(フレーム単位)を取得し、それを再生に使用します。

JNIに問題がなければ、JNIサンプルコード audio-echo を見ることができます。

2
Gerry

でサンプルレートを変更してみてください

フレームワーク/ベース/
frameworks/av /
ハードウェア/ libhardware

場所。

デフォルトのサンプルレートは44100です。必要なサンプルレートを設定してみてください(オーディオファイルにあります)。それが動作します。

乾杯。

0
Karan