A Csound server
Prev | TclCsound | Next

## A Csound server

In Tcl, setting up TCP network connections is very simple. With a few lines of code a csound server can be built. This can accept connections from the local machine or from remote clients. Not only Tcl/Tk clients can send commands to it, but TCP connections can be made from other sofware, such as, for instance, Pure Data (PD). A Tcl script that can be run under the standard tclsh interpreter is shown below. It uses the Tclcsound module, a dynamic library that adds the Csound API commands to Tcl.

    # load tclcsound.so
    #(OSX: tclcsound.dylib, Windows: tclcsound.dll)
    load tclcsound.so Tclcsound
    set forever 0

    # This arranges for commands to be evaluated
    proc ChanEval { chan client } {
    if { [catch { set rtn [eval [gets $chan]]} err] } {
    puts "Error: $err"
    } else {
    puts $client $rtn
    flush $client
    }
    }

    # this arranges for connections to be made

    proc NewChan { chan host port } {
    puts "Csound server: connected to $host on port $port ($chan)"
    fileevent $chan readable [list ChanEval $chan $host]
    }

    # this sets up a server to listen for
    # connections

    set server [socket -server NewChan 40001]
    set sinfo [fconfigure $server -sockname]
    puts "Csound server: ready for connections on port [lindex $sinfo 2]"
    vwait forever

With the server running, it is then possible to set up clients to control the Csound server. Such clients can be run from standard Tcl/Tk interpreters, as they do not evaluate the Csound commands themselves. Here is an example of client connections to a Csound server, using Tcl:

    # connect to server
    set sock [socket localhost 40001]

    # compile Csound code
    puts $sock "csCompile -odac orchestra score"
    flush $sock

    # start performance
    puts $sock "csPlay"
    flush $sock

    # stop performance
    puts $sock "csStop"
    flush $sock

As mentioned before, it is possible to set up clients using other software systems, such as PD. Such clients need only to connect to the server (using a netsend object) and send messages to it. The first item of each message is taken to be a command. Further items can optionally be added to it as arguments to that command.

Prev | Up | Next
Cswish: the windowing shell | Home | A Scripting Environment