Blame view
tools/sph2pipe_v2.5/test/test_all.pl
3.87 KB
8dcb6dfcb first commit |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
#!/usr/bin/env perl # Test plan to verify sph2pipe (v2.4) # We start with 7 distinct input files: # 123_2pcle_shn.sph -- 2 channel, little-endian PCM, shorten-compressed # 123_2pcbe_shn.sph -- 2 channel, big-endian PCM, shorten-compressed # 123_1pcle_shn.sph -- 1 channel, little-endian PCM, shorten-compressed # 123_1pcbe_shn.sph -- 1 channel, big-endian PCM, shorten-compressed # 123_2ulaw_shn.sph -- 2 channel, ulaw, shorten-compressed # 123_1ulaw_shn.sph -- 1 channel, ulaw, shorten-compressed # 123_2alaw.sph -- 2 channel, alaw (shorten does not apply to alaw) # We'll test these groups of conditions in all possible combinations: # 8 input format types: pcm-BE-shn, pcm-LE-shn, ulaw-shn, # pcm-BE, pcm-LE, ulaw, alaw, alaw with external header # 2 input channel types: single-channel, two-channel # 3 output range selections: full-file, -t bsec:esec, -s bsmp:esmp # 3 output channel selections: both-channels, channel-A, channel-B # That's 144 combinations to test, for each of the following # conditions of output format and sample type: # 3 raw: alaw, ulaw, pcm-NATIVE (i.e. byte-order of current cpu) # 3 sph: alaw, ulaw, pcm-NATIVE # 3 wav: alaw, ulaw, pcm-LE # 2 au: ulaw, pcm-BE # 1 aif: pcm-BE # That's 12 output types * 144 combinations per type = 1728 tests to run # plus 7 more, to cover the following extra cases: # - an extra-long sphere header (2 runs) # - final colon in the -t and -s opions (2 runs) # - initial colon in the -t and -s options (2 runs) # - redirection to a file vs. named output file (1 run) # The chosen test file has a sample_rate of 20_000, so we'll simplify # the -t and -s range tests by using equivalent ranges: '-t 0.9:1.2' # and '-s 18000:24000' should produce the same output. use Digest::MD5; my @t_opts = ( '', '-t 0.9:1.2', '-s 18000:24000' ); my @c_opts = ( '', '-c 1', '-c 2' ); my @f_opts = ( '-f sph -p', '-f sph -u', '-f sph -a', '-f raw -p', '-f raw -u', '-f raw -a', '-f wav -p', '-f wav -u', '-f wav -a', '-f au -p', '-f au -u', '-f aif' ); my @shn_inputs = ( qw/ 123_1pcle_shn.sph 123_2pcle_shn.sph 123_1pcbe_shn.sph 123_2pcbe_shn.sph 123_1ulaw_shn.sph 123_2ulaw_shn.sph / ); my @unc_inputs = ( qw/ 123_1pcle.sph 123_2pcle.sph 123_1pcbe.sph 123_2pcbe.sph 123_1ulaw.sph 123_2ulaw.sph 123_1alaw.sph 123_2alaw.sph / ); my @raw_inputs = ( qw/ 123_1alaw.raw 123_2alaw.raw / ); open( my $SH, "| /bin/sh" ) or die "can't start sub-shell /bin/sh: $!"; open( my $CKSUMS, ">outfile-md5.list" ) or die "can't write md5 file: $!"; my $s2p = "./sph2pipe"; my %output_map; for my $i ( 0..$#shn_inputs ) { print_SH( "$s2p -f sph $shn_inputs[$i] $unc_inputs[$i] " ); } print_SH( "$s2p -f sph -c 1 123_2alaw.sph 123_1alaw.sph " ); print_SH( "$s2p -f raw 123_1alaw.sph 123_1alaw.raw " ); print_SH( "$s2p -f raw 123_2alaw.sph 123_2alaw.raw " ); my $out = "0000"; for my $f ( @f_opts ) { my $ext = ( split( / /, $f ))[1]; for my $c ( @c_opts ) { for my $t ( @t_opts ) { for my $in ( @shn_inputs, @unc_inputs ) { $out++; print_SH( "$s2p $f $c $t $in $out.$ext " ); } for my $in ( @raw_inputs ) { my ( $nc ) = ( $in =~ /_([12])/ ); $out++; print_SH( "$s2p $f $c $t -h std$nc.hdr $in $out.$ext " ); $out++; print_SH( "$s2p $f $c $t -h big$nc.hdr $in $out.$ext " ); } } } } close $SH; my $md5 = Digest::MD5->new; for my $f ( sort keys %output_map ) { $md5->reset; if ( -s $f > 0 ) { open( my $CHK, $f ); printf $CKSUMS ( "%s %-8s <- %s ", $md5->addfile( $CHK )->b64digest, $f, $output_map{$f} ); close $CHK; } else { warn "$output_map{$f} -> $f: zero-length output " unless -s $f; } } sub print_SH { my @cmd = split( ' ', $_[0] ); my $msg = join " ", @cmd[1..$#cmd]; my $outname = pop @cmd; $output_map{$outname} = pop @cmd; print $SH "echo $msg "; print $SH $_[0]; } |