اهااا .. انت اعتمدت على ال height للقيم المستقبلة من ال analyzer للاصوات :D .. رائع ياصديقي ... القيم المعادة اقصى قيمة هي analyzer.fftSize/2 او بالاعتماد على ال getByteFrequencyData .length اي قد تكون 512 او 256 من الممكن تغيير القيمة - ساجرب لاحقا - بدل ال100 .
let amplitudes = new Uint8Array(100);
analyser.getByteFrequencyData(amplitudes);
for(let i = 0; i < 100; i++){
sum += amplitudes[i];
}
sum /= 100;
لن تصدق ان قلت لك ان الفرق بين الـ 2 frames لا يتعدى 30ms في اسوأ الاحوال
الخوارزمية "فايتة بالحيط" هههه، فقط اقوم بجمع كل الـ amplitudes خلال الفريم ثم اقسمها على عددها واستخدم perlin noise من اجل الـ smothness ومن ثم ارسم :D