К чему относится идентификатор аудиосессии Android MediaPlayer?

Как следует из заголовка, на что ссылаются MediaPlayer объекты идентификатор аудиосеанса? Первоначально я намеревался получить идентификатор ресурса int аудиоресурса, который воспроизводит мой MediaPlayer. Но я не мог найти метод для этого.

Однако я наткнулся на этот метод getAudioSessionId() и мне было интересно, это ли та функция, которую я искал.


person brain56    schedule 17.01.2013    source источник


Ответы (2)


Система Android отслеживает воспроизводимые или записываемые в данный момент звуки (аудиосессии), и другие службы могут подключаться к ним, ссылаясь на свой идентификатор аудиосессии. Системный микс (то, что выходит из динамиков) имеет идентификатор аудиосессии 0.

Идентификатор сеанса аудио системного микса 0 теперь устарел, поэтому вам нужно использовать getAudioSessionId().

Короче говоря, это не то, что вам нужно, если только вы не хотите создавать визуализатор.

РЕДАКТИРОВАТЬ: Кроме того, для тех, кто пытается использовать getAudioSessionID() из AudioRecord с Visualizer или чем-то еще, это не работает.

person Charles Munger    schedule 23.02.2013
comment
Тогда расскажите, пожалуйста, как пользоваться Visualizer от AudioRecord. - person Rohit Parmar; 16.11.2018
comment
Как мы можем получить audioSessionId из AudioRecorder? - person PJ2104; 09.01.2019

Из документации AudioManager.generateAudioSessionId:

Идентификатор аудиосеанса — это общесистемный уникальный идентификатор для набора аудиопотоков (один или несколько смешанных вместе).

Идентификатор аудиосеанса в основном используется для связывания аудиоэффектов с аудиоплеерами, такими как MediaPlayer или AudioTrack: все аудиоэффекты, использующие один и тот же идентификатор аудиосеанса, будут применяться к смешанному аудиоконтенту проигрывателей, использующих один и тот же аудиосеанс.

Из документации MediaPlayer.setAudioSessionId:

... если при создании аудиоэффекта указан идентификатор аудиосеанса, этот эффект будет применяться только к аудиоконтенту медиаплееров в рамках одного аудиосеанса, а не к выходному миксу. При создании экземпляр MediaPlayer автоматически генерирует собственный идентификатор аудиосеанса. Однако можно заставить этот проигрыватель быть частью уже существующего аудиосеанса, вызвав этот метод. Этот метод должен вызываться перед одним из перегруженных методов setDataSource.

Чтобы сгенерировать новый идентификатор аудиосессии:

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

AudioManager.generateAudioSessionId() может вернуть AudioManager.ERROR.

Поэтому проверьте его, прежде чем назначать MediaPlayer:

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

Также:

Обратите внимание, что идентификатор аудиосессии равен 0, только если возникла проблема при создании MediaPlayer.

person mixel    schedule 30.01.2017