This JavaScript Reference section displays the code for an example program that shows how to generate a triangular sound wave.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>XoaX.net's JavaScript</title>
</head>
<body>
<h1>Triangular Wave: 440 Hz</h1>
<button>Play Sound</button>
<p id="idMessage">No Message Yet</p>
<h3>Buffer Properties</h3>
<ul>
<li>Channels: <span id="idChannels"></span></li>
<li>Samples: <span id="idSamples"></span></li>
<li>Samples Per Second: <span id="idSampleRate"></span></li>
</ul>
</body>
<script>
var gqSoundButton = document.querySelector("button");
var gqAudioContext = null;
var gqAudioBufferSourceNode = null;
function Initialization() {
gqAudioContext = new AudioContext();
// Create the buffer of 2 seconds of data
const qAudioBuffer = new AudioBuffer({
numberOfChannels: 1,
length: gqAudioContext.sampleRate * 2.0,
sampleRate: gqAudioContext.sampleRate,
});
// Fill in the sound information
var qChannelsElement = document.getElementById("idChannels");
qChannelsElement.innerHTML = qAudioBuffer.numberOfChannels;
var qSamplesElement = document.getElementById("idSamples");
qSamplesElement.innerHTML = qAudioBuffer.length;
var qSampleRateElement = document.getElementById("idSampleRate");
qSampleRateElement.innerHTML = qAudioBuffer.sampleRate;
// Get the data for the first channel. (There is only one.)
var daBufferData = qAudioBuffer.getChannelData(0);
var dWaveFrequency = 440;
var iSamplesPerWave = Math.floor(gqAudioContext.sampleRate/dWaveFrequency);
// The data is in the interval [-1.0, 1.0]
for (var i = 0; i < qAudioBuffer.length; ++i) {
// We are going to make a triangular wave with frequency 400hz or an A note.
var iMod = (i % iSamplesPerWave);
// These are the two regions of the wave: rising from -1 to 1 and falling from 1 to -1
if (iMod <= iSamplesPerWave/2) {
daBufferData[i] = -1 + 4*(iMod/iSamplesPerWave);
} else {
daBufferData[i] = 1 - 4*((iMod - iSamplesPerWave/2)/iSamplesPerWave);
}
}
// Create the source node, give it a buffer of data, and connect it to the destination
gqAudioBufferSourceNode = gqAudioContext.createBufferSource();
gqAudioBufferSourceNode.buffer = qAudioBuffer;
gqAudioBufferSourceNode.connect(gqAudioContext.destination);
}
gqSoundButton.onclick = () => {
Initialization();
gqAudioBufferSourceNode.start();
var qMessageElement = document.getElementById("idMessage");
qMessageElement.innerHTML = "Playing";
gqAudioBufferSourceNode.onended = () => {
var qMessageElement = document.getElementById("idMessage");
qMessageElement.innerHTML = "Done";
};
};
</script>
</html>© 20072025 XoaX.net LLC. All rights reserved.