Search code examples
swiftavfoundationwatchkitwatchos

Recording audio on WatchOS over AVAudioRecorder


Is there any sample code or tutorials about that? I've found that AVAudioRecorder supported since WatchOS 4.0 https://developer.apple.com/documentation/avfoundation/avaudiorecorder. But when I am trying to use it - it records 1 second and no actual sound (just noise).

Here is my code:

let audioURL = self.getRecordedFileURL()
print(audioURL.absoluteString)

let settings = [
  AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
  AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]

do {
  recorder = try AVAudioRecorder(url: audioURL, settings: settings)
  recorder?.delegate = self
  recorder?.record()
} catch {
  finishRecording(success: false)
}

Also, should I use AudioSession here? If yes, is it required requestRecordPermission and how do deal with it? Thank you for your help!


Solution

  • This one works:

        let recordingName = "audio.m4a"
        let dirPath = getDirectory()
        let pathArray = [dirPath, recordingName]
        guard let filePath = URL(string: pathArray.joined(separator: "/")) else { return }
    
        let settings = [AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
                        AVSampleRateKey:12000,
                        AVNumberOfChannelsKey:1,
                        AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
        ]
    
        //start recording
        do {
            audioRecorder = try AVAudioRecorder(url: filePath, settings: settings)
            audioRecorder.delegate = self
            audioRecorder.record()
        } catch {
            print("Recording Failed")
        }
    func getDirectory()-> String {
        let dirPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        return dirPath
    }
    

    Don't forget to add NSMicrophoneUsageDescription into your phone companion app Info.plist.