8

如标题所述,MediaPlayer对象音频会话 ID指的是什么?最初,我打算检索我正在播放int的音频资源的资源 ID 。MediaPlayer但我找不到一种方法。

然而,我偶然发现了这个方法getAudioSessionId()并且我想知道这是否是我正在寻找的函数。

4

2 回答 2

6

android 系统跟踪当前正在播放或录制的声音(音频会话),其他服务可以通过引用它们的音频会话 ID 来连接它们。系统混音(扬声器发出的声音)的音频会话 ID 为 0。

系统混合音频会话 ID 0 现在已弃用,因此您必须使用getAudioSessionId().

简而言之,除非您想构建可视化器,否则这不是您要寻找的。

编辑:另外,对于任何试图将getAudioSessionID()fromAudioRecord与 aVisualizer或其他东西一起使用的人,这是行不通的。

于 2013-02-23T17:14:28.990 回答
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。

于 2017-01-30T15:33:59.330 回答