The JavaScript code example demonstrates how to program a compressor node for audio processing.
<!DOCTYPE html> <html> <head> <title>XoaX.net JavaScript</title> <script src="Compressor.js"></script> <link rel="icon" href="data:,"> </head> <body onload="Initialize()"> <h1>Compressor</h1> <audio controls> <source src="WalhallaWagner.mp3" type="audio/mp3" /> </audio> <br /><br /> <button id="idCompress" data-compress="false">Decompress</button> </body> </html>
let gqAudioContext;
let gqCompressButton;
let gqAudioElement;
function Initialize() {
gqCompressButton = document.getElementById("idCompress");
// There is only one audio element
gqAudioElement = document.getElementsByTagName("audio")[0];
// Set the play handler on the audio element
gqAudioElement.addEventListener("play", () => {
if (!gqAudioContext) {
gqAudioContext = new AudioContext();
// Create a new media element audio source node with this
const qMediaSourceNode = new MediaElementAudioSourceNode(gqAudioContext, {
mediaElement: gqAudioElement,
});
// Create the compressor node
const qCompressorNode = new DynamicsCompressorNode(gqAudioContext, {
threshold: -50, knee: 40, ratio: 12, attack: 0, release: 0.25,
});
// Connect the AudioBufferSourceNode to the destination
qMediaSourceNode.connect(gqAudioContext.destination);
gqCompressButton.onclick = () => {
const kqCompressAttribute = gqCompressButton.getAttribute("data-compress");
if (kqCompressAttribute === "false") {
gqCompressButton.setAttribute("data-compress", "true");
gqCompressButton.textContent = "Compress";
qMediaSourceNode.disconnect(gqAudioContext.destination);
qMediaSourceNode.connect(qCompressorNode);
qCompressorNode.connect(gqAudioContext.destination);
} else {
gqCompressButton.setAttribute("data-compress", "false");
gqCompressButton.textContent = "Decompress";
qMediaSourceNode.disconnect(qCompressorNode);
qCompressorNode.disconnect(gqAudioContext.destination);
qMediaSourceNode.connect(gqAudioContext.destination);
}
};
}
});
}
© 20072025 XoaX.net LLC. All rights reserved.