#! /usr/bin/wish set FILES [lsort [glob -nocomplain *.wav]] foreach F $FILES { set "FVAR(t $F)" [string range "$F" 0 end-4] } set num 0 proc newline {F} { global num FVAR set f .f$num incr num frame $f label $f.l -text $F entry $f.a -textvariable "FVAR(a $F)" entry $f.t -textvariable "FVAR(t $F)" -width 60 pack $f.l $f.a $f.t -side left pack $f } frame .ta label .ta.l -text Album: entry .ta.e -textvariable ALBUM pack .ta.l -side left pack .ta.e -side right -fill x -expand on pack .ta -fill x set MODE nat frame .tm frame .tm.a frame .tm.b radiobutton .tm.a.at -text "Author - Title" -variable MODE -value at -anchor w radiobutton .tm.a.t -text "Title" -variable MODE -value t -anchor w radiobutton .tm.a.lat -text "Album - Author - Title" -variable MODE -value lat -anchor w radiobutton .tm.a.alt -text "Author - Album - Title" -variable MODE -value alt -anchor w radiobutton .tm.b.at -text "NN Author - Title" -variable MODE -value nat -anchor w radiobutton .tm.b.t -text "NN Title" -variable MODE -value nt -anchor w radiobutton .tm.b.lat -text "NN Album - Author - Title" -variable MODE -value nlat -anchor w radiobutton .tm.b.alt -text "NN Author - Album - Title" -variable MODE -value nalt -anchor w pack .tm.a .tm.b -side left -fill x -expand on pack .tm.a.at .tm.a.t .tm.a.lat .tm.a.alt -fill x pack .tm.b.at .tm.b.t .tm.b.lat .tm.b.alt -fill x pack .tm -fill x -expand on #read toc: proc tocat {f a t} { global FVAR set "FVAR(a $f)" $a set "FVAR(t $f)" $t } proc tocl {l} { global ALBUM set ALBUM $l } proc tocm {m} { global MODE set MODE $m } set d [catch {set toc [open toc.tcl r]}] if {!$d} { while {[gets $toc line] > 0} { eval $line } close $toc } #create widget: foreach F $FILES { newline $F } tkwait window . ############################################ proc escsh {str} { set ret "'" foreach l [split $str {}] { if {"$l" == "'"} { append ret {'\''} } else { append ret $l } } append ret "'" return $ret } set PAT {} set PATN 0 foreach p [split $MODE {}] { if {"$p" == "n"} { set PATN 1 } else { if {"$PAT" != ""} {append PAT " - "} append PAT "%$p" } } proc unpat {p l a t} { return [string map [list %l $l %a $a %t $t] $p] } #create toc: proc pad {n} { if {[string length $n] < 2} {return "0$n"} {return $n} } set num 0 set n {} set toc [open Makefile w] puts $toc {# Auto-generated Ogg and MP3 cooking oven} puts $toc {O = oggenc -Q} puts $toc {L = lame -h} puts $toc {F = $(shell echo *.wav)} if {"$ALBUM" != ""} { puts $toc "AO = -l [escsh $ALBUM]" puts $toc "AL = --tl [escsh $ALBUM]" } { puts $toc {AO =} puts $toc {AL =} } foreach F $FILES { incr num #Ogg building: if {$PATN} {set n "[pad $num] "} set line "O_$F = -n \'$n$PAT.ogg\' -t [escsh $FVAR(t $F)] " set a $FVAR(a $F) if {"$a" != ""} { append line "-a [escsh $a] " } append line $F puts $toc $line #MP3 Building: set line "M_$F = --tt [escsh $FVAR(t $F)] " set a $FVAR(a $F) if {"$a" != ""} { append line "--ta [escsh $a] " } append line $F puts $toc $line puts $toc "MF_$F = [escsh $n[unpat $PAT $ALBUM $FVAR(a $F) $FVAR(t $F)].mp3]" } puts $toc {} puts $toc {all:} puts $toc { @echo Please call \"nice make [-j 2..x] ogg\".} puts $toc { @echo You can add parameters to oggenc/lame/mp3info by modifying the Makefile.} puts $toc {} puts $toc {ogg: $(F:.wav=.done)} puts $toc { rm -f $^} puts $toc { @echo} puts $toc { @echo Ready: Ogg.} puts $toc { @echo I\'ve done all I can. Don\'t restart make, unless you have better Wav-Files!!} puts $toc {} puts $toc {mp3: $(F:.wav=.done3)} puts $toc { rm -f $^} puts $toc { @echo} puts $toc { @echo Ready: MP3.} puts $toc { @echo I\'ve done all I can. Don\'t restart make, unless you have better Wav-Files!!} puts $toc {} puts $toc {%.done: %.wav} puts $toc { @echo Making $@} puts $toc { $O $(AO) $(O_$<)} puts $toc { touch $@} puts $toc {} puts $toc {%.done3: %.wav} puts $toc { @echo Making $@} puts $toc { $L $(AL) $(M_$<) $(MF_$<)} puts $toc { touch $@} close $toc set toc [open toc.tcl w] puts $toc "[list tocl "$ALBUM"]" puts $toc "[list tocm "$MODE"]" foreach F $FILES { puts $toc "[list tocat "$F" "$FVAR(a $F)" "$FVAR(t $F)"]" } close $toc