簡體   English   中英

Android FFT獲得更高的頻率范圍

[英]Android fft get higher frequency range

我在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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM