Я пытаюсь записать звук гоночного велосипеда и проанализировать записанный звук с помощью FFT и найти частоту двигателей. Если я только свистеть, все работает нормально, я могу видеть четкий график, который соответствует моему свистунию низко и высоко и так далее. Я создаю тепловую карту с разными цветами для разных амплитуд, которые я получаю от БПФ для частоты и времени. Аудио получает записывается так:Android: уровень громкости микрофона (возможно), автоматический коэффициент усиления, FFT, Butterworth, Audacity
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-карте. Чтобы уменьшить данные i, пройдите через i2 и запишите только один раз в i2 = 0 ... 10; В следующей части приложения я разрешаю пользователю вырезать часть аудиоданных и загружать только эту часть в вектор под названием trimmed. Затем я делаю БПФ этих частот. Но похоже, что в данных есть только овердрайв.
Можно ли активировать автоматическое усиление для микрофона во время записи?
Как загрузить записанные и сохраненные аудиоданные в Audacity? (я пробовал различные параметры импорта для необработанных данных, но это не похоже на работу) Here is an example file
Я реализовал фильтр Баттерворта, если я получил это право фильтр должен быть применен перед FFT?
Просто идея, было бы достаточно, чтобы вызвать audiorecord.start audiorecord.stop в цикле while (start), чтобы получить выигрыш от микрофона? Не пытаясь понять, что это приведет к быстроте. – user1222353
ответил на мой комментарий: его слишком медленно, к несчастью – user1222353