AVAudioEngine()播放不起作用

时间:2015-11-19 19:59:18

标签: ios xcode swift

我试图使用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)
  

'类型的值没有成员'。

当我删除此行时,我收到以下错误:

  

' AVAudioPlayerNode.mm:333:开始:必需条件为false:   _engine-> IsRunning()由于未捕获的异常终止应用程序' com.apple.coreaudio.avfaudio',原因:'必需条件为false:   _engine-> IsRunning()''

非常感谢任何帮助。我在xCode和单个视图应用程序中使用Swift。

2 个答案:

答案 0 :(得分:3)

错误是引擎没有运行。你需要像这样重新安排你的操作......

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()

答案 1 :(得分:-1)

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