The GMK is pretty feeble but works just fine and is part of every machine.
And fiddle about with the bits. Every sequencer has better patches than the GMK.
{kick => 'Acoustic Bass Drum',} $d->kit(kick => 'Cowbell');
# or just
$d->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?