私のAndroidアプリケーションでは、.3gpエンコードされたオーディオファイルとして保存したユーザーの声を録音しています。
私がやりたいのは、オーディオ信号分析を実行するために、それを開くことです。つまり、オーディオサンプルを表すシーケンスx[n]です。
誰かが私がこれを行う方法を知っていますか?
Android MediaCodecクラスを使用して、3gpまたはその他のメディアファイルをデコードできます。デコーダーの出力は、標準のPCMバイト配列です。この出力をAndroidAudioTrackクラスに直接送信して、DSPなどのさらなる処理のために、この出力バイト配列を再生または続行できます。DSPアルゴリズムを適用するには、バイト配列をfloat/double配列に変換する必要があります。バイト配列の出力を取得するには、いくつかの手順があります。要約すると、次のようになります。
MediaCodecをインスタンス化する
String mMime = "audio/3gpp"
MediaCodec mMediaCodec = MediaCodec.createDecoderByType(mMime);
メディアフォーマットを作成し、メディアコーデックを構成します
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);
このGoogleIOトークは、ここに関連している可能性があります。