2013-01-10 6 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形式を作成し、メディアコーデックMediaCodec(からのキャプチャ出力は、スレッド内で処理しなければならない

    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.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

3gpファイルのinputStream全体を再生するAudioTrackを追加する方法を教えてください。 –

+0

データをMediaCodecからバイト配列に読み込むと、AudioTrackクラスの書き込みメソッドを使用して再生できます。ここにメソッドシグネチャを書きます。http://developer.android.com/reference/android/media/AudioTrack.html –

関連する問題