gpt4 book ai didi

android - 如何校准安卓设备的麦克风

转载 作者:太空狗 更新时间:2023-10-29 14:47:28 25 4
gpt4 key购买 nike

我正在从事一个研究项目,该项目涉及使用 Android 设备记录社区噪音滋扰,以执行一些复杂的数字信号处理分析并计算一些指标。

我的主管指示我先校准 Android 设备的麦克风,然后再将它们分发到社区。我想知道是否有一种编程方式来做到这一点。

为什么要校准?

Android 设备的麦克风灵敏度可能与其他设备不同。即使是同一家公司的制造商也无法对其敏感性发表评论。

因此,很有可能在相同的环境和条件下,Android 设备可能会以 60 dB 的声音录制声音,而另一台设备可能会同时以 70 dB 的声音录制声音。

我在考虑以下几行 -> 在安静的环境中进行录音,然后在嘈杂的环境中进行录音。增益可以根据需要进行调整。这个我还不是很清楚。

是否有任何编程方式可以做到这一点?

非常感谢对此的任何帮助。

最佳答案

经过一番研究,我终于找到了一种校准 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.");
}
});
}
}

现在有两种方法可以调整麦克风的灵敏度。一种方法是使用经过校准的录音设备,第二种方法是生成已知值的声音。

测量手机麦克风和校准录音设备测量的音量(以 dB 为单位)并调整增益。

产生已知值的声音并调整增益。

两者都很好用,但我更喜欢使用录音设备。

关于android - 如何校准安卓设备的麦克风,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38339677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com