Is this procedural? What is this called?

43 views
Skip to first unread message

François Luc Denhez-Teuton

unread,
Jul 4, 2016, 4:49:41 PM7/4/16
to Procedural Content Generation
As I said in the welcome thread, I have what I suspect may be a novel concept in procedural music composition. Well, is it still procedural if you give every rule of creation before hitting the "create" button? If the program makes no "choices", doesn't optimize, etc.

For example, take a piece of music. It can be represented as four sequences of numbers: For the nth note in the piece, you have the sequences pitch(n), duration(n), strength(n) and legato(n). If we assign a function to each of these sequences, for example, a sinusoidal function to the pitch as in here we get something. If we assign a linear function, as in here , we get something else. Or we can get really crazy and assign multiple functions and certain "meta"-functions which segments the domain into appreciable sizes and assign those segments a particular formula.

Like this: the pitch function-by-part is expressed thusly:
Group of ordered formulas F {
0)128
1)45+p+(ln(x%32))*(-1)^floor(s/3)
2)p
}
Formula Selector :(s>1)*(1+(s%2))
Segment Length Selector: 21-(s>1)*(s%4)*6

Where s has the value of the number of completed segments that came before it, x is the number of times the formula in which it appears has been used (think of it as a variable local to that formula), and p is the value of the previous number in the sequence. The pitch in the MIDI standard can take the values of 0 (fundamental C, or C0) to 127 (G10). 128 is a value I added that means "silence".

So the algorithm goes:
for(note 0 to end of piece) do {
    current_formula
=evaluate formula selector for s=0
    current_segment_length
=evaluate segment length selector for s=0
    while(current_segment_length!=0)
    {
        note
0=evaluate formula 0 for s=0,x=0,p=-1
        p=note 0;
        x++;
        current_segment_length
--;
    }
    s++;
}

this for the pitch, the duration, the strength and the legato (legato with the next note 0:no,1:yes)

Has anybody done something like this before? Has anybody organized function by parts this way?
Reply all
Reply to author
Forward
0 new messages