How many melodies are there in the universe?
After writing "Is music written or discovered?" I started
thinking a little bit harder about how one might go about
searching for new musical discoveries. specifically, short little
melodies.
So I started wondering how many melodies of a given length
are out there. Clearly it is a finite number. So I have set out to
try to count them, or at least put an upper bound on their number.
First we have to limit things in some way, we
can't allow infinitely long melodies. So, I'll arbitrarily draw
the line at 32 notes, or rather, 1 measure's worth of 1/32
notes.
There are 12 notes total (in the Western scale, which for
some very good reasons which I can't actually recall, has been
shown to be the "best" scale, overall. There are other scales, but
they all suffer from more problems than the 12 note
scale does. The math seems to end up favoring the 12 note
scale.) I will also ignore intervals larger than 1 octave, just
because.
Further, each note may transition to the next note in a
number of ways,
"normally" (separately plucked and fretted), by sliding, by
hammer-on by pull-off. I will allow for the possibility of sliding
from a note to itself which enables 1/16th notes, 1/8th notes,
(and even 3/8th notes).
So what does that leave?
Choose 1 note from 12, 32 times, and choose one of four
methods of transitioning to the next note, 31 times.
Damn that's a big number.
1232 x 431:
% bc -l
4^31 * 12^32
157637523953697211105908171958186454333476434685722624
Wow!
I can probably divide that number by twelve because it
would count each riff played in each key, and I would really
only want to count each riff in one key. (Yeah, that helps).
12^31 * 4^31
13136460329474767592159014329848871194456369557143552
Hmm, I still don't feel like I've accomplished anything.
What is stil missing is a way to toss out even some
proportion
of the riffs as being "non-musical", I know there are plenty
of
non-musical riffs counted in there, but I have no
idea
how to toss them out.
Hmm, lets say I only allow two methods of transitioning
between
notes. After all, riffs that differ only by using a
pull-off or
a hammer-on vs. an ordinary plucking style aren't really
all that
different, it's more a matter of how well the riff is
performed than a matter of it being a different riff
altogether.
I still have to allow for sliding though, to allow for the
possibility
of different time values for the notes and still have
everything
add up to just one measure.
So that would be:
12^31 * 2^31
6117141027690268863066571918245810640257024
A little better, but still a freakin' huge number, and
I'm still
counting too many duplicate riffs that differ only by
"sliding" vs.
normal plucking.
So thinking about it a little differently, for the first
note, there,
are 12 choices. For the remaining 31 notes, you really have
13 choices,
you can just allow the previous note to continue uninterupted,
or you
can start new note, from a choice of 12. And once again, I
can divide
by 12 to limit each riff to one key.
So that gives us:
12 * 13^31 / 12
34059943367449284484947168626829637
One problem I still see, most music has whole notes, half
notes, quarter notes, eighth notes, sixteenth notes, and 32nd notes,
which I have allowed for, but I have also allowed for 3/8th notes,
7/8th notes, etc... Well those would typically be written as a
quarter note note tied to an eighth note, or a half note tied to
a quarter note tied to an eighth note respectively, so I
suppose I have to allow them.
But, suppose we limit things so that notes can only be
32nds, 16ths, 8ths, 4ths, halves, or whole notes, that is,
no "3/8th" notes, no triplets, or other weird
Chopin-esque stuff. (Chopin would do weird things
like have the left hand play 17 notes in one measure
while the right hand had to play 13 in the same
amount of time, 17 against 13.
What a bastard.)
Anyway, what would that kind of convenient blindness leave?
I imagined a measure, which you chop up in a number of pieces
(at most 32 pieces) and as you cut it up, you could make
as many as 31 cuts, or as few as zero, and each cut
would have to slice one of the remaining pieces
exactly in half. Being rather
bad at combinatorics and discrete math I
wrote a little brute
force C program:
#include < stdio.h>
struct measure
{
int length;
struct measure *left, *right;
};
long
ways_to_cut(struct measure *m, int cuts)
{
long ways_cut = 0;
long left_cut;
long right_cut;
struct measure m1, m2;
int i;
if (m->length <= cuts) return(0L);
if (cuts == 0) return(1L);
if (cuts == 1) return 1L;
m1.length = (m->length >> 1);
m2.length = (m->length >> 1);
m->left = &m1;
m->right = &m2;
cuts--;
for (i=0;i<=cuts;i++)
{
left_cut = ways_to_cut(m->left, i);
right_cut = ways_to_cut(m->right, cuts-i);
ways_cut += left_cut * right_cut;
}
return(ways_cut);
}
int main(int argc, char **argv)
{
long wtc;
struct measure m;
int i;
long total=0L;
m.left = NULL;
m.right = NULL;
m.length = 32;
for (i=0;i < 32;i++)
{
wtc = ways_to_cut(&m, i);
total += wtc;
printf("ways to make %d cuts = %ld\n", i, wtc);
}
printf("Total ways to cut: %ld\n", total);
}
And the output:
ways to make 0 cuts = 1
ways to make 1 cuts = 1
ways to make 2 cuts = 2
ways to make 3 cuts = 5
ways to make 4 cuts = 14
ways to make 5 cuts = 42
ways to make 6 cuts = 100
ways to make 7 cuts = 221
ways to make 8 cuts = 470
ways to make 9 cuts = 958
ways to make 10 cuts = 1860
ways to make 11 cuts = 3434
ways to make 12 cuts = 6036
ways to make 13 cuts = 10068
ways to make 14 cuts = 15864
ways to make 15 cuts = 23461
ways to make 16 cuts = 32398
ways to make 17 cuts = 41658
ways to make 18 cuts = 49700
ways to make 19 cuts = 54746
ways to make 20 cuts = 55308
ways to make 21 cuts = 50788
ways to make 22 cuts = 41944
ways to make 23 cuts = 30782
ways to make 24 cuts = 19788
ways to make 25 cuts = 10948
ways to make 26 cuts = 5096
ways to make 27 cuts = 1932
ways to make 28 cuts = 568
ways to make 29 cuts = 120
ways to make 30 cuts = 16
ways to make 31 cuts = 1
Total ways to cut: 458330
Pipe that through a short filter:
./cuts | awk '/ways to make/ { printf("%d * 12 ^ (%d+1)\n", $7, $4 );}' | bc -l
which yields a very pretty sequence:
12
144
3456
103680
3483648
125411328
3583180800
95025954816
2425096765440
59316834926592
1381995569479680
30617888939311104
645810987668078592
12926491101077962752
244416990259238141952
4337569597936449355776
71878562636176677666816
1109074817815117490552832
15878155968719959464345600
209883024546529473038647296
2544451171947419448687722496
28038096359484820776730755072
277867979924918797194422648832
2447071950614776964115597361152
18877003349528376284550493372416
125327733578312106466500182802432
700040332826172993664543220563968
3184798876813578234913416410038272
11235812186522437499570313794420736
28485157655972376759474034971770880
45576252249555802815158455954833408
34182189187166852111368841966125056
the sum of which is some kind of answer:
./cuts | awk '/ways to make/ { printf("%d * 12 ^ (%d+1)\n", $7, $4 );}' |\
bc -l | ( awk 'BEGIN { printf("0 ");} { printf(" + %s ", $0); }' ;\
echo ) | bc -l
123511210975209861511554928715787036
Ok, so if you listened to one measure
per second, how long could you go without
repeating a measure?
% bc -l
123511210975209861511554928715787036/3600/24/365
3916514807686766283344588049
That's 3916514807686766283344588049 YEARS folks!
Jebus help me!
So there you have it. Boy was this node a waste
of time or what? But it does demonstrate how cool
awk and bc are.