waveform AI changes

Signed-off-by: ale <ale@manalejandro.com>
Este commit está contenido en:
ale
2025-06-04 22:32:52 +02:00
padre ba66d4c02a
commit 0fdd190e8b
Se han modificado 3 ficheros con 83 adiciones y 0 borrados

BIN
public/test-audio.mp3 Archivo normal

Archivo binario no mostrado.

BIN
public/test-multi-tone.mp3 Archivo normal

Archivo binario no mostrado.

83
public/test-webaudio.html Archivo normal
Ver fichero

@@ -0,0 +1,83 @@
<!DOCTYPE html>
<html>
<head>
<title>Web Audio API Direct Test</title>
</head>
<body>
<h2>Direct Web Audio API Test</h2>
<audio id="audio" src="/test-multi-tone.mp3" loop controls></audio>
<br><br>
<button id="testBtn">Test Web Audio API</button>
<div id="output"></div>
<script>
let audioContext = null;
let analyser = null;
let source = null;
let isConnected = false;
document.getElementById('testBtn').addEventListener('click', async () => {
const audio = document.getElementById('audio');
const output = document.getElementById('output');
try {
// Create AudioContext
audioContext = new (window.AudioContext || window.webkitAudioContext)();
console.log('AudioContext created:', audioContext.state);
if (audioContext.state === 'suspended') {
await audioContext.resume();
console.log('AudioContext resumed');
}
// Create source and analyser
source = audioContext.createMediaElementSource(audio);
analyser = audioContext.createAnalyser();
analyser.fftSize = 2048;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
// Connect audio graph
source.connect(analyser);
analyser.connect(audioContext.destination);
console.log('Web Audio connected');
isConnected = true;
// Start playing
await audio.play();
console.log('Audio playing');
// Monitor data
setInterval(() => {
if (!isConnected) return;
analyser.getByteFrequencyData(dataArray);
const maxValue = Math.max(...dataArray);
const avgValue = dataArray.reduce((a, b) => a + b, 0) / dataArray.length;
const activeValues = dataArray.filter(v => v > 5).length;
const info = `
<h3>Audio Analysis</h3>
<p>AudioContext State: ${audioContext.state}</p>
<p>Audio Paused: ${audio.paused}</p>
<p>Audio Time: ${audio.currentTime.toFixed(2)}s</p>
<p>Max Value: ${maxValue}</p>
<p>Avg Value: ${avgValue.toFixed(2)}</p>
<p>Active Values: ${activeValues}</p>
<p>Sample Data: [${Array.from(dataArray.slice(0, 20)).join(', ')}]</p>
`;
output.innerHTML = info;
}, 1000);
} catch (error) {
console.error('Test failed:', error);
output.innerHTML = `<p style="color: red;">Error: ${error.message}</p>`;
}
});
</script>
</body>
</html>