home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 May / PCWorld_2002-05_cd.bin / Software / TemaCD / activetcltk / ActiveTcl8.3.4.1-8.win32-ix86.exe / ActiveTcl8.3.4.1-win32-ix86 / demos / Snack / aserver.tcl next >
Encoding:
Text File  |  2001-10-22  |  2.1 KB  |  95 lines

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