ios - 关于AVAudioRecorder录音失败的问题
高洛峰
高洛峰 2017-04-17 14:56:03
0
2
1238
- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *dirPath=NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
    NSString *docPath=[dirPath objectAtIndex:0];
    NSString *filePath=[docPath stringByAppendingPathComponent:@"test1.wav"];
    _url=[NSURL URLWithString:filePath];

    NSDictionary *recordSettings=[NSDictionary dictionaryWithObjectsAndKeys:
          [NSNumber numberWithInt:AVAudioQualityMin],
          AVEncoderAudioQualityKey,
          [NSNumber numberWithInt:16],
          AVEncoderBitRateKey,
          [NSNumber numberWithInt:2],
          AVNumberOfChannelsKey,
          [NSNumber numberWithFloat:44100.0],
          AVSampleRateKey,
          nil];
    NSError *error;
    //AVAudioRecorder *recorder;
    //AVAudioPlayer *player;

    _player=[[AVAudioPlayer alloc] initWithContentsOfURL:_url error:&error];
    _recorder=[[AVAudioRecorder alloc] initWithURL:_url settings:recordSettings error:nil];
    if (error) {
        NSLog(@"%@",[error localizedDescription]);
    }else{
        [_recorder prepareToRecord];
    }
}

调试的时候显示_player的值为nil,还有报错: The operation couldn’t be completed. (OSStatus error 2003334207.)我没在网上找到答案。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(2)
黄舟

_player的值為nil,這個應該是Xcode的BUG導致的,你如果用NSLog輸出,_player應該是有值的。

  1. 記得給AVAudioRecorder設定代理
  2. iOS7以上版本,增加了對錄音功能的權限控制。你需要先判斷應用程式有沒有錄音權限,如果應用程式不具備錄音權限,提示使用者開啟。
    ,判斷方法:
objectivec/// 新增API,获取录音权限. 返回值,YES为无拒绝,NO为拒绝录音.
+ (BOOL)canRecord
{
    __block BOOL bCanRecord = YES;
    if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 7.0) {
        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
            [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
                if (granted) {
                    bCanRecord = YES;
                } else {
                    bCanRecord = NO;
                }
            }];
        }
    }
    return bCanRecord;
}
  1. 以下程式碼讓設備開啟錄音模式:
objectivecAVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[audioSession setActive:YES error:nil];
小葫芦

樓主,解決了嘛?我也遇到同樣問題,估計是轉wav格式出錯了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板