我创建了这个方法,可以在XCode iPhone应用程序中轻松播放声音。
void playSound(NSString* myString) {
CFBundleRef mainBundle = CFBundleGetMainBundle();
NSString *string = myString;
CFURLRef soundFileURLRef;
soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (__bridge CFStringRef) string, CFSTR ("wav"), NULL);
UInt32 soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesPlaySystemSound(soundID);
}
这个问题是,我不知道如何停止声音或让声音在循环播放直到它停止。我该怎么做呢?我可以让方法返回声音,然后将其放入变量中以便以后修改吗?
答案 0 :(得分:1)
恐怕我不知道怎么阻止它,但试着这个循环:
soundFile = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"AudioName" ofType:@"wav"]];
sound = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFile error:nil];
sound.numberOfLoops = -1; //infinite
[sound play];
答案 1 :(得分:1)
来自文档:“界面不提供电平,定位,循环或定时控制,并且不支持同时播放......”。
因此,对于声音播放,最好使用AVFoundation类。
答案 2 :(得分:0)
系统声音服务通常用于播放短音/警报/等等,并且应该避免暂停/停止。如果确实需要,您可以尝试AudioServicesDisposeSystemSoundID(systemSoundID)
来停止声音。
至于循环,您可以使用AudioServicesPlaySystemSoundWithCompletion
创建递归函数来循环声音。
示例(swift 3):
func playSystemSound(systemSoundID: SystemSoundID, count: Int){
AudioServicesPlaySystemSoundWithCompletion(systemSoundID) {
if count > 0 {
self.playSystemSound(systemSoundID: systemSoundID, count: count - 1)
}
}
}
因此,在您的示例中,您只需将AudioServicesPlaySystemSound(soundID);
替换为playSystemSound(systemSoundID: soundID, count: numOfPlays)
答案 3 :(得分:0)
如果您要根据bool变量决定播放声音,
private func playSound() {
if isStarted {
AudioServicesPlaySystemSoundWithCompletion(kSystemSoundID_Vibrate, {
if self.isStarted {
self.playSound()
}
})
}
}