It's on CPAN and will install on any machine.
It only depends on MIDI::Simple, which depends on nothing but Perl itself!
The GMK is pretty feeble but works just fine and is part of every machine.
And fiddle about. Every sequencer has better patches than the GMK.
kick => 'Acoustic Bass Drum', snare => 'Acoustic Snare',
$d->kit(kick => 'Cowbell');
5 => sub { # "Syncopated beat 2" en c-hh. qn k1,3,3&,4&. qn s2,4. my $self = shift; my %args = @_; for my $beat (1 .. $self->beats) { $self->note($self->EIGHTH, $self->backbeat_rhythm(%args, -beat => $beat)); $self->note($self->EIGHTH, ($beat == 3 || $beat == 4 ? ($self->kick, $self->tick) : $self->tick)); } }, '1 fill' => sub { my $self = shift; $self->note($self->QUARTER, $self->snare) for 0 .. 1; $self->note($self->EIGHTH, $self->snare) for 0 .. 3; },
# sub accent { # Pump up the [dynamics] (default Volume)! my $self = shift; $self->{-accent} = shift if @_; my $accent = $self->{-accent} + $self->volume; $accent = $MIDI::Simple::Volume{fff} # Max MIDI is fff if $accent > $MIDI::Simple::Volume{fff}; return $accent; }
# sub _setup { # Where's my Roadies, Man? my $self = shift; $self->{-score} ||= MIDI::Simple->new_score; $self->{-score}->noop('c'.$self->{-channel}, 'V'.$self->{-volume}); $self->{-score}->set_tempo(int(60_000_000 / $self->{-bpm})); $self->{-kit} ||= $self->_default_kit(); $self->{-patterns} ||= $self->_default_patterns(); return $self; }
# use MIDI::Simple::Drummer::Rock; my $d = MIDI::Simple::Drummer::Rock->new(); $d->count_in; $d->patterns('end fill' => \&fin); $d->fill(-name => 'end'); $d->write; sub fin { my $d = shift; $d->note('en', $d->crash) for 1 .. 2; $d->note('sn', $d->snare) for 0 .. 2; $d->rest('sn'); $d->note('en', $d->kick) for 1 .. 2; $d->note('en', $d->strike('Splash Cymbal', $d->name_of('kick'))); }
Drummers that do crazy, combinatorial things. (Stunt drumming, if you will.)
Drummers that systematically run through experimental beat patterns.
Evolutionary drummers. Duh.
Markov chains and stochastic functions.
Use this (or its methods) as a basis for modern drummers, who use Moose, etc.
Real-time interaction? That is, live jamming. This is a sticky wicket...
Multi-track!
Comprehend time signature and keep a running clock to know where we are in time, at all times.
It don't mean a thing if it ain't got that swing. That is, make a MIDI::Simple::Drummer::Jazz package.
Add 32nd and 64th durations to the %MIDI::Simple::Length hash.
Import patterns via the read_score() method in MIDI::Simple?
Leverage the from_drum_tab() method in MIDI::Tab?