AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by clien

2019-01-24 03:57发布

问题:

Does anybody know how to fix this warning message?

07-14 10:38:55.411 V/tracker-audiotest(22426): Recording Thread::run(): start audioRecord recording. 07-14 10:45:51.490 "W/AudioTrack( 607): AUDIO_OUTPUT_FLAG_FAST denied by client due to mismatching sample rate (44100 vs 48000)"

When I test the audio latency on Android 4.4, I face a suddenly delay increasing after I saw this warning message. But I don't change the sample rate during the test and the initial setting is in 48kHz. This warning message happen after 7 minutes recording started.

You can test this project on your device if needed. The project is in GitHub:

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

回答1:

The AUDIO_OUTPUT_FLAG_FAST is denied because you are using a different rate than the one supported in hardware. You need to query the hardware supported sampling rate and record at that rate rather than hard code it to 48kHz.



回答2:

You may try to use Java function interface:
AudioManager myAudioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
nativeSampleRate = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);

to retrieve the hardware default sample rate on your phone, use that to create the player.
Also try to use: nativeSampleBufSize =myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);

to get default audio buffer size( it is in frames ) and use that for your playback.

You could look at the JNI sample code audio-echo if JNI is ok for you.



回答3:

Try changing the sample rate at

frameworks/base/
frameworks/av/
hardware/libhardware

locations.

default sample rate is 44100 try setting the sample rate you want (your audio files have). it will work.

cheers.