| ← 4.14 FX | → |
https://live.codecircle.com/d/aAfgQMCcPCb2JSJj7
<body>
<div
tabindex="0"
style="background:black; height:100%;"
>
<input style="background:black; color:white; font-size:25pt" type="text" value="" id="freq_box">
<br>
<input style="background:black; color:white; font-size:25pt" type="text" value="" id="freq_box_2">
<br>
<input style="background:black; color:white; font-size:25pt" type="text" value="" id="seq_box">
<br>
</div>
</body>
<script>
/*
function Sequence ( contexte, osc_type, start_freq, freq_changes, interval, box_id ) {
this.start_freq = start_freq;
this.freq_changes = freq_changes;
this.interval = interval;
this.box = document.getElementById( box_id );
this.contexte = contexte;
this.step = 0;
this.current_freq = this.start_freq;
this.osc = this.contexte.createOscillator();
this.osc.type = osc_type;
this.osc.frequency.value = this.start_freq;
this.osc_amp = this.contexte.createGain();
this.osc_amp.gain.value = 0.125;
this.osc.connect(osc_amp);
}
Sequence.prototype.change_note = function ( when ) {
// get the next frequency change from the
// freq_change array
var freq_change = this.freq_changes[this.step % this.freq_changes.length];
// move along the step, ready for the next time we get called
this.step ++;
// update the frequency
this.current_freq = this.current_freq + freq_change;
// check if it went too high or too low
if (this.current_freq > 1500 || this.current_freq < 100){
this.current_freq = this.start_freq;
}
// print the chosen frequncy into the input tag so we can see it
this.box.value = this.current_freq;
// finally, change the frequency of the oscillator
osc.frequency.setValueAtTime(this.current_freq, when);
};
var seq_1 = new Sequence ('triangle', 200, [200], 0.5, 'freq_box');
*/
var start_freq = 200;
var current_freq = start_freq;
var freq_changes = [200];
var step = 0;
var interval = 0.5; // speed up here
function changeNote(when){
// get the next frequency change from the
// freq_change array
var freq_change = freq_changes[step % freq_changes.length];
// move along the step, ready for the next time we get called
step ++;
// update the frequency
current_freq = current_freq + freq_change;
// check if it went too high or too low
if (current_freq > 1500 || current_freq < 100){
current_freq = start_freq;
}
// print the chosen frequncy into the input tag so we can see it
document.getElementById('freq_box').value = current_freq;
// finally, change the frequency of the oscillator
seq_selection ();
document.getElementById('freq_box_2').value = seq(current_freq);
document.getElementById('seq_box').value = current_seq;
osc.frequency.setValueAtTime(current_freq, when);
osc2.frequency.setValueAtTime( seq(current_freq) , when);
}
function seq ( freq ) {
switch ( current_seq ) {
case 0:
return (freq * 0.075) * (freq * 0.075);
case 1:
return 13000 - (freq * 0.075) * (freq * 0.075);
case 2:
return 1600 - freq;
/* case 3:
return
break;
case 4:
break;
case 5:
break;*/
}
}
var current_seq_since = 0;
var current_seq = 0;
function seq_selection () {
current_seq_since++;
if (current_seq_since > 6) {
current_seq_since = 0;
current_seq = Math.floor( Math.random() * 3);
}
}
var audio_context = window.AudioContext || window.webkitAudioContext;
var con = new audio_context();
var osc = con.createOscillator();
osc.type = 'triangle';
osc.frequency.value = start_freq;
var osc_amp = con.createGain();
osc_amp.gain.value = 0.125;
osc.connect(osc_amp);
var osc2 = con.createOscillator();
osc2.type = 'sawtooth';
osc2.frequency.value = start_freq;
var osc2_amp = con.createGain();
osc2_amp.gain.value = 0.125;
osc2.connect(osc2_amp);
var del = con.createDelay();
osc_amp.connect(del);
osc2_amp.connect(del);
var fb = con.createGain();
del.connect(fb);
fb.connect(del);
del.delayTime.value = 0.25;
fb.gain.value = 0.75;
del.connect(con.destination);
//osc_amp.connect(con.destination);
osc.start();
osc2.start();
// this code will wake up every (wait_time) ms
// and schedule a load of drum triggers on the clock
// each time, remembering where it scheduled to in the future
// so it does not repeat anything
var wait_time = 0.5;
var got_up_to;
setInterval(function(){
var now = con.currentTime;
// how far into the future will we schedule?
// we schedule beyond the next wait time as we cannot
// rely on it being exactly 'wait_time' ms before
// we get woken up again, therefore put in a few
// extra events on the scheduler to cover any delays
var max_future_time = now + (wait_time * 1.5);
if (got_up_to > now) {// already scheduled up to this point
now = got_up_to;
}
while (now <= max_future_time){
changeNote(now);
now += interval;
}
got_up_to = now;
}, wait_time*1000);
</script>