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
|
#!/bin/sh
# the next line restarts using wish \
exec wish8.5 "$0" "$@"
package require -exact snack 2.2
# Try to load optional file format handler
catch { package require snackogg }
snack::debug 0
set port 23654
proc Cmd { sock addr port } {
global servsock msg
set cmd [read $sock 4]
switch $cmd {
play {
set s [snack::sound -debug 0]
puts $sock $s ;# return token for this job
flush $sock
$s configure -channel $sock -guessproperties yes
$s play -command "close $sock; set msg idle;$s destroy"
set msg playing
}
stop {
set handle [gets $sock] ;# get token (sound name) and stop playback
catch { $handle stop }
catch { $handle destroy }
close $sock
set msg idle
}
exit {
close $sock
close $servsock
exit
}
default {
puts "Unknown command"
}
}
}
set servsock [socket -server Cmd $port]
# Make sure the server socket always is closed properly on exit
wm protocol . WM_DELETE_WINDOW {close $servsock; exit}
proc NewPort {} {
global servsock port
close $servsock
set servsock [socket -server Cmd $port]
}
proc Pause {} {
if {[snack::audio active] == 0} return
snack::audio pause
if {[.b.bp cget -relief] == "raised"} {
.b.bp configure -relief sunken
set ::msg paused
} else {
.b.bp configure -relief raised
set ::msg playing
}
}
proc Stop {} {
snack::audio stop
.b.bp configure -relief raised
set ::msg idle
}
set msg idle
pack [frame .t]
pack [label .t.l1 -text Status:] -side left
pack [label .t.l2 -textvar msg -width 7] -side left
pack [frame .m]
pack [label .m.l -text Port] -side left
pack [entry .m.e -textvar port -width 6] -side left
pack [button .m.b -text Set -command NewPort] -side left
set gain [snack::audio play_gain]
pack [frame .b]
pack [button .b.bs -bitmap snackStop -command Stop] \
-side left
pack [button .b.bp -bitmap snackPause -command Pause] -side left
pack [scale .b.s -show no -orient horiz -command {snack::audio play_gain} \
-var gain] -side left
vwait forever
|