[WIP] MIDI/DAW for the DUB enthusiast!
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
examples
spec
src
.eslintrc
.gitattributes
.gitignore
.travis.yml
DUB.sublime-syntax
README.md
coffeelint.json
package-lock.json
package.json

README.md

MIDI on SCOOPS

Translate DAW (from GUI-world) to ASCII (to text-world) as "Fast DUB Prototyping" approach.

I spent lots of time using DAWs just for settings up pet projects, sandboxes, laboratories, etc.

Just having fun and brainstorming is difficult because I don't have enough instruments for playing music.

Since technology is a good solution because it's already cheap, I would like to have a "tool" for writing DUB in text format.

Libraries

Syntax

Each expression would generate a value or an array of values, sub-expressions are resolved and would produce one or more values, etc.

Once declared, all expressions are concatenated into a single array where possible.

# track 1

@instrument: 1

%sequence: x--- *16
%range: 10..120 /11

notes: c3 d3
pattern: %sequence
accentMap: 5 %range 127x3

The code above would produce the next scribbletune's settings:

{
  notes: ['c3', 'd3'],
  pattern: 'x---'.repeat(16),
  accentMap: [5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 127, 127, 127],
}

Using the CLI

When calling dub it will use timidity as default for MIDI playback.

  • If you specify a file, it will be loaded an played. e.g. dub sample (.dub will be appended if missing)
  • Opening a directory will watch and play on any changes. e.g. dub music/src/

Use a different player by appending the arguments:

$ dub music/src fluidsynth -i --gain 2 music/sf2/PC51f.sf2
# under the hood it will be called as `fluidsynth music/sf2/PC51f.sf2 path/to/generated_midi_file.mid`

Try the included examples:

$ dub examples/billy_jean.dub
$ dub examples/locks.dub
$ dub examples/x.dub

MIDI Drums

To enable the Drumkit you must use the channel 9, e.g.

@tempo: 90

# hat
@channel: 9

notes: f#2
pattern: xxxx *16

# snare
notes: e2
pattern: [---x][-x] *32
Note/Sound Mappings
  • d1 — Heart Bit
  • d#1 — Zap
  • g1 — Stick
  • a1 — Side Stick
  • a#1 — Ring Bell
  • b1 — Acoustic Bass Drum
  • c2 — Bass Drum 1
  • c#2 — Side Stick
  • d2 — Acoustic Snare
  • d#2 — Hand Clap
  • e2 — Electric Snare
  • f2 — Low Floor Tom
  • f#2 — Closed Hi Hat
  • g2 — High Floor Tom
  • g#2 — Pedal Hi-Hat
  • a2 — Low Tom
  • a#2 — Open Hi-Hat
  • b2 — Low-Mid Tom
  • c3 — Hi-Mid Tom
  • c#3 — Crash Cymbal 1
  • d3 — High Tom
  • d#3 — Ride Cymbal 1
  • e3 — Chinese Cymbal
  • f3 — Ride Bell
  • f#3 — Tambourine
  • g3 — Splash Cymbal
  • g#3 — Cowbell
  • a3 — Crash Cymbal 2
  • a#3 — Vibraslap
  • b3 — Ride Cymbal 2
  • c4 — Hi Bongo
  • c#4 — Low Bongo
  • d4 — Mute Hi Conga
  • d#4 — Open Hi Conga
  • e4 — Low Conga
  • f4 — High Timbale
  • f#4 — Low Timbale
  • g4 — High Agogo
  • g#4 — Low Agogo
  • a4 — Cabasa
  • a#4 — Maracas
  • b4 — Short Whistle
  • c5 — Long Whistle
  • c#5 — Short Guiro
  • d5 — Long Guiro
  • d#5 — Claves
  • e5 — Hi Wood Block
  • f5 — Low Wood Block
  • f#5 — Mute Cuica
  • g5 — Open Cuica
  • g#5 — Mute Triangle
  • a5 — Open Triangle
  • a#5 — Cabasa 2
  • c6 — Curtain

MIDI Instruments

Those are enabled through the @instrument annotation, e.g.

@tempo: 127

# skank

@instrument: 1

notes: c4|d#4|g4 % % c4|f4|g#4
pattern: -x-x *16
Number/Sound
  • 0-7 — Piano
  • 8-15 — Chromatic Percussion
  • 16-23 — Organ
  • 24-31 — Guitar
  • 32-39 — Bass
  • 40-47 — Strings
  • 48-55 — Ensemble
  • 56-63 — Brass
  • 64-71 — Reed
  • 72-79 — Pipe
  • 80-87 — Synth Lead
  • 88-95 — Synth Pad
  • 96-103 — Synth Effects
  • 104-111 — Ethnic
  • 112-119 — Percussive
  • 120-127 — Sound Effects