# Commands covered: sound play # package require -exact snack 2.2 if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import ::tcltest::* } test play-1.1.1 {play command, non-blocking, -load} { set s [snack::sound snd -load ex1.wav] $s play -command {set flag 1} vwait flag $s destroy set flag } 1 test play-1.1.2 {play command, non-blocking, -file} { set s [snack::sound snd -file ex1.wav] $s play -command {set flag 1} vwait flag $s destroy set flag } 1 after 1000 {set flag 1} ; vwait flag test play-1.1.3 {play command, non-blocking, -channel} { set fd [open ex1.wav] set s [snack::sound snd -channel $fd] $s play -command {set flag 1} vwait flag $s destroy close $fd set flag } 1 test play-1.1.4 {play command, -channel, data in WAV format} { proc endproc {snd sock} { set info [$snd info] close $sock $snd destroy set ::flag [lindex $info 6] } proc servproc { sock addr port } { set s [snack::sound snd -channel $sock] $s play -command [list endproc $s $sock] } set fd [open ex1.wav] fconfigure $fd -translation binary if {$::tcl_version > 8.0} { fconfigure $fd -encoding binary } set data [read $fd] close $fd set servsock [socket -server servproc 24680] set sock [socket localhost 24680] fconfigure $sock -translation binary -blocking 1 if {$::tcl_version > 8.0} { fconfigure $sock -encoding binary } puts -nonewline $sock $data close $sock vwait flag set flag } WAV test play-1.1.5 {play command, -channel, data in AU format} { proc endproc {snd sock} { set info [$snd info] close $sock $snd destroy set ::flag [lindex $info 6] } proc servproc { sock addr port } { set s [snack::sound snd -channel $sock] $s play -command [list endproc $s $sock] } set s [snack::sound snd -load ex1.wav] set data [$s data -fileformat au] $s destroy set servsock [socket -server servproc 24681] set sock [socket localhost 24681] fconfigure $sock -translation binary -blocking 1 if {$::tcl_version > 8.0} { fconfigure $sock -encoding binary } puts -nonewline $sock $data close $sock vwait flag set flag } AU test play-1.1.6 {play command, -channel, data as littleEndian shorts} { proc endproc {snd sock} { set info [$snd info] close $sock $snd destroy set ::flag [lindex $info 6] } proc servproc { sock addr port } { set s [snack::sound snd -channel $sock -byteorder littleEndian] $s play -command [list endproc $s $sock] } set s [snack::sound snd -load ex1.wav] set data [$s data -fileformat raw -byteorder littleEndian] $s destroy set servsock [socket -server servproc 24682] set sock [socket localhost 24682] fconfigure $sock -translation binary -blocking 1 if {$::tcl_version > 8.0} { fconfigure $sock -encoding binary } puts -nonewline $sock $data close $sock vwait flag set flag } RAW test play-1.1.7 {play command, -channel, data as bigEndian shorts} { proc endproc {snd sock} { set info [$snd info] close $sock $snd destroy set ::flag [lindex $info 6] } proc servproc { sock addr port } { set s [snack::sound snd -channel $sock -byteorder bigEndian] $s play -command [list endproc $s $sock] } set s [snack::sound snd -load ex1.wav] set data [$s data -fileformat raw -byteorder bigendian] $s destroy set servsock [socket -server servproc 24683] set sock [socket localhost 24683] fconfigure $sock -translation binary -blocking 1 if {$::tcl_version > 8.0} { fconfigure $sock -encoding binary } puts -nonewline $sock $data close $sock vwait flag set flag } RAW test play-1.1.8 {play command, -channel, data length 0} { proc endproc {snd sock} { set info [$snd info] close $sock $snd destroy set ::flag [lindex $info 6] } proc servproc { sock addr port } { set s [snack::sound snd -channel $sock -byteorder bigEndian] $s play -command [list endproc $s $sock] } set s [snack::sound snd] set data [$s data -fileformat raw -byteorder bigendian] $s destroy set servsock [socket -server servproc 24684] set sock [socket localhost 24684] fconfigure $sock -translation binary -blocking 1 if {$::tcl_version > 8.0} { fconfigure $sock -encoding binary } puts -nonewline $sock $data close $sock vwait flag set flag } RAW test play-1.1.9 {play command, -channel, data with 1024 initial zeros} { proc endproc {snd sock} { set info [$snd info] close $sock $snd destroy set ::flag [lindex $info 6] } proc servproc { sock addr port } { set s [snack::sound snd -channel $sock -byteorder bigEndian] $s play -command [list endproc $s $sock] } set s [snack::sound snd -load ex1.wav] set s2 [snack::sound snd2] $s2 length 512 set data [$s2 data -fileformat raw -byteorder bigendian] append data [$s data -fileformat raw -byteorder bigendian] $s destroy $s2 destroy set servsock [socket -server servproc 24685] set sock [socket localhost 24685] fconfigure $sock -translation binary -blocking 1 if {$::tcl_version > 8.0} { fconfigure $sock -encoding binary } puts -nonewline $sock $data close $sock vwait flag set flag } RAW test play-1.2.1 {play command, blocking} { set s [snack::sound snd -load ex1.wav] $s play -blocking 1 -command {set flag 1} $s destroy set flag } 1 test play-1.3.1 {play command, auto-destruct} { set s [snack::sound snd -load ex1.wav] $s play -command "set flag 1; $s destroy" -start 0 -end -1 vwait flag catch "$s info" msg set msg } {invalid command name "snd"} test play-1.4.1 {play command, non-existing linked file} { set s [snack::sound snd -file nosuch.wav] catch {$s play} msg $s destroy set msg } {couldn't open "nosuch.wav": no such file or directory} test play-2.1 {play command, using default sound device} { set s [snack::sound snd -load ex1.wav] $s play -device "" -command {set flag 1} vwait flag $s destroy set flag } 1 test play-2.2 {play command, using first sound device} { set s [snack::sound snd -load ex1.wav] set dev [lindex [snack::audio outputDevices] 0] $s play -device $dev -command {set flag 1} vwait flag $s destroy set flag } 1 test play-2.3 {play command, using unknown sound device} { set s [snack::sound snd -load ex1.wav] catch {$s play -device junk} msg $s destroy set msg } {No such device: junk} test play-2.4 {play command, missing argument to -device option} { set s [snack::sound snd -load ex1.wav] catch {$s play -device} msg $s destroy set msg } {No argument given for -device option} test play-3.1 {play command, with filter option specifying invalid filter} { set s [snack::sound snd -load ex1.wav] catch {$s play -filter junk} msg $s destroy set msg } {No such filter: junk} test play-3.2 {play command, with missing argument for -filter option} { set s [snack::sound snd -load ex1.wav] catch {$s play -filter} msg $s destroy set msg } {No argument given for -filter option} # cleanup ::tcltest::cleanupTests return