音频管理器的低级别流类型之间有什么区别?



AudioManager中有几种流类型。它们在低水平上有什么不同?会不会是AudioManager之类的用法?STREAM_MUSIC阻塞输入麦克风流?还是别的什么?

最重要的区别是音量控制。
正如文档所说,我们可以分别为每个流设置音量级别或调整音量。
我们可以控制"音频焦点",让其他应用程序停止播放或降低音量,这样我们就可以在特定的流上清晰地播放声音,或者声音不会阻塞其他高优先级的声音,如电话铃声,导航语音反馈或类似的东西。

对于可能播放音频的多个应用程序,考虑它们应该如何交互是很重要的。为了避免每个音乐应用同时播放,Android使用音频焦点来调节音频播放——只有持有音频焦点的应用才能播放音频。

另一个未提及的事情是哪个音频设备将产生声音。
使用STREAM_MUSIC,声音将通过一个连接到手机的音频设备(电话扬声器,耳机,蓝牙扬声器或其他东西)产生。
使用STREAM_RING,声音将通过连接到手机的所有音频设备产生。

像往常一样,无论你谷歌不记录的东西(有时)都可以从代码

中理解。

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

至于阻塞,并不是流相互阻塞,只是模式阻塞了东西。MODE_IN_COMMUNICATION阻塞了大部分流。

闪避:一种普通的"礼貌";当播放长时间运行的流(例如音乐)时的行为是听音频焦点回调并手动降低流的音量。事件。当焦点返回到你的流时,音量应该恢复到之前的水平。

流类型影响在给定时间内流对所有声音总和的贡献:

   /** @hide Maximum volume index values for audio streams */
private int[] MAX_STREAM_VOLUME = new int[] {
    5,  // STREAM_VOICE_CALL
    7,  // STREAM_SYSTEM
    7,  // STREAM_RING
    15, // STREAM_MUSIC
    7,  // STREAM_ALARM
    7,  // STREAM_NOTIFICATION
    15, // STREAM_BLUETOOTH_SCO
    7,  // STREAM_SYSTEM_ENFORCED
    15, // STREAM_DTMF
    15  // STREAM_TTS

这个来自AudioService.java的数组显示了给定流的默认最大音量。其他代码:

    private void readPersistedSettings() {
    final ContentResolver cr = mContentResolver;
    mRingerMode = System.getInt(cr, System.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
    mVibrateSetting = System.getInt(cr, System.VIBRATE_ON, 0);
    mRingerModeAffectedStreams = Settings.System.getInt(cr,
            Settings.System.MODE_RINGER_STREAMS_AFFECTED,
            ((1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_NOTIFICATION)|
             (1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)));
    mMuteAffectedStreams = System.getInt(cr,
            System.MUTE_STREAMS_AFFECTED,
            ((1 << AudioSystem.STREAM_MUSIC)|(1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_SYSTEM)));
    mNotificationsUseRingVolume = System.getInt(cr,
            Settings.System.NOTIFICATIONS_USE_RING_VOLUME, 1);

似乎表明当电话开始"振铃"或通话正在进行时,哪些流的音量被静音或减小。

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

最新更新