2013-01-10 107 views
6

在我的Android應用程序中,我記錄了用戶的聲音,我保存爲.3gp編碼的音頻文件。如何讀取3gp/AMR-NB音頻格式的原始值?

我想要做的就是打開它,即表示音頻採樣的序列x [n],以執行一些音頻信號分析。

有誰知道我該怎麼做?

回答

5

您可以使用Android MeidiaCodec類來解碼3gp或其他文件。解碼器輸出是標準的PCM字節數組。您可以直接將此輸出發送到Android AudioTrack類以播放或繼續使用此輸出字節數組進行進一步處理,例如DSP。要應用DSP算法,字節數組必須轉換爲float/double數組。有幾個步驟來獲取字節數組輸出。總之,它看起來像如下:

  1. 實例化MediaCodec

    String mMime = "audio/3gpp" 
    MediaCodec mMediaCodec = MediaCodec.createDecoderByType(mMime); 
    
  2. 創建Media格式,並配置媒體編解碼

    MediaFormat mMediaFormat = new MediaFormat(); 
    mMediaFormat = MediaFormat.createAudioFormat(mMime, 
        mMediaFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE), 
        mMediaFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT)); 
    
    mMediaCodec.configure(mMediaFormat, null, null, 0); 
    mMediaCodec.start(); 
    
  3. 從MediaCodec(輸出捕捉如果一個線程中處理)

    MediaCodec.BufferInfo buf_info = new MediaCodec.BufferInfo(); 
    int outputBufferIndex = mMediaCodec.dequeueOutputBuffer(buf_info, 0); 
    byte[] pcm = new byte[buf_info.size]; 
    mOutputBuffers[outputBufferIndex].get(pcm, 0, buf_info.size); 
    

這可能與Google IO talk有關。

+0

非常感謝你讓我開始。我將在本週晚些時候測試並實施一些此代碼,並可能接受您的答案。 – JDS

+0

你能告訴我如何添加AudioTrack來播放3gp文件的整個inputStream嗎? –

+0

將數據從MediaCodec讀入字節數組後,可以使用AudioTrack類寫入方法播放。請參閱此處的寫入方法簽名,http://developer.android.com/reference/android/media/AudioTrack.html –