我正在使用android平台,从以下参考问题中我了解到,使用返回原始数据的AudioRecord类我可以过滤音频范围取决于我的需要,但为此我需要算法,有人可以帮我找到过滤范围 b/w 14,400 bph 和 16,200 bph 的算法。
我尝试了“JTransform”,但我不知道是否可以使用 JTransform 来实现这一点?目前我正在使用“jfftpack”来显示效果非常好但我无法使用它实现音频过滤器的视觉效果。
帮助感谢提前感谢。以下是我上面提到的代码,我正在使用“jfftpack”库来显示您可能会在代码中找到这个库引用,请不要混淆
private class RecordAudio extends AsyncTask<Void, double[], Void> {
@Override
protected Void doInBackground(Void... params) {
try {
final AudioRecord audioRecord = findAudioRecord();
if(audioRecord == null){
return null;
}
final short[] buffer = new short[blockSize];
final double[] toTransform = new double[blockSize];
audioRecord.startRecording();
while (started) {
final int bufferReadResult = audioRecord.read(buffer, 0, blockSize);
for (int i = 0; i < blockSize && i < bufferReadResult; i++) {
toTransform[i] = (double) buffer[i] / 32768.0; // signed 16 bit
}
transformer.ft(toTransform);
publishProgress(toTransform);
}
audioRecord.stop();
audioRecord.release();
} catch (Throwable t) {
Log.e("AudioRecord", "Recording Failed");
}
return null;
/**
* @param toTransform
*/
protected void onProgressUpdate(double[]... toTransform) {
canvas.drawColor(Color.BLACK);
for (int i = 0; i < toTransform[0].length; i++) {
int x = i;
int downy = (int) (100 - (toTransform[0][i] * 10));
int upy = 100;
canvas.drawLine(x, downy, x, upy, paint);
}
imageView.invalidate();
}