|
@@ -9,7 +9,10 @@
|
|
|
type propsType = { canvWidth: number; canvHeight: number; canvFillColor: string; lineColor: string; lineGap: number }
|
|
|
// canvas
|
|
|
const canvasCtx = canvasDom.getContext("2d")!
|
|
|
- const { width, height } = canvasDom.getBoundingClientRect()
|
|
|
+ let { width, height } = canvasDom.getBoundingClientRect()
|
|
|
+ // 向上取整,当with为小数或者小于当前dom时候,切换app之后 会出现黑边
|
|
|
+ width = Math.ceil(width)
|
|
|
+ height = Math.ceil(height)
|
|
|
canvasDom.width = width
|
|
|
canvasDom.height = height
|
|
|
// audio
|
|
@@ -84,8 +87,8 @@
|
|
|
return
|
|
|
}
|
|
|
//analyser?.getByteFrequencyData(dataArray)
|
|
|
- draw(generateMixedData(38), canvasCtx, {
|
|
|
- lineGap: 3,
|
|
|
+ draw(generateMixedData(48), canvasCtx, {
|
|
|
+ lineGap: 2,
|
|
|
canvWidth: width,
|
|
|
canvHeight: height,
|
|
|
canvFillColor: "transparent",
|
|
@@ -114,20 +117,27 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-export function generateMixedData(size:number) {
|
|
|
+export function generateMixedData(size: number) {
|
|
|
const dataArray = new Uint8Array(size);
|
|
|
const baseNoiseAmplitude = 30;
|
|
|
const minFrequency = 0.01;
|
|
|
const maxFrequency = 0.2;
|
|
|
const minAmplitude = 50;
|
|
|
const maxAmplitude = 150;
|
|
|
+
|
|
|
+ let lastAmplitude = maxAmplitude; // 初始振幅设置为最大值
|
|
|
+ let lastFrequency = minFrequency + Math.random() * (maxFrequency - minFrequency);
|
|
|
+
|
|
|
for (let i = 0; i < size; i++) {
|
|
|
- const frequency = minFrequency + Math.random() * (maxFrequency - minFrequency);
|
|
|
- const amplitude = minAmplitude + Math.random() * (maxAmplitude - minAmplitude);
|
|
|
+ const decayFactor = 1 - (i / size); // 使振幅随时间递减
|
|
|
+ const amplitude = lastAmplitude * decayFactor + (Math.random() - 0.5) * 10;
|
|
|
+ const frequency = lastFrequency + (Math.random() - 0.5) * 0.01;
|
|
|
const wave = amplitude * (0.5 + 0.5 * Math.sin(frequency * i));
|
|
|
const noise = Math.floor(Math.random() * baseNoiseAmplitude) - baseNoiseAmplitude / 2;
|
|
|
dataArray[i] = Math.min(255, Math.max(0, Math.floor(wave + noise)));
|
|
|
+ lastAmplitude += (amplitude - lastAmplitude) * 0.05;
|
|
|
+ lastFrequency += (frequency - lastFrequency) * 0.05;
|
|
|
}
|
|
|
+
|
|
|
return dataArray;
|
|
|
}
|
|
|
-
|