Подтвердить что ты не робот

Что такое AudioFlinger и почему он не работает TONE_PROP_ACK?

В моем приложении я выдаю следующий оператор:

toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);

Что хорошо работает на дешевом LG LS670 под управлением Android 2.3.3, но не звучит вообще на всех других телефонах, которые у меня есть, от Android 2.2.1 до Android 2.3.4.

Итак, я знаю, что версия ОС здесь не играет роли (я также проверял в документации, что она поддерживается с API 1).

Кроме того, как громкость звонка, так и громкость носителя установлены на максимум, а тональный генератор инициализируется с помощью:

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

И я подтвердил, что Settings.System.DTMF_TONE_WHEN_DIALING установлен в 1.

Сбив с толку это непоследовательное поведение (по разным телефонам), я просмотрел системные журналы, когда это произошло, и единственной подозрительной разницей, которую я смог найти, является то, что телефоны, которые не могут звучать TONE_PROP_ACK имеют эту строку в своем журнале:

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

Какова цель AudioFlinger и какова может быть его связь с отключением TONE_PROP_ACK?

Любая идея , как исправить мой код, чтобы всегда звучать TONE_PROP_ACK, независимо от модели телефона?

4b9b3361

Ответ 1

Одна работа заключается в том, чтобы генерировать тон в чем-то вроде Audacity и воспроизводить его через SoundPool или api по вашему выбору.

В соответствии с документами Android ToneGenerator.TONE_PROP_ACK:

1200 Гц, 100 мс вкл., 100 мс выкл. 2 всплеска

Если вы выберете SoundPool, я предлагаю сохранить в формате файла ogg и закодировать тон до завершения. Это обеспечивает бесшовный звук с очень маленьким клипом и не использует много ресурсов.

Ответ 2

Разбор/декодирование обрабатывается с ошибкой Stage, которая используется медиаплеер. Декодированные данные записываются в аудиодорожку через Audio Sink, а треки затем смешиваются Микшеры аудио потоков Flinger и записываются в выходной поток (Аудиооборудование). Объект выходного потока заполняет собственный буфер (ы) и затем записывает данные в файл устройства вывода PCM (который может или не может быть драйвером ALSA).