相关疑难解决方法(0)

如何在swift中使用后台线程?

如何在swift中使用线程?

dispatchOnMainThread:^{

    NSLog(@"Block Executed On %s", dispatch_queue_get_label(dispatch_get_current_queue()));

}];
Run Code Online (Sandbox Code Playgroud)

multithreading ios swift dispatch-queue

298
推荐指数
12
解决办法
23万
查看次数

AVAudioPlayer产生滞后播放音效

我正在使用SKTAudioRay Wenderlich在他的Github上提供的库.这是我为播放声音效果而修改的代码,我每次播放时都会调用它:

public func playSoundEffect(_ filename: String) {
    let url = Bundle.main.url(forResource: filename, withExtension: nil)
    if (url == nil) {
        print("Could not find file: \(filename)")
        return
    }
    if !UserDefaults.standard.bool(forKey: "soundOff"){
    var error: NSError? = nil
    do {
        soundEffectPlayer = try AVAudioPlayer(contentsOf: url!)
    } catch let error1 as NSError {
        error = error1
        soundEffectPlayer = nil
    }
    if let player = soundEffectPlayer {
        DispatchQueue.global(qos: .background).async {
            player.numberOfLoops = 0
            player.prepareToPlay()
            player.play()
        }
    } else {
        print("Could not create audio …
Run Code Online (Sandbox Code Playgroud)

xcode avaudioplayer ios sprite-kit swift

5
推荐指数
0
解决办法
661
查看次数

从后台线程播放 AVAudioPlayer 实例有时会失败

我正在尝试使用 Swift 5 中的 AVAudioPlayer 实例从后台线程播放声音。大多数时候,它会成功。但有时音频播放器无法播放声音。

\n\n

看起来好像连续调用 play() 两次,或者调用prepareToPlay() 然后连续调用 play() 以某种方式解决了问题,但这对我来说似乎不是一个好的解决方案,因为我担心这仍然不能解决问题不保证一定能播放成功。

\n\n
func 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)

avaudioplayer ios swift ios-multithreading dispatch-queue

3
推荐指数
1
解决办法
3960
查看次数