2013-07-23 32 views
0

我使用的代码是https://github.com/sommukhopadhyay/FFTBasedSpectrumAnalyzer。我遇到的问题是频谱图只显示低频范围。Android fft获取更高的频率范围

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

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

回答

3

如果你的采样速率为8kHz,那么你将只能看到频率从0到4 kHz。对于更大的频率范围,您需要提高采样率,例如,如果将其设置为44.1 kHz,则会看到0至22.05 kHz的频率。我不知道什么样的采样率与您的特定设备所支持的Android设备,但尝试改变:

int frequency = 8000; 

到:

int frequency = 44100;