AVAudioRecorder Won't Record On Device

折月煮酒 提交于 2019-11-30 14:51:20

If anywhere in your code you have this setup:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

Change it to:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

Setting the wrong AVAudioSession category will cause record/play to fail.

This is because you cannot modify the app-bundle on the device ( it is signed ). You can record to either the docs folder for your app, or the tmp directory.

Ok, solved my own question; I don't know why, but I have to record to the NSTemporaryDirectory when on a device. Changing that completely fixed it.

I had the exact same problem. It turns out I was bumping up against an incorrectly generated path statement. The AVAudioRecorder initialized fine - and without incident - but iOS simply would not allow me to write to it. Why? Check it out:

    /* The following code will fail - why? It fails because it is trying to write some path that is NOT accessible by
    this app.
NSString *recordedAudioPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) 
                                objectAtIndex:0] 
                               stringByAppendingString:@"recorded.caf"];
 */
// Correction:
NSString *recordedAudioPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) 
                               objectAtIndex:0];

recordedAudioPath = [recordedAudioPath stringByAppendingPathComponent:@"recorded.caf"];
NSURL *recordURL = [NSURL fileURLWithPath:recordedAudioPath];

This makes complete sense now. Thanks for steering me in the right direction.

Also, make sure your app is allowed to access the Microphone (ie in the iOS settings, scroll down and find your app, and it should have 'Microphone' which you need to switch to 'on')

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!