0

私はAndroidミュージックプレーヤーで作業しています。私はオーディオを再生している間、私はそれを波形で表示することができるように、オーディオバイトをRGBに変換しようとしています。私は現在felixpalmer APIを使用しており、単一色の波形を生成することができます。ここでAndroid視覚化ツールのためのダイナミックカラーの作成方法

コードです:

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カラーを生成する方法について読むことができるいくつかのリソースに私を指すください。私の音楽プレーヤーは、現時点で表示されているように、歌手の色ではなく動的な色で波を表示することができます。

答えて

0

私は、次の2行に気づい:

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クラスをサブクラス化/重複しています。あなたが望む色を計算し、drawLinesコールの前にmPaint.setColor(color)と呼んでください。 VisualizeraddRenderer方法は、(Rendererが彼のすべてのレンダラーが継承する抽象クラスである)任意のRendererインスタンスがかかるため

、独自のサブクラスを作成することができますし、彼のビジュアライザは喜んで視覚化を描画するために、あなたのクラスを使用します。

実際、あなたのコードスニペットは、彼のソースには見えないコンストラクタLineRenderer(linePaint, true)を示しています。彼はコンストラクタLineRenderer(Paint paint, Paint flashPaint, boolean cycleColor)を持っています。 cycleColortrueを設定すると、フレームごとに色が変わるため、LineRendererは実際には異なる色の波形を生成できます。ソースコードで彼がどのようにしているかを見ることができます(99行目)。あなたは、あなたが望むものに向かって動く例として、それから始めることができます。

彼のソースコードには、必要なものがすべて含まれています。ハッピーコーディング。

+1

私はこれを行って、どのように動作するのか知っていますが、上記のコードを使ってLEDデバイスにrgb値を送信しています。ある範囲。また、コンストラクタからflashPaintを削除しましたが、これは必要ありませんでした。 – pradex

関連する問題