私の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形式を作成し、メディアコーデック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();
を設定します)
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
3gpファイルのinputStream全体を再生するAudioTrackを追加する方法を教えてください。 –
データをMediaCodecからバイト配列に読み込むと、AudioTrackクラスの書き込みメソッドを使用して再生できます。ここにメソッドシグネチャを書きます。http://developer.android.com/reference/android/media/AudioTrack.html –