2016-07-29 2 views
1

Ich versuche, die Stimme des Benutzers aufzuzeichnen und es in Textdaten zu ändern. Ich benutzte AVAudioRecorder, um den Ton und SpeechKit aufzuzeichnen, um es zu Text zu ändern, der in iOS 10 enthalten ist. Wenn der Benutzer die Schaltfläche aufbricht, startet und stoppt die Schaltfläche, wenn die Schaltfläche ausgebessert wird. Aber wenn ich den AVAudioRecorder mit Do Catch-Syntax initialisiere, tritt ein Fehler auf und schlägt fehl. Ich habe die entsprechenden Frameworks (Sprache, AVFoundation) hinzugefügt.Xcode 8.0 beta3 AVAudioRecorder (URL, Einstellung) Fehler Catch - "Fehler Domain = NSOSStatusErrorDomain Code = -50" (null) ""

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") 
    } 

Und auf der Leitung auftritt

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

Fehler bei catch

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

gedruckt wird. Ich habe nach diesem Fehler gesucht und code = -50 bedeutet, dass das NSURL-Objekt ungültig ist. Wie kann ich diesen Fehler beheben?

+0

Sollten Sie nicht Ihre 'audioURL' verwenden statt dessen' soundFileURL', dass wir nichts wissen? – Moritz

Antwort

1

meine Arbeits Code

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

Danke. Meine recordSetting war ungültig, also habe ich sie geändert. –

+0

Ich habe [String: Any] für recordSettings verwendet. Es war ein Problem auf meiner Seite. [String: AnyObject] funktioniert für mich. –

Verwandte Themen