当iPhone音量一直变为静音时,音频仍会播放

时间:2011-10-31 05:36:51

标签: iphone audio avaudioplayer soundeffect

我目前在我的应用中播放背景音乐和其他声音的方式非常奇怪:

  • 关闭背景音乐,播放的其他声音更响亮。
  • 随着背景音乐的开启,音频更加安静。
  • 你甚至可以在中音时转动音乐,声音也会变得更安静。

最奇怪的部分: 当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 个答案:

答案 0 :(得分:1)

也许是因为您正在使用AVAudioPlayer为您的音乐和SystemSounds重现您的音效。为AVAudioPlayer设置的卷在应用程序中,但为SystemSounds设置的卷是systemVolume。

答案 1 :(得分:0)

您需要在使用应用中的AVAudioSessionAVAudioPlayer播放声音之前设置MPMediaPlayer,并根据您希望音频的交互方式对其进行不同的分类。虽然我不知道为什么音乐即使在零音量上仍然可以播放,但其他问题似乎来自于你不想要的AVAudioSessionCategory设置。在应用初始化或开始播放声音的任何地方,请尝试以下代码:

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

此代码初始化AVAudioSession并将其设置为声音不会与其他背景声音混合的类别(一旦您激活会话就会停止声音)以及您的应用具有优先权的位置。请注意,屏幕锁定和静音开关仍然可以播放声音(全音量)。我相信你可以专门设置,但我不知道确切的代码。

如果您想要音频的不同行为,请查看您可以在Apple's documentation of the AVAudioSession Class中设置的其他类别。其他选择是:

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

无论如何,希望音频会话问题导致了这些问题。如果有效,请告诉我。