Cheers,#!/usr/bin/perl ########################################### # Variable Length Markov Diddly. ########################################### use strict; use constant LENGTH => 4; # length of patte +rn key my %probs; # probabilities +of next note while (<DATA>) { # read the existin +g tunes... chomp; my @line = split /,/; my @notes = ("START") x (LENGTH); # cyclic buffer while (@line) { shift (@notes); push @notes, shift(@line).",".shift(@line); # "note,length" $probs{key(@notes)}{$notes[$#notes]}++; } shift (@notes); $probs{key(@notes)}{"END"}++; } my @notes = ("START") x LENGTH; do { shift(@notes); my %next = %{$probs{key(@notes)}}; # array of probs my @next = map {($_) x $next{$_}} keys %next; # 1 entry per 'pr +ob' push @notes, $next[int(rand(@next))]; print "$notes[$#notes] " unless ($notes[$#notes] eq "END"); } while ($notes[$#notes] ne "END"); sub key {return join("",@_[0..LENGTH-2]);} # make space-sep +arated key # a bunch of common session tunes (plus one of mine <g>) __DATA__ e2,4,e2,2,b2,2,e2,2,b2,2,e2,2,e2,2,b2,2,a2,2,fs2,2,d2,2,e2,4,e2,2,b2,4 +,cs3,2,d3,2,cs3,2,b2,2,a2,2,fs2,2,d2,2,e2,4,e2,2,b2,2,e2,2,b2,2,e2,2, +e2,2,b2,2,a2,2,fs2,2,d2,2,g2,4,g2,2,fs2,2,g2,2,a2,2,b2,2,a2,2,g2,2,fs +2,2,e2,2,d2,2 d2,2,g2,2,g2,2,b2,2,g2,2,g2,2,a2,2,g2,2,a2,2,b2,2,g2,2,g2,2,e3,2,g3,2, +e3,2,d3,2,b2,2,g2,2,a2,2,g2,2,a2,2,b2,2,g2,2,e2,2,d2,2,g2,2,g2,2,b2,2 +,g2,2,g2,2,a2,2,g2,2,a2,2,b2,2,g2,2,g2,2,e3,2,g3,2,e3,2,d3,2,b2,2,g2, +2,a2,2,g2,2,fs2,2,g2,6 d2,4,d2,2,a2,6,b2,2,a2,2,g2,2,a2,2,b2,2,a2,2,d2,4,d2,2,a2,6,b2,2,a2,2, +g2,2,e2,2,g2,2,e2,2,d2,4,d2,2,a2,6,b2,2,a2,2,g2,2,a2,2,b2,2,c3,2,d2,2 +,c3,2,b2,2,c3,2,b2,2,a2,2,b2,2,a2,2,g2,2,e2,2,g2,2,e2,2 d3,2,e3,2,d3,2,b2,4,g2,2,a2,4,g2,2,e2,4,d2,2,g2,4,g2,2,g2,2,a2,2,b2,2, +d3,4,b2,2,a2,6,d3,2,e3,2,d3,2,b2,4,g3,2,fs2,4,e3,2,c3,4,e3,2,d3,2,e3, +2,d3,2,c3,2,b2,2,a2,2,g2,12 b2,2,g2,2,g2,2,d2,2,g2,2,g2,2,b2,2,g2,2,b2,2,d3,2,c3,2,b2,2,c3,2,a2,2, +a2,2,fs2,2,a2,2,a2,2,c3,2,a2,2,c3,2,e3,2,d3,2,c3,2,b2,2,g2,2,g2,2,d2, +2,g2,2,g2,2,b2,2,g2,2,b2,2,d3,2,c3,2,b2,2,c3,2,b2,2,c3,2,a2,2,d3,2,c3 +,2,b2,2,g2,2,g2,2,g2,2,d3,2,c3,2 fs2,4,b2,2,b2,2,cs3,2,d3,2,cs3,4,a2,2,a2,2,b2,2,cs3,2,d3,4,b2,2,b2,2,c +s3,2,d3,2,e3,2,fs3,2,e3,2,d3,2,cs3,2,b2,2,fs2,4,b2,2,b2,2,cs3,2,d3,2, +cs3,4,a2,2,a2,2,b2,2,cs3,2,d3,2,cs3,2,d3,2,e3,2,d3,2,e3,2,fs3,2,b2,2, +b2,2,b2,6 a2,2,fs2,2,a2,2,a2,2,fs2,2,a2,2,b2,2,g2,2,b2,2,b2,2,g2,2,b2,2,a2,2,fs2 +,2,a2,2,a2,2,d3,2,e3,2,fs3,2,e3,2,d3,3,b2,2,d3,2,b2,2,a2,2,fs2,2,a2,2 +,a2,2,fs2,2,a2,2,b2,2,g2,2,b2,2,b2,2,g2,2,b2,2,d3,2,e3,2,fs3,2,a3,2,f +s3,2,e3,2,fs3,2,b2,2,b2,3,b2,2,d3,2,b2,2 a2,2,d2,2,d2,2,b2,2,d2,2,d2,2,c3,6,c3,2,b2,2,a2,2,g2,2,a2,2,b2,2,a2,2, +g2,2,fs2,2,g2,2,fs2,2,g2,2,e2,2,fs2,2,g2,2,a2,2,d2,2,d2,2,b2,2,d2,2,d +2,2,c3,6,c3,2,b2,2,a2,2,g2,2,a2,2,b2,2,a2,2,g2,2,fs2,2,g2,12 e2,2,fs2,2,e2,2,b2,4,b2,2,b2,2,a2,2,fs2,2,d3,6,e2,2,fs2,2,e2,2,b2,4,b2 +,2,b2,2,a2,2,fs2,2,fs2,4,e2,2,e2,2,fs2,2,e2,2,b2,4,b2,2,b2,2,a2,2,fs2 +,2,d3,6,b2,2,cs3,2,d3,2,e3,4,b2,2,b2,2,a2,2,fs2,2,fs2,4,e2,2 d2,4,a2,2,fs2,4,a2,2,d2,4,a2,2,fs2,4,a2,2,d3,4,e3,2,fs3,4,e3,2,d3,4,cs +3,2,b2,4,a2,2,e3,6,fs3,6,g3,6,fs3,6,e3,4,d3,2,cs3,4,b2,2,a2,2,b2,2,a2 +,2,g2,2,fs2,2,e2,2 d2,4,e2,2,fs2,4,g2,2,a2,4,b2,2,a2,4,fs2,2,a2,4,b2,2,a2,4,fs2,2,a2,4,b2 +,2,a2,4,fs2,2,d2,4,e2,2,fs2,4,g2,2,a2,4,b2,2,a2,4,d3,2,cs3,4,b2,2,a2, +4,fs2,2,d2,12 g2,2,g2,2,g2,2,g2,6,g2,2,g2,2,g2,2,g2,4,d3,2,b2,4,g2,2,b2,4,d3,2,g3,4, +d3,2,b2,4,g2,2,d2,2,d2,2,d2,2,d2,6,d2,2,d2,2,d2,2,d2,4,a2,2,fs2,4,d2, +2,fs2,4,a2,2,c3,4,a2,2,fs2,4,d2,2 a2,6,a2,6,a2,2,fs2,2,d3,2,a2,2,fs2,2,d2,2,g2,6,g2,6,g2,2,e2,2,fs2,2,g3 +,2,fs2,2,e2,2,a2,6,a2,6,a2,2,fs2,2,d3,2,a2,2,fs2,2,d2,2,e2,2,fs2,2,g2 +,2,fs2,2,g2,2,e2,2,d2,12 a2,2,d2,2,d2,2,b2,2,d2,2,d2,2,c3,6,c3,2,b2,2,a2,2,g2,2,a2,2,b2,2,a2,2, +g2,2,fs2,2,g2,2,fs2,2,g2,2,e2,2,fs2,2,g2,2,a2,2,d2,2,d2,2,b2,2,d2,2,d +2,2,c3,6,c3,2,b2,2,a2,2,g2,2,a2,2,b2,2,a2,2,g2,2,fs2,2,g2,12
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Markov Diddly
by Mr. Muskrat (Canon) on Apr 09, 2003 at 17:02 UTC | |
by benn (Vicar) on Apr 10, 2003 at 16:45 UTC |