Howdy,

I would like to use the Synthesis Toolkit for a demo.  I downloaded
the STK from http://ccrma.stanford.edu/software/stk/index.html.  It
seems very powerful and user friendly.  There are bindings for socket
connections and TCL gui examples.  I would like to get one of the demo
samples work with Python/wxPython.  I am including the TCL code for
the drums demo (this was the shortest one).

Has anybody converted this to wxPython?  If yes, would you be kind
enough to share the code?

If not,

How do I establish a socket connection for localhost and port 2001 in
Python?

And how do I send commands to this connection once it is established?

Thank you in advance,

Mangabasi






# Tcl/Tk Drum GUI for the Synthesis Toolkit (STK)

# Set initial control values
set press 127
set outID "stdout"
set commtype "stdout"

# Turn down the reverb
puts $outID "ControlChange    0.0  1  44.0  0.0"

# Configure main window
wm title . "STK Drum Controller"
wm iconname . "drum"
. config -bg black

# Configure "communications" menu
menu .menu -tearoff 0
menu .menu.communication -tearoff 0
.menu add cascade -label "Communication" -menu .menu.communication \
                                -underline 0
.menu.communication add radio -label "Console" -variable commtype \
                                -value "stdout" -command { setComm }
.menu.communication add radio -label "Socket" -variable commtype \
                                -value "socket" -command { setComm }
. configure -menu .menu

# Configure slider
scale .bPressure -from 0 -to 128 -length 100 \
-command {changePress } -variable press\
-orient horizontal -label "Velocity" \
-tickinterval 64 -showvalue true -bg grey66

pack .bPressure -pady 5 -padx 5

# Configure buttons
frame .buttons -bg black
frame .buttons.left -bg black
frame .buttons.right -bg black

button .buttons.left.bass -text Bass  -bg grey66 \
-command { playDrum 36 } -width 7
button .buttons.left.snare -text Snare  -bg grey66 \
-command { playDrum 38 } -width 7
button .buttons.left.tomlo -text LoTom  -bg grey66 \
-command { playDrum 41 } -width 7
button .buttons.left.tommid -text MidTom  -bg grey66 \
-command { playDrum 45 } -width 7
button .buttons.left.tomhi -text HiTom  -bg grey66 \
-command { playDrum 50 } -width 7
button .buttons.left.homer -text Homer -bg grey66 \
-command { playDrum 90 } -width 7
button .buttons.right.hat -text Hat  -bg grey66 \
-command { playDrum 42 } -width 7
button .buttons.right.ride -text Ride -bg grey66 \
-command { playDrum 46 } -width 7
button .buttons.right.crash -text Crash -bg grey66 \
-command { playDrum 49 } -width 7
button .buttons.right.cowbel -text CowBel -bg grey66 \
-command { playDrum 56 } -width 7
button .buttons.right.tamb -text Tamb -bg grey66 \
-command { playDrum 54 } -width 7
button .buttons.right.homer -text Homer -bg grey66 \
-command { playDrum 90 } -width 7

pack .buttons.left.bass -pady 5
pack .buttons.left.snare -pady 5
pack .buttons.left.tomlo -pady 5
pack .buttons.left.tommid -pady 5
pack .buttons.left.tomhi -pady 5
pack .buttons.left.homer -pady 5
pack .buttons.right.hat -pady 5
pack .buttons.right.ride -pady 5
pack .buttons.right.crash -pady 5
pack .buttons.right.cowbel -pady 5
pack .buttons.right.tamb -pady 5
pack .buttons.right.homer -pady 5

pack .buttons.left -side left -pady 5 -padx 5
pack .buttons.right -side right -pady 5 -padx 5
pack .buttons -pady 5 -padx 5

# Configure exit button
button .exit -text "Exit Program" -bg grey66 -command myExit
pack .exit -side bottom -pady 20

#bind all <KeyPress> {
bind . <KeyPress> {
    noteOn $pitch $press
}

# Bind an X windows "close" event with the Exit routine
bind . <Destroy> +myExit

proc myExit {} {
                global outID
    puts $outID [format "ExitProgram"]
    flush $outID
    close $outID
    exit
}

proc playDrum {value}   {
    global press
                global outID
    puts $outID [format "NoteOn           0.0 1 %i %f" $value $press]
    flush $outID
}

proc changePress {value} {
    global press
    set press $value
}

# Socket connection procedure
set d .socketdialog

proc setComm {} {
                global outID
                global commtype
                global d
                if {$commtype == "stdout"} {
                                if { [string compare "stdout" $outID] } {
                                                set i [tk_dialog .dialog "Break 
Socket Connection?" {You are
about to break an existing socket connection ... is this what you want
to do?} "" 0 Cancel OK]
                                                switch $i {
                                                                0 {set commtype 
"socket"}
                                                                1 {close $outID
                                                                   set outID 
"stdout"}
                                                }
                                }
                } elseif { ![string compare "stdout" $outID] } {
                                set sockport 2001
        set sockhost localhost
                                toplevel $d
                                wm title $d "STK Client Socket Connection"
                                wm resizable $d 0 0
                                grab $d
                                label $d.message -text "Specify a socket host 
and port number
below (if different than the STK defaults shown) and then click the
\"Connect\" button to invoke a socket-client connection attempt to the
STK socket server." \
                                                                -background 
white -font {Helvetica 10 bold} \
                                                                -wraplength 3i 
-justify left
                                frame $d.sockhost
                                entry $d.sockhost.entry -width 15
                                label $d.sockhost.text -text "Socket Host:" \
                                                                -font 
{Helvetica 10 bold}
                                frame $d.sockport
                                entry $d.sockport.entry -width 15
                                label $d.sockport.text -text "Socket Port:" \
                                                                -font 
{Helvetica 10 bold}
                                pack $d.message -side top -padx 5 -pady 10
                                pack $d.sockhost.text -side left -padx 1 -pady 2
                                pack $d.sockhost.entry -side right -padx 5 
-pady 2
                                pack $d.sockhost -side top -padx 5 -pady 2
                                pack $d.sockport.text -side left -padx 1 -pady 2
                                pack $d.sockport.entry -side right -padx 5 
-pady 2
                                pack $d.sockport -side top -padx 5 -pady 2
                                $d.sockhost.entry insert 0 $sockhost
                                $d.sockport.entry insert 0 $sockport
                                frame $d.buttons
                                button $d.buttons.cancel -text "Cancel" -bg 
grey66 \
                                                                -command { set 
commtype "stdout"
                                                   set outID "stdout"
                                                   destroy $d }
                                button $d.buttons.connect -text "Connect" -bg 
grey66 \
                                                                -command {
                                                set sockhost [$d.sockhost.entry 
get]
                                                set sockport [$d.sockport.entry 
get]
                                          set err [catch {socket $sockhost 
$sockport} outID]

                                                if {$err == 0} {
                                                                destroy $d
                                                } else {
                                                                tk_dialog 
$d.error "Socket Error" {Error: Unable to make
socket connection.  Make sure the STK socket server is first running
and that the port number is correct.} "" 0 OK
                                }   }
                                pack $d.buttons.cancel -side left -padx 5 -pady 
10
                                pack $d.buttons.connect -side right -padx 5 
-pady 10
                                pack $d.buttons -side bottom -padx 5 -pady 10
                }
}

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to