Xcode 8.0 beta3 AVAudioRecorder(url, настройка) перехват ошибок - "Ошибка Domain=NSOSStatusErrorDomain Code=-50 "(null)""

Я пытаюсь записать голос пользователя и изменить его на текстовые данные. Я использовал AVAudioRecorder для записи звука и SpeechKit, чтобы изменить его на текст, который включен в iOS 10. Когда пользователь нажимает кнопку вниз, запись начинается и останавливается, когда кнопка нажата. Но когда я инициализирую AVAudioRecorder с использованием синтаксиса do catch, происходит ошибка и происходит сбой. Я добавил соответствующие фреймворки (Speech, AVFoundation).

import UIKit
import Speech
import AVFoundation

class SearchViewController: UIViewController, CLLocationManagerDelegate, AVAudioRecorderDelegate {

    var audioRecorder = AVAudioRecorder()

    let recordSettings = [AVSampleRateKey : String(NSNumber(value: Float(44100.0))),
                      AVFormatIDKey : String(kAudioFileCAFType),
                      AVNumberOfChannelsKey : String(NSNumber(value: 2))]

@IBAction func recordButtonDown(_ sender: AnyObject) {

    print("recordButtonDown")

    self.audioPlayer.play()
    sleep(1)

    let fileManager = FileManager.default
    let paths = fileManager.urlsForDirectory(.documentDirectory, inDomains: .userDomainMask)
    var audioURL = paths[0] as NSURL
    audioURL = audioURL.appendingPathComponent("soundForMapSearch.caf", isDirectory: false)!

    do {
        self.audioRecorder = try AVAudioRecorder(url: soundFileURL as URL, settings: self.recordSettings)
        self.audioRecorder.delegate = self
        self.audioRecorder.prepareToRecord()
        self.audioRecorder.record()
    } catch (let error) {
        print("Error: \(error)")
    }
}

@IBAction func recordButtonUp(_ sender: AnyObject) {
    self.audioRecorder.stop()
}

override func viewDidLoad() {
    super.viewDidLoad()

    do {
    try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
    try audioSession.setActive(true)
    audioSession.requestRecordPermission({ (recordPermission) in
        })
    } catch {
        print("record initiallizing failed")
    }

И на линии

self.audioRecorder = try AVAudioRecorder(url: soundFileURL as URL, settings: self.recordSettings)

ошибка происходит при улове

Error: Error Domain=NSOSStatusErrorDomain Code=-50 "(null)"

печатается. Я искал эту ошибку, и код =-50 означает, что объект NSURL недействителен. Как я могу решить эту ошибку?

1 ответ

Мой рабочий код

        let recordingName = "recording1" + ".m4a"
        let pathArray = [dirPath, recordingName]
        print(pathArray)
        let filePath = NSURL.fileURL(withPathComponents: pathArray)
        print(filePath)


        do{


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


    } catch {

    assertionFailure("AVAudioSession setup error: \(error)")
    }

        let recordSettings: [String: AnyObject] = [
            AVFormatIDKey: NSNumber(value: kAudioFormatMPEG4AAC),
            AVSampleRateKey: 44100.0,
            AVNumberOfChannelsKey: 1,
            ]

        try! audioRecorder = AVAudioRecorder(url: filePath!, settings: recordSettings)


        audioRecorder.delegate = self
        audioRecorder.isMeteringEnabled = true
        audioRecorder.prepareToRecord()
        audioRecorder.record()
Другие вопросы по тегам