AVAudioPlayer.play()有效,但AVAudioPlayerNode.play()引发异常

时间:2019-07-18 10:27:40

标签: swift macos avfoundation avaudioengine avaudioplayernode

我有以下Swift操场代码,可使用AVAudioPlayerNode播放音频文件。

import AVFoundation
import Foundation

NSSetUncaughtExceptionHandler { exception in
    print("Exception thrown: \(exception)")
}

var filePath = "/Users/fractor/Desktop/TestFile.mp3"
let file : AVAudioFile
do {
    file = try AVAudioFile(forReading: URL(fileURLWithPath: filePath))
} catch let error {
    print(error.localizedDescription)
    throw error
}

let audioEngine = AVAudioEngine()
let playerNode = AVAudioPlayerNode()
audioEngine.attach(playerNode)
audioEngine.connect(playerNode, to: audioEngine.outputNode, format: file.processingFormat);

do {
    try audioEngine.start()
} catch let error {
    print(error.localizedDescription)
    throw error
}

playerNode.scheduleFile(file, at: nil){}
playerNode.play();

当使用内置扬声器或连接到UE Wonderboom蓝牙扬声器时,这在我的Mac mini上可以正常工作。但是,当连接到UE Boom 2蓝牙扬声器时,它会失败并发生异常。

我尝试使用的所有扬声器(包括UE Boom 2)使用AVAudioPlayer都可以正常工作。

异常消息是“引擎未运行时玩家开始播放”,但是插入打印命令表明引擎在调用playerNode.play()之前正在运行。

这是堆栈跟踪的一部分。

Stack trace

在这种情况下EXC_BAD_INSTRUCTION表示什么?

AVAudioPlayer对于我正在开发的应用程序还不够。问题是什么? AVAudioPlayerNode是否需要某些扬声器驱动程序的支持与AVAudioPlayer需要的支持不同?有没有一种方法可以进一步诊断?我还能做些其他事情吗?还是需要与扬声器制造商取得联系?

0 个答案:

没有答案