1 2use strict; 3use Test; 4BEGIN { plan tests => 60 } 5 6use MIDI; 7ok 1; 8 9my $in = "dr_m.mid"; 10for my $i ( "$in", "t/$in", "t\\$in", "t:$in" ) { 11 if( -e $i ) { $in = $i; last; } 12} 13 14die "Can't find $in" unless -e $in; 15 16ok -s $in, 254; 17 18my $o = MIDI::Opus->new( { 'from_file' => $in } ); 19ok 1; 20print "# Opus: [$o]\n"; 21ok ref($o), "MIDI::Opus", "checking opus classitude"; # sanity 22ok $o->ticks, 384; 23ok $o->format, 0; 24 25 26my @t = $o->tracks; 27print "# Tracks: [@t]\n"; 28ok scalar(@t), 1, "checking track count" or die; 29 30my $t = $t[0]; 31ok ref($t), "MIDI::Track"; 32ok $t->type, "MTrk"; 33 34 35ok defined( $o->tracks_r ); 36ok ref( $o->tracks_r ), 'ARRAY' or die; 37ok scalar( @{ $o->tracks_r } ), 1; 38ok $o->tracks_r->[0], $t; 39 40ok defined($t->events_r); 41ok ref($t->events_r), "ARRAY" or die; 42ok scalar(@{ $t->events_r } ), 45; 43my @e = $t->events; 44ok $e[0], $t->events_r->[0]; # tests coreference 45 46# And just test the first few events... 47 48 49 50my $it; 51$it = $e[0]; print "# Event 0: [@$it]\n"; 52ok $it->[0], "copyright_text_event"; 53ok scalar( @$it ), 3 or die; 54ok $it->[1], "0"; 55ok $it->[2], ""; 56 57$it = $e[1]; print "# EVent 1: [@$it]\n"; 58ok $it->[0], "track_name"; 59ok scalar( @$it ), 3 or die; 60ok $it->[1], "0"; 61ok $it->[2], "MIDI by MidiGen 0.9"; 62 63 64$it = $e[2]; print "# Event 2: [@$it]\n"; 65ok $it->[0], "control_change"; 66ok scalar( @$it ), 5 or die; 67ok $it->[1], "0"; 68ok $it->[2], "0"; 69ok $it->[3], "7"; 70ok $it->[4], "127"; 71 72 73ok($it = $e[3]) or die; print "# Event 3: [@$it]\n"; 74ok $it->[0], "set_tempo"; 75ok scalar( @$it ), 3 or die; 76ok $it->[1], "0"; 77ok $it->[2], "400000"; 78 79 80$it = $e[4]; print "# Event 4: [@$it]\n"; 81ok $it->[0], "patch_change"; 82ok scalar( @$it ), 4 or die; 83ok $it->[1], "0"; 84ok $it->[2], "0"; 85ok $it->[3], "1"; 86 87 88 89$it = $e[5]; print "# Event 5: [@$it]\n"; 90 91ok $it->[0], "note_on"; 92ok scalar( @$it ), 5 or die; 93ok $it->[1], "0"; 94ok $it->[2], "0"; 95ok $it->[3], "69"; 96ok $it->[4], "100"; 97 98$it = $e[6]; print "# Event 6: [@$it]\n"; 99 100ok $it->[0], "note_off"; 101ok scalar( @$it ), 5 or die; 102ok $it->[1], "192"; 103ok $it->[2], "0"; 104ok $it->[3], "69"; 105ok $it->[4], "0"; 106 107$it = $e[7]; print "# Event 7: [@$it]\n"; 108 109ok $it->[0], "note_on"; 110ok scalar( @$it ), 5 or die; 111ok $it->[1], "0"; 112ok $it->[2], "0"; 113ok $it->[3], "68"; 114ok $it->[4], "100"; 115 116 117print "# Okay, all done!\n"; 118ok 1; 119 120