[Demudi-commits] r51 - / tkeca tkeca/branches tkeca/branches/upstream tkeca/branches/upstream/current

Free Ekanayaka free-guest@haydn.debian.org
Sat, 30 Oct 2004 06:35:43 -0600


Author: free-guest
Date: 2004-10-30 06:34:55 -0600 (Sat, 30 Oct 2004)
New Revision: 51

Added:
   tkeca/
   tkeca/branches/
   tkeca/branches/upstream/
   tkeca/branches/upstream/current/
   tkeca/branches/upstream/current/tkeca.tcl
   tkeca/tags/
Log:
[svn-inject] Installing original source of tkeca

Added: tkeca/branches/upstream/current/tkeca.tcl
===================================================================
--- tkeca/branches/upstream/current/tkeca.tcl	2004-10-30 12:33:07 UTC (rev 50)
+++ tkeca/branches/upstream/current/tkeca.tcl	2004-10-30 12:34:55 UTC (rev 51)
@@ -0,0 +1,2068 @@
+#!/bin/sh
+# the next line restarts using wish \
+exec wish "$0" "$@" > ~/tkeca.log
+
+#    Tkeca is a Tcl/Tk frontend for Kai Vehmanen's Ecasound
+#    Copyright (C) 2002-2003  Luis Pablo Gasparotto
+#
+#    This program is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program; if not, write to the Free Software
+#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+#    To contact me: luispa8@yahoo.com.ar	
+
+proc locate {} {
+    global sp_minutes sp_seconds sp_minutes_loc sp_seconds_loc locate_name bgcolor bgcolor2 bgcolor3 mfe time_format
+    if {[winfo exists .locate] != 0} {destroy .locate}
+    toplevel .locate  -bd 6 -bg $bgcolor
+    frame .locate.locate -bg $bgcolor
+    set loc_number 1
+    if {$time_format=="Minutes"} {
+	for {set n 1} {$n <= 4} {incr n} {
+	    for {set en 1} {$en <= 4} {incr en} {	
+		entry .locate.locate.minutes$loc_number -bg White -width 3 -textvariable sp_minutes_loc($loc_number)
+		label .locate.locate.position$loc_number -bg $bgcolor -text :
+		entry .locate.locate.seconds$loc_number -bg White -width 5 -textvariable sp_seconds_loc($loc_number)
+		button .locate.locate.button$loc_number -bg AntiqueWhite -activebackground LightPink -text $loc_number -command "
+		set locate_name $loc_number
+		move_to_locate"
+		incr loc_number
+	    }
+	}
+	frame .locate.punch -bg $bgcolor
+	label .locate.punch.in_text -bg $bgcolor -text "Punch-in Position:"
+	entry .locate.punch.in_minutes -bg White -width 3 -textvariable mfe(punch_in_minutes)
+	label .locate.punch.in_sep -bg $bgcolor -text :
+	entry .locate.punch.in_seconds -bg White -width 5 -textvariable mfe(punch_in_seconds)
+
+	label .locate.punch.out_text -bg $bgcolor -text "Punch-Out Position"
+	entry .locate.punch.out_minutes -bg White -width 3 -textvariable mfe(punch_out_minutes)
+	label .locate.punch.out_sep -bg $bgcolor -text :
+	entry .locate.punch.out_seconds -bg White -width 5 -textvariable mfe(punch_out_seconds)
+
+    } else {
+	for {set n 1} {$n <= 4} {incr n} {
+	    for {set en 1} {$en <= 4} {incr en} {	
+		entry .locate.locate.minutes$loc_number -bg $bgcolor -fg $bgcolor -width 0 -textvariable sp_minutes_loc($loc_number) -state disabled -relief flat
+		label .locate.locate.position$loc_number -bg $bgcolor -text ""
+		entry .locate.locate.seconds$loc_number -bg White -width 7 -textvariable sp_seconds_loc($loc_number)
+		button .locate.locate.button$loc_number -bg AntiqueWhite -activebackground LightPink -text $loc_number -command "
+		set locate_name $loc_number
+		move_to_locate"
+		incr loc_number
+	    }
+	}
+	frame .locate.punch -bg $bgcolor
+	label .locate.punch.in_text -bg $bgcolor -text "Punch-in Position:"
+	entry .locate.punch.in_minutes -bg $bgcolor -fg $bgcolor -width 0 -textvariable mfe(punch_in_minutes) -state disabled -relief flat
+	label .locate.punch.in_sep -bg $bgcolor -text ""
+	entry .locate.punch.in_seconds -bg White -width 7 -textvariable mfe(punch_in_seconds)
+
+	label .locate.punch.out_text -bg $bgcolor -text "Punch-Out Position"
+	entry .locate.punch.out_minutes -bg $bgcolor -fg $bgcolor -width 0 -textvariable mfe(punch_out_minutes) -state disabled -relief flat
+	label .locate.punch.out_sep -bg $bgcolor -text ""
+	entry .locate.punch.out_seconds -bg White -width 7 -textvariable mfe(punch_out_seconds)
+    }
+    
+    grid .locate.locate.minutes1 .locate.locate.position1 .locate.locate.seconds1 .locate.locate.button1  \
+    .locate.locate.minutes2 .locate.locate.position2 .locate.locate.seconds2 .locate.locate.button2 \
+    .locate.locate.minutes3 .locate.locate.position3 .locate.locate.seconds3 .locate.locate.button3 \
+    .locate.locate.minutes4 .locate.locate.position4 .locate.locate.seconds4 .locate.locate.button4 \
+    -sticky ewns
+    grid .locate.locate.minutes5 .locate.locate.position5 .locate.locate.seconds5 .locate.locate.button5 \
+    .locate.locate.minutes6 .locate.locate.position6 .locate.locate.seconds6 .locate.locate.button6 \
+    .locate.locate.minutes7 .locate.locate.position7 .locate.locate.seconds7 .locate.locate.button7 \
+    .locate.locate.minutes8 .locate.locate.position8 .locate.locate.seconds8 .locate.locate.button8 \
+    -sticky ewns
+    grid .locate.locate.minutes9 .locate.locate.position9 .locate.locate.seconds9 .locate.locate.button9 \
+    .locate.locate.minutes10 .locate.locate.position10 .locate.locate.seconds10 .locate.locate.button10 \
+    .locate.locate.minutes11 .locate.locate.position11 .locate.locate.seconds11 .locate.locate.button11 \
+    .locate.locate.minutes12 .locate.locate.position12 .locate.locate.seconds12 .locate.locate.button12 \
+    -sticky ewns
+    grid .locate.locate.minutes13 .locate.locate.position13 .locate.locate.seconds13 .locate.locate.button13 \
+    .locate.locate.minutes14 .locate.locate.position14 .locate.locate.seconds14 .locate.locate.button14 \
+    .locate.locate.minutes15 .locate.locate.position15 .locate.locate.seconds15 .locate.locate.button15 \
+    .locate.locate.minutes16 .locate.locate.position16 .locate.locate.seconds16 .locate.locate.button16 \
+    -sticky ewns
+
+    pack .locate.locate
+    grid .locate.punch.in_text .locate.punch.in_minutes .locate.punch.in_sep .locate.punch.in_seconds \
+    .locate.punch.out_text .locate.punch.out_minutes .locate.punch.out_sep .locate.punch.out_seconds 
+    pack .locate.punch
+}
+
+proc move_to_locate {} {
+        global sp_minutes sp_seconds locate_name sp_minutes_loc sp_seconds_loc 
+	set sp_minutes $sp_minutes_loc($locate_name)
+	set sp_seconds $sp_seconds_loc($locate_name)
+	display_position
+}
+
+proc add_wave_files {} {
+    global mfe w3 w4 mt_font track_num track_num2 bgcolor3 n add_file
+    set track "track"
+    set pointer "file$n$track$track_num2"
+    if {$add_file == 1} {
+	set mfe(files$track_num2) [expr $mfe(files$track_num2)+1]
+	set n $mfe(files$track_num2) 
+	set pointer "file$n$track$track_num2"
+	set mfe(start1$pointer) 0
+	set mfe(start2$pointer) 0
+	set mfe(duration1$pointer) 0
+	set mfe(duration2$pointer) 0
+	set mfe(status$pointer) "Play"
+	set mfe($pointer) ""
+    }
+    $w3.canvas config -scrollregion "0 0 0 [expr $n *26]"
+
+    	entry $w4.entry1_$n -bg White -font $mt_font -width 15 -textvariable mfe($pointer)
+	button $w4.open$n -bg LightPink2 -activebackground LightSeaGreen -font $mt_font -text ... -command "
+	set track_num $track_num2 
+	set file_num $n
+	set types {{{Wav files} {*.wav}} {{mp3 files} {*.mp3}} {{raw files} {*.raw}} {{efw files} {*.efw}} {{all} {*}}}
+	file_browser"
+	entry $w4.entry2_$n -bg White -font $mt_font -width 2 -textvariable mfe(start1$pointer)
+	entry $w4.entry2b_$n -bg White -font $mt_font -width 2 -textvariable mfe(start2$pointer)
+	entry $w4.entry3_$n -bg White -font $mt_font -width 2 -textvariable mfe(duration1$pointer)
+	entry $w4.entry3b_$n -bg White -font $mt_font -width 2 -textvariable mfe(duration2$pointer)
+	checkbutton $w4.play$n -width 1 -bg $bgcolor3 -variable mfe(status$pointer) -onvalue "Play" -offvalue "Mute" -command "
+	    $w4.entry2_$n configure -bg White -state disabled
+	    $w4.entry2b_$n configure -bg White -state disabled"
+	checkbutton $w4.rec$n -width 1 -bg $bgcolor3 -variable mfe(status$pointer)  -onvalue "Rec" -command "
+	    $w4.entry2_$n configure -bg $bgcolor3 -state disabled
+	    $w4.entry2b_$n configure -bg $bgcolor3 -state disabled"
+	if {$mfe(status$pointer)=="Rec"} { 
+	    $w4.entry2_$n configure -bg $bgcolor3 -state disabled
+	    $w4.entry2b_$n configure -bg $bgcolor3 -state disabled
+	}    
+	button $w4.wave_edit$n -font $mt_font -bg LightBlue3 -activebackground LightSeaGreen -text "Wave Edit" -command "
+	set track_num $track_num2
+	set file_num $n
+	wave_edit"
+	
+	grid $w4.entry1_$n $w4.open$n $w4.entry2_$n $w4.entry2b_$n $w4.entry3_$n $w4.entry3b_$n $w4.play$n $w4.rec$n $w4.wave_edit$n -sticky ewns
+}
+
+proc ladspa {} {
+
+global eca_effects effect_param effect_param_name effect_param_to effect_param_from effect_param_resolution effect_param_value effect_index effect_name effect_copy effect_maker ladspa_path env
+
+
+
+set env(LADSPA_PATH) $ladspa_path  
+
+set cmd "exec listplugins"
+catch {eval $cmd} exec_out1
+
+if {[string match *egmentation* $exec_out1] == 1} {
+return}
+
+set exec_out2 [split $exec_out1 \n]
+set file_number 0
+set parameters 0
+
+for {set n 0} {$n <= [llength $exec_out2]} {incr n} {
+    set current_line [lindex $exec_out2 $n]
+    if {[string match *.so* $current_line] == 1} {
+	regsub : $current_line {} current_line
+	set files($file_number) $current_line
+	incr file_number
+
+    }
+}
+
+set exec_out2 " "
+
+for {set n 0} {$n < $file_number} {incr n} {
+
+    set cmd "exec analyseplugin $files($n)"
+    catch {eval $cmd} exec_out1
+    set exec_out2 "$exec_out2$exec_out1"
+
+}
+
+set exec_out3 [split $exec_out2 \n]
+set index $eca_effects
+
+for {set n 0} {$n <= [llength $exec_out3]} {incr n} {
+    set current_line [lindex $exec_out3 $n]
+    if {[string match {Plugin Label:*} $current_line] == 1} {    
+	set parameters 0
+	regsub {Plugin Label: "} $current_line {} plugin_label
+	regsub {"} $plugin_label {} plugin_label
+	set effect_param(ladspa_$plugin_label) 0
+	set effect_index($index) "ladspa_$plugin_label" 
+	incr index
+	set past_line [lindex $exec_out3 [expr $n-1]]
+	regsub {Plugin Name: "} $past_line {} plugin_name
+	regsub {"} $plugin_name {} effect_name(ladspa_$plugin_label)
+ 	set n [expr $n+2]
+	set current_line [lindex $exec_out3 $n]	
+	regsub {Maker: "} $current_line {} plugin_maker
+	regsub {"} $plugin_maker {}  effect_maker(ladspa_$plugin_label)
+	incr n
+	set current_line [lindex $exec_out3 $n]	
+	regsub {Copyright: "} $current_line {} plugin_copy
+	regsub {"} $plugin_copy {}  effect_copy(ladspa_$plugin_label)
+	set n [expr $n+6]
+	set current_line [lindex $exec_out3 $n]	
+    }	
+    
+    if {[string match {Ports:*} $current_line] == 1 || $parameters == 1} {
+	set parameters 1
+	if {[string match {*control,*} $current_line] ==1 } {
+	    if {[string match *ERROR:* $current_line ] == 1 || [string match *toggled* $current_line ] == 1} {
+		incr effect_param(ladspa_$plugin_label)
+		set effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 0
+		set effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 0
+		set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 1
+		set effect_param_value(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 0
+	    }
+	    regsub -all {\*srate} $current_line {} current_line
+	    if {[regexp -all {([-+.0-9]+)( to)} $current_line param_from] == 1} {
+	    	incr effect_param(ladspa_$plugin_label)
+		regsub -all { to} $param_from {} effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))
+		set effect_param_value(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) $effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))
+	    } 
+	    if {[regexp -all {(\")([(= ),&+-?/%A-Za-z0-9]+)(\")} $current_line param_name] == 1} {
+		regsub -all {\"} $param_name {} effect_param_name(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))
+	    }
+
+	    if {[regexp -all {(to )([-+.0-9]+)} $current_line param_to] == 1} {
+		regsub -all {to } $param_to {} effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))
+		if {[string match {*integer*} $current_line]} {set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 1} else {
+		    set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 0
+	    }
+	    if {[string match {*logarithmic*} $current_line] == 1} {
+		    set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 100	    
+	    }
+	    if {[string match *...* $effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))] == 1} {	
+		    set effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 10000
+		    set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 100	    	
+	    }
+	    if {[string match *...* $effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))] == 1} {	
+		    set effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 10000	
+		    set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 100	    	
+	    }
+	
+	} 
+	}
+    }
+        
+}
+
+set eca_effects [expr $index - 1]
+
+}
+
+proc add_track {} {
+    global mfe number_of_tracks number_of_files mt_font n eca_effects effect_index effect_name mfe_temp w track_num bgcolor3 mixdown edit_effect
+    set bgcolor3 AntiqueWhite2
+    set n $number_of_tracks
+    set mfe(track_status$n) "Play"
+    set mfe(rec_prop_bits$n) "s16_le"
+    set mfe(rec_prop_channels$n) "1"
+    set mfe(rec_prop_srate$n) "44100"
+    set mfe(rec_prop_interl$n) "i"
+    set mfe(volume$n) 100
+    set mfe(pan$n) 50
+    set mfe(device$n) "/dev/dsp"
+    set mfe(chn$n) "n/a"
+    set mfe(volume_position$n) 1    
+    set mfe(pan_position$n) 2
+    set number $n
+    set mfe(track_rec_status$n) "No"
+    set mfe(track_status$n) "Play"
+
+    .mfe.tracks.canvas config -scrollregion "0 0 0 [expr $number_of_tracks *29]"
+	if {$n < 10} {set number "0$n"}
+
+	label $w.number$n -bg AntiqueWhite -font $mt_font -text $number
+	entry $w.file$n -bg White -font $mt_font -width 14 -textvariable mfe(file$n)
+	button $w.open$n -bg LightPink2 -activebackground LightSeaGreen -font $mt_font -text ... -command "
+	set track_num $n 
+	set types {{{Wav files} {*.wav}} {{mp3 files} {*.mp3}} {{raw files} {*.raw}} {{efw files} {*.efw}} {{all} {*}}}
+	file_browser"
+	button $w.track_properties$n -bg LightBlue3 -activebackground LightSeaGreen -font $mt_font -text "P" -relief raised -command "
+	set track_num $n 
+	set mixdown 0
+	rec_properties"
+
+	menubutton $w.dev_text$n -bg LightSkyBlue -activebackground LightSeaGreen -font $mt_font -text "D" -relief raised -menu $w.dev_text$n.type
+	menu $w.dev_text$n.type -tearoff 0
+		$w.dev_text$n.type add radiobutton -label /dev/dsp -variable mfe(device$n) -value "/dev/dsp"
+		$w.dev_text$n.type add radiobutton -label /dev/dsp1 -variable mfe(device$n) -value "/dev/dsp1"
+		$w.dev_text$n.type add radiobutton -label /dev/dsp2 -variable mfe(device$n) -value "/dev/dsp2"
+		$w.dev_text$n.type add radiobutton -label /dev/dsp3 -variable mfe(device$n) -value "/dev/dsp3"
+	        $w.dev_text$n.type add radiobutton -label alsa,hw:0 -variable mfe(device$n) -value "alsa,hw:0"
+		$w.dev_text$n.type add radiobutton -label alsa,hw:1 -variable mfe(device$n) -value "alsa,hw:1"
+		$w.dev_text$n.type add radiobutton -label alsa,hw:2 -variable mfe(device$n) -value "alsa,hw:2"
+		$w.dev_text$n.type add radiobutton -label alsa,hw:3 -variable mfe(device$n) -value "alsa,hw:3"
+		$w.dev_text$n.type add radiobutton -label alsaplugin,0,0 -variable mfe(device$n) -value "alsaplugin,0,0"
+		$w.dev_text$n.type add radiobutton -label alsaplugin,0,1 -variable mfe(device$n) -value "alsaplugin,0,1"
+		$w.dev_text$n.type add radiobutton -label alsaplugin,0,2 -variable mfe(device$n) -value "alsaplugin,0,2"
+		$w.dev_text$n.type add radiobutton -label alsaplugin,0,3 -variable mfe(device$n) -value "alsaplugin,0,3"
+		$w.dev_text$n.type add radiobutton -label alsaplugin,1,0 -variable mfe(device$n) -value "alsaplugin,1,0"
+		$w.dev_text$n.type add radiobutton -label alsaplugin,1,1 -variable mfe(device$n) -value "alsaplugin,2,1"
+		$w.dev_text$n.type add radiobutton -label alsaplugin,1,2 -variable mfe(device$n) -value "alsaplugin,3,2"
+		$w.dev_text$n.type add radiobutton -label alsaplugin,1,3 -variable mfe(device$n) -value "alsaplugin,4,3"
+		$w.dev_text$n.type add radiobutton -label Jack -variable mfe(device$n) -value "jack"
+
+	entry $w.dev_entry$n -bg White -font $mt_font -width 8 -textvariable mfe(device$n)
+	
+	menubutton $w.chn_text$n -bg LightSkyBlue -activebackground LightSeaGreen -font $mt_font -text "Ch" -relief raised -menu $w.chn_text$n.type
+	menu $w.chn_text$n.type -tearoff 0
+		$w.chn_text$n.type add radiobutton -label n/a -variable mfe(chn$n) -value "n/a"
+		$w.chn_text$n.type add radiobutton -label 1 -variable mfe(chn$n) -value "1"
+		$w.chn_text$n.type add radiobutton -label 2 -variable mfe(chn$n) -value "2"
+		$w.chn_text$n.type add radiobutton -label 3 -variable mfe(chn$n) -value "3"
+		$w.chn_text$n.type add radiobutton -label 4 -variable mfe(chn$n) -value "4"
+		$w.chn_text$n.type add radiobutton -label 5 -variable mfe(chn$n) -value "5"
+		$w.chn_text$n.type add radiobutton -label 6 -variable mfe(chn$n) -value "6"
+		$w.chn_text$n.type add radiobutton -label 7 -variable mfe(chn$n) -value "7"
+		$w.chn_text$n.type add radiobutton -label 8 -variable mfe(chn$n) -value "8"
+		$w.chn_text$n.type add radiobutton -label 9 -variable mfe(chn$n) -value "9"
+		$w.chn_text$n.type add radiobutton -label 10 -variable mfe(chn$n) -value "10"
+		$w.chn_text$n.type add radiobutton -label 11 -variable mfe(chn$n) -value "11"
+		$w.chn_text$n.type add radiobutton -label 12 -variable mfe(chn$n) -value "12"
+		$w.chn_text$n.type add radiobutton -label 13 -variable mfe(chn$n) -value "13"
+		$w.chn_text$n.type add radiobutton -label 14 -variable mfe(chn$n) -value "14"
+		$w.chn_text$n.type add radiobutton -label 15 -variable mfe(chn$n) -value "15"
+		$w.chn_text$n.type add radiobutton -label 16 -variable mfe(chn$n) -value "16"
+	
+	entry $w.chn_entry$n -bg White -font $mt_font -width 3 -textvariable mfe(chn$n)
+	
+	checkbutton $w.play$n -width 1 -bg $bgcolor3 -variable mfe(track_status$n) -onvalue "Mute" -offvalue "Play" -command "
+	set track_num $n
+	mute_unmute"
+	checkbutton $w.rec$n -width 1 -bg $bgcolor3 -variable mfe(track_rec_status$n)  -onvalue "Yes" -offvalue "No"
+
+	menubutton $w.effect$n -bg LightPink2 -activebackground LightSeaGreen -font $mt_font -text "E" -relief raised -menu $w.effect$n.type
+	menu $w.effect$n.type -tearoff 0
+
+	for {set en 1} {$en <= 4} {incr en} {
+	    set mfe(effect$en$n) "None"
+	    set mfe_temp(effect$en$n) "None"
+	    set mfe(effect_attached$en$n) "Connected"
+	    $w.effect$n.type add cascade -label "Effect $en" -menu $w.effect$n.type.$en
+		    menu $w.effect$n.type.$en -tearoff 0
+
+		    $w.effect$n.type.$en add command -label $mfe(effect$en$n) -command " "
+		    $w.effect$n.type.$en add separator
+		    $w.effect$n.type.$en add command -label "Add a New Effect" -command "
+			set effect_num $en
+			set track_num $n
+			set edit_effect 0
+    			effect_list"
+		    $w.effect$n.type.$en add command -label "Edit Current Effect" -command "
+			set effect_num $en
+			set track_num $n
+			set edit_effect 1
+			effect"
+		    $w.effect$n.type.$en add command -label $mfe(effect_attached$en$n) -command "
+			set effect_num $en
+			set track_num $n
+			effect_bypass	
+		    "
+		    $w.effect$n.type.$en add command -label "Delete Effect" -command "
+			set effect_num $en
+			set track_num $n
+			set mfe(effect$en$n) None
+			set mfe_temp(effect$en$n) None
+			$w.effect$n.type.$en entryconfigure 0 -label None
+			effect"
+	}    
+	menubutton $w.eca_tools$n -font $mt_font -bg LightBlue3 -activebackground LightSeaGreen -text "T" -relief raised -menu $w.eca_tools$n.type
+	menu $w.eca_tools$n.type -tearoff 0
+	$w.eca_tools$n.type add command -label "Normalize" -command "
+	set track_num $n
+	ecanormalize"
+	$w.eca_tools$n.type add command -label "DC Offset Fix" -command "
+	set track_num $n
+	ecafixdc"
+	$w.eca_tools$n.type add command -label "Wave Edit" -command "
+	set track_num $n
+	wave_edit"
+	$w.eca_tools$n.type add command -label "Wave File Delete" -command "
+	set track_num $n
+	wave_file_delete"
+
+	scale $w.pan$n -bg $bgcolor3 -activebackground red -font $mt_font -from 0 -to 100 -length 130 -width 3 -orient horizontal -showvalue true -variable mfe(pan$n) -command "
+	set track_num $n
+	set mfe(controller_number) 1
+	set mfe(param_number) 1
+	set mfe(param_value) pan$n
+	change_controller_on_the_fly  
+	set mfe(pan$n)"
+	scale $w.slide$n -bg $bgcolor3 -activebackground red -font $mt_font -resolution 1 -from 0 -to 300 -length 230 -width 3 -orient horizontal -showvalue true -variable mfe(volume$n) -command "
+	set track_num $n
+	set mfe(controller_number) 0
+	set mfe(param_number) 1
+	set mfe(param_value) volume$n
+	change_controller_on_the_fly  
+	set mfe(volume$n)"
+	grid $w.number$n $w.file$n $w.open$n $w.track_properties$n $w.dev_text$n $w.dev_entry$n $w.chn_text$n $w.chn_entry$n $w.play$n $w.rec$n $w.effect$n $w.eca_tools$n $w.pan$n $w.slide$n -sticky ewns
+
+}
+proc effect_bypass {} {
+    global mfe track_num effect_num playhandle stop_command effect_param w
+    if {$mfe(effect$effect_num$track_num)=="None"} {return}
+    if {$stop_command==1} {
+    effect_bypass2
+    return}
+    if {$mfe(effect_attached$effect_num$track_num)=="Connected"} {
+	set mfe(effect_attached$effect_num$track_num) "Bypassed"
+	$w.effect$track_num.type.$effect_num entryconfigure 4 -label "Bypassed"
+	puts $playhandle "c-select $track_num\n"
+	puts $playhandle "cop-select $mfe(effect_position$effect_num$track_num)\n"
+	puts $playhandle "cop-remove\n"
+	set mfe(number_of_effects$track_num) [expr $mfe(number_of_effects$track_num)-1]
+	set start [expr $mfe(effect_position$effect_num$track_num)-$mfe(pan_position$track_num)]
+	for {set enb $start} {$enb <= 4} {incr enb} {	
+	    set mfe(effect_position$effect_num$track_num) [expr $mfe(effect_position$effect_num$track_num)-1]
+	}
+    } else {
+    	set mfe(effect_attached$effect_num$track_num) "Connected"
+	$w.effect$track_num.type.$effect_num entryconfigure 4 -label "Connected"
+	set effect_to_add ""
+	if {[string match ladspa* $mfe(effect$effect_num$track_num)]==1} {
+	    regsub ladspa_ $mfe(effect$effect_num$track_num) {} current_effect
+	    set effect_to_add "-el:$current_effect,"
+	} else {
+	    set effect_to_add "-$mfe(effect$effect_num$track_num):"
+	}	
+	for {set par 1} {$par <= $effect_param($mfe(effect$effect_num$track_num))} {incr par} { 
+	    if {$par>1} {set effect_to_add "$effect_to_add,"}
+	    set effect_to_add "$effect_to_add$mfe(effect_parameter$par$effect_num$track_num)"
+	}
+	puts $playhandle "c-select $track_num\n"
+	puts $playhandle "cop-add $effect_to_add\n"
+	incr mfe(number_of_effects$track_num)
+	set mfe(effect_position$effect_num$track_num) [expr $mfe(number_of_effects$track_num)+$mfe(pan_position$track_num)]
+    }
+}
+
+proc effect_bypass2 {} {
+    global mfe track_num effect_num stop_command effect_param w
+    if {$mfe(effect_attached$effect_num$track_num)=="Connected"} {
+	set mfe(effect_attached$effect_num$track_num) "Bypassed"
+	$w.effect$track_num.type.$effect_num entryconfigure 4 -label "Bypassed"
+    } else {
+    	set mfe(effect_attached$effect_num$track_num) "Connected"
+	$w.effect$track_num.type.$effect_num entryconfigure 4 -label "Connected"
+    }
+}
+
+proc file_browser {} {
+    global mfe n types track_num track_num2 file_num numbre_of_tracks
+    if {$mfe(directory)==""} {set mfe(directory) "."}
+    if {$track_num == 0} {
+	set mfe(openfile0) [tk_getOpenFile -initialdir $mfe(directory) -filetypes $types]
+	open_file
+    } else {
+	set pointer "file$track_num"
+	set mfe($pointer) [tk_getOpenFile -initialdir $mfe(directory) -filetypes $types]
+	if {$mfe($pointer) != ""} {
+	    set mfe(status$pointer) "Play"
+	}
+    
+	set cmd "exec ecalength $mfe($pointer)"
+	catch {eval $cmd} exec_out
+	set pattern {([0-9]+)(m)([0-9]+)(s)}
+	if { [regexp $pattern $exec_out exec_out1 exec_out2 exec_out3 exec_out4] == 1} {
+	    set mfe(duration1$pointer) $exec_out2
+	    set mfe(duration2$pointer) $exec_out4
+	}
+    }
+}
+
+proc file_browser2 {} {
+    global mfe n types track_num save_as
+    set save_as 1
+    if {$mfe(directory)==""} {set mfe(directory) "."}
+    set mfe(openfile$track_num) [tk_getSaveFile -initialdir $mfe(directory) -filetypes $types]
+}
+
+proc wave_file_delete {} {
+    global track_num mfe
+    if {[file exists $mfe(file$track_num)]==1} {
+	file delete $mfe(file$track_num)
+    }
+}
+
+proc tick {} {
+    global stop_command start_time sp_seconds sp_seconds2 sp_minutes time_format mfe punch play_text fw_text rew_text rewbeg_text
+    if {$stop_command} {return}
+    after 50 tick
+    set elapsedMS [expr {[clock clicks -milliseconds] - $start_time} - 250]
+    set sp_seconds [expr $sp_seconds2 + {double($elapsedMS)/1000}]
+    if {$sp_seconds >= 60 && $time_format=="Minutes"} {
+	set start_time [expr $start_time+60000+$sp_seconds2]
+	set sp_minutes [expr $sp_minutes+1]
+    }
+    if {$punch==1 && $sp_seconds > $mfe(punch_out_seconds) && $sp_minutes >= $mfe(punch_out_minutes)} {
+	set stop_command 1
+	set play_text "Play"
+	set fw_text "Fw 5''"
+	set rew_text "Rew 5''"
+	set rewbeg_text "Go to 00:00"
+	stop 
+    }
+    display_position
+}
+
+proc display_position {} {
+    global sp_minutes sp_seconds time_format
+    .mfe.low.seconds config  -text [format "%.2f" $sp_seconds]
+    if {$time_format=="Minutes"} {
+	.mfe.low.minutes config  -text [format "%02d" $sp_minutes]
+    }
+}
+
+proc mute_unmute {} {
+    global stop_command mfe track_num playhandle
+    
+    if {$stop_command==0} {
+	    puts $playhandle "c-select $track_num\nc-muting"
+    }
+}
+
+proc change_controller_on_the_fly {} {
+    global stop_command mfe track_num playhandle
+    set mfe(controller_number) [expr $mfe(controller_number)+$mfe(volume_position$track_num)]
+    
+    if {$stop_command==0} {
+	    puts $playhandle "c-select $track_num\ncop-select $mfe(controller_number)\ncopp-select $mfe(param_number)\ncopp-set $mfe($mfe(param_value))"
+    }
+
+}
+
+proc stop {} {
+    global stop_command playhandle
+    puts $playhandle "s\n"
+    puts $playhandle "dump-position \n"
+    puts $playhandle "q\n"
+    set stop_command 1
+    fileevent $playhandle writable read_stop_position
+}
+
+proc read_stop_position {} {
+    global sp_seconds sp_minutes playhandle start_time mfe
+    close $playhandle
+    set tkeca_log [open "~/tkeca.log" r]
+    while {[gets $tkeca_log input_line]!= -1} {
+	if {[string match dump-position* $input_line] ==1} {
+	    regsub dump-position $input_line {} input_line
+	    regsub { } $input_line {} start_time 
+	    if {[expr $sp_seconds+$sp_minutes*60-$start_time] < 1} {
+		set sp_minutes [expr int($start_time/60)]
+		set sp_seconds [expr $start_time-60*$sp_minutes]
+	    } else {
+		set sp_minutes 0
+		set sp_seconds 0
+	    }
+	display_position    
+	}
+    }
+    close $tkeca_log
+}
+
+proc effect {} {
+    global w mfe mfe_temp mfe_temp2 effect_num effect2 edit_effect track_num track effect_name effect_param_name effect_param effect_param_value effect_param_from effect_param_to effect_param_resolution effect_maker effect_copy mt_font logarithmic position stop_command bgcolor play_text fw_text rew_text rewbeg_text
+    if {[winfo exists .effect$effect_num$track_num] != 0} {destroy .effect$effect_num$track_num}
+    set effect_label $mfe_temp(effect$effect_num$track_num)
+    if { $mfe_temp(effect$effect_num$track_num) == "None"} {
+	set mfe(effect$effect_num$track_num) $mfe_temp(effect$effect_num$track_num)
+	return
+    }
+    set effect_label $mfe_temp(effect$effect_num$track_num)
+    
+    $w.effect$track_num.type.$effect_num entryconfigure 0 -label $effect_name($mfe_temp(effect$effect_num$track_num))
+    
+    toplevel .effect$effect_num$track_num
+    message .effect$effect_num$track_num.out -width 300 -bg $bgcolor -text "Track:$track_num Effect:$effect_num\n$effect_name($mfe_temp(effect$effect_num$track_num))"
+    pack .effect$effect_num$track_num.out -expand yes -fill x    
+    message .effect$effect_num$track_num.out2 -width 300 -text " "
+    pack .effect$effect_num$track_num.out2 -expand yes -fill x    
+    if { $mfe(effect$effect_num$track_num) != $mfe_temp(effect$effect_num$track_num) || $edit_effect==0 } {
+	set mfe(effect$effect_num$track_num) $mfe_temp(effect$effect_num$track_num)
+	for {set n 1} {$n <= $effect_param($effect_label)} {incr n} {	    
+	    set mfe(effect_parameter$n$effect_num$track_num) $effect_param_value($effect_label$n)
+	    set mfe_temp2(effect_parameter$n$effect_num$track_num) $effect_param_value($effect_label$n)
+	}
+    } else {
+	for {set n 1} {$n <= $effect_param($effect_label)} {incr n} {	    
+	    set effect_param_value($effect_label$n) $mfe(effect_parameter$n$effect_num$track_num)
+	    set mfe_temp2(effect_parameter$n$effect_num$track_num) $effect_param_value($effect_label$n)
+	}
+    }
+    set mfe(effect_parameters$effect_num$track_num) $effect_param($effect_label)
+    for {set n 1} {$n <= $effect_param($effect_label)} {incr n} {
+	set res [expr ($effect_param_to($effect_label$n)-$effect_param_from($effect_label$n))/100]
+	set res [expr abs($res)]
+	set logarithmic 0
+	if {$effect_param_resolution($effect_label$n) != 0 } {set res $effect_param_resolution($effect_label$n)}
+	if {$effect_param_resolution($effect_label$n) == 100 } {
+	    set res [expr ($effect_param_to($effect_label$n)-$effect_param_from($effect_label$n))/10000]
+	    set res [expr abs($res)]
+	    set logarithmic 1
+	}
+	set position "effect_parameter$n$effect_num$track_num"
+	frame .effect$effect_num$track_num.$n
+	scale .effect$effect_num$track_num.$n.param$n -font $mt_font -from $effect_param_from($effect_label$n) -to $effect_param_to($effect_label$n) -resolution $res -length 300 -width 3 -orient horizontal -showvalue false -variable mfe_temp2($position) -command "
+	set position effect_parameter$n$effect_num$track_num
+	log
+	set track_num $track_num
+	set mfe(controller_number) [expr $effect_num+2]
+	set mfe(param_number) $n
+	set mfe(param_value) $position
+	change_controller_on_the_fly  
+	set mfe_temp2($position)" 
+
+	pack .effect$effect_num$track_num.$n.param$n 
+	label .effect$effect_num$track_num.$n.param_name$n -text "$effect_param_name($effect_label$n): "
+	entry .effect$effect_num$track_num.$n.param_value$n -width 5 -justify left -relief flat -textvariable mfe($position)
+	pack .effect$effect_num$track_num.$n.param_name$n -side left -fill x
+	pack .effect$effect_num$track_num.$n.param_value$n -side left 
+	pack .effect$effect_num$track_num.$n
+    }
+
+    frame .effect$effect_num$track_num.buttons -bd 3 -bg $bgcolor
+    button .effect$effect_num$track_num.buttons.close -bg AntiqueWhite -activebackground LightPink -text Close -command "
+	set effect2 $effect_num
+	set track $track_num
+	close_effect
+    "
+
+    button .effect$effect_num$track_num.buttons.preview -bg AntiqueWhite -activebackground LightPink -text " Preview " -height 0 -command { 
+    if {$stop_command == 1} { 
+	set stop_command 0
+	set preview 1
+	set effect2 "$effect_num"
+	set track "$track_num"
+	set play_text "Stop"
+	set fw_text " "
+	set rew_text " "
+	set rewbeg_text " "
+	preview}
+    } 
+    button .effect$effect_num$track_num.buttons.full_preview -bg AntiqueWhite -activebackground LightPink -text " Full Preview " -height 0 -command { 
+    if {$stop_command == 1} { 
+	set stop_command 0
+	set preview 2
+	set track "$track_num"
+	set play_text "Stop"
+	set fw_text " "
+	set rew_text " "
+	set rewbeg_text " "
+	preview }
+    } 
+
+    button .effect$effect_num$track_num.buttons.info -bg AntiqueWhite -activebackground LightPink -text "Info " -command {
+    set plugin_info "Plug-in Name: $effect_name($mfe_temp(effect$effect_num$track_num))\nMaker: $effect_maker($mfe_temp(effect$effect_num$track_num))\nCopyright: $effect_copy($mfe_temp(effect$effect_num$track_num))"
+    messages [format $plugin_info]    
+    }
+     
+    pack .effect$effect_num$track_num.buttons.preview -side left
+    pack .effect$effect_num$track_num.buttons.full_preview -side left
+    pack .effect$effect_num$track_num.buttons.close -side left
+    pack .effect$effect_num$track_num.buttons.info -side left
+    pack .effect$effect_num$track_num.buttons -in .effect$effect_num$track_num -side top -expand 1 -fill both
+    
+}
+
+proc messages {msg} {
+    if {[winfo exists .msg] != 0} {destroy .msg}
+    toplevel .msg
+    message .msg.out -width 300 -text $msg
+    button .msg.button -text Ok -command {destroy .msg}
+    pack .msg.out -expand y -fill x
+    pack .msg.button
+}
+
+proc ecanormalize {} {
+    global mfe track_num
+    if {[winfo exists .normalize] != 0} {destroy .normalize}
+    toplevel .normalize
+    message .normalize.out -width 300 -text "Are you sure you want to Normalize\nfiles on Track $track_num" 
+    button .normalize.button1 -text Cancel -command {destroy .normalize}
+    button .normalize.button2 -text Ok -command { 
+	set pointer "file$track_num"
+	if {[string length $mfe($pointer)] > 3} { 
+	    set cmd "exec ecanormalize $mfe($pointer) &" 
+	    catch {eval $cmd} exec_out
+	    destroy .normalize
+	} else {
+	    destroy .normalize
+	}
+    }
+    pack .normalize.out 
+    pack .normalize.button1 -padx 30 -side left 
+    pack .normalize.button2 -padx 30
+}
+
+proc ecafixdc {} {
+    global mfe track_num
+    if {[winfo exists .fixdc] != 0} {destroy .fixdc}
+    toplevel .fixdc
+    message .fixdc.out -width 300 -text "Are you sure you want to fix DC Offset\nin files on Track $track_num" 
+    button .fixdc.button1 -text Cancel -command {destroy .fixdc}
+    button .fixdc.button2 -text Ok -command { 
+	set pointer "file$track_num"
+	if {[string length $mfe($pointer)] > 3} { 
+	    set cmd "exec ecafixdc $mfe($pointer) &" 
+	    catch {eval $cmd} exec_out
+	    destroy .fixdc
+	} else {
+	    destroy .fixdc
+	}
+    }
+    pack .fixdc.out 
+    pack .fixdc.button1 -padx 35 -side left 
+    pack .fixdc.button2 -padx 35
+}
+
+proc wave_edit {} {
+    global mfe track_num wave_editor file_num
+    set pointer "file$track_num"
+    set cmd "exec $wave_editor $mfe($pointer) &" 
+    catch {eval $cmd} exec_out
+}
+
+proc save_file {} {
+    global mfe number_of_tracks sp_minutes sp_seconds save_as track_num types sp_minutes_loc sp_seconds_loc
+    if {$mfe(openfile0) == ""} {
+	if {$save_as == 1} {return} else {
+	    set types {{{mfe files} {*.mfe}} {{all} {*}}}
+	    set track_num 0
+	    file_browser2
+	    if {$mfe(openfile0) == ""} {return}
+
+	}
+    }
+    if {[string match *.mfe* $mfe(openfile0)] == 0 && [string match *.MFE* $mfe(openfile0)] == 0} {
+	set mfe(openfile0) "$mfe(openfile0).mfe"
+    }
+
+    set file_to_save [open "$mfe(openfile0)" w]
+    puts $file_to_save "This file was created by tkeca.tcl version 3.0.0"
+    puts $file_to_save "$number_of_tracks"
+    puts $file_to_save "$mfe(directory)"
+    puts $file_to_save "$sp_minutes"
+    puts $file_to_save "$sp_seconds"
+    puts $file_to_save "$mfe(multichannel)"    
+    puts $file_to_save "$mfe(rec_prop_bits0)"
+    puts $file_to_save "$mfe(rec_prop_channels0)"
+    puts $file_to_save "$mfe(rec_prop_srate0)"
+    puts $file_to_save "$mfe(rec_prop_interl0)"
+
+    for {set n 1} {$n <= $number_of_tracks} {incr n} {
+	puts $file_to_save "$mfe(rec_prop_bits$n)"
+	puts $file_to_save "$mfe(rec_prop_channels$n)"
+	puts $file_to_save "$mfe(rec_prop_srate$n)"
+	puts $file_to_save "$mfe(rec_prop_interl$n)"
+	puts $file_to_save "$mfe(file$n)"
+	puts $file_to_save "$mfe(device$n)"
+	puts $file_to_save "$mfe(chn$n)"
+	puts $file_to_save "$mfe(track_status$n)"
+	puts $file_to_save "$mfe(track_rec_status$n)"
+	for {set en 1} {$en <= 4} {incr en} {
+	    puts $file_to_save "$mfe(effect$en$n)"
+	    if {$mfe(effect$en$n)!="None"} {
+		puts $file_to_save "$mfe(effect_parameters$en$n)"
+		for {set p 1} {$p <= $mfe(effect_parameters$en$n)} {incr p} {
+		    puts $file_to_save "$mfe(effect_parameter$p$en$n)"		
+		}
+	    }
+	}
+	puts $file_to_save "$mfe(volume$n)"
+	puts $file_to_save "$mfe(pan$n)"
+
+    }
+    for {set n 1} {$n <= 16} {incr n} {
+    	puts $file_to_save "$sp_minutes_loc($n)"
+	puts $file_to_save "$sp_seconds_loc($n)"
+    }
+	puts $file_to_save "$mfe(punch_in_minutes)"
+	puts $file_to_save "$mfe(punch_in_seconds)"
+	puts $file_to_save "$mfe(punch_out_minutes)"
+	puts $file_to_save "$mfe(punch_out_seconds)"
+
+    puts $file_to_save "\n"
+    close $file_to_save	
+    messages [format "File $mfe(openfile0) saved"]
+}
+
+proc open_file {} {
+    global mfe mfe_temp number_of_tracks sp_minutes sp_seconds w sp_minutes_loc sp_seconds_loc
+    if {$mfe(openfile0) == ""} {
+	return
+    }
+    set line_number 0
+    set file_to_open [open "$mfe(openfile0)" r]
+    while {[gets $file_to_open input_line] != -1 } {
+	set temp_file($line_number) $input_line
+	incr line_number
+    }
+    set line_number 0
+    if {$temp_file($line_number)!="This file was created by tkeca.tcl version 3.0.0" && $temp_file($line_number)!="This file was created by tkeca.tcl version 3.0.0"} {
+	messages [format "File $mfe(openfile0)\nwas not created by tkeca.tcl 3.0.0 or superior"]
+	set mfe(openfile0) ""
+	return	
+    }
+    incr line_number
+    set number_of_tracks3 $number_of_tracks
+    set number_of_tracks $temp_file($line_number)
+    set number_of_tracks2 $number_of_tracks
+    for {set number_of_tracks 1} {$number_of_tracks <= $number_of_tracks3} {incr number_of_tracks} {
+	destroy $w.number$number_of_tracks 
+	destroy $w.name$number_of_tracks 
+	destroy $w.track_properties$number_of_tracks 
+	destroy $w.wave_info$number_of_tracks 
+	destroy $w.dev_text$number_of_tracks 
+	destroy $w.dev_entry$number_of_tracks 
+	destroy $w.chn_text$number_of_tracks 
+	destroy $w.chn_entry$number_of_tracks 
+	destroy $w.play$number_of_tracks 
+	destroy $w.rec$number_of_tracks 
+	destroy $w.effect1$number_of_tracks 
+	destroy $w.effect2$number_of_tracks 
+	destroy $w.effect3$number_of_tracks 
+	destroy $w.effect4$number_of_tracks 
+	destroy $w.eca_tools$number_of_tracks 
+	destroy $w.pan$number_of_tracks 
+	destroy $w.slide$number_of_tracks
+    }
+    for {set number_of_tracks 1} {$number_of_tracks <= $number_of_tracks2} {incr number_of_tracks} {
+	add_track
+    }
+
+    set number_of_tracks $number_of_tracks2
+    incr line_number
+    set mfe(directory) $temp_file($line_number)
+    incr line_number
+    set sp_minutes $temp_file($line_number)
+    incr line_number
+    set sp_seconds $temp_file($line_number)
+    incr line_number
+    set mfe(multichannel) $temp_file($line_number)
+    incr line_number
+    set mfe(rec_prop_bits0) $temp_file($line_number)
+    incr line_number
+    set mfe(rec_prop_channels0) $temp_file($line_number)
+    incr line_number
+    set mfe(rec_prop_srate0) $temp_file($line_number)
+    incr line_number
+    set mfe(rec_prop_interl0) $temp_file($line_number)
+    incr line_number
+
+    for {set n 1} {$n <= $number_of_tracks} {incr n} {
+	set mfe(rec_prop_bits$n) $temp_file($line_number)
+	incr line_number
+	set mfe(rec_prop_channels$n) $temp_file($line_number)
+	incr line_number
+	set mfe(rec_prop_srate$n) $temp_file($line_number)
+	incr line_number
+	set mfe(rec_prop_interl$n) $temp_file($line_number)
+	incr line_number
+	set mfe(file$n) $temp_file($line_number)
+	incr line_number
+	set mfe(device$n) $temp_file($line_number)
+	incr line_number
+	set mfe(chn$n) $temp_file($line_number)
+	incr line_number
+	set mfe(track_status$n) $temp_file($line_number)
+	incr line_number
+	set mfe(track_rec_status$n) $temp_file($line_number)
+	incr line_number
+	for {set en 1} {$en <= 4} {incr en} {
+	    set mfe(effect$en$n) $temp_file($line_number)
+	    set mfe_temp(effect$en$n) $temp_file($line_number)
+	    incr line_number
+	    if {$mfe(effect$en$n)!="None"} {
+		set mfe(effect_parameters$en$n) $temp_file($line_number)
+		incr line_number
+		for {set p 1} {$p <= $mfe(effect_parameters$en$n)} {incr p} {
+		    set mfe(effect_parameter$p$en$n) $temp_file($line_number)  		
+		    incr line_number
+		}
+	    }
+	}
+	set mfe(volume$n) $temp_file($line_number)
+	incr line_number
+	set mfe(pan$n) $temp_file($line_number)
+	incr line_number
+    }
+    for {set locn 1} {$locn <= 16} {incr locn} {
+    	set sp_minutes_loc($locn) $temp_file($line_number)
+	incr line_number
+	set sp_seconds_loc($locn) $temp_file($line_number)
+	incr line_number
+    }
+    	set mfe(punch_in_minutes) $temp_file($line_number)
+	incr line_number
+	set mfe(punch_in_seconds) $temp_file($line_number)
+	incr line_number
+	set mfe(punch_out_minutes) $temp_file($line_number)
+	incr line_number
+	set mfe(punch_out_seconds) $temp_file($line_number)
+
+}
+
+proc del_all_tracks {} {
+    global number_of_tracks w mfe sp_minutes_loc sp_seconds_loc play_command sp_minutes sp_seconds exit_yes save_as
+    for {set number_of_tracks1 1} {$number_of_tracks1 <= $number_of_tracks} {incr number_of_tracks1} {
+	destroy $w.number$number_of_tracks1 
+	destroy $w.file$number_of_tracks1 
+	destroy $w.open$number_of_tracks1 
+	destroy $w.track_properties$number_of_tracks1
+	destroy $w.dev_text$number_of_tracks1 
+	destroy $w.dev_entry$number_of_tracks1 
+	destroy $w.chn_text$number_of_tracks1 
+	destroy $w.chn_entry$number_of_tracks1 
+	destroy $w.play$number_of_tracks1 
+	destroy $w.rec$number_of_tracks1 
+	destroy $w.effect$number_of_tracks1 
+	destroy $w.eca_tools$number_of_tracks1 
+	destroy $w.pan$number_of_tracks1 
+	destroy $w.slide$number_of_tracks1
+	if {[winfo exists .wave_files$number_of_tracks1] != 0} {destroy .wave_files$number_of_tracks1}
+    }
+    set number_of_tracks 0
+    set mfe(openfile0) ""
+    set play_command "play"
+    set mfe(multichannel) 0
+    set mfe(rec_prop_bits0) "s16_le"
+    set mfe(rec_prop_channels0) "2"
+    set mfe(rec_prop_srate0)  "44100"
+    set mfe(rec_prop_interl0) "i"
+    set sp_minutes 0
+    set sp_seconds 0
+    set sp_minutes_loc(1) 0
+    set sp_minutes_loc(2) 0
+    set sp_minutes_loc(3) 0
+    set sp_minutes_loc(4) 0
+    set sp_minutes_loc(5) 0
+    set sp_minutes_loc(6) 0
+    set sp_minutes_loc(7) 0
+    set sp_minutes_loc(8) 0
+    set sp_minutes_loc(9) 0 
+    set sp_minutes_loc(10) 0
+    set sp_minutes_loc(11) 0
+    set sp_minutes_loc(12) 0
+    set sp_minutes_loc(13) 0
+    set sp_minutes_loc(14) 0
+    set sp_minutes_loc(15) 0
+    set sp_minutes_loc(16) 0
+    set sp_seconds_loc(1) 0
+    set sp_seconds_loc(2) 0
+    set sp_seconds_loc(3) 0
+    set sp_seconds_loc(4) 0
+    set sp_seconds_loc(5) 0
+    set sp_seconds_loc(6) 0
+    set sp_seconds_loc(7) 0
+    set sp_seconds_loc(8) 0
+    set sp_seconds_loc(9) 0 
+    set sp_seconds_loc(10) 0
+    set sp_seconds_loc(11) 0
+    set sp_seconds_loc(12) 0
+    set sp_seconds_loc(13) 0
+    set sp_seconds_loc(14) 0
+    set sp_seconds_loc(15) 0
+    set sp_seconds_loc(16) 0
+    
+}
+
+proc del_last_track {} {
+    global number_of_tracks w 
+	destroy $w.number$number_of_tracks 
+	destroy $w.file$number_of_tracks
+	destroy $w.open$number_of_tracks
+	destroy $w.track_properties$number_of_tracks
+	destroy $w.dev_text$number_of_tracks 
+	destroy $w.dev_entry$number_of_tracks 
+	destroy $w.chn_text$number_of_tracks 
+	destroy $w.chn_entry$number_of_tracks 
+	destroy $w.play$number_of_tracks
+	destroy $w.rec$number_of_tracks 
+	destroy $w.effect$number_of_tracks
+	destroy $w.eca_tools$number_of_tracks
+	destroy $w.pan$number_of_tracks
+	destroy $w.slide$number_of_tracks
+	if {[winfo exists .wave_files$number_of_tracks] != 0} {destroy .wave_files$number_of_tracks}
+	set number_of_tracks [expr $number_of_tracks-1]
+}
+
+
+proc proc_about {} {
+messages [format "Tkeca is a Tcl/Tk frontend for Kai Vehmanen's Ecasound
+Copyright (C) 2002-2003  Luis Pablo Gasparotto
+This program is free software; you can redistribute it and/or modify \
+it under the terms of the GNU General Public License as published by \
+the Free Software Foundation; either version 2 of the License, or \
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, \
+but WITHOUT ANY WARRANTY; without even the implied warranty of \
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the \
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License \
+along with this program; if not, write to the Free Software \
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+To contact me: luispa8@yahoo.com.ar"]}
+
+proc proc_exit {} {
+    global mfe mfe_temp number_of_tracks sp_minutes sp_seconds sp_minutes_loc sp_seconds_loc saved exit_yes save_as 
+    set saved 1
+    set line_number 0
+    if {$number_of_tracks == 0} {
+	set saved 2
+    }
+    if {$mfe(openfile0) == ""} {
+    set saved [expr $saved - 1]} else {
+    set file_to_open [open "$mfe(openfile0)" r]
+    while {[gets $file_to_open input_line] != -1 } {
+	set temp_file($line_number) $input_line
+	incr line_number
+    }
+    set line_number 1
+    if {$number_of_tracks != $temp_file($line_number)} {set saved 0}
+    incr line_number
+    if {$mfe(directory) != $temp_file($line_number)} {set saved 0}
+    incr line_number
+    if {$sp_minutes != $temp_file($line_number)} {set saved 0}
+    incr line_number
+    if {$sp_seconds != $temp_file($line_number)} {set saved 0}
+    incr line_number
+    if {$mfe(multichannel) != $temp_file($line_number)} {set saved 0}
+    incr line_number
+    if {$mfe(rec_prop_bits0) != $temp_file($line_number)} {set saved 0}
+    incr line_number
+    if {$mfe(rec_prop_channels0) != $temp_file($line_number)} {set saved 0}
+    incr line_number
+    if {$mfe(rec_prop_srate0) != $temp_file($line_number)} {set saved 0}
+    incr line_number
+    if {$mfe(rec_prop_interl0) != $temp_file($line_number)} {set saved 0}
+    incr line_number
+
+    for {set n 1} {$n <= $number_of_tracks && $saved >0} {incr n} {
+	if {$mfe(rec_prop_bits$n) != $temp_file($line_number)} {set saved 0}
+	incr line_number
+	if {$mfe(rec_prop_channels$n) != $temp_file($line_number)} {set saved 0}
+	incr line_number
+	if {$mfe(rec_prop_srate$n) != $temp_file($line_number)} {set saved 0}
+	incr line_number
+	if {$mfe(rec_prop_interl$n) != $temp_file($line_number)} {set saved 0}
+	incr line_number
+	if {$mfe(file$n)!= $temp_file($line_number)} {set saved 0 }
+	incr line_number
+	if {$mfe(device$n) != $temp_file($line_number)} {set saved 0} 
+	incr line_number
+	if {$mfe(chn$n) != $temp_file($line_number)} {set saved 0} 
+	incr line_number
+	if {$mfe(track_status$n) != $temp_file($line_number)} {set saved 0} 
+	incr line_number
+	if {$mfe(track_rec_status$n) != $temp_file($line_number)} {set saved 0} 
+	incr line_number
+	for {set en 1} {$en <= 4 && $saved > 0} {incr en} {
+	    if {$mfe(effect$en$n) != $temp_file($line_number)} {set saved 0} 
+	    if {$mfe_temp(effect$en$n) != $temp_file($line_number)} {set saved 0} 
+	    incr line_number
+	    if {$mfe(effect$en$n)!="None"} {
+		set effect_parameters $temp_file($line_number)
+		incr line_number
+		for {set p 1} {$p <= $effect_parameters && $saved >0} {incr p} {
+		    if {$mfe(effect_parameter$p$en$n) != $temp_file($line_number)} {set saved 0}   		
+		    incr line_number
+		}
+	    }
+	}
+	if {$mfe(volume$n) != $temp_file($line_number)} {set saved 0} 
+	incr line_number
+	if {$mfe(pan$n) != $temp_file($line_number)} {set saved 0} 
+	incr line_number
+    }
+	for {set n 1} {$n <= 16} {incr n} {
+	    if {$sp_minutes_loc($n)!= $temp_file($line_number)} {set saved 0} 
+	    incr line_number
+	    if {$sp_seconds_loc($n)!= $temp_file($line_number)} {set saved 0} 
+	    incr line_number
+	}
+	if {$mfe(punch_in_minutes)!= $temp_file($line_number)} {set saved 0 }
+	incr line_number
+	if {$mfe(punch_in_seconds)!= $temp_file($line_number)} {set saved 0 }
+	incr line_number
+	if {$mfe(punch_out_minutes)!= $temp_file($line_number)} {set saved 0 }
+	incr line_number
+	if {$mfe(punch_out_seconds)!= $temp_file($line_number)} {set saved 0 }
+	incr line_number
+    }
+    if {$saved == 0} {
+	toplevel .save_alert
+	message .save_alert.out -width 300 -text "You will lose the latest changes! \nWhat do you want to do?" 
+	button .save_alert.button1 -text Cancel -command {
+	destroy .save_alert
+	}
+	button .save_alert.button2 -text "Lose changes" -command { 
+	    destroy .save_alert
+	    if {$exit_yes==1} {exit}
+	    if {$exit_yes==2} {del_all_tracks}
+	    if {$exit_yes==5} {file_browser}
+	}
+	button .save_alert.button3 -text "Save changes" -command { 
+	    destroy .save_alert
+	    set save_as 0
+	    if {$exit_yes==1} {
+		save_file
+		exit} 
+	    if {$exit_yes==2} {
+		save_file
+		del_all_tracks
+	    }
+	    if {$exit_yes==5} {
+		save_file
+		file_browser	    
+	    }
+	}
+	pack .save_alert.out 
+	pack .save_alert.button1 -padx 10 -side left 
+	pack .save_alert.button2 -padx 10 -side left 
+	pack .save_alert.button3 -padx 10
+    } else {
+	if {$exit_yes==1} {exit} 
+	if {$exit_yes==2} {del_all_tracks}
+	if {$exit_yes==5} {file_browser}	
+    }
+}
+proc mixdown {} {
+    global track_num mixdown mfe types number_of_tracks
+    set types {{{Wav files} {*.wav}} {{mp3 files} {*.mp3}} {{raw files} {*.raw}} {{all} {*}}}
+    set mfe(rec_prop_bitsMD) "s16_le"
+    set mfe(rec_prop_channelsMD) "2"
+    set mfe(rec_prop_srateMD) "44100"
+    set mfe(rec_prop_interlMD) "i"
+    set track_num "MD"
+    set mfe(track_statusMD) "Rec"
+    if {$number_of_tracks==0} {
+	messages [format "There's no tracks to make Mixdown!"]
+	return
+    }
+    set mixdown 1
+    rec_properties
+}
+
+proc export_ecs {} {
+    global export_ecs eca_string mfe 
+    set export_ecs 1
+    play
+    set export_ecs 0
+    set types {{{Ecasound Chain Setup} {*.ecs}}}
+    if {$mfe(directory)==""} {set mfe(directory) "."}
+    set ecs_file [tk_getSaveFile -initialdir $mfe(directory) -filetypes $types]
+    if {$ecs_file==""} {return}
+    if {[string match *.ecs* $ecs_file] == 0 && [string match *.ECS* $ecs_file] == 0} {
+	set ecs_file "$ecs_file.ecs"
+    }
+    set ecs_exported_file [open "$ecs_file" w]
+    puts $ecs_exported_file $eca_string
+    close $ecs_exported_file 
+    messages [format "Exported to\n$ecs_file"]
+}
+
+proc pause {} {
+    global pause playhandle
+    if {$pause == "Pause"} {
+	puts $playhandle "s\n"
+	set pause "Continue"    
+    } else {
+    	puts $playhandle "t\n"    
+	set pause "Pause"
+    }
+
+}
+proc log {} {
+    global mfe logarithmic position mfe_temp2
+    if {$logarithmic == 1} {
+	set mfe($position) [expr $mfe_temp2($position)/100]
+	set mfe($position) [expr $mfe($position)*$mfe($position)]
+    } else {set mfe($position) $mfe_temp2($position)} 
+}
+
+proc effect_list {} {
+    global mfe mfe_temp track_num effect_num eca_effects effect_index effect_name bgcolor
+    if {[winfo exists .effect$effect_num$track_num] != 0} {destroy .effect$effect_num$track_num}
+    toplevel .effect$effect_num$track_num -bg $bgcolor
+    frame .effect$effect_num$track_num.list
+    listbox .effect$effect_num$track_num.list.list -width 40 -selectmode single -yscrollcommand {.effect$effect_num$track_num.list.ysbar set} -exportselection 0
+    scrollbar .effect$effect_num$track_num.list.ysbar -width 8 -command {.effect$effect_num$track_num.list.list yview}
+    pack .effect$effect_num$track_num.list.list -side left -fill y
+    pack .effect$effect_num$track_num.list.ysbar -side left -fill y
+    pack .effect$effect_num$track_num.list -in .effect$effect_num$track_num -side top
+    .effect$effect_num$track_num.list.list insert end "None"
+    for {set en 1} {$en <= $eca_effects } {incr en} {
+	.effect$effect_num$track_num.list.list insert end $effect_name($effect_index($en))
+    }
+    frame .effect$effect_num$track_num.buttons -bg $bgcolor
+    button .effect$effect_num$track_num.buttons.button1 -bg AntiqueWhite -activebackground LightPink -text Ok -command {
+    set selected [.effect$effect_num$track_num.list.list curselection]
+    if {$selected < 1} {set selected 0}
+    set mfe_temp(effect$effect_num$track_num) $effect_index($selected)
+    effect}
+    button .effect$effect_num$track_num.buttons.button2 -bg AntiqueWhite -activebackground LightPink -text Cancel -command {
+    destroy .effect$effect_num$track_num
+    return}
+    pack .effect$effect_num$track_num.buttons.button1 -padx 50 -side left
+    pack .effect$effect_num$track_num.buttons.button2 -padx 50 -side left
+    pack .effect$effect_num$track_num.buttons -in .effect$effect_num$track_num -side bottom -fill x
+}
+
+proc close_effect {} {
+    global mfe mfe_temp effect2 track stop_command
+    set mfe(effect$effect2$track) $mfe_temp(effect$effect2$track)
+    destroy .effect$effect2$track
+}
+
+proc options {} {
+    global mt_font option_value option_parameter bgcolor bgcolor2 line_number ladspa_path ecasoundrc
+    if {[winfo exists .options] != 0} {destroy .options}
+    set rc_infile [open $ecasoundrc r]
+    set line_number 0
+    toplevel .options -bg $bgcolor
+    message .options.out -bg $bgcolor -width 200 -text "Global Settings"
+    pack .options.out -expand y -fill x    
+    set param_side "left"
+    canvas .options.canvas -width 750 -height 440
+    set w [frame .options.canvas.f -bd 0]
+    .options.canvas create window 0 0 -anchor nw -window $w
+
+    while {[gets $rc_infile input_line] != -1 } {
+	set temp_file($line_number) $input_line
+	set current_parameter [split $input_line =] 
+	set option_parameter($line_number) [lindex $current_parameter 0]
+	set option_value($line_number) [lindex $current_parameter 1]
+	if {[string match *ladspa* $option_parameter($line_number)] == 1} {
+	    set ladspa_path $option_value($line_number)
+	}
+
+
+    	label $w.param$param_side$line_number -font $mt_font -text $option_parameter($line_number) -anchor w	
+    	entry $w.value$param_side$line_number -bg white -width 28 -textvariable option_value($line_number)
+	if {$param_side == "left"} {set param_side "right"} else {set param_side "left"} 
+	incr line_number
+    }
+    if {$param_side == "right"} {
+    	label $w.param.$param_side$line_number -font $mt_font -text " " -anchor w
+	entry $w.value$param_side$line_number -textvariable option_value(last)	
+    }
+    for {set row_number 0} {$row_number < $line_number} {incr row_number} {
+    set row_number2 [expr $row_number +1]
+    grid $w.paramleft$row_number $w.valueleft$row_number $w.paramright$row_number2 $w.valueright$row_number2 -sticky w
+    incr row_number
+    } 
+    pack .options.canvas -expand true
+    button .options.ok -bg AntiqueWhite -activebackground LightPink -text Ok -command {save_options}
+    button .options.cancel -bg AntiqueWhite -activebackground LightPink -text Cancel -command {destroy .options}
+    pack .options.ok -padx 180 -side left
+    pack .options.cancel
+    close $rc_infile
+}
+
+proc save_options {} {
+    global option_value option_parameter line_number wave_editor ladspa_path eca_effects ecasoundrc
+    set rc_infile [open $ecasoundrc w]
+    for {set row_number 0} {$row_number < $line_number} {incr row_number} {
+	puts $rc_infile "$option_parameter($row_number)=$option_value($row_number)"
+	if {[string match *wave-editor* $option_parameter($row_number)] == 1} {
+	    regsub { } $option_value($row_number) {} current_value
+	    set wave_editor $current_value
+	}
+	if {[string match *ladspa* $option_parameter($row_number)] == 1 && $ladspa_path != $option_value($row_number)} {
+	    regsub { } $option_value($row_number) {} current_value
+	    set ladspa_path $current_value
+	    set eca_effects 20
+	    ladspa
+	}
+    }
+    close $rc_infile
+    destroy .options
+}
+
+proc rec_properties {} {
+    global mfe track_num bgcolor mixdown
+    if {[winfo exists .rec_properties$track_num] != 0} {destroy .rec_properties$track_num}
+    if {$mfe(multichannel)==1 && $track_num!=0} {return}
+    if {$mfe(multichannel)==0 && $track_num==0} {return}
+    toplevel .rec_properties$track_num -bg $bgcolor 
+    set w .rec_properties$track_num
+    if {$mixdown==0} {
+	label $w.text -bg $bgcolor -text "Track $track_num Properties"
+    } elseif {$mixdown==1} {
+    	label $w.text -bg $bgcolor -text "Mixdown Properties"
+    } else {
+	label $w.text -bg $bgcolor -text "Global Multichannel Properties"
+	set track_num 0
+    }
+    set mfe(rec_prop_bits$track_num) "s16_le"
+    set mfe(rec_prop_channels$track_num) "2"
+    set mfe(rec_prop_srate$track_num)  "44100"
+    set mfe(rec_prop_interl$track_num) "i"
+    
+    menubutton $w.rec_bits -bg LightSkyBlue -activebackground LightSeaGreen -text "Bits" -relief raised -menu $w.rec_bits.type
+	menu $w.rec_bits.type -tearoff 0
+	    $w.rec_bits.type add radiobutton -label "Unsigned 8 bits" -variable mfe(rec_prop_bits$track_num) -value "u8"
+	    $w.rec_bits.type add radiobutton -label "Signed 16 bits little endian" -variable mfe(rec_prop_bits$track_num) -value "s16_le"
+	    $w.rec_bits.type add radiobutton -label "Signed 16 bits big endian" -variable mfe(rec_prop_bits$track_num) -value "s16_be"
+	    $w.rec_bits.type add radiobutton -label "Signed 24 bits little endian" -variable mfe(rec_prop_bits$track_num) -value "s24_le"
+    	    $w.rec_bits.type add radiobutton -label "Signed 24 bits big endian" -variable mfe(rec_prop_bits$track_num) -value "s24_be"
+	    $w.rec_bits.type add radiobutton -label "Signed 32 bits little endian" -variable mfe(rec_prop_bits$track_num) -value "s32_le"
+	    $w.rec_bits.type add radiobutton -label "Signed 32 bits big endian" -variable mfe(rec_prop_bits$track_num) -value "s32_be"
+	    $w.rec_bits.type add radiobutton -label "Floating point 32 bits little endian" -variable mfe(rec_prop_bits$track_num) -value "f32_le"
+	    $w.rec_bits.type add radiobutton -label "Floating point 32 bits big endian" -variable mfe(rec_prop_bits$track_num) -value "f32_be"
+    menubutton $w.rec_channels -bg LightSkyBlue -activebackground LightSeaGreen -text "Channels" -relief raised -menu $w.rec_channels.type
+	menu $w.rec_channels.type -tearoff 0
+	    $w.rec_channels.type add radiobutton -label "1" -variable mfe(rec_prop_channels$track_num) -value "1"
+	    $w.rec_channels.type add radiobutton -label "2" -variable mfe(rec_prop_channels$track_num) -value "2"
+	    $w.rec_channels.type add radiobutton -label "3" -variable mfe(rec_prop_channels$track_num) -value "3"
+	    $w.rec_channels.type add radiobutton -label "4" -variable mfe(rec_prop_channels$track_num) -value "4"
+	    $w.rec_channels.type add radiobutton -label "5" -variable mfe(rec_prop_channels$track_num) -value "5"
+	    $w.rec_channels.type add radiobutton -label "6" -variable mfe(rec_prop_channels$track_num) -value "6"
+	    $w.rec_channels.type add radiobutton -label "7" -variable mfe(rec_prop_channels$track_num) -value "7"
+	    $w.rec_channels.type add radiobutton -label "8" -variable mfe(rec_prop_channels$track_num) -value "8"
+	    $w.rec_channels.type add radiobutton -label "9" -variable mfe(rec_prop_channels$track_num) -value "9"
+	    $w.rec_channels.type add radiobutton -label "10" -variable mfe(rec_prop_channels$track_num) -value "10"
+	    $w.rec_channels.type add radiobutton -label "11" -variable mfe(rec_prop_channels$track_num) -value "11"
+	    $w.rec_channels.type add radiobutton -label "12" -variable mfe(rec_prop_channels$track_num) -value "12"
+	    $w.rec_channels.type add radiobutton -label "13" -variable mfe(rec_prop_channels$track_num) -value "13"
+	    $w.rec_channels.type add radiobutton -label "14" -variable mfe(rec_prop_channels$track_num) -value "14"
+	    $w.rec_channels.type add radiobutton -label "15" -variable mfe(rec_prop_channels$track_num) -value "15"
+	    $w.rec_channels.type add radiobutton -label "16" -variable mfe(rec_prop_channels$track_num) -value "16"
+
+    menubutton $w.rec_srate -bg LightSkyBlue -activebackground LightSeaGreen -text "Sample Rate" -relief raised -menu $w.rec_srate.type
+	menu $w.rec_srate.type -tearoff 0
+	    $w.rec_srate.type add radiobutton -label "8000" -variable mfe(rec_prop_srate$track_num) -value "8000"
+	    $w.rec_srate.type add radiobutton -label "11025" -variable mfe(rec_prop_srate$track_num) -value "11025"
+	    $w.rec_srate.type add radiobutton -label "16000" -variable mfe(rec_prop_srate$track_num) -value "16000"
+	    $w.rec_srate.type add radiobutton -label "22050" -variable mfe(rec_prop_srate$track_num) -value "22050"
+	    $w.rec_srate.type add radiobutton -label "32000" -variable mfe(rec_prop_srate$track_num) -value "32000"
+	    $w.rec_srate.type add radiobutton -label "44100" -variable mfe(rec_prop_srate$track_num) -value "44100"
+	    $w.rec_srate.type add radiobutton -label "48000" -variable mfe(rec_prop_srate$track_num) -value "48000"
+	    $w.rec_srate.type add radiobutton -label "96000" -variable mfe(rec_prop_srate$track_num) -value "96000"
+    menubutton $w.rec_interl -bg LightSkyBlue -activebackground LightSeaGreen -text "Interleaved" -relief raised -menu $w.rec_interl.type
+	menu $w.rec_interl.type -tearoff 0
+	    $w.rec_interl.type add radiobutton -label "Interleaved" -variable mfe(rec_prop_interl$track_num) -value "i"
+	    $w.rec_interl.type add radiobutton -label "Non Interleaved" -variable mfe(rec_prop_interl$track_num) -value "n"
+    pack $w.text -side top	
+    pack $w.rec_bits -side left	
+    pack $w.rec_channels -side left
+    pack $w.rec_srate -side left
+    pack $w.rec_interl -side left
+    
+
+    if {$mixdown != 1} {
+    	button $w.close -bg AntiqueWhite -activebackground LightPink -text "Close" -command "
+	    destroy .rec_properties$track_num
+	    return"
+    } else {
+    	button $w.close -bg AntiqueWhite -activebackground LightPink -text "Ok" -command "
+	    file_browser2
+	    play
+	    destroy .rec_properties$track_num
+	    return"
+    }
+    pack $w.close
+}
+############################### Main Section #################################################
+# VARIABLES DESCRIPTION:
+#	mt_font: Default font
+#	number_of_tracks: Number of displayed tracks
+#	track_number: Number of current track
+#	sp_minutes: Starting position in minutes and;
+#	sp_seconds: Starting position in seconds
+# 	mfe(track_nameN): Name of track N
+#	mfe(openfileN): Name and path of the track N wave file
+# 	mfe(deviceN): Name and path of the track N audio device
+# 	mfe(track_statusN): Status of track N (Could be "Play", "Rec" or "Mute")
+#	mfe(effectnN): Name of effect n on track N
+#	mfe(effect_parametersnN): Number of parameters of effect n on track N
+#	mfe(effect_parameterPnN): Value for parameter P of effect n on track N
+#	mfe(volumeN): volume of track N
+#	mfe(panN): Left/Right percent
+#	effect_name(nnn): A more descriptive name of the effect called nnn by ecasound
+#	effect_param(nnn): Number of parameters of the effect called nnn by ecasound
+#	effect_param_name(nnnN): Name of parameter N of effect called nnn by ecasound
+#	effect_param_value(nnnN): Default value for parameter N of effect called nnn by ecasound
+#	effect_param_from(nnnN): Begin value for parameter N of effect called nnn by ecasound
+#	effect_param_to(nnnN): Ending value for parameter N of effect called nnn by ecasound
+#	effect_param_resolution(nnnN): Resolution for parameter N of effect called nnn by ecasound
+
+# Variables definition section
+
+global mfe exit_yes track_num effect_num eca_effects ecasoundrc mixdown tracks_to_play tracks_to_rec play_text fw_text rew_text rewbeg_text sp_seconds_loc sp_minutes_loc wave_editor time_format
+set eca_effects 20
+
+set effect(1) "eal|Limiter|1|Limit %|0|100|100|0"
+set effect(2) "ec|Compressor|2|Compression Rate (Db)|0|1|1|0|Threshold %|0|100|50|0"
+set effect(3) "eca|Advanced Compressor|4|Peak Level %|0|100|69|0|Release Time (Seconds)|0|5|2|0|Fast Compressor Rate|0|1|0.5|0|Compressor Rate (Db)|0|1|1|0"
+set effect(4) "enm|Noise Gate|5|Threshold Level %|0|100|100|0|Pre Hold Time (ms)|0|2000|200|0|Attack Time (ms)|0|2000|200|0|Post Hold Time (ms)|0|2000|200|0|Release Time (ms)|0|2000|200|0"
+set effect(5) "ef1|Resonant Bandpass Filter|2|Center Frequency (Hz)|0|20000|0|0|Width (Hz)|0|2000|0|0"
+set effect(6) "ef3|Resonant Lowpass Filter|3|Cutoff Frequency (Hz)|0|5000|0|0|Resonance|0|2|0|0|Gain|0|1|0|0"
+set effect(7) "efa|Allpass Filter|2|Delay Samples|0|10000|0|0|Feedback %|0|100|50|0"
+set effect(8) "efb|Bandpass Filter|2|Center Frequency (Hz)|0|11000|11000|0|Width (Hz)|0|22000|22000|0"
+set effect(9) "efh|Highpass Filter|1|Cutoff Frequency (Hz)|10000|22000|10000|0"
+set effect(10) "efl|Lowpass Filter|1|Cutoff Frequency (Hz)|0|10000|0|0"
+set effect(11) "efr|Bandreject Filter|2|Center Frequency (Hz)|0|11000|11000|0|Width (Hz)|0|22000|22000|0"
+set effect(12) "efs|Resonator Filter|2|Center Frequency (Hz)|0|11000|11000|0|Width (Hz)|0|22000|22000|0"
+set effect(13) "etd|Delay|4|Delay Time (ms)|0|2000|200|0|Surround Mode (Normal, Surround St., Spread)|0|2|0|1|Number of Delays|0|100|50|0|Mix %|0|100|50|0"
+set effect(14) "etc|Chorus|4|Delay Time (ms)|0|2000|200|0|Variance Time Samples|0|10000|500|0|Feedback %|0|100|50|0|LFO Frequency (Hz)|0|100|50|0"
+set effect(15) "etr|Reverb|3|Delay Time (ms)|0|2000|200|0|Surround Mode (0=Normal, 1=Surround)|0|1|0|1|Feedback %|0|100|50|0"
+set effect(16) "ete|Advanced Reverb|3|Room Size (Meters)|0|100|10|0|Feedback %|0|100|50|0|Wet %|0|100|50|0"
+set effect(17) "etf|Fake Stereo|1|Delay Time (ms)|0|500|40|0"
+set effect(18) "etl|Flanger|4|Delay Time (ms)|0|1000|200|0|Variance Time Samples|0|10000|200|0|Feedback %|0|100|50|0|LFO Frequency (Hz)|0|100|50|0"
+set effect(19) "etm|Multitap Delay|3|Delay Time (ms)|0|2000|200|0|Number of Delays|0|100|20|0|Mix %|0|100|50|0"
+set effect(20) "etp|Phaser|4|Delay Time (ms)|0|2000|200|0|Variance Time Samples|0|10000|100|0|Feedback %|0|100|50|0|LFO Frequency (Hz)|0|100|50|0"
+
+set effect_index(0) "None"
+for {set n 1} {$n <= $eca_effects} {incr n} {
+    set current_effect [split $effect($n) |]
+    set effect_index($n) [lindex $current_effect 0]
+    set effect_name($effect_index($n)) [lindex $current_effect 1]
+    set effect_maker($effect_index($n)) "Kai Vehmanen"
+    set effect_copy($effect_index($n)) "(c) 1997-2001 Kai Vehmanen"
+    set effect_param($effect_index($n)) [lindex $current_effect 2]
+    set pn2 3
+    for {set pn 1} {$pn <= $effect_param($effect_index($n))} {incr pn} {    
+	set effect_param_name($effect_index($n)$pn) [lindex $current_effect $pn2]
+	incr pn2
+	set effect_param_from($effect_index($n)$pn) [lindex $current_effect $pn2]
+	incr pn2				
+	set effect_param_to($effect_index($n)$pn) [lindex $current_effect $pn2]
+	incr pn2
+	set effect_param_value($effect_index($n)$pn) [lindex $current_effect $pn2]
+	incr pn2
+	set effect_param_resolution($effect_index($n)$pn) [lindex $current_effect $pn2]
+	incr pn2
+    }
+}
+
+set ecasoundrc "~/.ecasoundrc"
+
+if {[file exists $ecasoundrc] != 1} {
+    set ecasoundrc "~/.ecasound/ecasoundrc"
+}
+    set rc_infile [open $ecasoundrc r]
+
+set ladspa_path 0
+
+while {[gets $rc_infile input_line] != -1 } {
+    set current_line [split $input_line =] 
+    set current_parameter [lindex $current_line 0]
+    set current_value [lindex $current_line 1]
+    if {[string match *ladspa* $current_parameter] == 1} {
+	regsub { } $current_value {} current_value
+	set ladspa_path $current_value
+    }
+    if {[string match *wave-editor* $current_parameter] == 1} {
+	regsub { } $current_value {} current_value
+	set wave_editor $current_value
+    }
+}
+
+if {[string match */* $ladspa_path] == 1 || [string match /* $ladspa_path] == 1} {ladspa} else {puts "No LADSPA Support"}
+
+set bgcolor cyan3
+
+frame .mfe -bg $bgcolor
+frame .mfe.up1 -bg $bgcolor
+frame .mfe.up2 -bg cyan
+frame .mfe.header -bd 6 -bg $bgcolor 
+frame .mfe.tracks
+frame .mfe.low -bd 6 -bg $bgcolor
+
+set row 1
+set number_of_tracks 0
+set toprocess " "
+
+set mt_font [font create -family Helvetica -size 10 -weight normal]
+
+set play_command "play"
+set mixdown 0
+set export_ecs 0
+set stop_position 0
+set mfe(directory) "."
+set mfe(multichannel) 0
+set mfe(rec_prop_bits0) "s16_le"
+set mfe(rec_prop_channels0) "2"
+set mfe(rec_prop_srate0)  "44100"
+set mfe(rec_prop_interl0) "i"
+
+set sp_minutes_loc(1) 0
+set sp_minutes_loc(2) 0
+set sp_minutes_loc(3) 0
+set sp_minutes_loc(4) 0
+set sp_minutes_loc(5) 0
+set sp_minutes_loc(6) 0
+set sp_minutes_loc(7) 0
+set sp_minutes_loc(8) 0
+set sp_minutes_loc(9) 0 
+set sp_minutes_loc(10) 0
+set sp_minutes_loc(11) 0
+set sp_minutes_loc(12) 0
+set sp_minutes_loc(13) 0
+set sp_minutes_loc(14) 0
+set sp_minutes_loc(15) 0
+set sp_minutes_loc(16) 0
+
+set sp_seconds_loc(1) 0
+set sp_seconds_loc(2) 0
+set sp_seconds_loc(3) 0
+set sp_seconds_loc(4) 0
+set sp_seconds_loc(5) 0
+set sp_seconds_loc(6) 0
+set sp_seconds_loc(7) 0
+set sp_seconds_loc(8) 0
+set sp_seconds_loc(9) 0 
+set sp_seconds_loc(10) 0
+set sp_seconds_loc(11) 0
+set sp_seconds_loc(12) 0
+set sp_seconds_loc(13) 0
+set sp_seconds_loc(14) 0
+set sp_seconds_loc(15) 0
+set sp_seconds_loc(16) 0
+
+set mfe(punch_in_minutes) 0
+set mfe(punch_in_seconds) 0
+set mfe(punch_out_minutes) 0
+set mfe(punch_out_seconds) 0
+set time_format "Minutes"
+
+label .mfe.up1.title -justify left -bg $bgcolor -text "TKECA 3.0.0 - Tcl/Tk Frontend for Ecasound - 2003 Luis Pablo Gasparotto " 
+label .mfe.up1.text -bg $bgcolor -text "Current Directory: "
+entry .mfe.up1.entry -textvariable mfe(directory)
+label .mfe.up1.text2 -bg $bgcolor -text "Current File: "
+entry .mfe.up1.entry2 -state disabled -textvariable mfe(openfile0)
+button .mfe.up1.button -bg AntiqueWhite -activebackground LightPink -text "Open file" -height 0 -command {set n 0 
+set types {{{mfe files} {*.mfe}} {{all} {*}}}
+set track_num 0
+set save_as 0
+set exit_yes 5
+proc_exit
+}
+button .mfe.up1.save -bg AntiqueWhite -activebackground LightPink -text "Save file" -height 0 -command {
+set save_as 0
+save_file} 
+button .mfe.up1.saveas -bg AntiqueWhite -activebackground LightPink -text "Save file as" -height 0 -command {
+set types {{{mfe files} {*.mfe}} {{all} {*}}}
+set track_num 0
+file_browser2
+save_file} 
+button .mfe.up2.exportecs -bg AntiqueWhite -activebackground LightPink -text "Export .ecs" -command {export_ecs} 
+button .mfe.up2.mixdown -bg AntiqueWhite -activebackground LightPink -text "Mixdown" -command {mixdown} 
+button .mfe.up2.options -bg AntiqueWhite -activebackground LightPink -justify right -text Options -command {options}
+button .mfe.up2.time_format -bg AntiqueWhite -activebackground LightPink -justify right -text "Time Format" -command {time_format}
+button .mfe.up2.addtrack -bg AntiqueWhite -activebackground LightPink -justify right -text "Add Track" -command {
+incr number_of_tracks
+add_track}
+button .mfe.up2.del_last_track -bg AntiqueWhite -activebackground LightPink -justify right -text "Del Last Track" -command {del_last_track}
+button .mfe.up2.del_all_tracks -bg AntiqueWhite -activebackground LightPink -justify right -text "Close" -command {
+set save_as 0
+set exit_yes 2
+proc_exit
+}
+button .mfe.up2.quit -bg AntiqueWhite -activebackground LightPink -justify right -text Quit -command {
+set exit_yes 1
+proc_exit
+}
+button .mfe.up2.about -bg AntiqueWhite -activebackground LightPink -justify right -text "About TKECA" -command {
+proc_about
+}
+
+label .mfe.header.text1 -bg $bgcolor -justify left -text "N      "
+label .mfe.header.text2 -bg $bgcolor -justify left -text "File                                "
+label .mfe.header.text3 -bg $bgcolor -justify left -text " "
+label .mfe.header.text4 -bg $bgcolor -justify left -text "                      "
+label .mfe.header.text5 -bg $bgcolor -justify left -text "Mute  Rec. "
+label .mfe.header.text6 -bg $bgcolor -justify left -text "                    "
+label .mfe.header.text7 -bg $bgcolor -justify left -text "Pan                             "
+label .mfe.header.text8 -bg $bgcolor -justify left -text "Volume                                 "   
+
+set bgcolor2 AntiqueWhite3
+canvas .mfe.tracks.canvas  -bg $bgcolor2 -width 780 -height 400 -yscrollcommand [list .mfe.tracks.yscroll set]
+.mfe.tracks.canvas config -scrollregion "0 0 0 100"
+scrollbar .mfe.tracks.yscroll -orient vertical -width 8 -command [list .mfe.tracks.canvas yview]
+
+pack .mfe.up1.title -side top -fill x -expand 1
+pack .mfe.up1.text -side left  -fill x -expand 1
+pack .mfe.up1.entry -side left  -fill x -expand 1
+pack .mfe.up1.text2 -side left  -fill x -expand 1
+pack .mfe.up1.entry2 -side left  -fill x -expand 1
+pack .mfe.up1.button -side left  -fill x -expand 1
+pack .mfe.up1.save -side left -fill x -expand 1
+pack .mfe.up1.saveas -side top -fill x -expand 1
+pack .mfe.up2.exportecs -side left -fill x -expand 1
+pack .mfe.up2.mixdown -side left -fill x -expand 1
+pack .mfe.up2.options -side left -fill x -expand 1
+pack .mfe.up2.time_format -side left -fill x -expand 1
+pack .mfe.up2.addtrack -side left -fill x -expand 1
+pack .mfe.up2.del_last_track -side left -fill x -expand 1
+pack .mfe.up2.del_all_tracks -side left -fill x -expand 1
+pack .mfe.up2.quit -side left -fill x -expand 1
+pack .mfe.up2.about -side left -fill x -expand 1
+pack .mfe.up1 -side top -fill x -expand 1 
+pack .mfe.up2 -side top -fill x -expand 1
+
+pack .mfe.header.text1 -side left -expand 0
+pack .mfe.header.text2 -side left -expand 0
+pack .mfe.header.text3 -side left -expand 0
+pack .mfe.header.text4 -side left -expand 0
+pack .mfe.header.text5 -side left -expand 0
+pack .mfe.header.text6 -side left -expand 0
+pack .mfe.header.text7 -side left -expand 0
+pack .mfe.header.text8 -side left -expand 0
+pack .mfe.header
+pack .mfe.tracks.yscroll -side right -fill y -expand 1
+pack .mfe.tracks.canvas -side left -fill y -expand 1
+
+set w [frame .mfe.tracks.canvas.f -bd 0]
+.mfe.tracks.canvas create window 0 0 -anchor nw -window $w
+
+pack .mfe
+
+set stop_command 1
+set sp_minutes 0
+set sp_seconds 0
+set pause "Pause"
+set play_text "Play"
+set fw_text "Fw 5''"
+set rew_text "Rew 5''"
+set rewbeg_text "Go to 00:00"
+
+label .mfe.low.position -bg $bgcolor -text "Position:"
+label .mfe.low.minutes -bg AntiqueWhite -width 3 -text 00
+label .mfe.low.position2 -bg $bgcolor -text :
+label .mfe.low.seconds -bg AntiqueWhite -width 5 -text 00.00
+label .mfe.low.spaces -bg $bgcolor -text " "
+label .mfe.low.multich -bg $bgcolor -text "Multichannel:"
+checkbutton .mfe.low.multich2 -width 1 -bg $bgcolor -variable mfe(multichannel) -onvalue 1 -offvalue 0 -command "
+set mixdown 3
+set track_num 0
+rec_properties"
+
+button .mfe.low.loc -bg AntiqueWhite -activebackground LightPink -text Loc -height 0 -command { 
+locate
+}
+
+button .mfe.low.play -bg AntiqueWhite -activebackground LightPink -textvariable play_text -height 0 -command { 
+    if {$stop_command == 1} { 
+	set stop_command 0
+	set play_text "Stop"
+	set fw_text " "
+	set rew_text " "
+	set rewbeg_text " "
+	play 
+	if {$tracks_to_play==0 && $tracks_to_rec==0} {
+	    set stop_command 1
+	    set play_text "Play"
+	    set fw_text "Fw 5''"
+	    set rew_text "Rew 5''"
+	    set rewbeg_text "Go to 00:00"
+
+	}	    	
+    } else {
+	set stop_command 1
+	set play_text "Play"
+	set fw_text "Fw 5''"
+	set rew_text "Rew 5''"
+	set rewbeg_text "Go to 00:00"
+	stop 
+    }
+} 
+
+button .mfe.low.pause -bg AntiqueWhite -activebackground LightPink -textvariable pause -height 0 -command { 
+    if {$stop_command == 0} {pause}
+} 
+
+button .mfe.low.rew_to_begin -bg AntiqueWhite -activebackground LightPink -textvariable rewbeg_text  -height 0 -command { 
+    if {$stop_command == 1} { 
+	set sp_minutes 0	 
+	set sp_seconds 0
+	display_position	 
+    }
+} 
+
+button .mfe.low.rew_5 -bg AntiqueWhite -activebackground LightPink -textvariable rew_text -height 0 -command { 
+    if {$stop_command == 1} { 
+	set starting_time [expr $sp_seconds+$sp_minutes*60]
+	if {$starting_time > 5} {
+	    set starting_time [expr $starting_time-5]
+	    set sp_minutes [expr $starting_time/60]
+	    set sp_minutes [expr int($sp_minutes)]
+	    set sp_seconds [expr $starting_time-$sp_minutes*60]
+	    display_position
+	} else {
+	    set sp_minutes 0	 
+	    set sp_seconds 0
+	    display_position
+	}	 
+    }
+} 
+
+button .mfe.low.forw_5 -bg AntiqueWhite -activebackground LightPink -textvariable fw_text -height 0 -command { 
+    if {$stop_command == 1} { 
+	set starting_time [expr $sp_seconds+$sp_minutes*60]
+	set starting_time [expr $starting_time+5]
+	set sp_minutes [expr $starting_time/60]
+	set sp_minutes [expr int($sp_minutes)]
+	set sp_seconds [expr $starting_time-$sp_minutes*60]
+	display_position
+    }
+} 
+
+pack .mfe.tracks -side top
+pack .mfe.low.position -side left
+pack .mfe.low.minutes -side left
+pack .mfe.low.position2 -side left
+pack .mfe.low.seconds -side left
+pack .mfe.low.spaces -side left
+pack .mfe.low.multich -side left
+pack .mfe.low.multich2 -side left
+
+pack .mfe.low.loc -side left -fill x -expand 1
+pack .mfe.low.play -side left -fill x -expand 1
+pack .mfe.low.pause -side left -fill x -expand 1
+pack .mfe.low.rew_to_begin -side left -fill x -expand 1
+pack .mfe.low.rew_5 -side left -fill x -expand 1
+pack .mfe.low.forw_5 -side left -fill x -expand 1
+pack .mfe.low -fill both -expand 1
+pack .mfe
+proc time_format {} {
+    global time_format bgcolor sp_minutes sp_seconds sp_seconds_loc sp_minutes_loc mfe
+    set loc_number 1
+    if {$time_format=="Minutes"} {
+	set time_format "Seconds"
+	set sp_seconds [expr $sp_seconds+$sp_minutes*60]
+	set sp_minutes 0
+	.mfe.low.minutes configure -bg $bgcolor -width 0 -text ""
+	.mfe.low.position2 configure -bg $bgcolor -width 0 -text ""
+	.mfe.low.seconds configure -bg AntiqueWhite -width 7 -text $sp_seconds
+	set mfe(punch_in_seconds) [expr $mfe(punch_in_minutes)*60+$mfe(punch_in_seconds)]
+	set mfe(punch_in_minutes) 0
+	set mfe(punch_out_seconds) [expr $mfe(punch_out_minutes)*60+$mfe(punch_out_seconds)]
+	set mfe(punch_out_minutes) 0
+	if {[winfo exists .locate] != 0} {
+	    for {set n 1} {$n <= 4} {incr n} {
+		for {set en 1} {$en <= 4} {incr en} {	
+		    set sp_seconds_loc($loc_number) [expr $sp_seconds_loc($loc_number)+$sp_minutes_loc($loc_number)*60]
+		    set sp_minutes_loc($loc_number) 0
+		    .locate.locate.minutes$loc_number configure -bg $bgcolor -fg $bgcolor -width 0 -state disabled -relief flat
+		    .locate.locate.position$loc_number configure -bg $bgcolor -text ""
+		    .locate.locate.seconds$loc_number configure -width 7
+		    incr loc_number
+		}
+	    }	
+	    .locate.punch.in_minutes configure -bg $bgcolor -fg $bgcolor -width 0 -state disabled -relief flat
+	    .locate.punch.in_sep configure -bg $bgcolor -text ""
+	    .locate.punch.in_seconds configure -bg White -width 7
+	    .locate.punch.out_minutes configure -bg $bgcolor -fg $bgcolor -width 0 -state disabled -relief flat
+	    .locate.punch.out_sep configure -bg $bgcolor -text ""
+	    .locate.punch.out_seconds configure -width 7
+	} else {
+	    for {set n 1} {$n <= 16} {incr n} {
+		set sp_seconds_loc($n) [expr $sp_seconds_loc($n)+$sp_minutes_loc($n)*60]
+		set sp_minutes_loc($n) 0
+	    }
+	}
+    } else {
+	set time_format "Minutes"
+	set sp_minutes [expr $sp_seconds/60]
+	set sp_minutes [expr int($sp_minutes)]
+	set sp_seconds [expr $sp_seconds-$sp_minutes*60]
+	.mfe.low.minutes configure -bg AntiqueWhite -width 3 -text $sp_minutes
+	.mfe.low.position2 configure -bg $bgcolor -text :
+	.mfe.low.seconds configure -bg AntiqueWhite -width 5 -text $sp_seconds
+	set mfe(punch_in_minutes) [expr $mfe(punch_in_seconds)/60]
+	set mfe(punch_in_minutes) [expr int($mfe(punch_in_seconds))]
+	set mfe(punch_in_seconds) [expr $mfe(punch_in_seconds)-$mfe(punch_in_minutes)*60]
+	if {[winfo exists .locate] != 0} {
+	    for {set n 1} {$n <= 4} {incr n} {
+		for {set en 1} {$en <= 4} {incr en} {	
+		    set sp_minutes_loc($loc_number) [expr $sp_seconds_loc($loc_number)/60]
+		    set sp_minutes_loc($loc_number) [expr int($sp_minutes_loc($loc_number))]
+		    set sp_seconds_loc($loc_number) [expr $sp_seconds_loc($loc_number)-$sp_minutes_loc($loc_number)*60]
+		    .locate.locate.minutes$loc_number configure -bg White -fg Black -width 3 -state normal -relief sunken
+		    .locate.locate.position$loc_number configure -bg $bgcolor -text ":"
+		    .locate.locate.seconds$loc_number configure -width 5
+		    incr loc_number
+		}
+	    }	
+	    .locate.punch.in_minutes configure -bg White -fg black -width 3 -state normal -relief sunken
+	    .locate.punch.in_sep configure -bg $bgcolor -text ":"
+	    .locate.punch.in_seconds configure -bg White -width 5
+	    .locate.punch.out_minutes configure -bg White -fg Black -width 0 -state normal -relief sunken
+	    .locate.punch.out_sep configure -bg $bgcolor -text ":"
+	    .locate.punch.out_seconds configure -width 5
+	} else {
+	    for {set n 1} {$n <= 16} {incr n} {
+		set sp_minutes_loc($n) [expr $sp_seconds_loc($n)/60]
+		set sp_minutes_loc($n) [expr int($sp_minutes_loc($n))]
+		set sp_seconds_loc($n) [expr $sp_seconds_loc($n)-$sp_minutes_loc($n)*60]
+	    }
+	}
+    }
+}
+proc play {} {
+    global mfe number_of_tracks msg stop_command sp_minutes sp_seconds effect_param playhandle mixdown export_ecs eca_string tracks_to_play tracks_to_rec start_time sp_seconds2 punch
+    if {$mfe(directory)==""} {set mfe(directory) "."}
+    set eca_string ""
+    set eca_string_i ""
+    set eca_string_o ""
+    set track_count 0
+    set number_of_devices 0
+    set number_of_devices_i 0
+    set device(0) " "
+    set device(1) " "
+    set device_i(0) " "
+    set device_i(1) " "
+    set added_device 0
+    set added_device_i 0
+    set tracks_to_play 0
+    set tracks_to_rec 0
+    set mfe(muted_chains) ""
+    set punch_sequence ""
+    set punch 0
+    set start_time [expr $sp_minutes*60+$sp_seconds]
+    if {$mfe(punch_in_minutes)!=0 || $mfe(punch_in_seconds)!=0 || $mfe(punch_out_minutes)!=0 || $mfe(punch_out_seconds)!=0} {
+	for {set n 1} {$n <= $number_of_tracks} {incr n} {
+	    if {$mfe(track_rec_status$n)=="Yes"} {
+	        set start_time [expr $mfe(punch_in_minutes)*60+$mfe(punch_in_seconds)]
+		set sp_minutes $mfe(punch_in_minutes)
+		set sp_seconds $mfe(punch_in_seconds)
+		set proc_time [expr $mfe(punch_out_minutes)*60+$mfe(punch_out_seconds)-$mfe(punch_in_minutes)*60-$mfe(punch_in_seconds)]		    
+		set punch_sequence " -y:$start_time -t:$proc_time"
+		set punch 1
+	    }
+	}
+    }
+    for {set n 1} {$n <= $number_of_tracks} {incr n} {
+	set mfe(volume_position$n) 1
+	set mfe(pan_position$n) 2
+	if {$mfe(track_status$n)=="Mute" && $mfe(track_rec_status$n)=="No"} {
+	    if {$mfe(muted_chains)!=""} {
+		set mfe(muted_chains) "$mfe(muted_chains),$n" 
+	    } else {
+		set mfe(muted_chains) $n 
+	    }
+	}
+	    if {[string length $mfe(file$n)] > 3} { 
+		if {$mfe(track_rec_status$n)=="No"} {    
+		    set eca_string "$eca_string-a:$n -i:$mfe(file$n)"
+		    if {$mfe(rec_prop_channels$n)==1} {
+			if {$mfe(chn$n)!= "n/a" && $mfe(multichannel)==1} {
+			    set eca_string "$eca_string -erc:1,$mfe(chn$n)"
+			} else {
+		    	    set eca_string "$eca_string -erc:1,2"
+			}
+
+			set mfe(volume_position$n) 2
+			set mfe(pan_position$n) 3
+		    }
+		    set eca_string "$eca_string -ea:$mfe(volume$n) -epp:$mfe(pan$n)"
+		    set tracks_to_play 1
+		    if {$mixdown!=1} {
+			for {set nd 0} {$nd <= $number_of_devices} {incr nd} {
+			    if {$device($nd)==$mfe(device$n)} {
+				set device_chains($nd) "$device_chains($nd),$n"
+				set added_device 1
+			    }
+			}
+			if {$added_device==0} {
+			    incr number_of_devices
+			    set device_chains($number_of_devices) "$n"
+			    set device($nd) $mfe(device$n)
+		    
+			} else {
+			    set added_device 0
+			}
+		    }
+		    set mfe(number_of_effects$n) 0
+		    for {set en 1} {$en <= 4} {incr en} { 
+			if {$mfe(effect$en$n) != "None" && $mfe(effect_attached$en$n) == "Connected"} {
+			    incr mfe(number_of_effects$n)
+			    set mfe(effect_position$en$n) [expr $mfe(pan_position$n)+$mfe(number_of_effects$n)]
+			    if {[string match ladspa* $mfe(effect$en$n)]==1} {
+				regsub ladspa_ $mfe(effect$en$n) {} current_effect
+				set eca_string "$eca_string -el:$current_effect,"
+			    } else {
+				set eca_string "$eca_string -$mfe(effect$en$n):"
+			    }	
+			    for {set par 1} {$par <= $effect_param($mfe(effect$en$n)) } {incr par} { 
+				if {$par>1} {set eca_string "$eca_string,"}
+				set eca_string "$eca_string$mfe(effect_parameter$par$en$n)"
+			    }
+			}    
+		    }
+		    set eca_string "$eca_string $punch_sequence"
+		} else {
+		    set tracks_to_rec 1
+		    for {set nd 0} {$nd <= $number_of_devices_i} {incr nd} {
+			if {$device_i($nd)==$mfe(device$n)} {
+			    set device_chains_i($nd) "$device_chains_i($nd),$n"
+			    set added_device_i 1
+			}
+		    }
+		    if {$added_device_i==0} {
+		        incr number_of_devices_i
+		        set device_chains_i($number_of_devices_i) "$n"
+			set device_i($nd) $mfe(device$n)
+		    
+		    } else {
+		        set added_device_i 0
+		    }
+		    set eca_string "$eca_string-a:$n" 
+		    if {$mfe(multichannel)==1} { 
+			set eca_string "$eca_string -f:$mfe(rec_prop_bits$n),1ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n) -erc:$mfe(chn$n),1 -o:$mfe(file$n)"
+		    } else {
+			set mfe(rec_prop_channels$n) 2
+			set eca_string "$eca_string -f:$mfe(rec_prop_bits$n),$mfe(rec_prop_channels$n)ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n) -o:$mfe(file$n)"
+		    }		
+#			set tracks_to_play 1
+		    set eca_string "$eca_string $punch_sequence"
+		}
+
+	    set eca_string "$eca_string \n"
+	}    
+    }
+    
+    if {$tracks_to_play == 1} {
+	for {set n 1} {$n <= $number_of_devices} {incr n} {
+	    set eca_string_o "$eca_string_o-a:$device_chains($n) -o:$device($n)\n"   
+	}
+    }	
+    if {$mixdown == 1} {
+	set eca_string "$eca_string-a:all -f:$mfe(rec_prop_bitsMD),$mfe(rec_prop_channelsMD)ch,$mfe(rec_prop_srateMD),$mfe(rec_prop_interlMD) -o:$mfe(openfileMD)"
+	set mixdown 0
+    }
+    if {$tracks_to_rec == 1} {
+        for {set n 1} {$n <= $number_of_devices_i} {incr n} {
+	set eca_string_i "$eca_string_i-a:$device_chains_i($n) -i:$device_i($n)\n"   
+	}
+    }
+    set eca_string "$eca_string_i$eca_string$eca_string_o"
+    if {$mfe(multichannel)==1} {         
+        set eca_string " -f:$mfe(rec_prop_bits0),$mfe(rec_prop_channels0)ch,$mfe(rec_prop_srate0),$mfe(rec_prop_interl0) $eca_string "    
+    }
+        
+    puts "Ecasound Chainsetup:\n$eca_string"
+    puts "--------------------\n"
+    if {$export_ecs == 1} {return}
+    set tkeca_log [open "~/tkeca.log" w]
+#	puts $tkeca_log " "
+    close $tkeca_log
+    set playhandle [open "|ecasound -c $eca_string" w]
+    puts "Ecasound Interactive Mode Commands:\n"
+    puts "-----------------------------------\n"
+    fconfigure $playhandle -buffering line -buffersize full -blocking 0
+    if {$mfe(muted_chains)!=""} {
+	puts $playhandle "c-select $mfe(muted_chains)\n"
+	puts "c-select $mfe(muted_chains)\n"
+	puts $playhandle "c-muting\n"
+	puts "c-muting\n"
+    }
+    if {$punch==0} {
+	puts $playhandle "setpos $start_time\n"
+	puts "setpos $start_time\n"
+    }
+    puts $playhandle "t\n"
+    puts "t\n"
+#remover esta linea despues
+    set start_time [clock clicks -milliseconds]
+    set sp_seconds2 $sp_seconds
+    tick
+    if {$tracks_to_play == 0 && $tracks_to_rec == 0} { 
+	set stop_command 1
+	messages [format "No tracks to be played or recorded"]
+    }
+}
+
+proc preview {} {
+    global mfe msg stop_command sp_minutes sp_seconds effect_param playhandle mixdown eca_string track effect effect2 preview
+    set start_time [expr $sp_minutes*60+$sp_seconds]
+    set eca_string ""
+    set n $track
+    set tracks_to_play 0
+    set mfe(volume_position$n) 1
+    set mfe(pan_position$n) 2
+	
+    if {[string length $mfe(file$n)] > 3} { 
+	if {$mfe(track_status$n)=="Play"} {
+	    set eca_string "$eca_string -a:$n -i:$mfe(file$n)"
+		
+		if {$mfe(rec_prop_channels$n)==1} {
+		    if {$mfe(chn$n)!= "n/a" && $mfe(multichannel)==1} {
+			set eca_string "$eca_string -erc:1,$mfe(chn$n)"
+		    } else {
+		    	set eca_string "$eca_string -erc:1,2"
+		    }
+			set eca_string "$eca_string -ea:$mfe(volume$n) -epp:$mfe(pan$n)"
+			set mfe(volume_position$n) 2
+			set mfe(pan_position$n) 3
+		}
+		
+		set tracks_to_play 1
+	    }
+	if {$preview == 2} {
+	    for {set en 1} {$en <= 4} {incr en} { 
+		if {$mfe(effect$en$track) != "None" } {
+		    if {[string match ladspa* $mfe(effect$en$track)]==1} {
+			regsub ladspa_ $mfe(effect$en$track) {} current_effect
+			set eca_string "$eca_string -el:$current_effect,"
+		    } else {
+			set eca_string "$eca_string -$mfe(effect$en$track):"
+		    }	
+		    for {set par 1} {$par <= $effect_param($mfe(effect$en$track)) } {incr par} { 
+			if {$par>1} {set eca_string "$eca_string,"}
+			set eca_string "$eca_string$mfe(effect_parameter$par$en$track)"
+		    }
+		}    
+	    }
+
+	} else {
+	    set en $effect2
+	    if {$mfe(effect$en$track) != "None" } {
+		if {[string match ladspa* $mfe(effect$en$track)]==1} {
+			regsub ladspa_ $mfe(effect$en$track) {} current_effect
+			set eca_string "$eca_string -el:$current_effect,"
+		} else {
+			set eca_string "$eca_string -$mfe(effect$en$track):"
+		}	
+		for {set par 1} {$par <= $effect_param($mfe(effect$en$track)) } {incr par} { 
+		    if {$par>1} {set eca_string "$eca_string,"}
+		    set eca_string "$eca_string$mfe(effect_parameter$par$en$track)"
+		}
+	    }    
+		
+	}
+    }
+    if {$tracks_to_play ==1} {	
+	set eca_string "$eca_string -a:$n -o:$mfe(device$track)"
+	puts $eca_string
+	set playhandle [open "|ecasound -c -r$eca_string" w]
+	fconfigure $playhandle -buffering none -blocking 0
+	puts $playhandle "setpos $start_time\n"
+	puts $playhandle "t\n"
+    } else {	
+ 	set stop_command 1
+	messages [format "No tracks to be played or recorded"]
+    }
+}


Property changes on: tkeca/branches/upstream/current/tkeca.tcl
___________________________________________________________________
Name: svn:executable
   +