我在
OnDataCaptureListener()
事件的onFftDataCapture()
方法中获取FFT数据,并使用drawLines()
在画布上绘制。但是频谱显示不正确。我只能看到图形左侧的变化。但是在Windows Media Player中,同一首歌曲的输出是不同的。我错过了什么吗?
有人可以给我提供一个示例或链接帮助我吗? 代码
mVisualizer.setDataCaptureListener(
new Visualizer.OnDataCaptureListener() {
public void onWaveFormDataCapture(Visualizer visualizer,
byte[] bytes, int samplingRate) {}
public void onFftDataCapture(Visualizer visualizer,
byte[] bytes, int samplingRate) {
mVisualizerView.updateVisualizer(bytes, samplingRate);
}
}, Visualizer.getMaxCaptureRate() / 2, false, true);
onPaint()
for (int i = 0; i < mBytes.length / 2; i++) {
mPoints[i * 4] = i * 8;
mPoints[i * 4 + 1] = 0;
mPoints[i * 4 + 2] = i * 8;
byte rfk = mBytes[2 * i];
byte ifk = mBytes[2 * i + 1];
magnitude = (float) (rfk * rfk + ifk * ifk);
int dbValue = (int) (10 * Math.log10(magnitude));
mPoints[i * 4 + 3] = (float) (dbValue * 7);
}
canvas.drawLines(mPoints, mForePaint);
其中mVisualizer
是Visualizer类的对象,mBytes
是从onFftDataCapture
事件中获取的FFT数据。
您可以在这里阅读有关事件返回的FFT数据的更多信息。
这是我从onFftDataCapture()
获得的值:
[90,-1,-27,102,13,-18,40,33,-7,16,-23,-23,-2,-8,-11,-9,-8,-33,-29,44,4,-9,-15,-1,-2,-17,-7,1,1,0,3,-11,-5,10,-24,-6,-23,1,-9,-21,-2,4,9,-10,-14,-5,-16,8,6,-16,14,3,7,15,10,-2,-15,-14,-5,10,8,23,-1,-16,-2,-6,4,9,-1,0,0,9,1,4,-2,6,-6,-6,8,-4,6,6,-4,-5,-5,-2,3,0,-1,0,-7,0,2,1,0,1,-1,0,-1,1,-1,0,-1,0,-1,0,-1,0,-1,0,-1,0,-1,0,-1,0,-1,0,-1,-1]
@Chris Stratton更新
现在我正在播放1000 Hz的方波文件,并截取了屏幕截图。你有什么建议?
在@ruhalde的建议后更新
现在我正在播放频率扫描(20-20000 Hz)文件,这个文件生成了以下输出。
updateVisualizer()
方法中调用了invalidate()
。它正在执行该任务。 - Raj