Perl, musica automagica

Post on 05-Dec-2014

1.955 views 0 download

description

An algorithmic approach to music generation

Transcript of Perl, musica automagica

Perl Musica Automagica!

Andrew Plotkin

Nel mezzo del cammin di nostra vita

mi ritrovai per una selva oscura

ché la diritta via era smarrita.

Ahi quanto a dir qual era è cosa dura

esta selva selvaggia e aspra e forte

che nel pensier rinova la paura!

Tant'è amara che poco è più morte;

ma per trattar del ben ch'i' vi trovai,

dirò de l'altre cose ch'i' v'ho scorte.

Io non so ben ridir com'i' v'intrai,

tant'era pien di sonno a quel punto

che la verace via abbandonai.

Ma poi ch'i' fui al piè d'un colle giunto,

là dove terminava quella valle15che m'avea di paura il cor compunto,

guardai in alto, e vidi le sue spalle

vestite già de' raggi del pianeta

che mena dritto altrui per ogne calle.

Nel mezzo del cammin di nostra vita

mi ritrovai per una selva oscura

ché la diritta via era smarrita.

Ahi quanto a dir qual era è cosa dura

esta selva selvaggia e aspra e forte

che nel pensier rinova la paura!

Tant'è amara che poco è più morte;

ma per trattar del ben ch'i' vi trovai,

dirò de l'altre cose ch'i' v'ho scorte.

Io non so ben ridir com'i' v'intrai,

tant'era pien di sonno a quel punto

che la verace via abbandonai.

Ma poi ch'i' fui al piè d'un colle giunto,

là dove terminava quella valle15che m'avea di paura il cor compunto,

guardai in alto, e vidi le sue spalle

vestite già de' raggi del pianeta

che mena dritto altrui per ogne calle.

Nel mezzo del cammin di nostra vita

mi ritrovai per una selva oscura

ché la diritta via era smarrita.

Ahi quanto a dir qual era è cosa dura

esta selva selvaggia e aspra e forte

che nel pensier rinova la paura!

Tant'è amara che poco è più morte;

ma per trattar del ben ch'i' vi trovai,

dirò de l'altre cose ch'i' v'ho scorte.

Io non so ben ridir com'i' v'intrai,

tant'era pien di sonno a quel punto

che la verace via abbandonai.

Ma poi ch'i' fui al piè d'un colle giunto,

là dove terminava quella valle15che m'avea di paura il cor compunto,

guardai in alto, e vidi le sue spalle

vestite già de' raggi del pianeta

che mena dritto altrui per ogne calle.

while( @notes ) {

if( scalar @notes >= $tuple_size + 1 ) {

my $key = join ' ', @notes[0 .. $tuple_size-1];

push @{ $tuples{ $key } } , $notes[$tuple_size]; } shift @notes;}

Markov Chaindi grado N

Algorithm::MarkovChain

$chain->seed( symbols => \@notes , longest => $tuple_size)

MIDI / MIDI::Simple

• read, compose, modify, and write MIDI files

• Sean Burke++

while( $n-- ) { my @tuple = @{ $tuples{ $k } }; my $last = $tuple[ int rand scalar @tuple ];

n( $last, $tempo[ rand scalar @tempo ], 'f' );

my @next_tuple = split / /, $k; shift @next_tuple; push @next_tuple, $last;

if (defined $tuples{ join ' ', @next_tuple }) { $k = join ' ', @next_tuple; ++$hit; } else { $k = ( keys %tuples )[ int rand $l ]; ++$miss; }}

hobbes:~/Desktop larsen$ perl mozart.pl \ -f peaches.mid -t 6 -s 4 -n 100 Fetching info from MIDI file... # Type Track Name Instrument 1 MTrk 2 MTrk Peaches en Regalia original 3 MTrk Drums Drums 4 MTrk Saxes Saxes 5 MTrk Brass Brass 6 MTrk Bass Bass 7 MTrk Piano Piano 8 MTrk Synth Synth 9 MTrk Clarinet Clarinet 10 MTrk Guitar Guitar 11 MTrk M-Playback*recorded M-Playback

Fetching track 6...I've learnt 376 tuples...Average number of buckets per key: 1.90159574468085... 1. '38 41 29 34' => 35 2. '43 35 35 42' => 47 3. '41 42 43 46' => 38 38 4. '40 35 42 47' => 42 42 42 42 42 42 5. '46 38 39 40' => 41 6. '40 42 40 40' => 35 47 35 35 35 35 35 7. '42 40 37 36' => 40 40 40 40 40 40 40 40 8. '54 52 49 42' => 49 9. '42 47 42 35' => 35 35 35 35 35 35 35 3510. '40 42 40 43' => 4311. '46 33 33 33' => 4512. '45 51 52 45' => 4413. '48 40 40 44' => 3214. '53 41 41 41' => 43

Demo

I am quite struck by them.. from listening to them you can tell they

are meant to have musical structure, and they sound like

they are intentionally musical, but they contain no coherent musical "thought"

“Peaches en regalia”

“Frame by frame”

“Epitaph”

MIDIMIDI::SimpleAlgorithm::MarkovChainGetopt::*

どうもありがとう

http://larsen.perlmonk.org/perl/mozart.html