当前位置: 首页 > 面试题库 >

尽管Swift中有prepareToPlay(),AVAudioPlayer仍会产生滞后

祁嘉木
2023-03-14
问题内容

在我用Swift编写的SpriteKit
iOS游戏中,播放非常短的声音(约0.5秒)会产生打ic(如滞后)。在其他问题中,我读到我应该prepareToPlay()发出声音,就像以前那样。

我什至使用变量(soundReady)在播放之前检查声音是否准备就绪。每当播放完(audioPlayerDidFinishPlaying())时,我也会重新准备声音。以下是代码的相关部分:

class GameScene: SKScene, AVAudioPlayerDelegate {

   var splashSound = NSURL()
   var audioPlayer = AVAudioPlayer()
   var soundReady = false

   override func didMoveToView(view: SKView) {
      let path = NSBundle.mainBundle().pathForResource("plopSound", ofType: "m4a")
      splashSound = NSURL(fileURLWithPath: path)
      audioPlayer = AVAudioPlayer(contentsOfURL: splashSound, error: nil)
      audioPlayer.delegate = self
      soundReady = audioPlayer.prepareToPlay()
   }

   func playSound(){
      if(soundReady){
         audioPlayer.play()
         soundReady = false
      }
   }

   func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool){
      //Prepare to play after Sound finished playing
      soundReady = audioPlayer.prepareToPlay()
   }
}

我不知道我在哪里犯了错误。我感觉我已经尝试了所有方法(包括但不限于:仅准备一次,在播放后立即准备,不使用变量,而只是prepareToPlay())。

附加信息:

  • 声音立即播放。
  • 最后完成之后播放声音的速度似乎并不影响延迟。

问题答案:

我遇到了同样的问题,并在backgroundQueue中播放了声音。

let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
    audioPlayer.play()
})


 类似资料:
  • 在我用Swift编程的SpriteKitiOS游戏中播放一个非常短的声音(约0.5秒)会产生一个小问题(比如延迟)。在其他问题中,我读到我应该声音,我做到了。 我甚至使用了一个变量(

  • 我有一些(C 14)代码如下所示: 有时会抛出一个异常,这很好,因为如果是这样,我不希望垃圾映射中的值。 但是一开始我在循环中写了这个,这不起作用: 更准确地说,即使抛出异常,也会创建(并分配一个空集)。 这不是我所期望的:我希望它们以同样的方式运行。 这里有没有我误解的C原则?

  • 我有一个由多个线程操作的ArrayList,由于ArrayList没有同步,所以无法工作。按照教授的指示,我把列表换成了向量。向量是同步的,但我抛出了与同步相关的异常。 为什么会发生这种情况,我如何避免代码中的并发异常?我不想只是玩玩,直到有东西起作用,我想做最好的事情。谢谢! 例外情况: 代码:

  • 你好Stack overflow社区, 我的提示是:**“您将进行错误检查,以确保输入的小时在[0,23]范围内。继续询问用户,直到用户输入有效范围内的时间。 当我的程序有正确的整数输入(任何整数输入)时,它将正常工作。然而,如果我输入一个非整数,那么所有的东西都卡在一个无限循环中。 我做错了什么?

  • 我不确定我是否正确理解http-keep-alive,在我看来,它应该重用tcp连接,而不是构建一个新的连接。然而,我发现了一些非常奇怪的事情,似乎很难预料http keep-alive的行为。 服务器:NodeJS&Express^4.16.3,我使用Wireshark分析结果 情况1: null 客户端 null 情况2: null 结果:建立了另外5个tcp连接(在图片中只有4个,因为屏幕截

  • 我以前非常成功地使用了JMS的Spring集成,但是我们现在使用RabbitMQ/AMQP,并且在错误处理方面有一些问题。 我有一个int-amqp: inbinding-Channel适配器,带有一个设置为接收任何异常的错误通道,这里有一个错误转换器类检查失败的消息的原因异常。然后根据异常的类型:- > 抑制异常并转换为JSON对象,该对象可以作为解释故障的业务回复转到AMQP出站通道适配器。在