【发布时间】:2012-12-05 18:56:20
【问题描述】:
我的问题很简单。如何从 mp3 文件中获取 PCM 数据?
现在我找到了从歌曲中获取 PCM 字节的唯一方法,我加载并播放了 MediaPlayer 的 mp3 并尝试收听 Visualizer.OnDataCaptureListener 的波形变化。这个接口的方法传递了一个byte[] bytes 参数。我尝试将所有这些字节保存到一个字节数组中,然后将此数组传递给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 数据?
【问题讨论】:
-
你能分享你为这个问题找到的解决方案吗?
标签: android android-mediaplayer