1
我正在使用this FFT庫對設備麥克風捕捉的聲音執行FFT。我正在使用以下代碼:在聲音文件上執行dtmf解碼器的FFT android
int bufferSize = AudioRecord.getMinBufferSize(frequency,
channelConfiguration, audioEncoding);
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.DEFAULT,
frequency, channelConfiguration, audioEncoding, bufferSize);
int bufferReadResult;
try {
audioRecord.startRecording();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.e("Recording failed", e.toString());
}
while (true) {
bufferReadResult = audioRecord.read(buffer, 0, blockSize);
if (isCancelled())
break;
boolean bln = false;
for (int i = 0; i < blockSize && i < bufferReadResult; i++) {
toTransform[i] = (double) buffer[i]/32768.0;
if (buffer[i] != 0) {
bln = true;
}
}
if (bln) {
transformer.ft(toTransform);
doStuff(toTransform);
} else {
try {
audioRecord = new AudioRecord(
MediaRecorder.AudioSource.DEFAULT, frequency,
channelConfiguration, audioEncoding, bufferSize);
audioRecord.startRecording();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.e("Recording failed", e.toString());
}
}
if (isCancelled())
break;
}
try {
audioRecord.stop();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.e("Stop failed", e.toString());
}
它適用於麥克風。但是我想對聲音文件進行這種轉換(在原始文件夾中)。我嘗試使用InputStreamReader讀取聲音文件內容,但是如何使用此文件數據對文件應用轉換?我嘗試使用以下代碼的緩衝區:
InputStream ins;
ByteArrayOutputStream outputStream;
int size = 0;
byte[] buffer = new byte[1024];
ins = getResources().openRawResource(R.raw.fire);
outputStream = new ByteArrayOutputStream();
transformer = new RealDoubleFFT(blockSize);
while ((size = ins.read(buffer, 0, 1024)) >= 0) {
outputStream.write(buffer, 0, size);
if (isCancelled())
break;
boolean bln = false;
for (int i = 0; i < buffer.length; i++) {
toTransform[i] = (double) buffer[i]/32768.0;
if (buffer[i] != 0) {
bln = true;
}
}
if (bln) {
transformer.ft(toTransform);
doStuff(toTransform);
}
}
ins.close();
但它沒有返回正確的數據。也許從文件收到的數據不是圖書館想要的。任何想法如何將FFT應用於聲音文件?
聲音文件的格式是什麼?聲音文件通常包含聲音信號之外的其他信息,例如聲音信號,這會混淆你的fft。 – cgew85 2014-12-03 15:04:33
您不能使用inputStreamReader,因爲該文件不是原始的二進制聲音。你需要在FFT之前解碼聲音。 – njzk2 2014-12-03 15:07:49
[計算來自音頻文件的FFT]的可能重複(http://stackoverflow.com/questions/17565269/calculate-fft-from-audio-file)(這個想法是,你必須先解碼wav文件) – njzk2 2014-12-03 15:10:52