Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client due to mismatching sample rate

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

like image 659
gary Avatar asked Jul 14 '14 04:07

gary


2 Answers

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.

like image 77
ChocoBilly Avatar answered Oct 31 '22 18:10

ChocoBilly


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.

like image 3
Gerry Avatar answered Oct 31 '22 19:10

Gerry