Waveform Music Generator
Info
Created On: April 10, 2023
Created By:
AI
Model: gpt-4-0314
Time: 189 seconds
Prompt Tokens: 900
Completion Tokens: 1379
Total Token Cost: 2279
Get This App On Your Website
Copy Code
1. Copy the code above with the iframe and link.
2. Paste the code into your website.
3. Resize the iframe to fit your website.
Javascript, HTML, CSS Code
Copy
<html>
<head>
<script type="text/javascript"> window.addEventListener('error', function(event) { var message = JSON.parse(JSON.stringify(event.message)); var source = event.filename; var lineno = event.lineno; var colno = event.colno; var error = event.error; window.parent.postMessage({ type: 'iframeError', details: { message: message, source: source, lineno: lineno, colno: colno, error: error ? error.stack : '' } }, '*'); }); window.addEventListener('unhandledrejection', function(event) { window.parent.postMessage({ type: 'iframePromiseRejection', details: { reason: event.reason } }, '*'); }); </script>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Waveform Music Generator</title>
<meta name="description" content="Generate and play random waveforms as music">
<meta name="keywords" content="waveform, music, generator, sound, random">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<script type="text/javascript">
var localStoragePrefix = "ct-168116167497448";
var lastSave = 0;
function saveLocal(data) {
if (Date.now() - lastSave < 1000) {
return;
}
let cookie = localStoragePrefix + "=" + JSON.stringify(data) + "; path=" + window.location.pathname + "'; SameSite=Strict";
cookie += "; expires=" + new Date(Date.now() + 1000 * 60 * 60 * 24 * 365 * 1000).toUTCString();
document.cookie = cookie;
lastSave = Date.now();
}
function loadLocal() {
var cookiePrefix = localStoragePrefix + "=";
var cookieStart = document.cookie.indexOf(cookiePrefix);
if (cookieStart > -1) {
let cookieEnd = document.cookie.indexOf(";", cookieStart);
if (cookieEnd == -1) {
cookieEnd = document.cookie.length;
}
var cookieData = document.cookie.substring(cookieStart + cookiePrefix.length, cookieEnd);
return JSON.parse(cookieData);
}
}
</script>
<script type="text/javascript">
const NUM_WAVEFORMS = 5;
let waveforms = [];
let audioContext = new (window.AudioContext || window.webkitAudioContext)();
let waveColors = [];
function randomColor() {
return '#' + Math.floor(Math.random() * 16777215).toString(16);
}
function generateWaveform() {
let nodes = [];
for (let i = 0; i < 100; i++) {
nodes.push(Math.random());
}
return nodes;
}
function smoothWaveform(waveform) {
let smoothedWaveform = [];
for (let i = 0; i < waveform.length; i++) {
let prev = waveform[i > 0 ? i - 1 : waveform.length - 1];
let next = waveform[i < waveform.length - 1 ? i + 1 : 0];
smoothedWaveform.push((prev + waveform[i] + next) / 3);
}
return smoothedWaveform;
}
function drawWaveform(canvas, waveform, color) {
let ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
ctx.strokeStyle = color;
ctx.lineWidth = 2;
let step = canvas.width / waveform.length;
for (let i = 0; i < waveform.length; i++) {
ctx.lineTo(i * step, canvas.height * (1 - waveform[i]));
}
ctx.stroke();
}
function regenerateWaveform(index) {
waveforms[index] = smoothWaveform(generateWaveform());
drawWaveform($('#waveform-canvas-' + index)[0], waveforms[index], waveColors[index]);
}
function regenerateAllWaveforms() {
for (let i = 0; i < NUM_WAVEFORMS; i++) {
regenerateWaveform(i);
}
}
function playWaveform(index) {
let waveform = waveforms[index];
let oscillator = audioContext.createOscillator();
let gainNode = audioContext.createGain();
gainNode.gain.value = 0.5;
oscillator.connect(gainNode);
gainNode.connect(audioContext.destination);
oscillator.frequency.value = 440;
let wave = audioContext.createPeriodicWave(new Float32Array(waveform), new Float32Array(waveform.length));
oscillator.setPeriodicWave(wave);
oscillator.start();
setTimeout(() => oscillator.stop(), 1000);
}
function playAllWaveforms() {
for (let i = 0; i < NUM_WAVEFORMS; i++) {
setTimeout(() => playWaveform(i), i * 200);
}
}
$(document).ready(function() {
for (let i = 0; i < NUM_WAVEFORMS; i++) {
waveColors.push(randomColor());
regenerateWaveform(i);
}
});
</script>
<style>
canvas {
display: block;
width: 100%;
height: 100px;
}
.waveform-container {
margin-bottom: 15px;
}
</style>
<link rel="canonical" href="https://calculator.tools/prompt/120/">
<meta charset="utf-8">
</head>
<body>
<div id="main-container" class="container">
<h1 class="text-center">Waveform Music Generator 🎵</h1>
<button class="btn btn-primary" onclick="regenerateAllWaveforms()">Regenerate All Waveforms</button>
<button class="btn btn-success" onclick="playAllWaveforms()">Play All Waveforms</button>
<hr>
<div id="waveform-list">
${Array.from({ length: NUM_WAVEFORMS }, (_, i) => `
<div class="waveform-container">
<canvas id="waveform-canvas-${i}" width="300" height="100"></canvas>
<button class="btn btn-secondary" onclick="regenerateWaveform(${i})">Regenerate Waveform</button>
<button class="btn btn-info" onclick="playWaveform(${i})">Play Waveform</button>
</div>
`).join('')}
</div>
</div>
<script type="text/javascript"> var localStoragePrefix = "ct-{{ cachebreaker }}"; var lastSave = 0; function saveLocal(data) { if (Date.now() - lastSave < 1000) { return; } let cookie = localStoragePrefix + "=" + JSON.stringify(data) + "; path=" + window.location.pathname + "'; SameSite=Strict"; cookie += "; expires=" + new Date(Date.now() + 1000 * 60 * 60 * 24 * 365 * 1000).toUTCString(); document.cookie = cookie; lastSave = Date.now(); } function loadLocal() { var cookiePrefix = localStoragePrefix + "="; var cookieStart = document.cookie.indexOf(cookiePrefix); if (cookieStart > -1) { let cookieEnd = document.cookie.indexOf(";", cookieStart); if (cookieEnd == -1) { cookieEnd = document.cookie.length; } var cookieData = document.cookie.substring(cookieStart + cookiePrefix.length, cookieEnd); return JSON.parse(cookieData); } } </script>
<script type="text/javascript"> window.addEventListener('load', function() { var observer = new MutationObserver(function() { window.parent.postMessage({height: document.documentElement.scrollHeight || document.body.scrollHeight},"*"); }); observer.observe(document.body, {attributes: true, childList: true, subtree: true}); window.parent.postMessage({height: document.documentElement.scrollHeight || document.body.scrollHeight},"*"); }); </script>
</body>
</html>