0
Visualizer를 사용하여 MediaPlayer에서 재생 된 파일을 캡처하고 AudioTrack을 사용하여 재생하려고합니다. 그러나 캡쳐 된 데이터는 노이즈입니다.(AudioTrack 사용) 비주얼 라이저를 사용하여 캡처 된 PCM 오디오
여기 내 코드입니다.
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();
바이트는 단지 원시 백색 잡음을 생성합니다. OnWaveForm 메서드에서 들어오는 데이터는 어떻게 PCM 형식을 가질 수 있습니까? 어떻게해야합니까?
성공 했습니까? 그렇다면 코드를 게시하십시오. 고맙습니다 – user45678