here's a sketch of what the future
documentation will be:
program args
---
arg 1 = filename of input composition file
arg 2 = filename of output WAV file
file format
---
- hiearchical tag-based format somewhat
similar to HTML. syntax is loosely
C-style, with brackets bounding tag
contents; i.e tagname { tag contents }.
- each file must specify a global
bpm (beats per minute) value, to
provide as a reference in song
construction. the bpm is more
properly called mpm or measures
per minute, since each "beat" (bpm)
or "measure" (mpm) can be divided
into a given number of sub-beats,
via the measure division attribute
of the sample tag.
- tags are as follows:
drumm - root tag; contains
a list of tags.
{
flowrate
{
bpm (an int)
}
files - contains a list of all
{ files used
file
{
path (a string)
name (a string)
}
}
letsdrumm - tag to start a
{ composition; simply
contains a list of samples
sample - main tags used to
{ layout the compositon
name (a string)
minute number (an int)
measure number (an int)
measure divison (an int)
-- how many beats per measure?
measure offset (an int)
}
}
}
- thus, the simplest song file is 62 bytes:
drumm{flowrate{1}files{file{a a}}letsdrumm{sample{a 0 0 4 0}}}