2013-07-23 115 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;