AVAudioRecorder swift 2

我有我的AVAudioRecorder工作,但自升级到AVAudioRecorder 2,我似乎无法弄清楚如何正确configuration它。 我不断收到一个错误说AVAudioRecorder初始值设定项不能被调用,但我提供的参数看起来是正确的。

 var recordSettings = [AVSampleRateKey : NSNumber(float: Float(44100.0)), AVFormatIDKey : NSNumber(int: Int32(kAudioFormatMPEG4AAC)), AVNumberOfChannelsKey : NSNumber(int: 1), AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.Medium.rawValue))] var recordingURL: NSURL? = nil var audioRecorder:AVAudioRecorder! func directoryURL() -> NSURL? { let fileManager = NSFileManager.defaultManager() let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) let documentDirectory = urls[0] as NSURL let soundURL = documentDirectory.URLByAppendingPathComponent("sound.m4a") return soundURL } @IBAction func recordPressed(sender: AnyObject) { let audioSession: AVAudioSession = AVAudioSession.sharedInstance() do { try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) } catch _ { } do { try audioSession.setActive(true) } catch _ { } var error: NSError? audioRecorder = AVAudioRecorder(URL: recordingURL, settings: recordSettings, error: &error) if let e = error { print(e.localizedDescription, terminator: "") } else { audioRecorder.record() self.stopButton.enabled = true self.playButton.enabled = false self.recordButton.enabled = false } } 

directoryURL是正确的,但它似乎误recordingURLrecordSettings也是一致的。 让我提供一个工作版本。

Swift 3

 var audioRecorder:AVAudioRecorder! let recordSettings = [ AVSampleRateKey : NSNumber(value: Float(44100.0)), AVFormatIDKey : NSNumber(value:Int32(kAudioFormatMPEG4AAC)), AVNumberOfChannelsKey : NSNumber(value: Int32(1)), AVEncoderAudioQualityKey : NSNumber(value: Int32(AVAudioQuality.medium.rawValue))] override func viewDidLoad() { super.viewDidLoad() let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) try audioRecorder = AVAudioRecorder(url: directoryURL()!, settings: recordSettings) audioRecorder.prepareToRecord() } catch {} } func directoryURL() -> URL? { let fileManager = FileManager.default let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask) let documentDirectory = urls[0] as URL let soundURL = documentDirectory.appendingPathComponent("sound.m4a") return soundURL } @IBAction func doRecordAction(_ sender: AnyObject) { if !audioRecorder.isRecording { let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setActive(true) audioRecorder.record() } catch {} } } @IBAction func doStopAction(_ sender: AnyObject) { audioRecorder.stop() let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setActive(false) } catch {} } 

遗产:斯威夫特2

 var audioRecorder:AVAudioRecorder! let recordSettings = [AVSampleRateKey : NSNumber(float: Float(44100.0)), AVFormatIDKey : NSNumber(int: Int32(kAudioFormatMPEG4AAC)), AVNumberOfChannelsKey : NSNumber(int: 1), AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.Medium.rawValue))] override func viewDidLoad() { super.viewDidLoad() let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) try audioRecorder = AVAudioRecorder(URL: self.directoryURL()!, settings: recordSettings) audioRecorder.prepareToRecord() } catch {} } func directoryURL() -> NSURL? { let fileManager = NSFileManager.defaultManager() let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) let documentDirectory = urls[0] as NSURL let soundURL = documentDirectory.URLByAppendingPathComponent("sound.m4a") return soundURL } @IBAction func doRecordAction(sender: AnyObject) { if !audioRecorder.recording { let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setActive(true) audioRecorder.record() } catch {} } } @IBAction func doStopAction(sender: AnyObject) { audioRecorder.stop() let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setActive(false) } catch {} } 

►在GitHub上find这个解决scheme和Swift Recipes的更多细节。