BIN
public/test-audio.mp3
Archivo normal
BIN
public/test-audio.mp3
Archivo normal
Archivo binario no mostrado.
BIN
public/test-multi-tone.mp3
Archivo normal
BIN
public/test-multi-tone.mp3
Archivo normal
Archivo binario no mostrado.
83
public/test-webaudio.html
Archivo normal
83
public/test-webaudio.html
Archivo normal
@@ -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>
|
||||
Referencia en una nueva incidencia
Block a user