我試圖構建一個簡單的音樂可視化應用程序,只需調整一個圓圈。因此,如果當前正在播放的音樂部分響亮,則應該變大,否則應該變小。帶圓圈的簡單音樂可視化
可視化圓我剛剛創建了一個自定義的視圖類,它在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部分的初學者,我完全抱歉如果這是一個愚蠢的問題和我的企圖。
謝謝你的幫助!
編輯:
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);
嗯......謝謝你的幫助,我只是想與和做出來,這是trashhold princip,但它仍然不是我想要的。它看起來不像一個同步的圓。 (我沒有添加圈子周圍的花哨線:-))。我用我試過的代碼更新了我的帖子。 –