Управление громкостью звука с принудительным звуком

99
9

Я играю аудиоклип с использованием OpenSL ES. В моем коде у меня есть


    audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);

чтобы заставить звук через динамик, когда гарнитура подключена. Он работает нормально, но я не могу контролировать громкость. Нажатие кнопок регулировки громкости во время воспроизведения клипа приводит к появлению и перемещению стрелки тома, но громкость не изменяется.
Вызов setVolumeControlStream(AudioManager.STREAM_VOICE_CALL) или setVolumeControlStream(AudioManager.STREAM_MUSIC) перед воспроизведением, похоже, не помогает.
Изменение любого из томов вне моего приложения (например, в настройках Android) не влияет на громкость воспроизведения. Регулятор громкости хорошо работает как на гарнитуре, так и на динамике при отсутствии маршрутизации.


Я также попытался маршрутизировать звук в динамик, используя этот код, который я нашел в другом ответе


    Class audioSystemClass = Class.forName("android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
// First 1 == FOR_MEDIA, second 1 == FORCE_SPEAKER. To go back to the default
// behavior, use FORCE_NONE (0).
setForceUse.invoke(null, 1, 1);

но он не работает на моем Android 4.3 Nexus 4. Мне все равно нужен самый совместимый способ.


Любые идеи?
Спасибо.

спросил(а) 2013-11-03T02:04:00+04:00 6 лет, 11 месяцев назад
1
Решение
58

Вот пара идей:

    MODE_IN_CALL устанавливает все виды приоритетов/политики на STREAM_VOICE_CALL. В течение этого времени другой STREAM может потерять фокус регулировки громкости. Посмотрите, воспроизводится ли ваш аудиоклип через STREAM_VOICE_CALL.


    MODE_IN_COMMUNICATION (для VoIP) может быть лучше подходит для вас. MODE_IN_CALL предназначен для сотового вызова и может ухудшить качество звука.


    Вы можете попробовать захватить аудиофокус и посмотреть, поможет ли это. http://developer.android.com/training/managing-audio/audio-focus.html


ответил(а) 2013-11-03T11:26:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема