AVAudioEngine()音频播放不起作用

3

我想使用 Swift 中的 AVAudioEngine() 更改声音的音调。这是我的代码:

func setUpEngine() {
    let fileString = NSBundle.mainBundle().pathForResource("400", ofType: "wav")
    let url = NSURL(fileURLWithPath: fileString!)
    do {
        try audioFile = AVAudioFile(forReading: url)
        print("done")
    }
    catch{

    }
}
var engine = AVAudioEngine()
var audioFile = AVAudioFile()
var audioPlayerNode = AVAudioPlayerNode()
var changeAudioUnitTime = AVAudioUnitTimePitch()
override func viewDidLoad() {
    setUpEngine()
    let defaults = NSUserDefaults.standardUserDefaults()
    audioPlayerNode.stop()
    engine.stop()
    engine.reset()
    engine.attachNode(audioPlayerNode)
    changeAudioUnitTime.pitch = 800
    engine.attachNode(changeAudioUnitTime)
    engine.connect(audioPlayerNode, to: changeAudioUnitTime, format: nil)
    engine.connect(changeAudioUnitTime, to: engine.outputNode, format: nil)
    audioPlayerNode.scheduleFile(audioFile, atTime: nil, completionHandler: nil)
    engine.startAndReturnError(nil)
    audioPlayerNode.play()

我的代码如下(我已经闭合了括号)。大部分代码都是从网上找到的,但是在

这一行出现了错误。
engine.startAndReturnError(nil)

当我删除这行代码时,会出现以下错误:“Value of type has no member”。任何帮助都将不胜感激。我在xCode中使用Swift和单个视图应用程序。此外,当我尝试启动AVAudioPlayerNode时,还会出现异常:“required condition is false:_engine - > IsRunning()”。
2个回答

4
错误在于引擎没有运行。您需要按照以下顺序重新排列操作...
setUpEngine()
let defaults = NSUserDefaults.standardUserDefaults()
engine.attachNode(audioPlayerNode)
engine.attachNode(changeAudioUnitTime)
engine.connect(audioPlayerNode, to: changeAudioUnitTime, format: nil)
engine.connect(changeAudioUnitTime, to: engine.outputNode, format: nil)
changeAudioUnitTime.pitch = 800
engine.prepare()    
engine.start()    
audioPlayerNode.scheduleFile(audioFile, atTime: nil, completionHandler: nil)
audioPlayerNode.play()

过了一段时间...
engine.stop()

0

这是因为您正在运行过时版本的XCode或不兼容的iOS版本。我曾经遇到过这个问题,在最新的Swift版本中,没有这样的方法,而是提供了.start()。


不兼容的iOS版本对我造成了困扰。 - bibscy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接