SystemSoundID停止声音

问题描述:

在我的应用程序中,我将按钮设置为键盘。每个按钮的作用类似于钢琴键,您可以触摸按钮,当您按住时播放声音,但释放时会停止播放。对于这种方法,我使用了两个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

我相信你正确治疗SystemSoundID为对象。它只是一个整数。

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

void AudioServicesPlaySystemSound (
    SystemSoundID inSystemSoundID 
); 

所以,如果你只是在你的头改变SystemSoundID *soundIDSystemSoundID soundID我相信它应该工作。

快乐编码。