Android MediaPlayer音频会话ID是什么?

8
正如标题所述,MediaPlayer对象的音频会话ID是什么?最初,我想检索我的MediaPlayer正在播放的音频资源的int资源ID。但我找不到该方法。
然而,我偶然发现了这个方法getAudioSessionId(),我想知道这是否是我在寻找的函数。
2个回答

8
安卓系统跟踪当前播放或录制的声音(音频会话),其他服务可以通过引用它们的音频会话ID来钩入它们。系统混音(扬声器输出的内容)的音频会话ID为0。
现在系统混音音频会话ID 0已经过时,所以你必须使用getAudioSessionId()
简而言之,除非你想要构建一个可视化工具,否则这并不是你要寻找的。
编辑:此外,对于任何试图使用AudioRecord中的getAudioSessionID()Visualizer或其他东西一起使用的人,此方法不起作用。

1
然后请告诉如何从AudioRecord使用Visualizer。 - Rohit Parmar
1
我们如何从AudioRecorder中获取audioSessionId? - PJ2104

5

根据AudioManager.generateAudioSessionId文档:

音频会话标识符是一组音频流(一个或多个混合在一起)的系统唯一标识符。

音频会话 ID 的主要用途是将音频效果与音频播放器(如 MediaPlayer 或 AudioTrack)关联起来:共享相同音频会话 ID 的所有音频效果将应用于共享相同音频会话的播放器的混合音频内容。

根据MediaPlayer.setAudioSessionId文档:

... 如果在创建音频效果时提供了音频会话 ID,则此效果仅应用于具有相同音频会话的媒体播放器的音频内容,而不应用于输出混合。创建 MediaPlayer 实例时,它会自动生成自己的音频会话 ID。但是,可以通过调用此方法强制该播放器成为已存在音频会话的一部分。此方法必须在其中一个重载的 setDataSource 方法之前调用。

生成新的音频会话 ID:

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int audioSessionId = audioManager.generateAudioSessionId();

AudioManager.generateAudioSessionId()可以返回AudioManager.ERROR

因此,在分配给MediaPlayer之前,请检查它:

if (audioSessionId != AudioManager.ERROR) {
    mediaPlayer.setAudioSessionId(audioSessionId);
}

另外

需要注意的是,只有在MediaPlayer构建时发生问题时,音频会话ID才为0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接