Звук по-прежнему воспроизводится, когда громкость iPhone полностью отключена - PullRequest
10 голосов
/ 31 октября 2011

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

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

Самая странная часть: Когда громкость 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];
}

Любые идеи будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

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

0 голосов
/ 03 января 2012

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

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

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

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

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

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

...