User:Lbattich/Sound Prototypes

From XPUB & Lens-Based wiki
< User:Lbattich
Revision as of 21:03, 14 October 2014 by Lbattich (talk | contribs) (Created page with "== Audio Test - Play a random composition using the Oscillator wave generator on the Web Audio API == Works only on Firefox so far... * [http://lucasbattich.com/tests/random...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Audio Test - Play a random composition using the Oscillator wave generator on the Web Audio API

Works only on Firefox so far...


<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="content-type">
    <title>Audio test - Play a random composition</title>
  </head>
  <body>
  	<p>Choose frequency between 80Hz and 880Hz:  <input type="text" size="7" id="fr" value=""> <label for="fr">Hz</label></p>
  	<p>Choose gain between 0.2 and 1.2:          <input type="text" size="7" id="gn" value=""> <label for="gn">Gain</label></p>
  	<p>Choose duration between 1/50sec and 1sec: <input type="text" size="7" id="tm" value=""> <label for="tm">Seconds</label></p>
  	<p>Choose waveform:                          <input type="text" size="7" id="vw" value=""> <label for="tm">wave</label></p>
  	<br>
    <button onclick="play()">play</button>
    <button onclick="silence()">stop</button>
    <script>
    
    var context = new AudioContext();
    var tone = context.createOscillator();
    var gainNode1 = context.createGain(); // Create gain node 1
    var on=0;
    
    tone.type = 0; // sine wave
    tone.frequency.value = 0;
	tone.connect(gainNode1); // Connect sound source tone to gain node 1
	gainNode1.connect(context.destination);
	gainNode1.gain.value = 0;
	tone.start(0);
	
		function play(){
		if (on==0){
			on=1;
			change();
		}
		}

	function change() {
		if (on==1){
		// random gain between 0.2 and 1.2
		var gain = 0.2+Math.random();
		gainNode1.gain.value = gain;
		document.getElementById("gn").value = gain;
		
		// random frequency between 80 and 880
		var freq = 80 + Math.floor(801*Math.random());
		tone.frequency.value = freq;
		document.getElementById("fr").value = freq;
		
		//random wave shape
		var wave = Math.floor(4*Math.random());
		tone.type = wave; 
		if (wave==0){document.getElementById("vw").value="Sine";}
        else if (wave==1){document.getElementById("vw").value="Square";}
        else if (wave==2){document.getElementById("vw").value="Sawtooth";}
        else if (wave==3){document.getElementById("vw").value="Triangle";}
        
		// random duration of note -  1/50sec to 1sec
		var time = 20 + Math.floor(901*Math.random());
		document.getElementById("tm").value = time/1000;
		setTimeout(function(){change()},time);
        }
	}
	
  	function silence() {
  		tone.frequency.value = 0;
  		gainNode1.gain.value = 0;
  		on=0;
  	}
  
    </script>
  </body>
</html>