gpt4 book ai didi

Android:麦克风音量级别(可能)、自动增益、FFT、Butterworth、Audacity

转载 作者:行者123 更新时间:2023-11-29 13:59:10 24 4
gpt4 key购买 nike

我正在尝试录制赛车的声音并使用 FFT 分析录制的音频并找到引擎频率。如果我只吹口哨,一切正常,我可以看到一个清晰的图表,对应于我吹口哨的高低等等。我为从频率与时间的 FFT 获得的不同振幅创建了一个具有不同颜色的热图。音频是这样录制的:

private class RecordAudio extends AsyncTask<Void, float[], Void> {
@Override
protected Void doInBackground(Void... params) {
try {
int bufferSize = AudioRecord.getMinBufferSize(sampleRateMain,
channelConfiguration, audioEncoding);
AudioRecord audioRecord = new AudioRecord(
MediaRecorder.AudioSource.DEFAULT, sampleRateMain,
channelConfiguration, audioEncoding, bufferSize);
short[] buffer = new short[blockSize];
audioRecord.startRecording();
float[] audioData = new float[blockSize];
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date());

BufferedWriter writer;
String pathtemp = Environment.getExternalStorageDirectory().getAbsolutePath();
String filename ="/"+currentDateandTime;
path = pathtemp +filename;
writer = new BufferedWriter (new FileWriter(path,false));
int i2=0;
while (started) {
if(i2==10){
datastructures tempdata = new datastructures();
i2=0;
audioRecord.read(buffer, 0, blockSize);
float sum = 0;
for (int i = 0; i < blockSize; i++) {
audioData[i] = (float) ( buffer[i]);
writer.write(audioData[i]+" ");
if (audioData[i] <= 0) {
audioData[i] = audioData[i] * (-1);
}
sum = sum + audioData[i];
}
writer.newLine();
tempdata.freqsum = sum;
mainData.add(tempdata);
}
i2++;
}
writer.close();
}
catch(IOException e){
e.printStackTrace();
}
audioRecord.stop();
} catch (Throwable t) {
Log.e(TAG, "Audio recording Failed");
}
return null;
}
}

所以我将音频数据存储在 SD 卡上。为了减少 i2 循环的数据,并且在 i2=0...10 中只记录一次;在应用程序的下一部分中,我让用户切掉一部分音频数据,并仅将这一部分加载到一个名为 trimmed 的向量中。然后我对这些频率进行 FFT。但似乎数据中只有超速。

是否可以在录音时触发麦克风的自动增益?

我如何将录制和保存的音频数据加载到 Audacity 中?(我为原始数据尝试了不同的导入设置,但它似乎不起作用) Here is an example file

我实现了一个巴特沃斯滤波器,如果我做对了,应该在 FFT 之前应用滤波器?

最佳答案

我无法回答您的麦克风增益问题,但至于您的滤波器问题:这取决于您如何实现滤波器。巴特沃斯滤波器通常通过 Z 变换实现为 IIR(无限脉冲响应,即滤波器的输出取决于先前的输出)滤波器 (recurrence relation) .如果您以这种方式实现滤波器,则应在进行 FFT 之前将滤波器应用于时域样本。

如果您需要一个滤波器,并且无论如何您都在进行 FFT,那么您最好通过卷积和 Convolution theorem 实现 FIR 滤波器。而不是使用 butterworth 或其他 s/z 域过滤器。

关于Android:麦克风音量级别(可能)、自动增益、FFT、Butterworth、Audacity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10427767/

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