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