2011-05-06 229 views
0

我創建了一個鼓應用程序。截至目前,該應用程序有點滿意,但不是很好。Iphone SDK:聲音問題

這個問題是一個奇怪的延遲或「滯後」,有時會發生,當我按下我的聲音按鈕。當我垃圾郵件按鈕,它開始凍結,再取消凍結的時候,它起着堆放在自身相同的聲音大約4倍:(

我到底做錯了什麼?

是我的樣品壞?

我應該使用的ImageView和的touchesBegan模擬按鈕

這是我用來播放聲音時,按下一個按鈕的代碼:

- (IBAction) HHC { 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"HHClosed"ofType:@"wav"]; 

    SystemSoundID soundID; 

    AudioServicesCreateSystemSoundID((CFURLRef) [NSURL fileURLWithPath:path], &soundID); 

    AudioServicesPlaySystemSound (soundID); 

} 

請給我一些好的建議:)

在此先感謝

-DD

回答

1

嘗試這樣做,看看它是否使您的表現更好。

在您的.h文件中聲明這一點:

SystemSoundID soundID; 

在-viewDidLoad方法的.m文件添加以下代碼:

-(void) viewDidLoad { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"HHClosed"ofType:@"wav"]; 
    AudioServicesCreateSystemSoundID((CFURLRef) [NSURL fileURLWithPath:path], &soundID); 
} 

而且在方法中,你表現出保持這個一個代碼行:

- (IBAction) HHC { 
    AudioServicesPlaySystemSound (soundID); 
} 

讓我知道如果這使得凍結消失。如果它不嘗試Core Audio

+0

我真的不知道它是否改變了,但與其他聲音相比,它聽起來好一點:)我也有的問題是,我有8個聲音,我想玩。我應該創建8個路徑和8個soundID嗎? – DailyDoggy 2011-05-07 09:56:30

+0

是的,您應該聲明viewDidLoad中的所有路徑,並將路徑設置爲不同的soundID並查看它是否適用於您。 – shabbirv 2011-05-07 21:48:33

1

每當你打你加載從文件系統中的聲音文件,將其帶入內存,然後播放按鈕時它。

這是非常低效的。您的音頻樣本應該在啓動時已經加載到內存中,因此不需要從文件系統讀入。此外,AudioServicesPlaySystemSound並非真正爲此類用途而設計 - 其主要用途是播放短暫警報聲音(即系統警報)。如果您需要低延遲音頻播放,您應該考慮改爲使用Core Audio框架。

+0

Tnx!你可以推薦我怎麼用CoreAudio做到這一點? – DailyDoggy 2011-05-06 22:18:49

1

對於適用於鼓應用的低延遲聲音,您將需要使用RemoteIO Audio Unit API,但這並不簡單。您需要知道如何處理,緩衝和混合PCM聲音樣本。首先閱讀一本關於數字音頻技術的書。