Hello,
I am trying to record something, but I get an error in the setup with my AVAudioRecorder:
Cannot invoke initializer for type 'AVAudioRecorder' with an argument list of type '(url: NSURL, settings: [String : Any], error: inout NSError?)'
I'm not sure whats wrong here. Heres my code:
var soundRecorder = AVAudioRecorder() var soundPlayer = AVAudioPlayer() var fileName = "audioFile.m4a" override func viewDidLoad() { super.viewDidLoad() / } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() / } func setupRecorder() { var recordSettings = [ AVFormatIDKey : kAudioFormatAppleLossless, AVEncoderAudioQualityKey : AVAudioQuality.max.rawValue, AVEncoderBitRateKey: 320000, AVNumberOfChannelsKey : 2, AVSampleRateKey : 44100.0 ] as [String : Any] var error : NSError? soundRecorder = AVAudioRecorder(url: getFileURL(), settings: recordSettings, error: &error) } func getCacheDirectory() -> String{ let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) return paths[0] } func getFileURL() -> NSURL{ let path = getCacheDirectory().appending(fileName) let filePath = NSURL(fileURLWithPath: path) return filePath }
THANKS FOR HELPING!
I'm using Xcode Version 8.2.1 and Swift 3.
OK. In that case it seems like you’ve not done your Swift 3 conversion properly. Specifically, on line 24 you’re creating an
AVAudioRecorder
as if you were programming in Swift 2. Swift 3 imports this
AVAudioRecorder
initialiser as:
init(url: URL, settings: [String : Any]) throws
which means you need to:
Call it with a Swift 3
value, rather than the NSURL returned byURL
getFileURL()
Handle any potential error using Swift’s error handling mechanism
The best way to fix the first point is to rewrite lines 27 through 35 to use
URL
. Here’s how you’d do the equivalent in Swift 3:
let fileName = "audioFile.m4a" let docDirURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) let fileURL = docDirURL.appendingPathComponent(fileName)
Share and Enjoy
—
Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware
let myEmail = "eskimo" + "1" + "@apple.com"