Android AudioRecord фильтр диапазона частот
Я использую платформу Android, из следующего справочного вопроса я узнаю, что с помощью класса AudioRecord, который возвращает необработанные данные, я могу фильтровать диапазон звуковой частоты, зависит от моих потребностей, но для этого мне понадобится алгоритм, может кто-нибудь помочь мне найти алгоритм фильтрации диапазона ч / б 14 400 б / ч и 16 200 б / ч.
Я пробовал "JTransform", но я не знаю, могу ли я достичь этого с помощью JTransform или нет? В настоящее время я использую «jfftpack» для отображения визуальных эффектов, который работает очень хорошо, но я не могу добиться аудио-фильтра, используя это.
пасибо @help Спасибо заранее. Ниже приведен мой код, как я упоминал выше, я использую библиотеку "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();
}