A SuperCollider Quark that parses ABC notation into SC3 pattern objects (Pbind, Ppar, Pdef) for use in realtime (JITLib) and offline (NRT) contexts.
ABC parsing is handled by abc2midi, a mature C program. The Quark reads the resulting MIDI and converts it to SuperCollider patterns. You bring your own SynthDefs — MIDI program numbers from %%MIDI program directives map to user-defined instruments via ABCInstrumentMap.
- SuperCollider >= 3.x
abc2midion PATH
nix develop # from the quark directoryInstall abcmidi from your package manager.
Quarks.install("/path/to/abcNotationQuark");
// recompile class librarys.boot;
// Play ABC directly
ABCParser.play("X:1
T:Scale
M:4/4
L:1/8
Q:1/4=120
K:C
CDEF GABc|c'bag fedc|");
// Or use the String extension
"X:1\nT:Scale\nM:4/4\nL:1/8\nK:C\nCDEF GABc|".playABC;var score = ABCParser.parseFileSync("/path/to/tune.abc");
score.tune.tracks.do { |t, i|
"Track %: '%' program=% events=%".format(i, t.name, t.program, t.events.size).postln;
};var score = ABCParser.parseSync(abcString);
// All voices as Ppar
ABCPatternBuilder.tuneToPpar(score.tune).play;
// Single voice as Pbind
ABCPatternBuilder.trackToPbind(score.tune.tracks[0]).play;
// As a named Pdef
ABCPatternBuilder.tuneToPdef(score.tune, name: \myTune).play;var map = ABCInstrumentMap(\default);
map.put(81, \mySynthLead);
map.putCategory(\bass, \subBass);
map.putCategory(\strings, \padSynth);
map.putDrum(36, \kick);
map.putDrum(38, \snare);
ABCPatternBuilder.tuneToPpar(score.tune, map).play;Pdef(\x).play;
Pdef(\x).abc_("X:1\nT:Live\nM:4/4\nL:1/8\nK:C\nCDEF GABc|");
// Swap a single voice from multi-voice ABC
Pdef(\bass).abc_(abcString, voiceIndex: 2);var score = ABCParser.parseSync(abcString);
var pattern = ABCPatternBuilder.scoreToPpar(score, map);
pattern.asScore(score.tune.totalDur + 1).recordNRT(
"/tmp/osc.osc", "/tmp/output.aiff",
sampleRate: 44100
);ABC string/file
│
▼
abc2midi (C binary)
│
▼
Standard MIDI File
│
▼
ABCMIDIReader (sclang)
│
▼
ABCScore ──► ABCTune ──► ABCTrack ──► ABCEvent
│
▼
ABCPatternBuilder
│
├──► Pbind (single voice)
├──► Ppar (multi-voice)
└──► Pdef (JITLib-ready)
| Class | Purpose |
|---|---|
ABCParser |
Top-level API. Shells out to abc2midi, reads MIDI, returns ABCScore. |
ABCMIDIReader |
Reads Standard MIDI File binary format into ABCScore. |
ABCScore |
IR container: ABCScore → ABCTune → ABCTrack → ABCEvent. |
ABCPatternBuilder |
Converts IR to Pbind/Ppar/Pdef. |
ABCInstrumentMap |
Routes MIDI programs and drum notes to SynthDefs. |
Patterns produced by ABCPatternBuilder use these Pbind keys:
| Key | Source |
|---|---|
\instrument |
From ABCInstrumentMap lookup |
\midinote |
MIDI note number (Integer or Array for chords) |
\dur |
Time until next event (beats) |
\sustain |
Sounding duration (beats) |
\amp |
Velocity / 127 |
GPL-3.0