6
在我的Android應用程序中,我記錄了用戶的聲音,我保存爲.3gp編碼的音頻文件。如何讀取3gp/AMR-NB音頻格式的原始值?
我想要做的就是打開它,即表示音頻採樣的序列x [n],以執行一些音頻信號分析。
有誰知道我該怎麼做?
在我的Android應用程序中,我記錄了用戶的聲音,我保存爲.3gp編碼的音頻文件。如何讀取3gp/AMR-NB音頻格式的原始值?
我想要做的就是打開它,即表示音頻採樣的序列x [n],以執行一些音頻信號分析。
有誰知道我該怎麼做?
您可以使用Android MeidiaCodec類來解碼3gp或其他文件。解碼器輸出是標準的PCM字節數組。您可以直接將此輸出發送到Android AudioTrack類以播放或繼續使用此輸出字節數組進行進一步處理,例如DSP。要應用DSP算法,字節數組必須轉換爲float/double數組。有幾個步驟來獲取字節數組輸出。總之,它看起來像如下:
實例化MediaCodec
String mMime = "audio/3gpp"
MediaCodec mMediaCodec = MediaCodec.createDecoderByType(mMime);
創建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();
從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有關。
非常感謝你讓我開始。我將在本週晚些時候測試並實施一些此代碼,並可能接受您的答案。 – JDS
你能告訴我如何添加AudioTrack來播放3gp文件的整個inputStream嗎? –
將數據從MediaCodec讀入字節數組後,可以使用AudioTrack類寫入方法播放。請參閱此處的寫入方法簽名,http://developer.android.com/reference/android/media/AudioTrack.html –