Звук по-прежнему воспроизводится, когда объем iPhone полностью отключен до бесшумного

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

  • Отключите фоновый звук, а остальные звуки будут намного громче.
  • При включенной фоновой музыке звук МНОГО тише.
  • Вы даже можете включить музыку в середине звука, и звук становится тише.

Самая странная часть: Когда громкость iPhone полностью отключена (отключена), звуков вообще не должно быть. С фоновой музыкой, но без громкости устройства, она делает то, что вы ожидаете - вы не можете слышать музыку или звуковые эффекты. Но если фоновая музыка отключена, звуковые эффекты все еще воспроизводятся и довольно громко, даже если само устройство полностью выключено!

Вот мой код...

Для моей фоновой музыки:

AVAudioPlayer *musicPlayer;

- (void)playMusic {
    if (musicPlayer == nil) {
        NSURL *musicPath = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"SongFile" ofType:@"mp3"]];
        musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:musicPath error:nil];
        musicPlayer.volume = 0.2f;
        musicPlayer.numberOfLoops = -1;
    }
    [musicPlayer play];
}

- (void)stopMusic {
    [musicPlayer stop];
}

Для звуков во время воспроизведения:

#import "SoundEffect.h"
SoundEffect *sounds;

- (void)playSoundWithInfo:(NSString *)sound; {
    NSString *path = [[NSBundle mainBundle] pathForResource:sound ofType:@"caf"];
    sounds = nil;
    sounds = [[SoundEffect alloc] initWithContentsOfFile:path];
    [sounds play];
}

Будем очень благодарны за любые идеи.

Ответ 1

Возможно, это потому, что вы используете AVAudioPlayer для своей музыки и SystemSounds для воспроизведения ваших звуковых эффектов. Громкость, установленная для AVAudioPlayer, находится в приложении, но том, установленный для SystemSounds, - это systemVolume.

Ответ 2

Вам нужно установить AVAudioSession перед воспроизведением звуков с помощью AVAudioPlayer и MPMediaPlayer в вашем приложении, и для него существуют разные категории, основанные на том, как вы хотите, чтобы звук взаимодействовал. Хотя я понятия не имею, почему музыка все равно будет играть даже на нулевой громкости, другие проблемы, похоже, связаны с настройкой AVAudioSessionCategory, которую вы не хотите. При инициализации вашего приложения или где бы вы ни начали воспроизводить звуки, попробуйте следующий код:

[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];

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

Если вам требуется другое поведение для аудио, проверьте другие категории, которые вы могли бы установить в Документация Apple на класс AVAudioSession. Другие варианты:

AVAudioSessionCategoryAmbient;
AVAudioSessionCategorySoloAmbient;
AVAudioSessionCategoryPlayback;
AVAudioSessionCategoryRecord;
AVAudioSessionCategoryPlayAndRecord;
AVAudioSessionCategoryAudioProcessing;

В любом случае, надеюсь, проблема со звуковым сеансом вызвала эти проблемы. Дайте мне знать, если это сработало.