AVAudioSession setCategory успешно, но ничего не происходит

Я кодирую приложения iOS с основным звуком. Что-то странное попадалось.

To do:

AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *err = nil;
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDuckOthers error:&err];
[session setActive:YES error:&err];

Я нахожу, что все в порядке, фоновая музыка приглушена. Затем я пытаюсь возобновить его:

[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&err];

Без ошибок, но фоновая музыка по-прежнему приглушена. Затем я заменяю его на:

[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:0 error:&err];

Оно работает! Фоновая музыка пропала!

Я просто не понимаю, почему моя первая попытка не удалась, а вторая удалась?

На мой взгляд разницы никакой!


person Vincent Yang    schedule 30.05.2016    source источник


Ответы (2)


Прежде всего, эти две строки кода не эквивалентны. AVAudioSessionCategoryOptionMixWithOthers на самом деле имеет значение 1. Установка значения 0 означает, что вам не нужны никакие параметры категории.

Во-вторых, непонятно, чего вы на самом деле пытаетесь достичь. Вы говорите, что хотите приглушить другие аудиоканалы (т. е. заставить их воспроизводиться с более низкой громкостью), а затем удалить этот эффект (это будет установка опции AVAudioSessionCategoryOptionMixWithOthers). Но затем вы заявляете о своем успехе тем, что фоновая музыка исчезла, а это совсем другое.

ИЗМЕНИТЬ

Чтобы удалить эффект приглушения, попробуйте деактивировать сеанс приглушения вместо того, чтобы устанавливать для него новую категорию.

Из документации Apple:

Когда происходит приглушение звука, все остальные звуки на устройстве, кроме звука телефона, становятся тише. Приложения, использующие уклонение, должны управлять состоянием активации своего сеанса. Активируйте сеанс аудио перед воспроизведением аудио и деактивируйте сеанс после воспроизведения аудио.

person pajevic    schedule 30.05.2016
comment
Да, это просто тест. Что я хочу сделать, так это отключить фоновую музыку, а затем удалить этот эффект, не деактивируя текущий аудиосеанс. Однако это не работает. Поэтому я пробую другой вариант: 0. Тогда я нахожу, что это работает. - person Vincent Yang; 30.05.2016

Вы устанавливали разные параметры при каждой попытке. есть разница между AVAudioSessionCategoryOptionDuckOthers и AVAudioSessionCategoryOptionMixWithOthers и 0.

AVAudioSessionCategoryOptionMixWithOthers: смешивает звук из этого сеанса со звуком из других активных сеансов.

AVAudioSessionCategoryOptionDuckOthers : звук из других сеансов приглушается (уменьшается громкость) при воспроизведении звука из этого сеанса.

А 0 означает без вариантов.

Таким образом, другие варианты требуют другого сеанса для выполнения задачи.

Для получения более подробной информации о параметрах сеанса см. Документация Apple.

Надеюсь, это поможет :)

person Ketan Parmar    schedule 30.05.2016
comment
Я понимаю разницу между 0 и AVAudioSessionCategoryOptionMixWithOthers(0x1). Но, на мой взгляд, если работает 0, AVAudioSessionCategoryOptionMixWithOthers тоже должен работать. Я пытаюсь 0 прервать фоновую музыку. Оно работает. И я пытаюсь AVAudioSessionCategoryOptionMixWithOthers удалить эффект приглушения. Это не работает. Разница всего 0 и 1. - person Vincent Yang; 30.05.2016
comment
Нет, для этого варианта вам требуется еще один сеанс. Прочитайте документацию Apple, я предоставил ссылку в ответ. В нем указано Mixes audio from this session with audio from other active sessions. Это означает, что для этой опции требуется другой активный сеанс. - person Ketan Parmar; 30.05.2016
comment
Да, мой iTunes играет музыку в фоновом режиме. Изменение параметра никогда не будет иметь никакого значения, за исключением того, что оно будет изменено на 0. Изменение 1 на 2 или изменение 2 на 1 не работает одинаково. - person Vincent Yang; 30.05.2016