Android MediaRecorderでオーディオを録画する方法

5562 ワード

最近のプロジェクトでは録音アップロードのニーズがあるので、AudioRecordとMediaRecorderの2つの実装案を検討してみましたが、AudioRecorderよりもMediaRecorderの方が簡単で便利なので、最後にMediaRecorderをベースに録音ツール類を作成することにしました.
  • まずMediaRecorder
  • をインスタンス化する
           ,    MediaRecorder
     if (isRecording) {
                mRecorder.release();
                mRecorder = null;
            }
     mRecorder = MediaRecorder();
    
  • オーディオソース
  • を設定する.
    このメソッドを呼び出さないと、出力ファイルにはトラックが含まれず、録画パラメータまたはエンコーダを設定する前に呼び出され、setOutputFormat()までに呼び出されます.
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    
  • 出力フォーマット
  • を設定する.setAudioSource()以降、prepare()より前に呼び出す録画出力ファイルフォーマットを設定します.
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    

    はい、見間違いはありませんでしたが、iOSの録音も再生できるように仕方なくMP 4形式を選びました.
  • オーディオ符号化フォーマット
  • を設定する.
    録画に使用するオーディオエンコーダを設定します.このメソッドが呼び出されていない場合、出力ファイルにはトラックが含まれません.このメソッドは、setOutputFormat()の後に呼び出されるが、prepare()の前に呼び出される.
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    
  • サンプリングレート
  • を設定する.
    録音したオーディオサンプリングレートを設定します.このメソッドは、prepare()の前に呼び出される.Prepare()は、指定されたオーディオサンプリングレートが適用されるかどうかを決定するために、パラメータについて追加のチェックを実行することができる.サンプリングレートは、実際には、録音のフォーマットやプラットフォームの機能に依存します.例えば、AACオーディオ符号化規格でサポートされているサンプリングレートは8〜96 kHz、AMRNBでサポートされているサンプリングレートは8 kHz、AMRWBでサポートされているサンプリングレートは16 kHzである.サポートされるオーディオサンプリングレートについては、関連するオーディオ符号化規格を参照してください.
    mRecorder.setAudioSamplingRate(8000);
    
  • 出力の経路
  • を設定する.
    この方法はsetOutputFormat()の後prepare()の前に書きます
    filePath = getCacheFilePath(context, fileName + ".mp3");             
    mRecorder.setOutputFile(filePath);
    
  • には他にもいくつかのパラメータがありますが、私は使用していません.詳細は公式のドキュメント
  • を参照してください.
    https://developer.android.google.cn/reference/android/media/MediaRecorder
  • は最後にprepare() start()の2つの方法を呼び出し、録音
  • を開始する.
    mRecorder.prepare();
    mRecorder.start();
    isRecording = true;
    
  • 録音停止
  • mRecorder.stop();
    mRecorder.reset();  
    mRecorder.release();
    
  • 注目すべき点
  • いくつかの非正常な操作、開始と終了、異常が発生する場合がありますので、try catchで異常をキャプチャして特殊な処理を行います.