Iphone 禁用所有程序声音

Iphone 禁用所有程序声音,iphone,Iphone,我想有一个设置来禁用来自我的程序的所有声音。我知道我可以设置一个全局ivar并为每个声音编写if语句,但我希望在appdelegate中设置一个可以禁用所有程序声音的东西 我已经玩了几个游戏,可以让你关闭游戏声音 我使用AVAudioPlayer播放较长的片段,使用基本音频服务系统声音播放较短的片段。您使用什么播放声音?我认为您可以通过禁用音频会话来禁用声音–请参阅 更新:是的,你是对的。我刚刚试着去激活音频会话,声音似乎还在继续。没有关系。您可以使用布尔标志方法,并且不需要对每个声音都设置条件

我想有一个设置来禁用来自我的程序的所有声音。我知道我可以设置一个全局ivar并为每个声音编写if语句,但我希望在appdelegate中设置一个可以禁用所有程序声音的东西

我已经玩了几个游戏,可以让你关闭游戏声音


我使用AVAudioPlayer播放较长的片段,使用基本音频服务系统声音播放较短的片段。

您使用什么播放声音?我认为您可以通过禁用音频会话来禁用声音–请参阅

更新:是的,你是对的。我刚刚试着去激活音频会话,声音似乎还在继续。没有关系。您可以使用布尔标志方法,并且不需要对每个声音都设置条件。我在游戏中使用SFX的方式是通过一个单独的类,一种观察模型并为各种游戏事件创建声音的“视图”。通过这种方式,您可以在设计中保持关注点的清晰分离,当您想要关闭声音时,只需断开声音类与模型的连接。代码看起来有点像这样:

@implementation Model

- (void) stepBy: (double) seconds
{
     [player doSomething];
     if (player.isDead)
        [self sendNotification:@selector(playerHasDied:) withObject:player];
}

@end
以及声音视图:

@implementation SFX

- (void) playerHasDied: (id) player
{
    [aarghSound play];
}

@end
当然,您必须实现实际的观察部分。您可以使用NSNotificationCenter或使用观察者数组编写自己的调度代码:

@implementation Model

- (void) addObserver: (id) object
{
    [observers addObject:object];
}

- (void) sendNotification: (SEL) message
{
    for (id observer in observers)
        if ([observer respondsToSelector:message])
            [observer performSelector:message];
}

@end
SFX视图已连接到模型:

Model *model = [[Model alloc] init];
SFX *sounds = [[SFX alloc] init];
[model addObserver:sounds];

当您想要禁用所有声音时,只需断开SFX与模型的连接;停止观察。如果在游戏开始前声音被禁用,您甚至不必分配SFX类–这可以节省时间、性能和内存。

阅读相关文档,它与设置音频优先级更相关。我不知道如何在我的应用程序中使用它。