В чем разница между типами потоков AudioManager на низком уровне?
В AudioManager есть несколько типов потоков. Как они отличались на низком уровне? Может ли быть так, что использование, например, AudioManager.STREAM_MUSIC блокирует входной микрофонный поток? Или что-то другое?
3 ответа
Одним из наиболее значительных отличий является регулировка громкости.
Как сказано в документе, мы можем установить уровень громкости или настроить громкость для каждого потока соответственно.
И мы можем управлять "Аудиофокусом", который позволяет другим приложениям останавливать воспроизведение или уменьшать громкость, чтобы мы могли четко воспроизводить звук в определенном потоке, иначе звук не будет блокировать другой приоритетный звук, такой как звонок телефона, голосовая обратная связь навигации или что-то вроде того.
Поскольку несколько приложений могут воспроизводить аудио, важно подумать о том, как они должны взаимодействовать. Чтобы избежать одновременного воспроизведения всех музыкальных приложений, Android использует аудио-фокус для умеренного воспроизведения звука - только приложения, которые поддерживают аудио-фокус, должны воспроизводить аудио.
Другая не упомянутая вещь - это то, какое аудиоустройство будет издавать звук.
При использовании STREAM_MUSIC звук будет воспроизводиться через одно аудиоустройство (динамик телефона, наушники, динамик Bluetooth или что-то еще), подключенное к телефону.
При использовании STREAM_RING звук будет воспроизводиться через все аудиоустройства, подключенные к телефону. Это поведение может отличаться для каждого устройства.
Как обычно, все, что Google не будет документировать, можно (иногда) понять из кода
Что касается блокировки, то это не совсем то, что потоки блокируют друг друга, просто режимы блокируют вещи. 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