overdub

TinyScratch

fleshinachair/TinyScratch · ★ 1

A generative auto-scratcher for the Ableton Move (a Schwung sound generator)

README from GitHub, MIT

TinyScratch

A generative auto-scratcher for the Ableton Move (a Schwung sound generator). Press a pad and it writes a new turntable scratch for your sample, plays it in time with your song, and lets you keep the ones you like.

Install

Install TinyScratch.tar.gz from the releases page with Schwung's module manager (Install Custom Module, From GitHub URL, fleshinachair/TinyScratch), then load TinyScratch in a track slot as a sound generator. It comes with two samples, Ahhh and Fresssh, and three clips for each.

Getting started

  1. Open the Pads screen: touch dial 1 and press the jog wheel (Back leaves it).

    row (from the top)pads
    1 and 2clips 1 to 14, then Generate (orange) and Auto (green)
    3the eight samples: Ahhh, Fresssh, User 1 to 6
    4the fader (red), or cues when no clip is playing
  2. Generate: press Generate for a new clip; press it again for another. Clips follow the transport, so press play if nothing sounds.

  3. Keep: tap an empty clip pad while a generated clip plays. Auto plays your kept clips one after another.

  4. Delete: hold a clip pad for 1.5 s.

  5. Pages: each sample has four pages of 14 clips; < and > turn the page.

  6. Your own sample: hold an empty User pad and make a sound into the Move's input (up to 10 s), or use Load Sample to pick a .wav. Hold a User pad for 1.5 s to remove it. Short, noisy, aggressive sounds scratch best.

Playing

  • The clip plays while the transport runs. Hold a red pad to cut the sound, like a crossfader.
  • With the transport stopped, hold a red pad to play the clip until you let go.
  • Cue pads: with no clip playing (tap Auto again to stop), the red pads drop the needle on the sample's words or hits.
  • Jog wheel right zooms into the clip; left zooms back out. Notes from C3 up also cut the sound in.

Dials

The jog wheel moves between the pages: the picture, Main, Playback, Pad Play and Waveform. On the Pads screen the eight dials are Style, Length, Drag, Humanise, Groove, Echo, Forwards and Finish.

Main (what Generate makes next; a kept clip never changes):

dial
Styleone of the styles below
Length1, 2 or 4 bars
Forwardshow often the record is let go through the word
Finishhow often a clip ends by playing the whole sample through
Echohow often a bar has an echo scratch (a stab repeated, quieter each time)
Groovehow far Improv keeps to a drum pattern, leaving room for a beat. Thin on its own, good over a song

Playback (how a clip plays, not the clip itself):

dial
Swingstraight to hard swing
Humaniseloose timing and cuts, different every pass
Bitesaturation, for an edge that cuts through a mix
Clip Depth / Offsethow far the clip moves along the sample, and where
Draghow quickly the playhead follows: low is digital, high is more like a record
Gain-24 to +12 dB
Vinylsounds more like a record under a needle: slow moves get quieter, with faint hiss and crackle

Pad Play: Note Gate, Vel to Vol, Cue Pads and Taste Log.

Taste Log is for a future feature that learns what you like. Nothing uses it yet, and it never leaves your Move. It writes a line to taste_log.csv in the module folder when you keep, skip or delete a clip (the clip's settings and some measurements, no audio). Turn it off on Pad Play, or delete the file to clear it.

Styles

style
FlowImprov (the default): a two-bar improvised phrase, then a variation, moving like a real DJ's hand
SnapImprov as it was in 1.1: faster flicks, punchier
FreestyleImprov with longer, looser sounds, like a DJ scratching on their own
Babyback and forth, no fader
Cutspushed forward, fader shut on the way back
Militarycuts and rubs in a marching rhythm
Scribblea fast vibrating rub on one spot
Staba short, quick push
Chirpa quick baby with a click at each turn
Transforma slow stroke with the fader tapped open in rhythm
Flarea baby with clicks in the middle of each stroke
Crabthree or four fast clicks in one push
Orbita smooth, round 2-click flare
Dragslow, low strokes
Tearpushed, stopped, pushed again, then the same backwards
Stutterthe start of a word pushed in time, then the whole word let go: "f-f-f-fight". Best on speech

Generate makes a recipe (sample, style, seed, length and dials), so a clip can always be made again. Kept clips are saved exactly, so they sound the same whatever later versions do. Clips are stored in recipes.txt and kept.bin in the module folder.

Samples

Ahhh and Fresssh are the classic scratch sounds from "Change the Beat" (Fab 5 Freddy, 1982), described as public domain (see samples/CREDITS.txt). User 1 to 6 start empty.

  • Recordings are trimmed, faded and levelled, and saved as user1.wav to user6.wav in samples/.
  • You can also copy .wav files (16-bit, up to 10 s) into samples/: they fill the free User slots.
  • Long samples (over 1.2 s) are scratched the way a DJ works a phrase: each bar starts on one of its words or hits.

The Remote UI

TinyScratch's Remote UI

With TinyScratch in a track's synth slot, open http://move.local:7700/remote-ui on the same network:

  • A turntable that turns with the scratch. Grab the record to scratch it by hand.
  • Big versions of the waveform, clip view and zoom, with each stroke named (baby, chirp, flare...).
  • The pads (also on the keyboard: 1 to 8 samples, Q to I and A to H clips, Space Generate, K Auto) and all the dials.
  • Drop a sound on the deck to load it into a User slot.
  • Drop a whole song to pick up to six spots from it, preview them, and send them to User slots.
  • PERFORM shows just the deck, the pads and the zoom.

Credits

The look and workflow are inspired by the Live Scratcher module by Andrew Norris. TinyScratch is an independent project, written from scratch. Its styles follow the Turntablist Transcription Methodology (TTM) and the research of Kjetil Falkenberg Hansen and Roberto Bresin (KTH), and its strokes are modelled on a recorded performance from ScratchML.

Licence

The code is released under the MIT licence. The samples are described in samples/CREDITS.txt. Clips imported from a Live Pack (tools/import_clips.py) are someone else's work and are not covered.

Development

scripts/test.sh           all tests: engine and plugin (with sanitisers), the screens, and the Remote UI in a browser
scripts/build.sh          aarch64 dsp.so and build/TinyScratch.tar.gz
scripts/install_move.sh   build, copy to the Move over SSH, verify, restart
scripts/build_demo.sh     the Remote UI as a standalone page playing a recording of the engine
tools/import_clips.py     clips from an Ableton Live Pack you own, into local/clips.bin

module.json is generated from the plugin's parameter table (scripts/gen_manifest.sh). help.json is the on-device help.