円は、サークルのサイズを変更するだけの単純な音楽視覚化アプリケーションを作成しようとしています。したがって、現在再生中の音楽パートが大声であれば、それは大きくなるはずです。小さくなければなりません。円での単純な音楽の視覚化
円を視覚化する方法onDraw
の方法で円を描画するカスタム表示クラスを作成しました。
現在のオーディオから情報を取得するには、AndroidのVisualizer Classが見つかりましたが、setDataCaptureListener
も使用しました。
mVisualizer = new Visualizer(mMediaPlayer.getAudioSessionId());
mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[0]);
mVisualizer.setDataCaptureListener(
new Visualizer.OnDataCaptureListener() {
public void onWaveFormDataCapture(Visualizer visualizer,byte[] bytes, int samplingRate) {
mVisualizerView.updateVisualizer(bytes);
}
public void onFftDataCapture(Visualizer visualizer,byte[] bytes, int samplingRate) {
}
}, (int)(Visualizer.getMaxCaptureRate()/1.5), true, false);
しかし、私の問題は、私は本当に私は一般の音楽の変化を(大声で得たかどうか?)を見つけるために、戻って与えられたバイト配列を使用する方法がわからないということです。
私はちょうど配列の平均を取得しようとしましたが、これは完全に悪い結果をもたらします。サークルは薬のように彼のサイズを変えました。だから私は多分配列はあまりにも多くのアウトライン/極値(本当だった)を考えたので、私は配列の中央値を計算したと思った。これは私に良い結果をもたらしましたが、それでも私が望むものではありません。非常に滑らかではなく、複雑になります。私はいつも本当に効率的ではない配列をソートする必要があります。何が間違っていると思いますか?
本当に私はこのAudioFXセクションの初心者です。これは私にとってばかげた質問です。
ありがとうございました!
EDIT:
private float schwelle = 5000;
private float last = 0;
...
float summe = 0;
for (Byte currentByte: mBytes)
summe += currentByte;
if (summe > schwelle && summe > last)
{
last = summe; //make it bigger
}
else {
last -= 100; //make circle smaller
}
canvas.drawCircle(getWidth()/2,getHeight()/2,last/100,mForePaint);
うーんは...あなたの助けをありがとう、私は合計でそれを実行しようとしましたし、ゴミ箱プリンシプルですが、それはまだ私が望むものではありません。同期サークルのように見えません。 (私は円の周りに空想的な線を追加しませんでした:-))。私は試したコードで投稿を更新しました。 –