Eternal Learner
Eternal Learner

Reputation: 2632

What is AudioFlinger and why does it fail TONE_PROP_ACK?

In my application I issue the following statement:

toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);

Which works very well on a cheap LG LS670 running Android 2.3.3 but doesn't sound at all on all other phones I have, ranging from Android 2.2.1 to Android 2.3.4.

So I know the OS version doesn't play a role here (I also verified in the documentation that it has been supported since API 1).

Also, both Ringer volume and Media volume are set to maximum and toneGenerator is initialized with:

toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100);

And I verified that Settings.System.DTMF_TONE_WHEN_DIALING is set to 1.

Baffled by this inconsistent behavior (across different phones), I examined the system logs when this happens and the only suspicious difference I have been able to find is that the phones who fail to sound TONE_PROP_ACK have this line in their log:

AudioFlinger    setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121

What is the purpose of AudioFlinger and what could be its connection to muting TONE_PROP_ACK?

Any idea how to fix my code so that that TONE_PROP_ACK always sounds, regardless of phone model?

Upvotes: 19

Views: 15774

Answers (2)

user4050065
user4050065

Reputation:

The parsing/decoding is handled by Stage fright, which is used by the media player service. The decoded data is written to an Audio Track through an Audio Sink, and the tracks are then mixed by the Audio Flinger's mixer thread(s) and written to an output stream (Audio Hardware). The output stream object fills up its own buffer(s) and then writes the data to the PCM output device file (which may or may not be an ALSA driver).

Upvotes: 0

dan
dan

Reputation: 155

One work around is to generate the tone in something like Audacity and play it through SoundPool or the api of your choice.

According to the Android docs ToneGenerator.TONE_PROP_ACK is:

1200Hz, 100ms ON, 100ms OFF 2 bursts

If you choose SoundPool, I suggest saving in ogg file format and loop the tone until complete. This while provide seamless audio with a very small clip and not using a lot of resources.

Upvotes: 1

Related Questions