Dittytoy allows you to log values to the console at the left of your screen. You can also log values to probes.
dittytoy.net/syntax#built-in
#dittytoy #tutorial
Log in to post a comment.
// #11 Debug your Ditty. DittyToy 2022.
// The MIT License.
//
// https://dittytoy.net/ditty/6bd9bbe6d8
//
// Debugging your ditty while it runs 44100 times per second can be pretty hard. Unfortunately, you can't set breakpoints,
// and writing values to the default console.log at this rate will most likely crash your browser.
//
// However, Dittytoy allows you to log values to the console at the left of your screen. You can also log values to probes.
//
// https://dittytoy.net/syntax#built-in
//
input.pan = 0; //min=-1, max=1, step=0.001
input.note = 60; // min=0, max=120, step=0.001
input.envAttack = 0.1; // min=0, max=0.2, step=0.001
input.envDecay = 0.2; // min=0, max=2, step=0.001
input.envDuration = 1.0; // min=0, max=2, step=0.001
input.envSustain = 0.5; // min=0, max=1, step=0.001
input.envRelease = 0.5; // min=0, max=2, step=0.001
input.envCurve = -2; // min=-9, max=9, step=0.1
const osc = synth.def(
class {
constructor(options) {
this.phase = 0;
}
process(note, env, tick, options) {
// debug log functionality. The log appears in the console at the left of your ditty. You can use:
//
// debug.log( label, value)
// debug.warn( label, value)
// debug.error( label, value)
debug.log('note', note);
this.phase += midi_to_hz(note) * ditty.dt;
const waveform = Math.sin(this.phase * Math.PI * 2);
// debug probes (Safari not supported!). For each label an oscilloscope will appear left of your ditty.
//
// debug.probe( label, value, amp (optional), duration (horizontal resolution in seconds, optional) );
//
// a probe expects one value per sample (more will be ignored, less will pause the probe)
//
debug.probe('waveform', waveform, 1, 5 / midi_to_hz(note));
debug.probe('envelope', env.value, 1, tick_to_second(env.duration) );
return waveform * env.value;
}
}, {}
);
// signalProbe - by athibaul
const signalProbe = filter.def(
class {
process(input) {
debug.probe('signal', input[0]+input[1], 2, 1);
return input;
}
});
loop( (i) => {
debug.warn('loop', i);
osc.play( () => input.note,
{
attack: input.envAttack,
decay: input.envDecay,
sustain: input.envSustain,
duration: input.envDuration,
release: input.envRelease,
curve: input.envCurve,
env: adsr,
pan: () => input.pan
});
sleep( Math.max(second_to_tick(input.envAttack + input.envDecay), input.envDuration) + second_to_tick(input.envRelease));
}, { name: 'ADSR envelope' }).connect( signalProbe.create() );