1# Commands covered: sound play 2# 3 4package require -exact snack 2.2 5 6if {[lsearch [namespace children] ::tcltest] == -1} { 7 package require tcltest 8 namespace import ::tcltest::* 9} 10 11test play-1.1.1 {play command, non-blocking, -load} { 12 set s [snack::sound snd -load ex1.wav] 13 $s play -command {set flag 1} 14 vwait flag 15 $s destroy 16 set flag 17} 1 18 19test play-1.1.2 {play command, non-blocking, -file} { 20 set s [snack::sound snd -file ex1.wav] 21 $s play -command {set flag 1} 22 vwait flag 23 $s destroy 24 set flag 25} 1 26after 1000 {set flag 1} ; vwait flag 27 28test play-1.1.3 {play command, non-blocking, -channel} { 29 set fd [open ex1.wav] 30 set s [snack::sound snd -channel $fd] 31 $s play -command {set flag 1} 32 vwait flag 33 $s destroy 34 close $fd 35 set flag 36} 1 37 38test play-1.1.4 {play command, -channel, data in WAV format} { 39 proc endproc {snd sock} { 40 set info [$snd info] 41 close $sock 42 $snd destroy 43 set ::flag [lindex $info 6] 44 } 45 proc servproc { sock addr port } { 46 set s [snack::sound snd -channel $sock] 47 $s play -command [list endproc $s $sock] 48 } 49 50 set fd [open ex1.wav] 51 fconfigure $fd -translation binary 52 if {$::tcl_version > 8.0} { 53 fconfigure $fd -encoding binary 54 } 55 set data [read $fd] 56 close $fd 57 58 set servsock [socket -server servproc 24680] 59 60 set sock [socket localhost 24680] 61 fconfigure $sock -translation binary -blocking 1 62 if {$::tcl_version > 8.0} { 63 fconfigure $sock -encoding binary 64 } 65 puts -nonewline $sock $data 66 close $sock 67 68 vwait flag 69 set flag 70} WAV 71 72test play-1.1.5 {play command, -channel, data in AU format} { 73 proc endproc {snd sock} { 74 set info [$snd info] 75 close $sock 76 $snd destroy 77 set ::flag [lindex $info 6] 78 } 79 proc servproc { sock addr port } { 80 set s [snack::sound snd -channel $sock] 81 $s play -command [list endproc $s $sock] 82 } 83 84 set s [snack::sound snd -load ex1.wav] 85 set data [$s data -fileformat au] 86 $s destroy 87 88 set servsock [socket -server servproc 24681] 89 90 set sock [socket localhost 24681] 91 fconfigure $sock -translation binary -blocking 1 92 if {$::tcl_version > 8.0} { 93 fconfigure $sock -encoding binary 94 } 95 puts -nonewline $sock $data 96 close $sock 97 98 vwait flag 99 set flag 100} AU 101 102test play-1.1.6 {play command, -channel, data as littleEndian shorts} { 103 proc endproc {snd sock} { 104 set info [$snd info] 105 close $sock 106 $snd destroy 107 set ::flag [lindex $info 6] 108 } 109 proc servproc { sock addr port } { 110 set s [snack::sound snd -channel $sock -byteorder littleEndian] 111 $s play -command [list endproc $s $sock] 112 } 113 114 set s [snack::sound snd -load ex1.wav] 115 set data [$s data -fileformat raw -byteorder littleEndian] 116 $s destroy 117 118 set servsock [socket -server servproc 24682] 119 120 set sock [socket localhost 24682] 121 fconfigure $sock -translation binary -blocking 1 122 if {$::tcl_version > 8.0} { 123 fconfigure $sock -encoding binary 124 } 125 puts -nonewline $sock $data 126 close $sock 127 128 vwait flag 129 set flag 130} RAW 131 132test play-1.1.7 {play command, -channel, data as bigEndian shorts} { 133 proc endproc {snd sock} { 134 set info [$snd info] 135 close $sock 136 $snd destroy 137 set ::flag [lindex $info 6] 138 } 139 proc servproc { sock addr port } { 140 set s [snack::sound snd -channel $sock -byteorder bigEndian] 141 $s play -command [list endproc $s $sock] 142 } 143 144 set s [snack::sound snd -load ex1.wav] 145 set data [$s data -fileformat raw -byteorder bigendian] 146 $s destroy 147 148 set servsock [socket -server servproc 24683] 149 150 set sock [socket localhost 24683] 151 fconfigure $sock -translation binary -blocking 1 152 if {$::tcl_version > 8.0} { 153 fconfigure $sock -encoding binary 154 } 155 puts -nonewline $sock $data 156 close $sock 157 158 vwait flag 159 set flag 160} RAW 161 162test play-1.1.8 {play command, -channel, data length 0} { 163 proc endproc {snd sock} { 164 set info [$snd info] 165 close $sock 166 $snd destroy 167 set ::flag [lindex $info 6] 168 } 169 proc servproc { sock addr port } { 170 set s [snack::sound snd -channel $sock -byteorder bigEndian] 171 $s play -command [list endproc $s $sock] 172 } 173 174 set s [snack::sound snd] 175 set data [$s data -fileformat raw -byteorder bigendian] 176 $s destroy 177 178 set servsock [socket -server servproc 24684] 179 180 set sock [socket localhost 24684] 181 fconfigure $sock -translation binary -blocking 1 182 if {$::tcl_version > 8.0} { 183 fconfigure $sock -encoding binary 184 } 185 puts -nonewline $sock $data 186 close $sock 187 188 vwait flag 189 set flag 190} RAW 191 192test play-1.1.9 {play command, -channel, data with 1024 initial zeros} { 193 proc endproc {snd sock} { 194 set info [$snd info] 195 close $sock 196 $snd destroy 197 set ::flag [lindex $info 6] 198 } 199 proc servproc { sock addr port } { 200 set s [snack::sound snd -channel $sock -byteorder bigEndian] 201 $s play -command [list endproc $s $sock] 202 } 203 204 set s [snack::sound snd -load ex1.wav] 205 set s2 [snack::sound snd2] 206 $s2 length 512 207 set data [$s2 data -fileformat raw -byteorder bigendian] 208 append data [$s data -fileformat raw -byteorder bigendian] 209 $s destroy 210 $s2 destroy 211 212 set servsock [socket -server servproc 24685] 213 214 set sock [socket localhost 24685] 215 fconfigure $sock -translation binary -blocking 1 216 if {$::tcl_version > 8.0} { 217 fconfigure $sock -encoding binary 218 } 219 puts -nonewline $sock $data 220 close $sock 221 222 vwait flag 223 set flag 224} RAW 225 226test play-1.2.1 {play command, blocking} { 227 set s [snack::sound snd -load ex1.wav] 228 $s play -blocking 1 -command {set flag 1} 229 $s destroy 230 set flag 231} 1 232 233test play-1.3.1 {play command, auto-destruct} { 234 set s [snack::sound snd -load ex1.wav] 235 $s play -command "set flag 1; $s destroy" -start 0 -end -1 236 vwait flag 237 catch "$s info" msg 238 set msg 239} {invalid command name "snd"} 240 241test play-1.4.1 {play command, non-existing linked file} { 242 set s [snack::sound snd -file nosuch.wav] 243 catch {$s play} msg 244 $s destroy 245 set msg 246} {couldn't open "nosuch.wav": no such file or directory} 247 248test play-2.1 {play command, using default sound device} { 249 set s [snack::sound snd -load ex1.wav] 250 $s play -device "" -command {set flag 1} 251 vwait flag 252 $s destroy 253 set flag 254} 1 255 256test play-2.2 {play command, using first sound device} { 257 set s [snack::sound snd -load ex1.wav] 258 set dev [lindex [snack::audio outputDevices] 0] 259 $s play -device $dev -command {set flag 1} 260 vwait flag 261 $s destroy 262 set flag 263} 1 264 265test play-2.3 {play command, using unknown sound device} { 266 set s [snack::sound snd -load ex1.wav] 267 catch {$s play -device junk} msg 268 $s destroy 269 set msg 270} {No such device: junk} 271 272test play-2.4 {play command, missing argument to -device option} { 273 set s [snack::sound snd -load ex1.wav] 274 catch {$s play -device} msg 275 $s destroy 276 set msg 277} {No argument given for -device option} 278 279test play-3.1 {play command, with filter option specifying invalid filter} { 280 set s [snack::sound snd -load ex1.wav] 281 catch {$s play -filter junk} msg 282 $s destroy 283 set msg 284} {No such filter: junk} 285 286test play-3.2 {play command, with missing argument for -filter option} { 287 set s [snack::sound snd -load ex1.wav] 288 catch {$s play -filter} msg 289 $s destroy 290 set msg 291} {No argument given for -filter option} 292 293# cleanup 294::tcltest::cleanupTests 295return 296