Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVAudioPlayer可以多次播放相同的声音,而不会中断播放_Ios_Swift_Avaudioplayer - Fatal编程技术网

Ios AVAudioPlayer可以多次播放相同的声音,而不会中断播放

Ios AVAudioPlayer可以多次播放相同的声音,而不会中断播放,ios,swift,avaudioplayer,Ios,Swift,Avaudioplayer,我有一个滚动视图。我想在每次达到1/7的时候播放一个声音。当用户缓慢滚动时,它会工作,因为声音在另一个被触发之前就结束了 但如果太快:我有两个选择: 忽略以下应该发出的声音 停止前一个并播放以下内容 但我想要的是,即使第二个(甚至第三个、第四个等)已经开始打球,第一个也要打完 我能用一个AVAudioplayer做这个吗 var alertSound = NSBundle.mainBundle().URLForResource("Transit", withExtension: "aif")

我有一个滚动视图。我想在每次达到1/7的时候播放一个声音。当用户缓慢滚动时,它会工作,因为声音在另一个被触发之前就结束了

但如果太快:我有两个选择:

  • 忽略以下应该发出的声音
  • 停止前一个并播放以下内容
但我想要的是,即使第二个(甚至第三个、第四个等)已经开始打球,第一个也要打完

我能用一个AVAudioplayer做这个吗

var alertSound = NSBundle.mainBundle().URLForResource("Transit", withExtension: "aif")
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)

var error:NSError?
audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)
audioPlayer.prepareToPlay()

要实现您想要的,您需要多个AVAudioPlayers,一个玩家无法完成此任务。然而,音频工具箱框架可能会满足您的需求

基本上,您可以为您的声音创建一个系统声音ID,并在需要时随时将其发射出去。一旦启动,声音就会播放出来,不利的一面是无法控制音量,但在这种情况下,这并不重要

基本示例是(obj-C对不起)


你将需要多个玩家来实现这一点。如果是UI声音效果,最好链接AudioToolbox框架并使用AudioServicesPlaySystemSound函数。这应该达到你想要的行为。谢谢!你有一个简单的例子给我看吗。这样我就可以把你的答案标记为接受?
    NSString *path=[[NSBundle mainBundle] pathForResource: @"soundName" ofType:@"aif"];

    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)([NSURL fileURLWithPath:path]), &soundID);
    AudioServicesPlaySystemSound(soundID);