0

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;
    }
}
4

1 に答える 1

3

サンプル レートが 8 kHz の場合、0 ~ 4 kHz の周波数しか表示できません。周波数範囲を広げるには、サンプル レートを上げる必要があります。たとえば、44.1 kHz に設定すると、0 ~ 22.05 kHz の周波数が表示されます。Android でサポートされているサンプル レートが特定のデバイスでサポートされているかどうかはわかりませんが、次のように変更してみてください。

int frequency = 8000;

に:

int frequency = 44100;
于 2013-07-23T12:48:30.013 に答える