[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
+