ios - 关于AVAudioRecorder录音失败的问题
高洛峰
高洛峰 2017-04-17 14:56:03
0
2
1274
- (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 のバグが原因であると考えられます。NSLog を使用して出力する場合、_player には値が必要です。

  • AVAudioRecorder のプロキシを忘れずに設定してください
  • iOS7 以降のバージョンでは、録音機能の許可制御が追加されました。まず、アプリケーションに記録権限があるかどうかを確認する必要があります。アプリケーションに記録権限がない場合は、アプリケーションを開くように要求します。
    、判定方法:
  • objectivec/// 記録許可を取得するための新しい API を追加しました。戻り値。YES は拒否なし、NO は記録の拒否を意味します。
    + (BOOL)canRecord
    {
        __block BOOL bCanRecord = YES;
        if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 7.0) {
            AVAudioSession *audioSession = [AVAudioSession 共有インスタンス];
            if ([audioSession ReplysToSelector:@selector(requestRecordPermission:)]) {
                [audioSession PerformSelector:@selector(requestRecordPermission:) withObject:^(BOOL 付与) {
                    (許可された場合) {
                        bCanRecord = はい;
                    } それ以外 {
                        bCanRecord = いいえ;
                    }
                }];
            }
        }
        bCanRecord を返します。
    }
    
  • 次のコードはデバイスを録音モードにします:
  • objectivecAVAudioSession *audioSession = [AVAudioSessionsharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord エラー:nil];
    [audioSession setActive:YES error:nil];
    
    いいねを押す +0
    小葫芦

    オーナーさん、解決しましたか?私も同じ問題に遭遇しました。wav 形式への変換時にエラーが発生したのだと思います。

    いいねを押す +0
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート