在我的应用程序中,我将按钮设置为键盘。每个按钮的作用类似于钢琴键,您可以触摸按钮并在按住时播放声音,但在释放时停止播放。对于这种方法,我使用两个IBActions。一个用于Touch Down(声音播放)和Touch Up Inside(声音停止)。我正在使用SystemSoundID播放声音,因为AVAudioPlayer播放延迟。唯一的问题是,当我按住按钮时声音播放正常,但一旦我释放触摸,我的应用程序崩溃。以下是我的代码:
.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 :(得分:2)
我相信您将SystemSoundID错误地视为对象。它只是一个整数。
如果您查看AudioServicesPlaySystemSound的声明,请注意它的参数是SystemSoundID
而不是SystemSoundID *
void AudioServicesPlaySystemSound (
SystemSoundID inSystemSoundID
);
因此,如果您只是将标题中的SystemSoundID *soundID
更改为SystemSoundID soundID
,我相信它应该有效。
快乐的编码。