2012-07-16 160 views
0

在我的應用程序中,我將按鈕設置爲鍵盤。每個按鈕的作用類似於鋼琴鍵,您可以觸摸按鈕,當您按住時播放聲音,但釋放時會停止播放。對於這種方法,我使用了兩個IBActions。一個用於Touch Down(聲音播放)和Touch Up Inside(聲音停止)。我使用SystemSoundID播放聲音,因爲AVAudioPlayer有延遲播放。唯一的問題是,當我按住按鈕聲音播放良好,但一旦我釋放觸摸我的應用程序崩潰。下面是我的代碼:SystemSoundID停止聲音

.h文件中:

SystemSoundID *soundID; 

.m文件:

- (IBAction)ASoundStart:(id)sender { 
    NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"P1:4t" ofType:@"mp3"]; 
    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID); 
    AudioServicesPlaySystemSound(soundID); 
    [soundFile release]; 
} 

- (IBAction)ASoundStop:(id)sender { 
    AudioServicesDisposeSystemSoundID(soundID); 
} 
+0

我其實沒有將ARC納入我的項目。任何方式來阻止聲音,並防止我的應用程序崩潰?無論如何,爲什麼我的應用崩潰? – 2012-07-16 03:58:00

回答

2

我相信你正確治療SystemSoundID爲對象。它只是一個整數。

如果你看一看AudioServicesPlaySystemSound的聲明,注意它的說法是SystemSoundID,而不是SystemSoundID *

void AudioServicesPlaySystemSound (
    SystemSoundID inSystemSoundID 
); 

所以,如果你只是在你的頭改變SystemSoundID *soundIDSystemSoundID soundID我相信它應該工作。

快樂編碼。