2012-05-14 14 views
8

MICからサウンドを録音し、ライブグラフを描こうとしています。私はグラフを記録し描画することができます。問題は、以下のコードを使って記録された値が正確ではないなどのことです。下の画像は、すべてのサウンドが存在しないときの結果です。私はfftを使用した例を見たことがありますが、私は時間領域のグラフを描こうとしていて、それを周波数領域(今のところ)に変換する目的がないので、私の場合はそれが助けになるかどうかは分かりません。他の人は平均的なパワーを使用していますが、これは参考になるかもしれませんが、わかりません。アンドロイドのAudioRecord振幅読み取り

ありがとうございました。

enter image description here

bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING); 

    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 
      RECORDER_SAMPLERATE, RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING, bufferSize); 

    short data [] = new short[bufferSize]; 

    while (!Thread.interrupted()) { 

     recorder.startRecording(); 

     recorder.read(data, 0, bufferSize); 

     recorder.stop(); 

     for (short s : data) 
     { 
      try { 
       Thread.sleep((long) 300.00); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      postUI (Math.abs(s)); 
     } 
    } 

    recorder.release(); 
+0

ハイテクをチェックアウトする方法あなたは –

+1

レコーダー=新しいaudiorecordの(MediaRecorder.AudioSource.MICを助けてくださいaudiorecorderで音の振幅を手に入れました、 RECORDER_SAMPLERATE、RECORDER_CHANNELS、RECORDER_AUDIO_ENCODING、bufferSize); recorder.startRecording(); \t \t \t recorder.read(data、0、bufferSize); \t \t \t recorder.stop(); for(short s:data) { average + = Math.abs(s); } – user591124

答えて

12

これを行う方法を探している誰のために、Samsung's fantastic example complete with source code

Samsung example

+2

私はこれを使っていますが、私のデバイスが少なくとも7,000のボリュームを登録できるにもかかわらず、サムスンは(間違って)最大ボリュームを "4,000"に任意に設定しています。 –

+0

Hey @KeirSimmonsの値はデバイスによって異なります。 – Gourneau

1

高いサンプリングレートを使用してみてください。最大値は48000ですが、44100が標準です。

また、マイクは背景ノイズを記録している可能性があります。

+0

私は、abs(s)ではなく、short配列のすべての値の平均をとりました。それはうまく動作します。 – user591124

関連する問題