2017-03-05 13 views
2

私はこの問題に苦しんでいます。録音ファイルサイズを小さくするためにビットレートを変更しました。私のアプリケーションはオーディオファイルをサーバーに正しくポストしましたが、ファイルサイズを最小限に抑えたいのですが、これは録音コードAudioRecordのファイルサイズが少し大きい

private void startRecording() throws IOException { 

     String state = android.os.Environment.getExternalStorageState(); 
     if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) { 
      throw new IOException("No SD mounted. It is" + state 
        + "."); 

     } 

     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setAudioSamplingRate(44100); 
     mRecorder.setAudioEncodingBitRate(44100); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 


     File path = new File(Environment.getExternalStorageDirectory() 
       .getPath()); 

     if (!path.exists() && !path.mkdirs()) { 
      throw new IOException("The file directory is invalid."); 
     }else{ 

      try { 
       archivo = File.createTempFile("audio", ".3gp", path); 
      } catch (IOException e) { 
      } 

     } 

     mRecorder.setOutputFile(archivo.getAbsolutePath()); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 


     try { 
      mRecorder.prepare(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 

     mRecorder.start(); 


    } 

私は今1分間の記録のために336キロバイトのように取得しています、私は にしたいの周りの100にそれを減らす - あまりに 多くの品質

+0

2)はモノラル1チャンネルを使用します1分あたりではなく、1秒あたりに必要な合理的なオーディオ品質を達成するために、(100〜200kb /分)を要求しています...これは、モバイルの純粋な情報理論をストリーミングすることとは関係ありません... 2つ目はオーディオカーブの耳がぎくしゃくしにくいことを意味します...増加したビットレートまたは品質の低下を受け入れるか...サンプルあたり16ビットの標準的なデフォルト値ではなく、サンプルあたり8のビット深度を試すことをお勧めします、モノチャンネル –

+0

こんにちは@ScottStensland私は値を変更しましたdのコンプレッサーと私は生きている335キロビット/分、rasonableとまだ良い品質です –

+0

物事は、主に私はテロバイトやオーディオの月あたりのGBのように浪費したくないソースとしてオーディオを使用するアプリのために、私はそこにあると思う別の方法です@ScottStensland –

答えて

1

のカップルを失うことなく、毎分200キロバイトあなたが試すことができるもの。

1)は、より高い圧縮のためにAMR(適応マルチレート)を使用する:

recorder.setAudioEncoder(mRecorder.AudioEncoder.AMR_NB); 

AMR広帯域および狭帯域AMR通話のためにデバイスによって使用される符号化方法です。あなたが要求する品質を持っていない可能性があります。私はあなたがビットレートあなたにオーディオをレンダリングすることができ、そこから任意のコーデック(AAC、MP3、FLAC、...)のオーディオファイルを見つけるためにあなたに挑戦

mRecorder.setAudioChannels (1) 

// Sets the number of audio channels for recording. Call this method before 
// prepare(). 
// Usually it is either 1 (mono) or 2 (stereo). 
+0

品質が損なわれていますが、私はそれが欲しいのではありません:( –

+0

サンプルあたり16ビットの標準デフォルトの代わりに8のビット深度を使用する方法を示す項目(3)を追加できます –

+0

AudioFormat ENCODING_PCM_8BITとENCODING_PCM_16BITを設定することができます。 AudioTrackとAudioRecordでこれを使用することができます。これはMediaRecorderでは使用できない可能性があります。また、一部のデバイスで8ビット/サンプルがうまく動作しないことがあります。 –

関連する問題