我正在尝试使用 Swift 5 中的 AVAudioPlayer 实例从后台线程播放声音。大多数时候,它会成功。但有时音频播放器无法播放声音。
\n\n看起来好像连续调用 play() 两次,或者调用prepareToPlay() 然后连续调用 play() 以某种方式解决了问题,但这对我来说似乎不是一个好的解决方案,因为我担心这仍然不能解决问题不保证一定能播放成功。
\n\nfunc setUpAudio() {\n AVAudioSession.sharedInstance().perform(NSSelectorFromString("setCategory:error:"), with: AVAudioSession.Category.playback)\n try! AVAudioSession.sharedInstance().setActive(true)\n NotificationCenter.default.addObserver(self, selector: #selector(handleInterruption), name: AVAudioSession.interruptionNotification, object: nil)\n}\n\nfunc startNewAudio() {\n let destinationData = Destinations.getDestinations()\n var audio = destinationData[currentStop]!["audio"] as! String\n if inTransit {\n audio = destinationData[Paths.tourOrder[currentIndex + 1]]!["transit_audio"] as! String\n }\n let sound = NSURL(fileURLWithPath: Bundle.main.path(forResource: audio, ofType: "mp3", inDirectory: "audio")!)\n try! audioPlayer = AVAudioPlayer(contentsOf: sound as URL)\n audioPlayer.delegate = self\n currentTime = 0\n setPlay()\n}\n\nfunc setPlay() {\n paused = …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的问题,但我还没有\xe2\x80\x99t找到一个非常简单的答案:何时应该使用start_background_task()而不是启动Python线程\xe2\x80\x9cnormally\xe2\x80\x9d?Flask-SocketIO 文档指出:
\n\n\n\n\n该函数返回一个与Python标准库中的Thread类兼容的对象。该函数已调用该对象的 start() 方法。
\n
它并没有过多说明是否有必要在初始化和启动每个模块的线程时使用它threading。