7

私のAndroidアプリケーションでは、.3gpエンコードされたオーディオファイルとして保存したユーザーの声を録音しています。

私がやりたいのは、オーディオ信号分析を実行するために、それを開くことです。つまり、オーディオサンプルを表すシーケンスx[n]です。

誰かが私がこれを行う方法を知っていますか?

4

1 に答える 1

6

Android MediaCodecクラスを使用して、3gpまたはその他のメディアファイルをデコードできます。デコーダーの出力は、標準のPCMバイト配列です。この出力をAndroidAudioTrackクラスに直接送信して、DSPなどのさらなる処理のために、この出力バイト配列を再生または続行できます。DSPアルゴリズムを適用するには、バイト配列をfloat/double配列に変換する必要があります。バイト配列の出力を取得するには、いくつかの手順があります。要約すると、次のようになります。

  1. MediaCodecをインスタンス化する

    String mMime = "audio/3gpp"
    MediaCodec  mMediaCodec = MediaCodec.createDecoderByType(mMime);
    
  2. メディアフォーマットを作成し、メディアコーデックを構成します

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

このGoogleIOトークは、ここに関連している可能性があります。

于 2013-01-21T21:21:46.377 に答える