我正在阅读有关使用AudioServicesPlaySystemSound一次播放一个声音的堆栈溢出的帖子。
我遇到了同样的问题,使用下面的代码,当你在另一个停止播放之前按一个按钮时,第二个声音在第一个声音的顶部播放,这样2个声音重叠。
-(IBAction)button1:(id)sender{
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle]
pathForResource:@"sound1"
ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}
-(IBAction)button2:(id)sender{
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle]
pathForResource:@"sound2"
ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}
根据苹果的documentation:
AudioServicesPlaySystemSound
应该一次只播放一个声音。
此外,当您使用AudioServicesPlaySystemSound
功能时:
所以我不明白为什么可以同时播放多个声音。
我尝试使用AudioServicesDisposeSystemSoundID
,但声音仍然重叠,我做错了吗?
-(IBAction)sound2:(id)sender{
AudioServicesDisposeSystemSoundID
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle]
pathForResource:@"sound2"
ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}
目前,我正在使用AVAudioPlayer
但是有一个合理的启动延迟,如果可能的话,我想使用AudioServicesPlaySystemSound
,因为它会立即播放声音。
还有其他人有同样的问题吗?
非常感谢你的时间。
答案 0 :(得分:4)
尝试使用AudioServicesDisposeSystemSoundID
。
这只是解决问题的解决方案。 如果您需要再次播放,则必须再次创建声音。