我想要設置禁用來自我的程序的所有聲音。我知道我可以設置一個全球伊娃,並寫每個聲音的聲明,但我希望有一些東西,我可以在appdelegate設置禁用所有程序的聲音。禁用所有程序的聲音
我玩過幾款遊戲,可以讓您關閉遊戲聲音。
我正在使用AVAudioPlayer獲得較長的剪輯和短片段的基本音頻服務系統聲音。
我想要設置禁用來自我的程序的所有聲音。我知道我可以設置一個全球伊娃,並寫每個聲音的聲明,但我希望有一些東西,我可以在appdelegate設置禁用所有程序的聲音。禁用所有程序的聲音
我玩過幾款遊戲,可以讓您關閉遊戲聲音。
我正在使用AVAudioPlayer獲得較長的剪輯和短片段的基本音頻服務系統聲音。
你用什麼來播放聲音?我認爲您可以通過停用音頻會話來禁用聲音 - 請參閱AudioSessionSetActive。
更新:是的,你說得對。我剛剛嘗試停用音頻會話,並且聲音似乎繼續。沒關係。你可以使用布爾標誌方法,並且不需要在每個聲音周圍都有條件。我在遊戲中做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類 - 這可以節省時間,性能和內存。
請閱讀有關此文檔,它與設置音頻優先級更相關。我無法弄清楚如何在應用程序中使用它。 – Aaron 2009-07-21 00:41:23