1#!/bin/sh 2# the next line restarts using wish \ 3exec wish8.4 "$0" "$@" 4 5package require -exact snack 2.2 6# Try to load optional file format handler 7catch { package require snackogg } 8 9snack::debug 0 10 11set port 23654 12 13proc Cmd { sock addr port } { 14 global servsock msg 15 16 set cmd [read $sock 4] 17 switch $cmd { 18 play { 19 set s [snack::sound -debug 0] 20 puts $sock $s ;# return token for this job 21 flush $sock 22 $s configure -channel $sock -guessproperties yes 23 $s play -command "close $sock; set msg idle;$s destroy" 24 set msg playing 25 } 26 stop { 27 set handle [gets $sock] ;# get token (sound name) and stop playback 28 catch { $handle stop } 29 catch { $handle destroy } 30 close $sock 31 set msg idle 32 } 33 exit { 34 close $sock 35 close $servsock 36 exit 37 } 38 default { 39 puts "Unknown command" 40 } 41 } 42} 43 44set servsock [socket -server Cmd $port] 45 46# Make sure the server socket always is closed properly on exit 47 48wm protocol . WM_DELETE_WINDOW {close $servsock; exit} 49 50proc NewPort {} { 51 global servsock port 52 close $servsock 53 set servsock [socket -server Cmd $port] 54} 55 56proc Pause {} { 57 if {[snack::audio active] == 0} return 58 snack::audio pause 59 if {[.b.bp cget -relief] == "raised"} { 60 .b.bp configure -relief sunken 61 set ::msg paused 62 } else { 63 .b.bp configure -relief raised 64 set ::msg playing 65 } 66} 67 68proc Stop {} { 69 snack::audio stop 70 .b.bp configure -relief raised 71 set ::msg idle 72} 73 74set msg idle 75pack [frame .t] 76pack [label .t.l1 -text Status:] -side left 77pack [label .t.l2 -textvar msg -width 7] -side left 78 79pack [frame .m] 80pack [label .m.l -text Port] -side left 81pack [entry .m.e -textvar port -width 6] -side left 82pack [button .m.b -text Set -command NewPort] -side left 83 84set gain [snack::audio play_gain] 85pack [frame .b] 86pack [button .b.bs -bitmap snackStop -command Stop] \ 87 -side left 88pack [button .b.bp -bitmap snackPause -command Pause] -side left 89pack [scale .b.s -show no -orient horiz -command {snack::audio play_gain} \ 90 -var gain] -side left 91 92vwait forever 93