sound123
[et_pb_section fb_built=”1″ _builder_version=”4.25.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_row _builder_version=”4.25.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”4.25.0″ _module_preset=”default” global_colors_info=”{}”][et_pb_code _builder_version=”4.25.0″ _module_preset=”default” hover_enabled=”0″ global_colors_info=”{}” sticky_enabled=”0″]
| Type | ||
|---|---|---|
| Lowpass Freq | 5000 | |
| Q | 5 |
const sound1 = ‘https://www.analoghearingaids.com/wp-content/uploads/2024/04/Pachelbel_-_Canon_In_D_Major._48k_24bit.mp3’; const sound2 = ‘https://www.analoghearingaids.com/wp-content/uploads/2024/04/audiocheck.net_brownnoise.mp3’; let currentSound = sound1; let currentBuffer = null; const audioctx = new AudioContext(); let src = null; function LoadSample(actx, url) { return new Promise((resolve, reject) => { fetch(url) .then((response) => response.arrayBuffer()) .then((arrayBuffer) => actx.decodeAudioData(arrayBuffer)) .then((audioBuffer) => resolve(audioBuffer)) .catch((error) => reject(error)); }); } async function loadCurrentSound() { try { currentBuffer = await LoadSample(audioctx, currentSound); console.log(“Sound loaded successfully”); } catch (error) { console.error(“Error loading sound:”, error); } } window.addEventListener(“load”, async () => { const filter = new BiquadFilterNode(audioctx, { frequency: 5000, Q: 5 }); const analyser = new AnalyserNode(audioctx, { smoothingTimeConstant: 0.7, fftSize: 1024 }); filter.connect(analyser).connect(audioctx.destination); const cv = document.getElementById(“cvs”); const ctx = cv.getContext(“2d”); const analysedata = new Float32Array(1024); document.getElementById(“playmusic”).addEventListener(“click”, async () => { if (audioctx.state === “suspended”) await audioctx.resume(); if (src) src.stop(); if (!currentBuffer) await loadCurrentSound(); if (currentBuffer) { src = new AudioBufferSourceNode(audioctx, { buffer: currentBuffer, loop: true }); src.connect(filter); src.start(); console.log(“Music playing”); } else { console.error(“Buffer is not loaded”); } }); document.getElementById(“stop”).addEventListener(“click”, () => { if (src) { src.stop(); src = null; console.log(“Music stopped”); } }); document.querySelectorAll(‘input[name=”sound”]’).forEach((radio) => { radio.addEventListener(“change”, async (event) => { currentSound = event.target.value === ‘sound1’ ? sound1 : sound2; await loadCurrentSound(); if (src) { src.stop(); src = null; } }); }); document.getElementById(“type”).addEventListener(“change”, Setup); document.getElementById(“lowpass-freq”).addEventListener(“input”, Setup); document.getElementById(“highpass-freq”).addEventListener(“input”, Setup); document.getElementById(“q”).addEventListener(“input”, Setup); Setup(); setInterval(DrawGraph, 100); function Setup() { const type = document.getElementById(“type”).value; filter.type = type; if (type === “lowpass”) { document.getElementById(“lowpass-controls”).style.display = “”; document.getElementById(“highpass-controls”).style.display = “none”; filter.frequency.value = document.getElementById(“lowpass-freq”).value; } else { document.getElementById(“lowpass-controls”).style.display = “none”; document.getElementById(“highpass-controls”).style.display = “”; filter.frequency.value = document.getElementById(“highpass-freq”).value; } filter.Q.value = document.getElementById(“q”).value; document.getElementById(“lowpass-freqval”).innerText = filter.frequency.value; document.getElementById(“highpass-freqval”).innerText = filter.frequency.value; document.getElementById(“qval”).innerText = filter.Q.value; console.log(`Filter setup: type=${filter.type}, frequency=${filter.frequency.value}, Q=${filter.Q.value}`); } function DrawGraph() { analyser.getFloatFrequencyData(analysedata); ctx.fillStyle = “#000000”; ctx.fillRect(0, 0, 512, 256); ctx.fillStyle = “#009900”; for (let i = 0; i < 512; ++i) { let y = 128 + (analysedata[i] + 48.16) * 2.56; ctx.fillRect(i, 256 – y, 1, y); } ctx.fillStyle = “#ff8844”; for (let d = -50; d < 50; d += 10) { let y = 128 – (d * 256 / 100) | 0; ctx.fillRect(20, y, 512, 1); ctx.fillText(d + “dB”, 5, y); } for (let f = 2000; f < audioctx.sampleRate / 2; f += 2000) { let x = (f * 1024 / audioctx.sampleRate) | 0; ctx.fillRect(x, 0, 1, 245); ctx.fillText(f + “Hz”, x – 10, 255); } } await loadCurrentSound(); // Load initial sound });
[/et_pb_code][/et_pb_column][/et_pb_row][/et_pb_section]