Shout

Shout is an extension that makes it possible to stream audio to icecast or shoutcast-compatible servers from a Tcl script. This is a higher level binding than tclshout, and targets a newer libshout version.

Example usage:

package require shout

proc stream {fd1 fd2} {
    puts -nonewline $fd2 [read $fd1 4096]
    if {[eof $fd1]} {
        close $fd1
        nextsong $fd2
    }
}

proc nextsong {shout} {
    global playlist
    if {[llength $playlist] > 0} {
        set playlist [lassign $playlist file]
        set fd [open $file rb]
        fileevent $shout writable [list stream $fd $shout]
        fconfigure $shout -song [file rootname [file tail $file]]
    } else {
        exit
    }
}

set fd [shout -user source -mount /tclradio -format mp3 \
  -genre rock -name "Tcl Radio" 127.0.0.1 8000 hackme]
fconfigure $fd -buffering none

set playlist [glob -nocomplain *.mp3]

nextsong $fd

vwait forever