TuttiDAW 程式編曲TuttiDAW Code guide

Sample operations

Play part of a sample, change its speed, cut it into slices, fit it to the tempo and choke it.

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

Drum sounds and your own samples are recordings, so you can play a window of them, faster or slower, forwards or backwards. In TuttiDAW every variation becomes its own pad in a Drum Rack, so the result opens in the studio exactly as it sounds.

Window: begin and end

.begin(...) and .end(...) set where a sample starts and stops, as a fraction of its length (0 to 1).

s("oh*4").end("<0.1 0.3 0.6 1>")
Open in /code

Speed

.speed(n) plays a sample n times as fast: 2 is an octave up, 0.5 an octave down, and a negative speed plays it backwards.

s("cp*4").speed("1 2 0.5 -1")
Open in /code

Gating and choke groups: clip and cut

A sample normally plays to its end. .clip(1) stops it at the end of its step (.clip(0.5) halfway). .cut(n) puts sounds in a choke group: a new hit stops the one still ringing, like an open hi-hat closed by a closed one.

s("[oh hh]*4").cut(1)
Open in /code
s("oh*8").clip("<1 0.25>")
Open in /code

Cutting into parts: chop and striate

.chop(n) cuts every event, and its sample, into n parts played one after another. .striate(n) plays the whole pattern n times, a later part of each sample each time.

s("cr").chop(8).speed("<1 -1>")
Open in /code
s("bd sd").striate(4)
Open in /code

Slices: slice and splice

.slice(n, indices) cuts a sample into n equal slices and plays the slices the index pattern names - the classic way to rearrange a break. .splice does the same and changes each slice's speed so it fills its step exactly.

s("cr").slice(8, "0 7 2 5 4 3 6 1")
Open in /code
s("oh").splice(4, "0 2 1 [3 3]")
Open in /code

Fitting to the tempo: loopAt and fit

.loopAt(n) changes a sample's speed so it lasts exactly n cycles - ideal for loops and breaks. .fit() makes each sample fill its own step. Both follow the tempo, so the loop stays in time when you change setcpm.

s("cr").loopAt(1).chop(4)
Open in /code

Scrubbing

.scrub("position:speed") starts the sample at a position, like moving a tape head.

s("cr*4").scrub("0 0.5:2 0.25 0.75:0.5")
Open in /code

With your own loops

These operations are at their best on your own recordings. Declare them with samples(...) (see Sounds) and slice away:

samples({ break: "https://example.com/loops/break-120.wav" })
s("break").loopAt(2).slice(8, "0 1 <2 6> 3 [4 4] 5 6 <7 1>")
Open in /code

A pitched instrument - a synth or a General MIDI name - plays its notes as written: these operations only change sampled drums and samples.