#!/usr/bin/perl
use strict;
use warnings;

use lib map { "$ENV{HOME}/sandbox/$_/lib" } qw(Music-Duration);
use MIDI::Simple::Drummer;

my $d = MIDI::Simple::Drummer->new(
    -signature => shift || '5/4',
    -bpm       => shift || 100,
    -volume    => shift || 100,
    -phrases   => shift || 8,
    -file      => shift || "$0.mid",
);

$d->kick('Bass Drum 1');

$d->patterns(b1 => \&hihat);
$d->patterns(b2 => \&fundamental);

$d->sync_tracks(
    sub { $d->beat(-name => 'b1') },
    sub { $d->beat(-name => 'b2') },
);

$d->write();

sub hihat {
    my $self = shift;
    for my $i (1 .. $self->phrases) {
        $self->note($self->QUARTER, $self->tick) for 1 .. $self->beats;
    }
}

sub fundamental {
    my $self = shift;
    for my $i (1 .. $self->phrases) {
        $self->note($self->DOTTED_EIGHTH, $self->kick);
        $self->note($self->DOTTED_EIGHTH, $self->kick);
        $self->note($self->QUARTER, $self->snare);
        $self->note($self->QUARTER, $self->snare);
        $self->note($self->EIGHTH, $self->kick);
        $self->note($self->QUARTER, $self->snare);
    }
}
