use strict;
use Test;
BEGIN { plan tests => 51 }
ok 1;
use MIDI;
my $out = 'temp30.mid';
-e $out and unlink $out;
{ no strict;
no warnings;
use MIDI::Simple;
new_score;
@Score = ();
text_event 'so, by Thy power/ no foot shall slide';
set_tempo 500000; # 1 qn => .5 seconds (500,000 microseconds)
patch_change 1, 8; # Patch 8 = Celesta
noop c1, f, o5; # Setup
# Now play
n qn, Cs; n F; n Ds; n hn, Gs_d1;
n qn, Cs; n Ds; n F; n hn, Cs;
n qn, F; n Cs; n Ds; n hn, Gs_d1;
n qn, Gs_d1; n Ds; n F; n hn, Cs;
write_score $out;
ok 1;
}
sleep 1; # "IT'S OH SO QUIET. SHHHHHHH. SHHHHHHH. IT'S OH SO STILL."
ok -e $out or die;
ok -s $out;
ok -s $out > 200;
ok -s $out < 400;
my $o = MIDI::Opus->new( { 'from_file' => $out } );
ok 1;
print "# Opus: [$o]\n";
ok ref($o), "MIDI::Opus", "checking opus classitude"; # sanity
ok $o->ticks, 96;
$o->ticks(123);
ok $o->ticks, 123;
ok $o->format, 0;
$o->format(1);
ok $o->format, 1;
my @t = $o->tracks;
print "# Tracks: [@t]\n";
ok scalar(@t), 1, "checking track count" or die;
my $t = $t[0];
ok ref($t), "MIDI::Track";
ok $t->type, "MTrk";
ok defined( $o->tracks_r );
ok ref( $o->tracks_r ), 'ARRAY' or die;
ok scalar( @{ $o->tracks_r } ), 1;
ok $o->tracks_r->[0], $t;
ok defined($t->events_r);
ok ref($t->events_r), "ARRAY" or die;
ok scalar(@{ $t->events_r } ), 35;
my @e = $t->events;
ok $e[0], $t->events_r->[0]; # tests coreference
my $it; # just a scratch var
ok ref($e[0]), "ARRAY" or die;
ok scalar( @{ $it = $e[0] } ), 3 or die; print "# First event: [@$it]\n";
ok $it->[0], "text_event";
ok $it->[1], "0";
ok $it->[2], "so, by Thy power/ no foot shall slide";
ok scalar( @{ $it = $e[1] } ), 3 or die; print "# Second event: [@$it]\n";
ok $it->[0], "set_tempo";
ok $it->[1], "0";
ok $it->[2], "500000";
ok scalar( @{ $it = $e[2] } ), 4 or die; print "# Third event: [@$it]\n";
ok $it->[0], "patch_change";
ok $it->[1], "0";
ok $it->[2], "1";
ok $it->[3], "8";
ok scalar( @{ $it = $e[3] } ), 5 or die; print "# Fourth event: [@$it]\n";
ok $it->[0], "note_on";
ok $it->[1], "0";
ok $it->[2], "1";
ok $it->[3], "61";
ok $it->[4], "96";
ok scalar( @{ $it = $e[4] } ), 5 or die; print "# Fifth event: [@$it]\n";
ok $it->[0], "note_off";
ok $it->[1], "96";
ok $it->[2], "1";
ok $it->[3], "61";
ok $it->[4], "0";
$t->type("Muck");
ok $t->type, "Muck";
unlink $out;
print "# Okay, all done!\n";
ok 1;