use strict; use Test; BEGIN { plan tests => 47 } use MIDI; ok 1; my $out = "temp20.mid"; unlink $out if -e $out; { my @events = ( ['text_event',0, 'MORE COWBELL'], ['set_tempo', 0, 450_000], # 1qn = .45 seconds ); for (1 .. 20) { push @events, ['note_on' , 90, 9, 56, 127], ['note_off', 6, 9, 56, 127], ; } foreach my $delay (reverse(1..96)) { push @events, ['note_on' , 0, 9, 56, 127], ['note_off', $delay, 9, 56, 127], ; } my $cowbell_track = MIDI::Track->new({ 'events' => \@events }); ok 1; my $opus = MIDI::Opus->new( { 'format' => 0, 'ticks' => 96, 'tracks' => [ $cowbell_track ] } ); ok 1; $opus->write_to_file( $out ); ok 1; } sleep 1; # festina lente ok -e $out or die; ok -s $out; ok -s $out > 900; ok -s $out < 1100; 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 } ), 234; my @e = $t->events; ok $e[0], $t->events_r->[0]; # tests coreference print "# First event: [@{$e[0]}]\n"; ok ref($e[0]), "ARRAY" or die; ok scalar( @{ $e[0] } ), 3 or die; ok $e[0][0], "text_event"; ok $e[0][1], "0"; ok $e[0][2], "MORE COWBELL"; print "# Second event: [@{$e[1]}]\n"; ok scalar( @{ $e[1] } ), 3 or die; ok $e[1][0], "set_tempo"; ok $e[1][1], "0"; ok $e[1][2], "450000"; print "# Third event: [@{$e[2]}]\n"; ok scalar( @{ $e[2] } ), 5 or die; ok $e[2][0], "note_on"; ok $e[2][1], "90"; ok $e[2][2], "9"; ok $e[2][3], "56"; ok $e[2][4], "127"; print "# Fourth event: [@{$e[3]}]\n"; ok $e[3][0], "note_off"; ok $e[3][1], "6"; ok $e[3][2], "9"; ok $e[3][3], "56"; ok $e[3][4], "127"; $t->type("Muck"); ok $t->type, "Muck"; unlink $out; print "# Okay, all done!\n"; ok 1;