Android 无法使用可视化工具播放(使用AudioTrack)捕获的PCM音频

Android 无法使用可视化工具播放(使用AudioTrack)捕获的PCM音频,android,media-player,visualizer,audiotrack,Android,Media Player,Visualizer,Audiotrack,我正在尝试使用Visualizer在MediaPlayer中捕获播放的文件,并使用AudioTrack播放。但捕获的数据只是噪声 这是我的密码 mPlayer = MediaPlayer.create(this, R.raw.call_ringtone); mPlayer.setLooping(false); mPlayer.start(); // mPlayer.setVolume(0, 0);

我正在尝试使用Visualizer在MediaPlayer中捕获播放的文件,并使用AudioTrack播放。但捕获的数据只是噪声

这是我的密码

mPlayer = MediaPlayer.create(this, R.raw.call_ringtone);
                mPlayer.setLooping(false);
                mPlayer.start();
               // mPlayer.setVolume(0, 0);
                int minSize =AudioTrack.getMinBufferSize( 44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT );        
                 mySong = new AudioTrack( AudioManager.STREAM_MUSIC, 44100,AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT, minSize, AudioTrack.MODE_STREAM);

                mVisualizer = new Visualizer(mPlayer.getAudioSessionId());
                mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);

            Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener()
            {
                Boolean toPlay = false;
                @Override
                public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes,
                        int samplingRate)
                {
                     myl.add(bytes);

                }

                @Override
                public void onFftDataCapture(Visualizer visualizer, byte[] bytes,
                        int samplingRate)
                {
                    System.out.println("onFftDataCapture");
                }
            };

            mVisualizer.setDataCaptureListener(captureListener,
                    Visualizer.getMaxCaptureRate() / 2, true, false);

            mVisualizer.setEnabled(true);
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
            {
                @Override
                public void onCompletion(MediaPlayer mediaPlayer)
                {
                    mVisualizer.setEnabled(false);
                    stopIt = true;
                }
            });


            new Thread(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    try {
                        Thread.sleep(30000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    mySong.play();
                    int j=0;
                    while(j<myl.size())
                    {
                    mySong.write(myl.get(j), 0, myl.get(j).length);
                    Log.d("writing", Integer.toString(j)+" : "+Integer.toString(temp.length));
                    j++;
                    }
                }
            }).start();
mPlayer=MediaPlayer.create(这是R.raw.call\u铃声);
mPlayer.setLooping(false);
mPlayer.start();
//mPlayer.setVolume(0,0);
int minSize=AudioTrack.getMinBufferSize(44100,AudioFormat.CHANNEL\u CONFIGURATION\u立体声,AudioFormat.ENCODING\u PCM\u 16位);
mySong=新的AudioTrack(AudioManager.STREAM\u MUSIC,44100,AudioFormat.CHANNEL\u CONFIGURATION\u立体声,AudioFormat.ENCODING\u PCM\u 16位,minSize,AudioTrack.MODE\u STREAM);
mVisualizer=新的可视化工具(mPlayer.getAudioSessionId());
mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
Visualizer.OnDataCaptureListener captureListener=新建Visualizer.OnDataCaptureListener()
{
布尔toPlay=false;
@凌驾
public void onWaveFormDataCapture(可视化工具可视化工具,字节[]字节,
整数采样(栅格)
{
myl.add(字节);
}
@凌驾
public void onFftDataCapture(可视化工具可视化工具,字节[]字节,
整数采样(栅格)
{
System.out.println(“onFftDataCapture”);
}
};
mVisualizer.setDataCaptureListener(captureListener,
getMaxCaptureRate()/2,true,false);
mVisualizer.setEnabled(true);
mPlayer.setOnCompletionListener(新的MediaPlayer.OnCompletionListener()
{
@凌驾
完成时的公共作废(MediaPlayer MediaPlayer)
{
mVisualizer.setEnabled(false);
stopIt=true;
}
});
新线程(newrunnable()){
@凌驾
公开募捐{
//TODO自动生成的方法存根
试一试{
睡眠(30000);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
mySong.play();
int j=0;

(j尝试使用soundpool而不是audiotrack

您成功地做到了吗?如果成功,请发布代码好吗?谢谢