1
0

优化“renderAudioVisualizer1”,添加中心随音量变化的圆形

This commit is contained in:
2026-02-15 19:50:30 +08:00
parent deb5dd0aa9
commit 12d8fb432d

View File

@@ -776,15 +776,16 @@ window.addEventListener('DOMContentLoaded', () => {
let baseRadius = Math.min(CANVAS_WIDTH, CANVAS_HEIGHT) * 0.25;
let maxRadiusOffset = Math.min(CANVAS_WIDTH, CANVAS_HEIGHT) * 0.2;
// 简化:只绘制一个声波圆环
let numPoints = Math.min(audioBufferLength, 64);
// 获取绘制点数量
let pointSum = Math.min(audioBufferLength, 64);
ctx.beginPath();
for (let i = 0; i <= numPoints; i++) {
// 绘制一个声波圆环
for (let i = 0; i <= pointSum; i++) {
let index = i % numPoints;
let angle = (index / numPoints) * Math.PI * 2 - Math.PI / 2;
let index = i % pointSum;
let angle = (index / pointSum) * Math.PI * 2 - Math.PI / 2;
let value = audioDataArray[index];
let radiusOffset = (value / 255) * maxRadiusOffset;
@@ -806,7 +807,28 @@ window.addEventListener('DOMContentLoaded', () => {
ctx.lineWidth = 2;
ctx.stroke();
// 绘制内圈底色
let dataSum = 0;
for (let i = 0; i < audioBufferLength; i++) {
dataSum += audioDataArray[i];
}
// 计算平均音量
let avgVolume = dataSum / audioBufferLength;
// 计算中心圆形半径(音量越高,圆形越大)
let centerCircleRadius = Math.min(CANVAS_WIDTH, CANVAS_HEIGHT) * 0.05 + (avgVolume / 255) * Math.min(CANVAS_WIDTH, CANVAS_HEIGHT) * 0.15;
// 绘制中心圆形
ctx.beginPath();
ctx.arc(centerX, centerY, centerCircleRadius, 0, Math.PI * 2);
ctx.fillStyle = `rgba(0, 255, 136, ${0.3 + (avgVolume / 255) * 0.7})`;
ctx.fill();
ctx.strokeStyle = '#00FF88';
ctx.lineWidth = 2;
ctx.stroke();
// 绘制外层圆形
ctx.beginPath();
ctx.arc(centerX, centerY, baseRadius - 2, 0, Math.PI * 2);
ctx.strokeStyle = '#004422';