TuttiDAW Música com códigoTuttiDAW Code guide

Effect controls

Filters, reverb, delay, distortion, panning, envelopes and synth controls - and moving them with signals.

This page has not been translated yet, so it is shown in English.

Controls are methods that shape the sound of every event: .lpf(800), .room(0.4). In TuttiDAW each control is played by a real device on the voice's track - a filter control adds an Auto Filter, room a Reverb - so what you hear is what you get when you open the program in the studio.

Filters

.lpf(hz) is a low-pass filter (it removes highs), .hpf(hz) a high-pass (it removes lows), .bpf(hz) a band-pass. .lpq(...) / .hpq(...) add resonance.

note("c2*8").s("sawtooth").lpf("<300 600 1200 2400>").lpq(6)
Open in /code
s("hh*16").hpf(6000).gain(0.6)
Open in /code

.vowel("a e i o u") is a formant filter that makes a sound talk.

note("c2*4").s("sawtooth").vowel("<a e i o>")
Open in /code

Space: room and delay

.room(amount) sends the voice into a reverb; .size(...) makes the room bigger. .delay(amount) adds an echo, with .delaytime(cycles) and .delayfeedback(0..1).

s("~ cp ~ cp").room(0.6).size(4)
Open in /code
note("<c4 eb4> ~ ~ ~").s("triangle").delay(0.5).delaytime(3/16).delayfeedback(0.55)
Open in /code

Drive and lo-fi

.shape(0..1) and .distort(...) add drive; .crush(bits) reduces the bit depth (lower is crunchier) and .coarse(n) the sample rate.

s("bd*4, ~ sd").shape(0.5)
Open in /code
note("c3 eb3 g3 bb3").s("square").crush(5)
Open in /code

Level and stereo

.gain(...) is the level into the effects, .postgain(...) after them. .pan(0..1) places the voice from left (0) to right (1).

s("hh*8").pan("0 1 0.25 0.75").gain(0.7)
Open in /code

Modulation effects

.phaser(rate) and .chorus(amount) add movement; .compressor(...) evens out the level.

note("[c3,g3,bb3]*2").s("sawtooth").phaser(1).lpf(1800)
Open in /code

Envelopes

.attack, .decay, .sustain and .release shape each note's volume, in seconds (sustain is a level, 0 to 1). A slow attack and long release make a pad; a short decay with no sustain makes a pluck.

note("<[c3,eb3,g3] [bb2,d3,f3]>").s("sawtooth").attack(0.4).release(1).lpf(1500)
Open in /code
note("c4 g4 eb4 g4").s("square").decay(0.12).sustain(0)
Open in /code

Synth controls

These play on the TuttiDAW synth that stands in for the waveform:

  • .lpenv(depth) with .lpattack / .lpdecay / .lpsustain / .lprelease: an envelope on the filter cutoff;
  • .fm(index) with .fmh(ratio) and .fmdecay(...): FM brightness (the voice moves onto Operator);
  • .penv(semitones) with .pdecay(...): a pitch sweep, good for kicks and zaps;
  • .vib(rate) with .vibmod(semitones): vibrato;
  • .detune(...) and .unison(voices) on supersaw.
note("c2 ~ c2 [~ c3]").s("sawtooth").lpf(250).lpenv(4).lpdecay(0.15).lpsustain(0)
Open in /code
note("c3 e3 g3 c4").s("sine").fm(3).fmh(2).fmdecay(0.3)
Open in /code
note("c2*4").s("sine").penv(24).pdecay(0.08)
Open in /code

Each of these is an approximation of Strudel's synth on a TuttiDAW instrument; the diagnostics list say which device plays it.

Moving values: signals

A signal is a value that moves continuously through the cycle. sine, cosine, saw, tri and square go from 0 to 1; perlin and rand move smoothly or randomly. .range(min, max) scales a signal, .slow(n) stretches it over n cycles.

note("c2*16").s("sawtooth").lpf(sine.range(300, 3000).slow(4))
Open in /code
s("hh*16").gain(perlin.range(0.3, 0.9))
Open in /code

.segment(n) samples a signal n times per cycle, which turns it into notes:

n(saw.range(0, 8).segment(8)).scale("C:minor")
Open in /code

In the studio: automation

When you Open in TuttiDAW, a control that changes over time - a pattern like "<300 600>" or a signal - becomes a clip envelope on the device parameter, so you can see and edit the movement like any other automation.