2012-02-06 11 views
1

私の質問は簡単です。 mp3ファイルからPCMデータを取得するにはどうすればよいですか?アンドロイドのmp3ファイルからpcmデータを取得

ここでは、曲からPCMバイトを取得する方法がわかりました。MediaPlayerでmp3をロードして再生し、波の変更をVisualizer.OnDataCaptureListenerで聞いてみました。このインタフェースのメソッドは、byte[] bytesパラメータを渡します。私はこれらのバイトをすべて1バイト配列に保存しようとしましたが、この配列をAudioTrack.writeメソッドに渡してAudioTrack.playメソッドで再生しました。このような何か:

mVisualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener() { 
       public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, 
         int samplingRate) { 
         // allBytes += bytes 
       } 
     public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) { 
       } 
, Visualizer.getMaxCaptureRate()/2, true, false); 
    } 

、その後

AudioTrack tr = new AudioTrack(AudioManager.STREAM_MUSIC, 22050, 
           AudioFormat.CHANNEL_OUT_STEREO, 
           AudioFormat.ENCODING_PCM_16BIT, 
           allBytes.length, AudioTrack.MODE_STREAM); 
tr.play(); 
tr.write(barr, 0, allBytes.length); 

しかし残念ながら、私は期待される結果を取得できませんでした。サウンドは再生されていますが、サウンドには多くのノイズがあり、品質はとても悪いです。実際に何が歌われているのかを実際に識別することはできません。

しかし、それはPCMデータを取得するための「ハック方法」のようなものでした。私のmp3からPCMデータを取得する通常の方法があるとしますか?

+1

この問題で見つかった解決策を共有できますか? – Karthik

答えて

3

MP3のデコードにmpg123ネイティブライブラリを使用しています。バイトではなく、短くPCMデータにデコードされます。私はあなたが変換を行うことができると確信しています。デコーダはNDKを使用しているため非常に高速です。また

http://www.badlogicgames.com/wordpress/?p=446

私はあなたのファイルはどのように大きなわからないが、私が代わりに一つの大きな配列で曲全体を置くのAudioTrackにバイトをストリームう。

+0

はい、私はそれをストリーミングします、私はテストのためだけにバイト変数を使用しました。そして私はすでに解決策を見つけました。私は答えました。リプレイをありがとう! – pleerock

+2

@pleerock:あなたのソリューションを共有してもよろしいですか?私は数週間、成功せずにAndroidアプリからPCMストリームを取得しようとしてきました... –

関連する問題