2014-11-10 1 views
2

Итак, мой код ниже должен воспроизводить файл chimes.wav снова и снова, с более высоким шагом, но с ошибкой внизу. Может ли кто-нибудь найти причину этой ошибки?Swift AVAudioEngine crash: игрок запускается, когда в отключенном состоянии

import UIKit 
import AVFoundation 
class aboutViewController: UIViewController { 


    var audioEngine: AVAudioEngine = AVAudioEngine() 
    var audioFilePlayer: AVAudioPlayerNode = AVAudioPlayerNode() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 



     var timePitch = AVAudioUnitTimePitch() 
     timePitch.pitch = 2000 
     let filePath: String = NSBundle.mainBundle().pathForResource("chimes", ofType: "wav")! 
     let fileURL: NSURL = NSURL(fileURLWithPath: filePath)! 
     let audioFile = AVAudioFile(forReading: fileURL, error: nil) 
     let audioFormat = audioFile.processingFormat 
     let audioFrameCount = UInt32(audioFile.length) 
     let audioFileBuffer = AVAudioPCMBuffer(PCMFormat: audioFormat, frameCapacity: audioFrameCount) 
     audioFile.readIntoBuffer(audioFileBuffer, error: nil) 

     var mainMixer = audioEngine.mainMixerNode 
     audioEngine.attachNode(audioFilePlayer) 
     audioEngine.attachNode(timePitch) 
     audioEngine.connect(audioFilePlayer, to:mainMixer, format: audioFileBuffer.format) 
     audioEngine.connect(timePitch, to: audioEngine.outputNode, format: audioFile.processingFormat) 


     audioEngine.startAndReturnError(nil) 

     audioFilePlayer.play() 

     audioFilePlayer.scheduleFile(audioFile, atTime: nil, completionHandler: nil) 
     audioFilePlayer.scheduleBuffer(audioFileBuffer, atTime: nil, options:.Loops, completionHandler: nil) 

    } 

2014-11-10 18: 34: 37,746 колокольчики [2350: 108235] **** Согласующих приложение из-за неперехваченное исключение 'com.apple.coreaudio.avfaudio', причина: «игрок начал, когда в отключенное состояние» **** Первый стек бросить вызов: (0x185f01e48 0x1965f40e4 0x185f01d08 0x1848726c0 0x18489a33c 0x18489975c 0x10009e638 0x10009e858 0x18a6b0e84 0x18a6b0b94 0x18a853ad4 0x18a765310 0x18a7650dc 0x18a76505c 0x18a6ada2c 0x18a005994 0x18a000564 0x18a000408 0x189fffc08 0x189fff98c 0x189ff93bc 0x185eba14c 0x185eb70d8 0x185eb74b8 0x185de51f4 0x18ef7b5a4 0x18a716784 0x1000a54f8 0x1000a5538 0x196c62a08) Libc + + abi.dylib: завершение с неперехваченным исключением типа NSException (lldb)

ответ

6

Утверждение: «игрок, запущенный, когда в отключенном состоянии» указывает, что существует проблема с цепочкой соединений. Это означает, что либо узлы не были привязаны к движку, либо узлы не были связаны друг с другом должным образом. Поскольку оба узла audioFilePlayer и узлы timePitch были прикреплены, мое впечатление было бы сказать, что проблема заключается в этих двух строках:

audioEngine.connect(audioFilePlayer, to:mainMixer, format: audioFileBuffer.format) 
audioEngine.connect(timePitch, to: audioEngine.outputNode, format: audioFile.processingFormat) 

соединение должно связать все компоненты вместе:

audioFilePlayer -> timePitch -> audioEngine.mainMixerNode (или outputNode)

Так соединение должно выглядеть следующим образом:

audioEngine.connect(audioFilePlayer, to:timePitch, format: audioFile.processingFormat) 
audioEngine.connect(timePitch, to: audioEngine.outputNode, format: audioFile.processingFormat) 

Надеюсь, это поможет.

+0

Отлично! Я подключил плеер к основному микшеру и получил ту же ошибку. Я подключил плеер к выходному узлу и зоопарку двигателей! это сработало. – Josh