[futurebasic] Music Programming (was "Is This Possible)

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : July 2001 : Group Archive : Group : All Groups

From: Richard Goodman <bhomme@...>
Date: Sun, 29 Jul 2001 08:12:32 -0700
Thanks for your suggestions, Bill. After I posted my plan, I began to think
about it more, and was gradually arriving at the kind of simplification you
suggested. This is how I work most of the time. No strategy is ever cast in
concrete. Rather I keep evolving a plan by successive small changes.

For now, the shortest note duration in Sebastian is a 32nd note. Maybe
later I'll use shorter durations, but for the early stages I want to keep
it simple. Also, I will begin with only three octaves for each note. After
the program is much further along, I may increase that to 4 or 5. Up until
yesterday, I was proceeding rapidly. Then I ran into a bug that took me
hours to track down. Sebastian was making dotted 32nd notes that I had not
authorized. I have "cured" the bug with a kludge and the program is now
working again, but I still haven't found out why the bug is occurring. It's
as if Sebastian has a mind of its own. I'm going to continue to try to find
out why the bug is occurring. Otherwise, the program will end up full of
kludges; very unsatisfying.

Richard

Bill Michael wrote:

<<<<<<<Three integer variables, total; one for 'frequency', including
sharp/flat
and rest, one for 'duration', including dotted, plus one more for "other"
info...

Quick example, building on the "middle C = 128" proposal. Middle C is
128. C# is 129. Db is 130 (I know they're the same frequency, but not the
same notation...), D is 131, D# 132, Eb 133, etc. A rest would be 0. I'd
go ahead and leave the values 'reserved' even for notes that don't exist,
like Cb - that'll let you algorithmically (or even rythmically...) decide
whether to sharp or flat a note, without having to resort to a lookup
table.

Decide your 'minimum duration', perhaps 1/128 note, and make that 1 in
your duration variable. A whole note would be 128, dotted whole 192. I'd
have to look at it in depth, but I don't _think_ any dotted note would
have the same value as a different non-dotted note.

Third variable could indicate anything else, with the obvious
"2=doublet", "3=triplet", etc., still leaving plenty of room for
expansion.

This lets you use a single variable to decide placement on the staff, and
another single variable to decide single-note appearance (modified by #/b
from the first variable). The third variable would normally be 0, but if
not would modify the 'joining' of a set of notes. I'd look very strongly
at an array of note records, instead of three separate arrays, now that
we have true records. I'd also have a separate array of staff records,
for storing time signatures and such. One variable in that array could be
the index for the first note record to appear on that line of the staff.

My $0.02...>>>>>>>