java - Android fft 获得更高的频率范围

标签 java android fft microphone

我正在使用https://github.com/sommukhopadhyay/FFTBasedSpectrumAnalyzer处的代码。我遇到的问题是频谱图仅显示低范围。

如何修改代码以便可以看到更完整的频率范围?

int frequency = 8000;
int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

private class RecordAudio extends AsyncTask<Void, double[], Void> {
    @Override
    protected Void doInBackground(Void... params) {

        int bufferSize = AudioRecord.getMinBufferSize(frequency,
                channelConfiguration, audioEncoding);
        AudioRecord audioRecord = new AudioRecord(
                MediaRecorder.AudioSource.DEFAULT, frequency,
                channelConfiguration, audioEncoding, bufferSize);

        short[] buffer = new short[blockSize];
        double[] toTransform = new double[blockSize];
        try{
            audioRecord.startRecording();
        }
        catch(IllegalStateException e){

        }
        while (started) {
            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);
        }
        try{
            audioRecord.stop();
        }
        catch(IllegalStateException e){

        }

        return null;
    }
}

最佳答案

如果您的采样率为 8 kHz,那么您将只能看到 0 到 4 kHz 的频率。对于更大的频率范围,您需要增加采样率,例如如果将其设置为 44.1 kHz,那么您将看到从 0 到 22.05 kHz 的频率。我不确定您的特定设备在 Android 上支持什么采样率,但请尝试更改:

int frequency = 8000;

至:

int frequency = 44100;

关于java - Android fft 获得更高的频率范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17809564/

相关文章:

fft - Julia 中的零填充 FFT

java - 覆盖和过载的观点

Android ListActivity - 固定页眉和页脚

fft - 如何解释 KissFFT 的 kiss_fftr(真实信号的 FFT)函数的结果

c++ - 在短时傅里叶变换中获取特定频率的值

java - Android 中带有多个按钮的自定义圆圈

java - 从批处理文件和 shell 脚本运行目标文件夹中存在的 jar 文件

java - Apache Camel : How to persist property or header between multiple Exchanges after split and subsequent Exception?

java - Domino 服务器 7.0.3FP1 使用 java 代理的代理设置

android - 将 LinearLayout 元素与来自另一个 LinearLayout 的元素对齐