2016-07-12 17 views
2

私は、Androidノイズデバイスを使用して複雑なデジタル信号処理分析を実行し、いくつかのメトリックを計算するコミュニティノイズの苦情を記録する研究プロジェクトに取り組んでいます。アンドロイドデバイスのマイクを調整する方法

私の監督は、コミュニティに配信する前にアンドロイドデバイスのマイクを調整するように指示しました。私はそれを行うプログラム的な方法があるかどうか疑問に思っていた。

キャリブレーションはなぜですか?

アンドロイドデバイスのマイクの感度は、他のデバイスと異なる場合があります。同じ会社のメーカーでさえ、彼らの感性についてはコメントできません。

アンドロイドデバイスでは60dBの音が記録され、別のデバイスでは同じ環境と同じ条件下で70dBの音が同時に録音される可能性があります。

私はかなりの環境で録音を行い、それに続いてノイズの多い環境で録音することを考えていました。ゲインは必要に応じて調整することができます。私はまだこれについて明確ではない。

これを行うプログラム的な方法はありますか?

これに関するお手伝いをさせていただきます。

+0

[外部マイクデバイスをキャリブレーションする方法は?](http://stackoverflow.com/questions/38336768/how-to-calibrate-an-external-microphone-device)ちょうどほぼ同じ質問をしました。おそらく、このものからいくつかの詳細を以前のものに追加してください。 – hotpaw2

+0

うん。私がこの質問を投稿した理由は、それがアンドロイドスマートフォンのマイクをキャリブレーションすることにあるからです。録音を行う前に、環境内のマイクを自動的に校正するためのスクリプトを書く必要があるので、私はこの質問が私が尋ねたものとは異なると感じています。 – aditya

答えて

0

私は最終的にAndroid携帯電話のマイクの感度を調整する方法を見つけました。

以下は、AndroidのMediaRecorderクラスを使用してdB値として振幅を生成するコードです。

import android.media.MediaRecorder; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import java.io.IOException; 
import java.util.Timer; 
import java.util.TimerTask; 

public class RecordingAudioThreshold extends AppCompatActivity { 

    // This class generates the spectrogram of a wav file 
    private MediaRecorder mediaRecorder = null; 
    private Timer timerThread; 
    private Button startRecording, stopRecording; 
    private TextView recordingThreshold, recordingThresholdDB; 
    int amplitude = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_generate_spectrogram); 

     // Initialize the timer (used to cancel the thread if it's not running). 
     timerThread = new Timer(); 

     // Method to calibrate the microphone 
     startRecording = (Button) findViewById(R.id.button_startRecording); 
     stopRecording = (Button) findViewById(R.id.button_stopRecording); 
     recordingThreshold = (TextView) findViewById(R.id.textView_threshold); 
     recordingThresholdDB = (TextView) findViewById(R.id.textView_thresholdDB); 

     startRecording.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mediaRecorder = new MediaRecorder(); 
       mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
       mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
       mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
       mediaRecorder.setOutputFile("/dev/null"); 

       try { 
        mediaRecorder.prepare(); 
        mediaRecorder.start(); 
        System.out.println("Started Recording using Media Recorder"); 
       } catch (IOException e) { 
        System.out.println("Exception while recording of type : " + e.toString()); 
       } 

       // start the timer to print the recorded values 
       timerThread.schedule(new TimerTask() { 
        @Override 
        public void run() { 
         amplitude = mediaRecorder.getMaxAmplitude(); 
         recordingThreshold.post(new Runnable() { 
          @Override 
          public void run() { 
           recordingThreshold.setText("The recorded value is : " + amplitude); 
          } 
         }); 
         recordingThresholdDB.post(new Runnable() { 
          @Override 
          public void run() { 
           recordingThresholdDB.setText("The decibel value is : " + 20 * Math.log10(amplitude)); 
          } 
         }); 
        } 
       }, 0, 500); 
      } 
     }); 

     stopRecording.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       timerThread.cancel(); 
       if (mediaRecorder != null) { 
        mediaRecorder.release(); 
        mediaRecorder = null; 
       } 
       recordingThreshold.setText("Calibration complete."); 
       recordingThresholdDB.setText("Calibration complete."); 
      } 
     }); 
    } 
} 

マイクの感度を調整する方法は2通りあります。 1つの方法は、較正されたオーディオ記録装置を使用することであり、第2の方法は、既知の値のサウンドを生成することである。

携帯電話のマイクと較正されたオーディオ録音機器で測定されたdB単位の音量を測定し、ゲインを調整します。

既知の値の音を作り、ゲインを調整します。

どちらも本当にうまく動作しますが、録音機器を使用することをおすすめします。