我正在使用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行)。您可以以此为起点,朝着想要的方向迈进。

他的源代码具有您需要的所有要素。快乐的编码。

10-06 12:56