我正在使用Android音乐播放器。我正在尝试将音频字节转换为rgb颜色,以便可以在播放音频时以波形形式显示它。我目前正在使用felixpalmer API,并且能够生成单色波形。
这是代码:
private void setupVisualizerFxAndUI() {
// Create the Visualizer object and attach it to our media player.
Paint linePaint = new Paint();
linePaint.setStrokeWidth(2f);
linePaint.setAntiAlias(true);
linePaint.setColor(ContextCompat.getColor(getContext(), R.color.colorPrimary));
final LineRenderer lineRenderer = new LineRenderer(linePaint, true);
mVisualizerView.addRenderer(lineRenderer);
mVisualizer = new Visualizer(mediaPlayer.getAudioSessionId());
mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
mVisualizer.setDataCaptureListener(
new Visualizer.OnDataCaptureListener() {
public void onWaveFormDataCapture(Visualizer visualizer,
byte[] bytes, int samplingRate) {
mVisualizerView.updateVisualizer(bytes);
onFFTData(bytes, lineRenderer);
}
public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) {
//onFFTData(bytes, lineRenderer);
}
}, Visualizer.getMaxCaptureRate() / 2, true, false);
}
请为我提供一些资源,在这里我可以阅读有关如何从此音频字节代码生成动态rgb颜色的信息。这样我的音乐播放器就可以用动态颜色显示波浪,而不是像现在那样显示歌手的颜色。
最佳答案
我注意到这两行:
final LineRenderer lineRenderer = new LineRenderer(linePaint, true);
mVisualizerView.addRenderer(lineRenderer);
我认为这看起来很有希望。所以我点击了GitHub链接,发现:https://github.com/felixpalmer/android-visualizer/blob/master/src/com/pheelicks/visualizer/renderer/LineRenderer.java
没关系。他对音频数据进行了一些数学运算,生成了一些分数然后调用
canvas.drawLines(mPoints, mPaint);
您要做的就是重复
LineRenderer
类/为其子类。计算所需的颜色,然后在mPaint.setColor(color)
调用之前调用drawLines
。因为
Visualizer
addRenderer
方法采用任何Renderer
实例(Renderer
是他的所有渲染器都继承的抽象类),所以您可以创建自己的子类,并且他的可视化器将愉快地使用您的类来绘制可视化效果。实际上,您的代码片段显示了一个构造函数
LineRenderer(linePaint, true)
,我什至在他的源代码中都没有看到。他确实有一个构造函数LineRenderer(Paint paint, Paint flashPaint, boolean cycleColor)
。当您设置cycleColor
true
时,颜色会在每帧上改变,因此LineRenderer
实际上可以生成具有不同颜色的波形。您可以在源代码中看到他的操作方式(第99行)。您可以以此为起点,朝着想要的方向迈进。他的源代码具有您需要的所有要素。快乐的编码。