В чем разница между типами потоков AudioManager на низком уровне?

В AudioManager есть несколько типов потоков. Как они отличались на низком уровне? Может ли быть так, что использование, например, AudioManager.STREAM_MUSIC блокирует входной микрофонный поток? Или что-то другое?

3 ответа

Одним из наиболее значительных отличий является регулировка громкости.
Как сказано в документе, мы можем установить уровень громкости или настроить громкость для каждого потока соответственно.
И мы можем управлять "Аудиофокусом", который позволяет другим приложениям останавливать воспроизведение или уменьшать громкость, чтобы мы могли четко воспроизводить звук в определенном потоке, иначе звук не будет блокировать другой приоритетный звук, такой как звонок телефона, голосовая обратная связь навигации или что-то вроде того.

Поскольку несколько приложений могут воспроизводить аудио, важно подумать о том, как они должны взаимодействовать. Чтобы избежать одновременного воспроизведения всех музыкальных приложений, Android использует аудио-фокус для умеренного воспроизведения звука - только приложения, которые поддерживают аудио-фокус, должны воспроизводить аудио.

Другая не упомянутая вещь - это то, какое аудиоустройство будет издавать звук.
При использовании STREAM_MUSIC звук будет воспроизводиться через одно аудиоустройство (динамик телефона, наушники, динамик Bluetooth или что-то еще), подключенное к телефону.
При использовании STREAM_RING звук будет воспроизводиться через все аудиоустройства, подключенные к телефону. Это поведение может отличаться для каждого устройства.

Как обычно, все, что Google не будет документировать, можно (иногда) понять из кода

https://android.googlesource.com/platform/frameworks/base/+/00ccd5d026fcd0e4b9d27dc5a9ffa13ca0408449/media/java/android/media/AudioService.java

Что касается блокировки, то это не совсем то, что потоки блокируют друг друга, просто режимы блокируют вещи. MODE_IN_COMMUNICATION блокирует большинство потоков.

Ducking: обычное и "вежливое" поведение при воспроизведении длинного потока (например, MUSIC) заключается в прослушивании обратного вызова с фокусировкой звука и уменьшении громкости вашего потока вручную после события "can duck". Громкость должна вернуться к своему предыдущему уровню, когда фокус вернется к вашему потоку.

STREAM_ALARM        The audio stream for alarms
STREAM_DTMF         The audio stream for DTMF Tones
STREAM_MUSIC        The audio stream for music playback
STREAM_NOTIFICATION The audio stream for notifications
STREAM_RING         The audio stream for the phone ring
STREAM_SYSTEM       The audio stream for system sounds
STREAM_VOICE_CALL   The audio stream for phone calls

от http://developer.android.com/reference/android/media/AudioManager.html

Другие вопросы по тегам