diff options
| author | pepper <pepper@chimecrisis.com> | 2014-05-15 19:06:59 -0700 |
|---|---|---|
| committer | pepper <pepper@chimecrisis.com> | 2014-05-15 19:06:59 -0700 |
| commit | 93e654a02cef3d5913a2088d4c397418dc0cee2f (patch) | |
| tree | bfad328857e5bcc10906a594470ccc12875d936b /sandbox.html | |
doing this
Diffstat (limited to 'sandbox.html')
| -rw-r--r-- | sandbox.html | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/sandbox.html b/sandbox.html new file mode 100644 index 0000000..6fcaa61 --- /dev/null +++ b/sandbox.html @@ -0,0 +1,79 @@ +<!DOCTYPE HTML> +<html> + <head> + <script src="synth.js"></script> + <script src="audio.js"></script> + <script src="gui.min.js"></script> + <script> + function makeGui() { + var gui = new GUI(); + gui.add(TestProgram, 'waveform', 0, 1); + gui.add(TestProgram, 'attackAmplitude', 0, 1); + gui.add(TestProgram, 'sustainAmplitude', 0, 1); + gui.add(TestProgram, 'attackTime', 0, 1); + gui.add(TestProgram, 'decayTime', 0, 1); + gui.add(TestProgram, 'releaseTime', 0, 1); + gui.add(TestProgram, 'phase', 0, 1); + } + + TestProgram = { + 'waveform': 0, + 'attackAmplitude': 0.2, + 'sustainAmplitude': 0.1, + 'attackTime': 0.02, + 'decayTime': 0.3, + 'releaseTime': 0.02, + 'phase': 0.5, + 'createNote': function(note, velocity) { + var frequency = midiToFrequency(note); + return ADSRGenerator( + (this.waveform ? SquareGenerator(frequency, this.phase) : SineGenerator(frequency)), + this.attackAmplitude * (velocity / 128), this.sustainAmplitude * (velocity / 128), + this.attackTime, this.decayTime, this.releaseTime + ); + } + } + + function go(file) { + synth = Synth(44100); + var samplesToNextNote = 0; + var currentGenerator = null; + var noteNumber = 0; + replayer = { + 'generate': function(samples) { + var data = new Array(samples*2); + var samplesRemaining = samples; + var dataOffset = 0; + + while (samplesRemaining) { + if (samplesToNextNote < samplesRemaining) { + if (samplesToNextNote > 0) { + synth.generateIntoBuffer(samplesToNextNote, data, dataOffset); + dataOffset += samplesToNextNote * 2; + } + if (currentGenerator) { + currentGenerator.noteOff(); + } + currentGenerator = TestProgram.createNote(50 + noteNumber, 127); + noteNumber = (noteNumber + 1) % 12; + synth.addGenerator(currentGenerator); + samplesRemaining -= samplesToNextNote; + samplesToNextNote = 11025; + } else { + /* generate samplesRemaining */ + synth.generateIntoBuffer(samplesRemaining, data, dataOffset); + samplesToNextNote -= samplesRemaining; + samplesRemaining = 0; + } + } + return data; + } + } + audio = AudioPlayer(replayer, {'latency': 0.5}); + } + </script> + </head> + <body onload="makeGui()"> + <a href="javascript:void(go())">go</a> + </body> +</html> |
