summaryrefslogtreecommitdiff
path: root/midicsv-1.1/torture.pl
diff options
context:
space:
mode:
authorpepper <peppersclothescult@gmail.com>2015-01-19 00:02:46 -0800
committerpepper <peppersclothescult@gmail.com>2015-01-19 00:02:46 -0800
commit760d4d5a0fc89e5b14681879577a80e79795e4a3 (patch)
tree3698995f434a00a904f9fdff64a739eb21f53fdb /midicsv-1.1/torture.pl
Diffstat (limited to 'midicsv-1.1/torture.pl')
-rw-r--r--midicsv-1.1/torture.pl173
1 files changed, 173 insertions, 0 deletions
diff --git a/midicsv-1.1/torture.pl b/midicsv-1.1/torture.pl
new file mode 100644
index 0000000..f37e44d
--- /dev/null
+++ b/midicsv-1.1/torture.pl
@@ -0,0 +1,173 @@
+
+# Generate "torture test" for MidiCSV / CSVmidi
+
+# The output is a CSV file written on standard output
+# which should be fed to through CSVMIDI and MIDICSV
+# and the output compared.
+
+ srand(1234); # Make pseudorandom sequences repeatable
+
+ print << 'EOD';
+
+;
+ ; MIDIcsv Torture Test
+ #
+0, 0, Header, 1, 4, 480
+1, 0, Start_track
+1, 0, TiTlE_t, "MidiCSV Torture Test"
+1,0, copyRight_t, "© 1808 L. van Beethoven. This document is in the public domain."
+1, 0, SMPTE_offset, 96, 0, 0, 0, 0
+1, 0, key_signature, 0, minor
+1, 0, Time_signature, 4, 2, 24, 8
+1, 100, Text_t, "The tempo varies somewhat in this passage."
+1, 482, Tempo, 335977
+1, 961, Tempo, 333493
+1, 1442, Tempo, 333319
+1, 10578, End_track
+2, 0, Start_track
+2, 0, Sequence_number, 64000
+2, 0, MIDI_port, 0
+2, 0, Instrument_Name_t, "Brass Section"
+2, 0, Program_c, 1, 61
+2, 259, marker_T, "Bom bom bom..."
+2, 259, Lyric_t, "Bom"
+2, 259, Note_on_c, 1, 67, 104
+2, 501, Note_off_c, 1, 67, 0
+2, 525, Lyric_t, "Bom"
+2, 525, Note_on_c, 1, 67, 104
+2, 740, Note_on_c, 1, 67, 0
+2, 764, Lyric_t, "Bom"
+2, 764, Note_on_c, 1, 67, 104
+2, 978, Note_on_c, 1, 67, 0
+2, 1000, Marker_t, "...BOM!"
+2, 1003, Lyric_t, "BOMMMMM!"
+2, 1003, Note_on_c, 1, 63, 104
+2, 4809, Note_on_c, 1, 63, 0
+ # Second 4 notes
+2, 4850, Cue_point_t, "Conductor falls off podium"
+2, 5047, Instrument_name_t, """Rock"" Organ"
+2, 5048, Program_c, 1, 18
+2, 5048, Note_on_c, 1, 65, 104
+2, 5100, pitch_bend_c, 1, 10000
+2, 5100, channel_aftertouch_c, 1, 127
+2, 5200, pitch_bend_c, 1, 4000
+2, 5289, note_off_c, 1, 65, 0
+2, 5300, Control_c, 1, 91, 120
+2,5300, Control_c, 1, 7, 40
+2, 5311, Note_on_c, 1, 65, 104
+2,5400,pitch_BEND_c,1,0
+2, 5526, Note_on_c, 1, 65, 0
+2, 5540, control_c, 1, 7, 127
+2,5540, control_c, 1, 10, 0
+2, 5549, Pitch_Bend_c, 1,8192
+2, 5549, Note_on_c, 1, 65, 104
+2, 5766, Note_on_c, 1, 65, 0
+2,5790, control_c, 1, 10, 127
+2, 5790, Note_on_c, 1, 62, 104
+2, 9000, Poly_aftertouch_c, 1, 62, 127
+2, 10578, Note_off_c, 1, 62, 0
+2, 10578, End_track
+3, 0, Start_track
+3, 10578, End_track
+4, 0, Start_Track
+4, 10, Channel_prefix, 1
+4, 400, System_exclusive, 10, 0, 255, 127, 30, 96, 255, 224, 108, 31, 0
+4, 510, System_exclusive, 4, 0, 121, 31, 19
+4, 1071, channel_prefix, 15
+4, 1071, System_exclusive_packet, 10, 255, 18, 33, 111, 0, 77, 201, 7, 4, 255
+4, 1076, System_exclusive_packet, 0
+4, 1108, System_exclusive_packet, 3, 0, 0, 0
+4, 2000, Sequencer_specific, 10, 80, 211, 54, 71, 229, 0, 13, 128, 12, 40
+4, 2020, Sequencer_specific, 0
+4, 3000, Unknown_meta_event, 121, 9, 39, 201, 118, 6, 91, 223, 0, 78, 56
+; The following event is actually
+ ; 4, 3030, Key_signature, -4, "major"
+# coded as an Unknown_meta_event.
+4, 3100, Unknown_meta_event, 89, 2, 252, 0
+EOD
+
+ # Now programmatically generate some long strings
+ # and byte vectors to push the limits.
+
+ # Moderately long Sysex
+ $n = 5123;
+ print("4, 4000, System_exclusive, $n");
+ &obytes($n);
+ print("\n");
+
+ # Moderately long pure ASCII text string
+ $n = 11213;
+ print("4, 4100, Text_t, \"");
+ for ($i = 0; $i < $n; $i ++) {
+ $r = chr(ord(' ') + int(rand(127 - ord(' '))));
+ if ($r eq '"') {
+ print('"');
+ } elsif ($r eq '\\') {
+ print('\\');
+ }
+ print("$r");
+ }
+ print("\"\n");
+
+ # Rather long arbitrary text string
+ print("4, 4200, Text_t, ");
+ &ostring(74219);
+ print("\n");
+
+ # Really long Sequence_specific
+ $n = 3497861; # 250,000th prime!
+ print("4, 4300, Sequencer_specific, $n");
+ &obytes($n);
+ print("\n");
+
+ # Really long arbitrary text string
+ print("4, 4400, Lyric_t, ");
+ &ostring(4256233); # 300,000th prime!
+ print("\n");
+
+ # Wind up the track and the file with canned data
+
+ print << 'EOD';
+4,10500, End_track
+0, 0, End_of_file
+EOD
+
+ # Generate a random character string containing all
+ # byte values from 0 through 255. The argument gives
+ # the length in bytes to generate.
+
+ sub ostring
+ {
+ local ($howlong) = @_;
+ local ($i, $r);
+
+ print('"');
+ for ($i = 0; $i < $howlong; $i ++) {
+ $r = chr(int(rand(256)));
+ if ($r eq '"') {
+ print('"');
+ } elsif ($r eq '\\') {
+ print('\\');
+ } elsif ((ord($r) < ord(' ')) ||
+ ((ord($r) >= 127) && (ord($r) <= 160))) {
+ printf("\\%03o", ord($r));
+ next;
+ }
+ print("$r");
+ }
+ print('"');
+ }
+
+ # Generate a byte sequence whose length is
+ # given by the argument.
+
+ sub obytes
+ {
+ local ($howlong) = @_;
+ local ($i, $r);
+
+ for ($i = 0; $i < $howlong; $i ++) {
+ $r = int(rand(256));
+ print(", $r");
+ }
+ }