2016-12-12 6 views
0

Моя полная реализация EZAudio:EZAudio не работает: Резьба1 EXC_BAD_ACCESS при создании экземпляра EZRecorder

class ViewController: UIViewController, EZMicrophoneDelegate, EZRecorderDelegate { 

    @IBOutlet var recordingAudioPlot: EZAudioPlot! 

    private var isRecording = false { 

     didSet { 

      if isRecording { 

       player.pause() 
       recordingAudioPlot.clear() 
       microphone.startFetchingAudio() 
       recorder = EZRecorder(url: filePathUrl(), clientFormat: microphone.audioStreamBasicDescription(), fileType: EZRecorderFileType.M4A, delegate: self) 
       // ** Here is where the error occurs ** 

      } else { 

       recorder.delegate = nil 
       microphone.stopFetchingAudio() 
       recorder.closeAudioFile() 

       player.playAudioFile(EZAudioFile(url: filePathUrl())) 
      } 
     } 
    } 
    private var microphone = EZMicrophone() 
    private var recorder = EZRecorder() 
    private var player = EZAudioPlayer() 

    @IBAction func startStopRecordingButtonTapped(_ sender: UIButton) { 
     isRecording = !isRecording 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let session = AVAudioSession.sharedInstance() 
     try! session.setCategory(AVAudioSessionCategoryPlayAndRecord) 
     try! session.setActive(true) 

     microphone.delegate = self 

     try! session.overrideOutputAudioPort(.speaker) 
    } 

    func microphone(_ microphone: EZMicrophone!, hasAudioReceived buffer: UnsafeMutablePointer<UnsafeMutablePointer<Float>?>!, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) { 

     DispatchQueue.main.async { 
      self.recordingAudioPlot.updateBuffer(buffer[0], withBufferSize: bufferSize) 
     } 
    } 

    func microphone(_ microphone: EZMicrophone!, hasBufferList bufferList: UnsafeMutablePointer<AudioBufferList>!, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) { 

     if isRecording { 
      recorder.appendData(from: bufferList, withBufferSize: bufferSize) 
     } 
    } 

    private func filePathUrl() -> URL { 

     let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first ?? "" 

     return URL(fileURLWithPath: String(format: "%@/%@", path, "pathtofile.m4a")) 
    } 
} 

Ошибка заключается в следующем:

enter image description here Что идет не так?

+0

Вы проверили, что все переменные установлены правильно, особенно filePathURL и asbd? – Volker

+0

filePathUrl правильно ... что такое asbd? –

+0

audiostreambasicdescription ... второй параметр, в общем: вы пытаетесь получить доступ к объекту по адресу памяти, который уже не существует в этом контексте ... поэтому проверьте, какой из различных объектов, возможно, не существует ... должно быть легко делать в xcodes отладчик view – Volker

ответ

0

Решение объявить recorder в качестве дополнительного типа, а не экземпляр:

private var recorder: EZRecorder? 

Что-то происходит, когда первый раз он пытается освободить первый инициализированному рекордер ... но теперь есть nil поэтому ошибка Безразлично» т существует.