#!/bin/sh # the next line restarts using wish \ exec /usr/local/bin/wish8.6 "$0" "$@" > ~/tkeca.log # Tkeca is a Tcl/Tk frontend for Kai Vehmanen's Ecasound # Copyright (C) 2002-2009 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: lpgasparotto@gmail.com proc colors {} { package require Tk set wcolors .colors catch {destroy $wcolors} toplevel $wcolors wm title $wcolors "Color palette" wm iconname $wcolors "Listbox" #positionWindow $wcolors ## See Code / Dismiss buttons #set btns [addSeeDismiss $wcolors.buttons $wcolors] #pack $btns -side bottom -fill x frame $wcolors.frame -borderwidth 10 pack $wcolors.frame -side top -expand yes -fill y scrollbar $wcolors.frame.scroll -command "$wcolors.frame.list yview" listbox $wcolors.frame.list -yscroll "$wcolors.frame.scroll set" \ -width 20 -height 16 -setgrid 1 pack $wcolors.frame.list $wcolors.frame.scroll -side left -fill y -expand 1 bind $wcolors.frame.list { tk_setPalette [selection get] } $wcolors.frame.list insert 0 gray60 gray70 gray80 gray85 gray90 gray95 \ snow1 snow2 snow3 snow4 seashell1 seashell2 \ seashell3 seashell4 AntiqueWhite1 AntiqueWhite2 AntiqueWhite3 \ AntiqueWhite4 bisque1 bisque2 bisque3 bisque4 PeachPuff1 \ PeachPuff2 PeachPuff3 PeachPuff4 NavajoWhite1 NavajoWhite2 \ NavajoWhite3 NavajoWhite4 LemonChiffon1 LemonChiffon2 \ LemonChiffon3 LemonChiffon4 cornsilk1 cornsilk2 cornsilk3 \ cornsilk4 ivory1 ivory2 ivory3 ivory4 honeydew1 honeydew2 \ honeydew3 honeydew4 LavenderBlush1 LavenderBlush2 \ LavenderBlush3 LavenderBlush4 MistyRose1 MistyRose2 \ MistyRose3 MistyRose4 azure1 azure2 azure3 azure4 \ SlateBlue1 SlateBlue2 SlateBlue3 SlateBlue4 RoyalBlue1 \ RoyalBlue2 RoyalBlue3 RoyalBlue4 blue1 blue2 blue3 blue4 \ DodgerBlue1 DodgerBlue2 DodgerBlue3 DodgerBlue4 SteelBlue1 \ SteelBlue2 SteelBlue3 SteelBlue4 DeepSkyBlue1 DeepSkyBlue2 \ DeepSkyBlue3 DeepSkyBlue4 SkyBlue1 SkyBlue2 SkyBlue3 \ SkyBlue4 LightSkyBlue1 LightSkyBlue2 LightSkyBlue3 \ LightSkyBlue4 SlateGray1 SlateGray2 SlateGray3 SlateGray4 \ LightSteelBlue1 LightSteelBlue2 LightSteelBlue3 \ LightSteelBlue4 LightBlue1 LightBlue2 LightBlue3 \ LightBlue4 LightCyan1 LightCyan2 LightCyan3 LightCyan4 \ PaleTurquoise1 PaleTurquoise2 PaleTurquoise3 PaleTurquoise4 \ CadetBlue1 CadetBlue2 CadetBlue3 CadetBlue4 turquoise1 \ turquoise2 turquoise3 turquoise4 cyan1 cyan2 cyan3 cyan4 \ DarkSlateGray1 DarkSlateGray2 DarkSlateGray3 \ DarkSlateGray4 aquamarine1 aquamarine2 aquamarine3 \ aquamarine4 DarkSeaGreen1 DarkSeaGreen2 DarkSeaGreen3 \ DarkSeaGreen4 SeaGreen1 SeaGreen2 SeaGreen3 SeaGreen4 \ PaleGreen1 PaleGreen2 PaleGreen3 PaleGreen4 SpringGreen1 \ SpringGreen2 SpringGreen3 SpringGreen4 green1 green2 \ green3 green4 chartreuse1 chartreuse2 chartreuse3 \ chartreuse4 OliveDrab1 OliveDrab2 OliveDrab3 OliveDrab4 \ DarkOliveGreen1 DarkOliveGreen2 DarkOliveGreen3 \ DarkOliveGreen4 khaki1 khaki2 khaki3 khaki4 \ LightGoldenrod1 LightGoldenrod2 LightGoldenrod3 \ LightGoldenrod4 LightYellow1 LightYellow2 LightYellow3 \ LightYellow4 yellow1 yellow2 yellow3 yellow4 gold1 gold2 \ gold3 gold4 goldenrod1 goldenrod2 goldenrod3 goldenrod4 \ DarkGoldenrod1 DarkGoldenrod2 DarkGoldenrod3 DarkGoldenrod4 \ RosyBrown1 RosyBrown2 RosyBrown3 RosyBrown4 IndianRed1 \ IndianRed2 IndianRed3 IndianRed4 sienna1 sienna2 sienna3 \ sienna4 burlywood1 burlywood2 burlywood3 burlywood4 wheat1 \ wheat2 wheat3 wheat4 tan1 tan2 tan3 tan4 chocolate1 \ chocolate2 chocolate3 chocolate4 firebrick1 firebrick2 \ firebrick3 firebrick4 brown1 brown2 brown3 brown4 salmon1 \ salmon2 salmon3 salmon4 LightSalmon1 LightSalmon2 \ LightSalmon3 LightSalmon4 orange1 orange2 orange3 orange4 \ DarkOrange1 DarkOrange2 DarkOrange3 DarkOrange4 coral1 \ coral2 coral3 coral4 tomato1 tomato2 tomato3 tomato4 \ OrangeRed1 OrangeRed2 OrangeRed3 OrangeRed4 red1 red2 red3 \ red4 DeepPink1 DeepPink2 DeepPink3 DeepPink4 HotPink1 \ HotPink2 HotPink3 HotPink4 pink1 pink2 pink3 pink4 \ LightPink1 LightPink2 LightPink3 LightPink4 PaleVioletRed1 \ PaleVioletRed2 PaleVioletRed3 PaleVioletRed4 maroon1 \ maroon2 maroon3 maroon4 VioletRed1 VioletRed2 VioletRed3 \ VioletRed4 magenta1 magenta2 magenta3 magenta4 orchid1 \ orchid2 orchid3 orchid4 plum1 plum2 plum3 plum4 \ MediumOrchid1 MediumOrchid2 MediumOrchid3 MediumOrchid4 \ DarkOrchid1 DarkOrchid2 DarkOrchid3 DarkOrchid4 purple1 \ purple2 purple3 purple4 MediumPurple1 MediumPurple2 \ MediumPurple3 MediumPurple4 thistle1 thistle2 thistle3 \ thistle4 button $wcolors.dismiss -text "Close" -command { destroy .colors return } pack $wcolors.dismiss -expand yes -fill x } proc master {} { global mfe bgcolor mt_font if {[winfo exists .master] != 0} {destroy .master} # toplevel .master -bd 6 -bg $bgcolor -height 200 -width 10 toplevel .master -bd 6 -height 200 -width 10 wm title .master "Master Volume Control" # frame .master.up -bg $bgcolor frame .master.up # label .master.up.title -bg $bgcolor -text "Master Control" label .master.up.title -text "Master Control" # frame .master.med -bg AntiqueWhite frame .master.med # scale .master.med.control -activebackground red -font $mt_font -resolution 1 -from 200 -to 0 -length 250 -width 10 -orient vertical -showvalue true -variable mfe(master) -command " scale .master.med.control -resolution 1 -from 200 -to 0 -length 250 -width 10 -orient vertical -showvalue true -variable mfe(master) -command " set mfe(controller_number) 0 set mfe(param_number) 1 change_master_volume_on_the_fly set mfe(master)" # frame .master.low -bg $bgcolor frame .master.low # button .master.low.close -activebackground LightPink -text Close -command {destroy .master} button .master.low.close -text Close -command {destroy .master} pack .master.up.title -side top -fill x -expand yes pack .master.up -side top -fill x -expand yes pack .master.med.control -side top -fill y -expand yes pack .master.med -side top -fill both -expand yes pack .master.low.close -padx 5 -side left -fill x -expand yes pack .master.low -pady 5 -side top -fill x -expand yes } proc change_master_volume_on_the_fly {} { global mfe number_of_tracks stop_command playhandle if {$stop_command==0} { for {set n 1} {$n <= $number_of_tracks} {incr n} { set master_volume [expr $mfe(volume$n)*$mfe(master)/100] puts $playhandle "c-select $n\ncop-select $mfe(volume_position$n) \ncopp-select $mfe(param_number)\ncopp-set $master_volume" } } } proc metronome {} { global bgcolor bgcolor2 bgcolor3 mfe track_num set bgcolor3 AntiqueWhite2 set mt_font [font create -family Helvetica -size 9 -weight normal] if {[winfo exists .metronome] != 0} {destroy .metronome} toplevel .metronome -bd 6 frame .metronome.frame1 label .metronome.frame1.label1 -text "Beats per minute: " entry .metronome.frame1.beat -bg White -width 3 -textvariable mfe(effect_parameter110) frame .metronome.frame2 menubutton .metronome.frame2.dev_text -text "Device" -relief raised -padx 1 -menu .metronome.frame2.dev_text.type menu .metronome.frame2.dev_text.type -tearoff 0 .metronome.frame2.dev_text.type add radiobutton -label Default -variable mfe(device0) -value "Default" .metronome.frame2.dev_text.type add radiobutton -label alsa,hw:0 -variable mfe(device0) -value "alsa,hw:0" .metronome.frame2.dev_text.type add radiobutton -label alsa,hw:1 -variable mfe(device0) -value "alsa,hw:1" .metronome.frame2.dev_text.type add radiobutton -label alsa,hw:2 -variable mfe(device0) -value "alsa,hw:2" .metronome.frame2.dev_text.type add radiobutton -label alsa,hw:3 -variable mfe(device0) -value "alsa,hw:3" .metronome.frame2.dev_text.type add radiobutton -label alsaplugin,0 -variable mfe(device0) -value "alsaplugin,0" .metronome.frame2.dev_text.type add radiobutton -label alsaplugin,1 -variable mfe(device0) -value "alsaplugin,1" .metronome.frame2.dev_text.type add radiobutton -label alsaplugin,2 -variable mfe(device0) -value "alsaplugin,2" .metronome.frame2.dev_text.type add radiobutton -label alsaplugin,3 -variable mfe(device0) -value "alsaplugin,3" .metronome.frame2.dev_text.type add radiobutton -label jack,system -variable mfe(device0) -value "jack,system" .metronome.frame2.dev_text.type add radiobutton -label /dev/dsp -variable mfe(device0) -value "/dev/dsp" .metronome.frame2.dev_text.type add radiobutton -label /dev/dsp1 -variable mfe(device0) -value "/dev/dsp1" .metronome.frame2.dev_text.type add radiobutton -label /dev/dsp2 -variable mfe(device0) -value "/dev/dsp2" .metronome.frame2.dev_text.type add radiobutton -label /dev/dsp3 -variable mfe(device0) -value "/dev/dsp3" entry .metronome.frame2.dev_entry -bg White -width 16 -textvariable mfe(device0) checkbutton .metronome.enable -width 18 -text "Enable metronome" -variable mfe(track_status0) -onvalue "Play" -offvalue "Mute" -padx 0 -command " set track_num 0 mute_unmute" button .metronome.button -text Ok -command {destroy .metronome} grid .metronome.frame1.label1 .metronome.frame1.beat pack .metronome.frame1 -fill both -expand yes -padx 2 -pady 2 grid .metronome.frame2.dev_text .metronome.frame2.dev_entry pack .metronome.frame2 -fill both -expand yes -padx 2 -pady 2 pack .metronome.enable -fill x -padx 2 pack .metronome.button -side bottom -anchor s -fill x } proc latency_comp {} { global sp_minutes sp_seconds sp_minutes_loc sp_seconds_loc locate_name bgcolor bgcolor2 bgcolor3 mfe time_format if {[winfo exists .latency] != 0} {destroy .latency} toplevel .latency -bd 6 wm title .latency "Latency Compensation" frame .latency.frame label .latency.frame.label -text "Latency Compensation (ms): " entry .latency.frame.input -bg White -width 4 -textvariable mfe(latency) # frame .latency.frame2 -bg $bgcolor # button .latency.frame2.button -activebackground LightPink -text Ok -command {destroy .latency} button .latency.button -text Ok -command {destroy .latency} grid .latency.frame.label .latency.frame.input -sticky ewns # grid .latency.frame2.button -sticky ewns pack .latency.frame -fill both -expand yes -padx 2 -pady 2 # pack .latency.frame2 -fill both -expand yes pack .latency.button -fill both -expand yes -padx 2 -pady 2 } 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 wm title .locate "Locates" frame .locate.locate set loc_number 1 if {$time_format=="Minutes"} { for {set loc_number 1} {$loc_number <= 16} {incr loc_number} { entry .locate.locate.minutes$loc_number -bg White -justify right -width 3 -textvariable sp_minutes_loc($loc_number) label .locate.locate.position$loc_number -text : entry .locate.locate.seconds$loc_number -bg White -justify right -width 5 -textvariable sp_seconds_loc($loc_number) button .locate.locate.button$loc_number -text $loc_number -command " set locate_name $loc_number move_to_locate" } grid .locate.locate.minutes1 .locate.locate.position1 .locate.locate.seconds1 .locate.locate.button1 -sticky ewns -padx 3 grid .locate.locate.minutes2 .locate.locate.position2 .locate.locate.seconds2 .locate.locate.button2 -sticky ewns -padx 3 grid .locate.locate.minutes3 .locate.locate.position3 .locate.locate.seconds3 .locate.locate.button3 -sticky ewns -padx 3 grid .locate.locate.minutes4 .locate.locate.position4 .locate.locate.seconds4 .locate.locate.button4 -sticky ewns -padx 3 grid .locate.locate.minutes5 .locate.locate.position5 .locate.locate.seconds5 .locate.locate.button5 -sticky ewns -padx 3 grid .locate.locate.minutes6 .locate.locate.position6 .locate.locate.seconds6 .locate.locate.button6 -sticky ewns -padx 3 grid .locate.locate.minutes7 .locate.locate.position7 .locate.locate.seconds7 .locate.locate.button7 -sticky ewns -padx 3 grid .locate.locate.minutes8 .locate.locate.position8 .locate.locate.seconds8 .locate.locate.button8 -sticky ewns -padx 3 grid .locate.locate.minutes9 .locate.locate.position9 .locate.locate.seconds9 .locate.locate.button9 -sticky ewns -padx 3 grid .locate.locate.minutes10 .locate.locate.position10 .locate.locate.seconds10 .locate.locate.button10 -sticky ewns -padx 3 grid .locate.locate.minutes11 .locate.locate.position11 .locate.locate.seconds11 .locate.locate.button11 -sticky ewns -padx 3 grid .locate.locate.minutes12 .locate.locate.position12 .locate.locate.seconds12 .locate.locate.button12 -sticky ewns -padx 3 grid .locate.locate.minutes13 .locate.locate.position13 .locate.locate.seconds13 .locate.locate.button13 -sticky ewns -padx 3 grid .locate.locate.minutes14 .locate.locate.position14 .locate.locate.seconds14 .locate.locate.button14 -sticky ewns -padx 3 grid .locate.locate.minutes15 .locate.locate.position15 .locate.locate.seconds15 .locate.locate.button15 -sticky ewns -padx 3 grid .locate.locate.minutes16 .locate.locate.position16 .locate.locate.seconds16 .locate.locate.button16 -sticky ewns -padx 3 frame .locate.punch label .locate.punch.in_text -text "Punch-in:" entry .locate.punch.in_minutes -bg White -justify right -width 2 -textvariable mfe(punch_in_minutes) label .locate.punch.in_sep -text : entry .locate.punch.in_seconds -bg White -justify right -width 5 -textvariable mfe(punch_in_seconds) label .locate.punch.out_text -text "Punch-Out:" entry .locate.punch.out_minutes -bg White -justify right -width 2 -textvariable mfe(punch_out_minutes) label .locate.punch.out_sep -text : entry .locate.punch.out_seconds -bg White -justify right -width 5 -textvariable mfe(punch_out_seconds) pack .locate.locate -fill both -expand yes grid .locate.punch.in_text .locate.punch.in_minutes .locate.punch.in_sep .locate.punch.in_seconds grid .locate.punch.out_text .locate.punch.out_minutes .locate.punch.out_sep .locate.punch.out_seconds pack .locate.punch -fill both -expand yes } else { for {set loc_number 1} {$loc_number <= 16} {incr loc_number} { entry .locate.locate.seconds$loc_number -bg White -justify right -width 7 -textvariable sp_seconds_loc($loc_number) button .locate.locate.button$loc_number -width 7 -text $loc_number -command " set locate_name $loc_number move_to_locate" } frame .locate.punch label .locate.punch.in_text -text "Punch-in:" entry .locate.punch.in_seconds -bg White -justify right -width 7 -textvariable mfe(punch_in_seconds) label .locate.punch.out_text -text "Punch-Out:" entry .locate.punch.out_seconds -bg White -justify right -width 7 -textvariable mfe(punch_out_seconds) grid .locate.locate.seconds1 .locate.locate.button1 -sticky ewns -padx 3 grid .locate.locate.seconds2 .locate.locate.button2 -sticky ewns -padx 3 grid .locate.locate.seconds3 .locate.locate.button3 -sticky ewns -padx 3 grid .locate.locate.seconds4 .locate.locate.button4 -sticky ewns -padx 3 grid .locate.locate.seconds5 .locate.locate.button5 -sticky ewns -padx 3 grid .locate.locate.seconds6 .locate.locate.button6 -sticky ewns -padx 3 grid .locate.locate.seconds7 .locate.locate.button7 -sticky ewns -padx 3 grid .locate.locate.seconds8 .locate.locate.button8 -sticky ewns -padx 3 grid .locate.locate.seconds9 .locate.locate.button9 -sticky ewns -padx 3 grid .locate.locate.seconds10 .locate.locate.button10 -sticky ewns -padx 3 grid .locate.locate.seconds11 .locate.locate.button11 -sticky ewns -padx 3 grid .locate.locate.seconds12 .locate.locate.button12 -sticky ewns -padx 3 grid .locate.locate.seconds13 .locate.locate.button13 -sticky ewns -padx 3 grid .locate.locate.seconds14 .locate.locate.button14 -sticky ewns -padx 3 grid .locate.locate.seconds15 .locate.locate.button15 -sticky ewns -padx 3 grid .locate.locate.seconds16 .locate.locate.button16 -sticky ewns -padx 3 pack .locate.locate -fill both -expand yes grid .locate.punch.in_text .locate.punch.in_seconds grid .locate.punch.out_text .locate.punch.out_seconds pack .locate.punch -fill both -expand yes } } 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 .mfe.up1.button configure -state disabled .mfe.up2.options configure -state disabled .mfe.up2.colors configure -state disabled .mfe.up2.time_format configure -state disabled .mfe.up2.metronome configure -state disabled .mfe.up2.addtrack configure -state disabled .mfe.up2.del_all_tracks configure -state disabled .mfe.up2.quit configure -state disabled .mfe.up2.about configure -state disabled .mfe.low.multich2 configure -state disabled .mfe.low.latcomp configure -state disabled .mfe.low.loc configure -state disabled .mfe.low.master configure -state disabled .mfe.low.play configure -state disabled .mfe.low.rew_to_begin configure -state disabled .mfe.low.rew_5 configure -state disabled .mfe.low.forw_5 configure -state disabled ladspa_loading_window 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" # puts "$exec_out2" } set exec_out3 [split $exec_out2 \n] set index [expr $eca_effects+1] for {set n 0} {$n <= [llength $exec_out3]} {incr n} { set srate 0 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)) 1 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 } if {[string match *srate* $current_line] == 1 } { regsub -all {\*srate} $current_line {} current_line set srate 1 } 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 } if {$srate==1} { set effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) [expr $effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))*44100] set effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) [expr $effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))*44100] } } } } } ladspa_loading_window set eca_effects [expr $index - 1] } proc solo_unsolo {} { global stop_command mfe track_num playhandle solo_tracks number_of_tracks w w2 if {$solo_tracks==0} { set solo_tracks 1 set mfe(prev_track_status$track_num) $mfe(track_status$track_num) if {$mfe(track_status$track_num)=="Mute"} { if {$stop_command==0} { puts $playhandle "c-select $track_num\nc-muting" } } for {set n 1} {$n <= $number_of_tracks} {incr n} { puts "4.4.2 $w.play$n configure -state disabled" $w.track$track_num.play configure -state disabled if {$n!=$track_num} { set mfe(prev_track_status$n) $mfe(track_status$n) if {$stop_command==0 && $mfe(track_status$n)=="Play"} { puts $playhandle "c-select $n\nc-muting" } set mfe(track_status$n) "Mute" } else { set mfe(track_status$n) "Play" } } } elseif {$solo_tracks==1 && $mfe(track_solo$track_num)=="No Solo"} { set solo_tracks 0 for {set n 1} {$n <= $number_of_tracks} {incr n} { $w.track$track_num.play configure -state normal if {$mfe(track_status$n)!=$mfe(prev_track_status$n)} { if {$stop_command==0} { puts $playhandle "c-select $n\nc-muting" } set mfe(track_status$n) $mfe(prev_track_status$n) } } } else { if {$mfe(track_solo$track_num)=="Solo"} { incr solo_tracks set mfe(track_status$track_num) "Play" } else { set solo_tracks [expr $solo_tracks-1] set mfe(track_status$track_num) "Mute" } if {$stop_command==0} { puts $playhandle "c-select $track_num\nc-muting" } } } proc unsolo_all {} { global stop_command mfe track_num playhandle solo_tracks number_of_tracks w if {$solo_tracks==0} {return} for {set n 1} {$n <= $number_of_tracks} {incr n} { $w.track$n.play configure -state normal if {$mfe(track_solo$n)=="Solo"} { if {$mfe(prev_track_status$n)=="Mute" && $stop_command==0} { puts $playhandle "c-select $n\nc-muting" } } else { if {$mfe(prev_track_status$n)=="Play" && $stop_command==0} { puts $playhandle "c-select $n\nc-muting" } } set mfe(track_status$n) $mfe(prev_track_status$n) set mfe(track_solo$n) "No Solo" # $w.play$n configure -state normal } set solo_tracks 0 } proc delete_current_track {} { global mfe track_num w unsolo_all set w2 "$w.track$track_num" set mfe(track_status$track_num) "Deleted" destroy $w2.number$track_num destroy $w2.delete$track_num destroy $w2.file$track_num destroy $w2.open$track_num destroy $w2.track_properties$track_num destroy $w2.dev_text$track_num destroy $w2.dev_entry$track_num destroy $w2.chn_text$track_num destroy $w2.chn_entry$track_num destroy $w2.solo$track_num destroy $w2.play$track_num destroy $w2.rec$track_num destroy $w2.effect$track_num destroy $w2.eca_tools$track_num destroy $w2.pan$track_num destroy $w2.slide$track_num destroy $w2 } proc add_track {} { global mfe number_of_tracks number_of_files mt_font n eca_effects effect_index effect_name mfe_temp w w2 track_num bgcolor3 mixdown edit_effect prev_loaded_file stop_command solo_tracks set bgcolor3 AntiqueWhite2 .mfe.up1.save configure -state normal .mfe.up1.saveas configure -state normal .mfe.up2.exportecs configure -state normal .mfe.up2.mixdown configure -state normal set number_of_tracks [expr $number_of_tracks-1] unsolo_all incr number_of_tracks set n $number_of_tracks if {$mfe(track_status$n)=="Deleted"} {return} set mfe(prev_track_status$n) "Play" set mfe(track_status$n) "Play" # 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_solo$n) "No Solo" # 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 *30]" if {$n < 10} {set number "0$n"} set w2 $w set w "$w.track$n" frame $w -width 780 -bd 2 -relief ridge entry $w.number -bg White -width 5 -textvariable mfe(track_name$n) button $w.delete -text "Del" -padx 1 -command " set track_num $n delete_current_track" entry $w.file -bg White -width 12 -textvariable mfe(file$n) button $w.open -font $mt_font -text ... -padx 1 -command " set track_num $n set types {{{Wav files} {*.wav}} {{mp3 files} {*.mp3}} {{raw files} {*.raw}} {{MIDI files} {*.mid}} {{MIDI files} {*.midi}} {{Modules files} {*.mod}} {{efw files} {*.efw}} {{all} {*}}} file_browser" button $w.track_properties -text "P" -relief raised -padx 1 -command " set track_num $n set mixdown 0 rec_properties" menubutton $w.dev_text -text "D" -relief raised -padx 1 -menu $w.dev_text.type menu $w.dev_text.type -tearoff 0 $w.dev_text.type add radiobutton -label Default -variable mfe(device$n) -value "Default" $w.dev_text.type add radiobutton -label alsa,hw:0 -variable mfe(device$n) -value "alsa,hw:0" $w.dev_text.type add radiobutton -label alsa,hw:1 -variable mfe(device$n) -value "alsa,hw:1" $w.dev_text.type add radiobutton -label alsa,hw:2 -variable mfe(device$n) -value "alsa,hw:2" $w.dev_text.type add radiobutton -label alsa,hw:3 -variable mfe(device$n) -value "alsa,hw:3" $w.dev_text.type add radiobutton -label alsaplugin,0 -variable mfe(device$n) -value "alsaplugin,0" $w.dev_text.type add radiobutton -label alsaplugin,1 -variable mfe(device$n) -value "alsaplugin,1" $w.dev_text.type add radiobutton -label alsaplugin,2 -variable mfe(device$n) -value "alsaplugin,2" $w.dev_text.type add radiobutton -label alsaplugin,3 -variable mfe(device$n) -value "alsaplugin,3" $w.dev_text.type add radiobutton -label jack,system -variable mfe(device$n) -value "jack,system" $w.dev_text.type add radiobutton -label /dev/dsp -variable mfe(device$n) -value "/dev/dsp" $w.dev_text.type add radiobutton -label /dev/dsp1 -variable mfe(device$n) -value "/dev/dsp1" $w.dev_text.type add radiobutton -label /dev/dsp2 -variable mfe(device$n) -value "/dev/dsp2" $w.dev_text.type add radiobutton -label /dev/dsp3 -variable mfe(device$n) -value "/dev/dsp3" entry $w.dev_entry -width 8 -bg White -textvariable mfe(device$n) menubutton $w.chn_text -text "Ch" -relief raised -padx 1 -menu $w.chn_text.type menu $w.chn_text.type -tearoff 0 $w.chn_text.type add radiobutton -label n/a -variable mfe(chn$n) -value "n/a" $w.chn_text.type add radiobutton -label 1 -variable mfe(chn$n) -value "1" $w.chn_text.type add radiobutton -label 2 -variable mfe(chn$n) -value "2" $w.chn_text.type add radiobutton -label 3 -variable mfe(chn$n) -value "3" $w.chn_text.type add radiobutton -label 4 -variable mfe(chn$n) -value "4" $w.chn_text.type add radiobutton -label 5 -variable mfe(chn$n) -value "5" $w.chn_text.type add radiobutton -label 6 -variable mfe(chn$n) -value "6" $w.chn_text.type add radiobutton -label 7 -variable mfe(chn$n) -value "7" $w.chn_text.type add radiobutton -label 8 -variable mfe(chn$n) -value "8" $w.chn_text.type add radiobutton -label 9 -variable mfe(chn$n) -value "9" $w.chn_text.type add radiobutton -label 10 -variable mfe(chn$n) -value "10" $w.chn_text.type add radiobutton -label 11 -variable mfe(chn$n) -value "11" $w.chn_text.type add radiobutton -label 12 -variable mfe(chn$n) -value "12" $w.chn_text.type add radiobutton -label 13 -variable mfe(chn$n) -value "13" $w.chn_text.type add radiobutton -label 14 -variable mfe(chn$n) -value "14" $w.chn_text.type add radiobutton -label 15 -variable mfe(chn$n) -value "15" $w.chn_text.type add radiobutton -label 16 -variable mfe(chn$n) -value "16" entry $w.chn_entry -width 3 -bg White -textvariable mfe(chn$n) checkbutton $w.solo -width 1 -text "S" -variable mfe(track_solo$n) -onvalue "Solo" -offvalue "No Solo" -padx 0 -command " set track_num $n solo_unsolo" checkbutton $w.play -width 1 -text "M" -variable mfe(track_status$n) -onvalue "Mute" -offvalue "Play" -padx 0 -command " set track_num $n mute_unmute" checkbutton $w.rec -width 1 -text "R" -variable mfe(track_rec_status$n) -onvalue "Yes" -offvalue "No" -padx 0 menubutton $w.effect -text "E" -relief raised -padx 1 -menu $w.effect.type menu $w.effect.type -tearoff 0 for {set en 1} {$en <= 8} {incr en} { if {$prev_loaded_file == 0} { set mfe(effect$en$n) "None" set mfe_temp(effect$en$n) "None" set mfe(effect_attached$en$n) "Bypassed" set effect_fg "gray40" } else { set mfe_temp(effect$en$n) $mfe(effect$en$n) if {$mfe(effect_attached$en$n)=="Bypassed"} { set effect_fg "gray40" } else { set effect_fg "black" } } if {$mfe(effect$en$n)=="None"} { set effect_name_current "Effect $en" set effect_fg2 "gray40" } else { set effect_name_current $effect_name($mfe_temp(effect$en$n)) set effect_fg2 "black" } $w.effect.type add cascade -label $effect_name_current -foreground $effect_fg -menu $w.effect.type.$en menu $w.effect.type.$en -tearoff 0 $w.effect.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.type.$en add command -label "Edit Current Effect" -foreground $effect_fg2 -command " set effect_num $en set track_num $n set edit_effect 1 effect" $w.effect.type.$en add command -label "Connect/Bypass" -foreground $effect_fg2 -command " set effect_num $en set track_num $n effect_bypass " $w.effect.type.$en add command -label "Delete Effect" -foreground $effect_fg2 -state disabled -command " set effect_num $en set track_num $n delete_effect" # $w.effect$n.type entryconfigure $en -foreground $effect_fg if { $mfe(effect$en$n) != "None"} { $w.effect.type.$en entryconfigure 1 -foreground black $w.effect.type.$en entryconfigure 2 -foreground black $w.effect.type.$en entryconfigure 3 -foreground black -state normal .mfe.tracks.canvas.f.track$n.effect.type.$en entryconfigure 0 -label $mfe(effect_attached$en$n) -state disabled -foreground gray40 } } set prev_loaded_file 0 menubutton $w.eca_tools -text "T" -relief raised -padx 1 -menu $w.eca_tools.type menu $w.eca_tools.type -tearoff 0 $w.eca_tools.type add command -label "Normalize" -command " set track_num $n ecanormalize" $w.eca_tools.type add command -label "DC Offset Fix" -command " set track_num $n ecafixdc" $w.eca_tools.type add command -label "Wave Edit" -command " set track_num $n wave_edit" $w.eca_tools.type add command -label "Wave File Delete" -command " set track_num $n wave_file_delete" scale $w.pan -resolution 1 -from 0 -to 100 -length 130 -width 2 -orient horizontal -showvalue true -variable mfe(pan$n) -command " set track_num $n set mfe(param_number) 1 set mfe(param_value) pan$n change_pan_on_the_fly set mfe(pan$n)" scale $w.slide -resolution 1 -from 0 -to 400 -length 200 -width 2 -orient horizontal -showvalue true -variable mfe(volume$n) -command " set track_num $n set mfe(param_number) 1 set mfe(param_value) volume$n change_volume_on_the_fly set mfe(volume$n)" pack $w.number -expand 1 -fill both -side left pack $w.delete -fill y -side left pack $w.file -expand 1 -fill both -side left pack $w.open -side left -fill y pack $w.track_properties -fill y -side left pack $w.dev_text -fill y -side left pack $w.dev_entry -fill y -side left pack $w.chn_text -fill y -side left pack $w.chn_entry -fill y -side left pack $w.solo -fill y -side left pack $w.play -fill y -side left pack $w.rec -fill y -side left pack $w.effect -fill y -side left pack $w.eca_tools -fill y -side left pack $w.pan -expand yes -fill both -side left pack $w.slide -expand yes -fill both -side left pack $w -expand yes -fill both -side top # pack $w.button -fill both -expand 1 -side left # pack $w -fill both -expand 1 -side top set w $w2 } proc effect {} { global w mfe mfe_temp mfe_temp2 effect_num effect_number 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) set w2 $w set w "$w.track$track_num" if {$effect_label=="pn:metronome"} { set mfe(track_status$track_num) "Play" set mfe(track_rec_status$track_num) "No" if {$mfe(file$track_num)=="" || $mfe(file$track_num)=="(Wave File)"} {set mfe(file$track_num) "null"} } if { $mfe_temp(effect$effect_num$track_num) == "None"} { set mfe(effect$effect_num$track_num) $mfe_temp(effect$effect_num$track_num) $w.effect.type.$effect_num entryconfigure 1 -foreground gray40 $w.effect.type.$effect_num entryconfigure 2 -foreground gray40 $w.effect.type.$effect_num entryconfigure 3 -foreground gray40 set w $w2 return } else { $w.effect.type.$effect_num entryconfigure 1 -foreground black $w.effect.type.$effect_num entryconfigure 2 -foreground black $w.effect.type.$effect_num entryconfigure 3 -foreground black -state normal } set effect_label $mfe_temp(effect$effect_num$track_num) set effect_menu_order [expr $effect_num-1] $w.effect.type entryconfigure $effect_menu_order -menu $w.effect.type.$effect_num -label $effect_name($mfe_temp(effect$effect_num$track_num)) set w $w2 toplevel .effect$effect_num$track_num wm title .effect$effect_num$track_num "$mfe(track_name$track_num) --- Effect: $effect_name($mfe_temp(effect$effect_num$track_num)) Window" message .effect$effect_num$track_num.out -width 600 -text "Track: $mfe(track_name$track_num) --- Effect:$effect_num ----------------- $effect_name($mfe_temp(effect$effect_num$track_num))" pack .effect$effect_num$track_num.out -expand yes -fill both 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 label .effect$effect_num$track_num.$n.param_name$n -width 30 -text "$effect_param_name($effect_label$n): " -justify left 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 pack .effect$effect_num$track_num.$n.param_value$n -side left scale .effect$effect_num$track_num.$n.param$n -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 effect_number $effect_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 -expand 1 -fill x -side right # grid .effect$effect_num$track_num.$n.param_name$n .effect$effect_num$track_num.$n.param_value$n .effect$effect_num$track_num.$n.param$n -sticky ewns pack .effect$effect_num$track_num.$n -expand 1 -fill x -side top } frame .effect$effect_num$track_num.buttons -bd 6 button .effect$effect_num$track_num.buttons.close -text Close -command " set effect2 $effect_num set track $track_num close_effect " button .effect$effect_num$track_num.buttons.preview -text " Preview " -height 0 -command { if {$stop_command == 1} { set stop_command 0 set preview 1 set effect2 "$effect_num" set track "$track_num" preview} } button .effect$effect_num$track_num.buttons.full_preview -text " Full Preview " -height 0 -command { if {$stop_command == 1} { set stop_command 0 set preview 2 set track "$track_num" preview } } button .effect$effect_num$track_num.buttons.stop -text " Stop " -height 0 -command { if {$stop_command == 0} { set play_text "Play" stop } } button .effect$effect_num$track_num.buttons.info -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 -expand 1 -fill x pack .effect$effect_num$track_num.buttons.full_preview -side left -expand 1 -fill x pack .effect$effect_num$track_num.buttons.stop -side left -expand 1 -fill x pack .effect$effect_num$track_num.buttons.close -side left -expand 1 -fill x pack .effect$effect_num$track_num.buttons.info -side left -expand 1 -fill x pack .effect$effect_num$track_num.buttons -in .effect$effect_num$track_num -side top -expand 1 -fill both } proc delete_effect {} { global mfe mfe_temp track_num effect_num w set mfe(effect$effect_num$track_num) "None" set mfe_temp(effect$effect_num$track_num) "None" set effect_order [expr $effect_num-1] .mfe.tracks.canvas.f.track$track_num.effect.type entryconfigure $effect_order -label "Effect $effect_num" -foreground gray40 .mfe.tracks.canvas.f.track$track_num.effect.type.$effect_num entryconfigure 0 -label "Add a New Effect" -state normal -foreground black .mfe.tracks.canvas.f.track$track_num.effect.type.$effect_num entryconfigure 3 -state disabled set mfe(effect_attached$effect_num$track_num) "Connected" if {[winfo exists .effect$effect_num$track_num] != 0} {destroy .effect$effect_num$track_num} effect_bypass #effect } proc effect_bypass {} { global mfe mfe_temp track_num effect_num playhandle stop_command effect_param w if {$mfe(effect$effect_num$track_num)=="None" && $mfe_temp(effect$effect_num$track_num)=="None"} {return} set effect_order_number [expr $effect_num-1] 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.track$track_num.effect.type entryconfigure $effect_order_number -foreground gray40 # $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 <= 8} {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.track$track_num.effect.type entryconfigure $effect_order_number -foreground black # $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 set w2 $w set w "$w.track$track_num" set effect_order_number [expr $effect_num-1] if {$mfe(effect_attached$effect_num$track_num)=="Connected"} { set mfe(effect_attached$effect_num$track_num) "Bypassed" $w.effect.type entryconfigure $effect_order_number -foreground gray40 $w.effect.type.$effect_num entryconfigure 0 -label "Bypassed" -state disabled } else { set mfe(effect_attached$effect_num$track_num) "Connected" $w.effect.type.$effect_num entryconfigure 0 -label "Connected" -state disabled $w.effect.type entryconfigure $effect_order_number -foreground black } set w $w2 } 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 mfe(file$track_num) [tk_getOpenFile -initialdir $mfe(directory) -filetypes $types] if {$mfe(file$track_num) != "" && $mfe(file$track_num) != "(Wave File)"} { set mfe(track_status$track_num) "Play" } } } 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 {[winfo exists .wave_file_delete] != 0} {destroy .wave_file_delete} toplevel .wave_file_delete wm title .wave_file_delete "Wave File Delete Warning!" message .wave_file_delete.out -width 300 -text "Are you sure you want to delete\nfile Track $track_num" button .wave_file_delete.button1 -text Cancel -command {destroy .wave_file_delete} button .wave_file_delete.button2 -text Ok -command { if {[file exists $mfe(file$track_num)]==1} { file delete $mfe(file$track_num) } destroy .wave_file_delete messages [format "File $mfe(file$track_num) DELETED!"] } pack .wave_file_delete.out pack .wave_file_delete.button1 -padx 30 -side left pack .wave_file_delete.button2 -padx 30 } proc move_to_locate {} { global sp_minutes sp_seconds sp_seconds2 locate_name sp_minutes_loc sp_seconds_loc playhandle stop_command time_format start_time start_time2 if {$stop_command==0} { if {$time_format=="Minutes"} { set target_time [expr $sp_minutes_loc($locate_name)*60+$sp_seconds_loc($locate_name)] } else { set target_time $sp_seconds_loc($locate_name) } set sp_minutes $sp_minutes_loc($locate_name) set sp_seconds $sp_seconds_loc($locate_name) set sp_seconds2 $sp_seconds_loc($locate_name) puts $playhandle "setpos $target_time" set start_time2 [clock clicks -milliseconds] tick } else { set sp_minutes $sp_minutes_loc($locate_name) set sp_seconds $sp_seconds_loc($locate_name) display_position } } proc tick {} { global stop_command start_time start_time2 sp_seconds sp_seconds2 sp_minutes time_format mfe punch play_text fw_text rew_text rewbeg_text if {$stop_command==1} {return} after 50 tick set elapsedMS [expr {[clock clicks -milliseconds] - $start_time2} - 250] set sp_seconds [expr $sp_seconds2 + {double($elapsedMS)/1000}] if {$sp_seconds >= 60 && $time_format=="Minutes"} { set start_time2 [expr $start_time2+60000+$sp_seconds2] set sp_minutes [expr $sp_minutes+1] } display_position # if {$stop_command==3} { # set stop_command 1 # set stop_command 3 } } 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 effect_number playhandle preview # set mfe(controller_number) [expr $mfe(controller_number)+$mfe(volume_position$track_num)] if {$stop_command==0} { if {$preview==1} { puts $playhandle "c-select $track_num\ncop-select $mfe(effect_position1$track_num) \ncopp-select $mfe(param_number)\ncopp-set $mfe($mfe(param_value))" } else { puts $playhandle "c-select $track_num\ncop-select $mfe(effect_position$effect_number$track_num) \ncopp-select $mfe(param_number)\ncopp-set $mfe($mfe(param_value))" } } } proc change_volume_on_the_fly {} { global stop_command mfe track_num effect_number playhandle if {$stop_command==0} { puts $playhandle "c-select $track_num\ncop-select $mfe(volume_position$track_num) \ncopp-select $mfe(param_number)\ncopp-set [expr $mfe(volume$track_num)*$mfe(master)/100]" } } proc change_pan_on_the_fly {} { global stop_command mfe track_num effect_number playhandle if {$stop_command==0} { puts $playhandle "c-select $track_num\ncop-select [expr $mfe(volume_position$track_num)+1] \ncopp-select $mfe(param_number)\ncopp-set $mfe(pan$track_num)" } } proc stop {} { global stop_command playhandle punch punch_y punch_t sp_minutes2 sp_seconds2 number_of_tracks mfe start_time w puts $playhandle "s\n" puts $playhandle "dump-position \n" puts $playhandle "q\n" set stop_command 1 fileevent $playhandle writable read_stop_position for {set n 1} {$n <= $number_of_tracks} {incr n} { if {$mfe(track_status$n)!= "Deleted"} { $w.track$n.rec configure -state normal $w.track$n.delete configure -state normal $w.track$n.file configure -state normal $w.track$n.open configure -state normal $w.track$n.track_properties configure -state normal $w.track$n.dev_text configure -state normal $w.track$n.dev_entry configure -state normal $w.track$n.chn_text configure -state normal $w.track$n.chn_entry configure -state normal $w.track$n.eca_tools configure -state normal } } .mfe.up1.button configure -state normal .mfe.up2.mixdown configure -state normal # .mfe.up2.metronome configure -state normal .mfe.up2.addtrack configure -state normal .mfe.up2.del_all_tracks configure -state normal .mfe.up2.quit configure -state normal .mfe.low.multich2 configure -state normal # .mfe.low.rew_to_begin configure -state normal # .mfe.low.rew_5 configure -state normal # .mfe.low.forw_5 configure -state normal if {$punch==2} { set punch 0 for {set n 1} {$n <= $number_of_tracks} {incr n} { if {$mfe(track_rec_status$n)=="Yes"} { if {$mfe(latency)!=0} { set latency_seconds [expr $mfe(latency)/1000] set cmd2 "exec [list ecasound -i:$mfe(temp_file$n) -y:$latency_seconds -o:$mfe(temp_file$n)]" catch {eval $cmd2} exec_out } set cmd "exec [list ecasound -i:$mfe(temp_file2$n) $punch_t -o:$mfe(file$n) $punch_y $punch_t ]" catch {eval $cmd} exec_out set total_punch_out [expr $mfe(punch_out_minutes)*60+$mfe(punch_out_seconds)] set total_punch_in [expr $mfe(punch_in_minutes)*60+$mfe(punch_in_seconds)] if {$start_time>$total_punch_in} { if {$start_time<$total_punch_out} { set real_proc_time [expr $start_time-$total_punch_in] set punch_t "-t:$real_proc_time" } set cmd2 "exec [list ecasound -i:$mfe(temp_file$n) $punch_y $punch_t -o:$mfe(file$n) $punch_y $punch_t ]" catch {eval $cmd2} exec_out } } file delete $mfe(temp_file$n) file delete $mfe(temp_file2$n) } } else { if {$mfe(latency)!=0} { set latency_seconds [expr $mfe(latency)/1000] for {set n 1} {$n <= $number_of_tracks} {incr n} { if {$mfe(track_rec_status$n)=="Yes"} { set cmd2 "exec [list ecasound -i:$mfe(file$n) -y:$latency_seconds -o:$mfe(file$n)]" catch {eval $cmd2} exec_out } } } } } proc read_stop_position {} { global sp_seconds sp_minutes sp_seconds2 sp_minutes2 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 set sp_minutes2 [expr int($start_time/60)] set sp_seconds2 [expr $start_time-60*$sp_minutes] 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 messages {msg} { if {[winfo exists .msg] != 0} {destroy .msg} toplevel .msg wm title .msg "Tkeca Message" message .msg.out -width 300 -text $msg button .msg.button -text Ok -command {destroy .msg} pack .msg.out -expand 1 -fill x pack .msg.button } proc ecanormalize {} { global mfe track_num if {[winfo exists .normalize] != 0} {destroy .normalize} toplevel .normalize wm title .normalize "Normalize Warning!" 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 messages [format "File $mfe(file$track_num) NORMALIZED!"] } 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 wm title .fixdc "Fix DC Warning!" 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 # messages [format "DC Offset fixed in file\n$mfe(file$track_num)"] } 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 unsolo_all 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 real_number_of_tracks $number_of_tracks for {set n 1} {$n <= $number_of_tracks} {incr n} { if {$mfe(track_status$n)=="Deleted"} { set real_number_of_tracks [expr $real_number_of_tracks-1] } } set file_to_save [open "$mfe(openfile0)" w] puts $file_to_save "This file was created by tkeca.tcl version 4.4.2" puts $file_to_save "$real_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(master)" puts $file_to_save "$mfe(multichannel)" puts $file_to_save "$mfe(rec_prop_bits)" puts $file_to_save "$mfe(rec_prop_channels)" puts $file_to_save "$mfe(rec_prop_srate)" puts $file_to_save "$mfe(rec_prop_interl)" puts $file_to_save "$mfe(latency)" puts $file_to_save "$mfe(mixdown_normalize)" puts $file_to_save "$mfe(mixdown_normalize_amp)" puts $file_to_save "$mfe(mixdown_normalize_lev)" for {set n 0} {$n <= $number_of_tracks} {incr n} { if {$mfe(track_status$n)!="Deleted"} { 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(track_name$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 <= 8} {incr en} { puts $file_to_save "$mfe(effect$en$n)" puts $file_to_save "$mfe(effect_attached$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 prev_loaded_file if {$number_of_tracks > 0} { del_all_tracks } 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 set number_of_effects 8 set tkeca_version $temp_file($line_number) if {$temp_file($line_number)!="This file was created by tkeca.tcl version 4.0.0" && $temp_file($line_number)!="This file was created by tkeca.tcl version 4.4.0" && $temp_file($line_number)!="This file was created by tkeca.tcl version 4.4.2" && $temp_file($line_number)!="This file was created by tkeca.tcl version 4.2.0"} { set number_of_effects 4 if {$temp_file($line_number)!="This file was created by tkeca.tcl version 3.2.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} { # set w "$w2.track$number_of_tracks" # destroy $w.number$number_of_tracks # destroy $w.delete$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.solo$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 # } # set w $w2 # 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 if {$tkeca_version == "This file was created by tkeca.tcl version 4.4.0" || $tkeca_version == "This file was created by tkeca.tcl version 4.4.2"} { set mfe(master) $temp_file($line_number) incr line_number } set mfe(multichannel) $temp_file($line_number) incr line_number if {$tkeca_version == "This file was created by tkeca.tcl version 4.4.2"} { set mfe(rec_prop_bits) $temp_file($line_number) incr line_number set mfe(rec_prop_channels) $temp_file($line_number) incr line_number set mfe(rec_prop_srate) $temp_file($line_number) incr line_number set mfe(rec_prop_interl) $temp_file($line_number) incr line_number set mfe(latency) $temp_file($line_number) incr line_number set $mfe(mixdown_normalize) $temp_file($line_number) incr line_number set $mfe(mixdown_normalize_amp) $temp_file($line_number) incr line_number set $mfe(mixdown_normalize_lev) $temp_file($line_number) incr line_number set l 0 } else { 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 set l 1 } for {set n $l} {$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 if {$number_of_effects==4} { set mfe(track_name$n) "Track $n" } else { set mfe(track_name$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 <= $number_of_effects} {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 {$number_of_effects==4} { if {$mfe(effect$en$n)!="None"} { set mfe(effect_attached$en$n) "Connected" } else { set mfe(effect_attached$en$n) "Bypassed" } } else { set mfe(effect_attached$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 } } } if {$number_of_effects==4} { set mfe(effect5$n) "None" set mfe(effect_attached5$n) "Bypassed" set mfe(effect6$n) "None" set mfe(effect_attached6$n) "Bypassed" set mfe(effect7$n) "None" set mfe(effect_attached7$n) "Bypassed" set mfe(effect8$n) "None" set mfe(effect_attached8$n) "Bypassed" } set mfe(volume$n) $temp_file($line_number) incr line_number set mfe(pan$n) $temp_file($line_number) incr line_number set line_number2 $line_number set prev_loaded_file 1 set number_of_tracks3 $number_of_tracks set number_of_tracks $n set n2 $n # puts "En open_file w:$w y w2:$w2" if {$n!=0} { add_track } set number_of_tracks $number_of_tracks3 set n $n2 set line_number $line_number2 } 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) display_position } proc track_data_reset {} { global mfe track_num set mfe(rec_prop_bits$track_num) "Signed 16Bit Little Endian" set mfe(rec_prop_channels$track_num) "1" set mfe(rec_prop_srate$track_num) "44100" set mfe(rec_prop_interl$track_num) "i" set mfe(file$track_num) "(Wave File)" set mfe(device$track_num) "(I / O Dev.)" set mfe(chn$track_num) "n/a" set mfe(track_solo$track_num) "No Solo" set mfe(track_status$track_num) "Play" set mfe(track_rec_status$track_num) "No" for {set en 1} {$en <= 8} {incr en} { set mfe(effect$en$track_num) "None" set mfe_temp(effect$en$track_num) "None" set mfe(effect_attached$en$track_num) "Bypassed" } set mfe(volume$track_num) 100 set mfe(pan$track_num) 50 } proc del_all_tracks {} { global number_of_tracks w w2 mfe sp_minutes_loc sp_seconds_loc play_command sp_minutes sp_seconds exit_yes save_as track_num unsolo_all .mfe.up1.save configure -state disabled .mfe.up1.saveas configure -state disabled .mfe.up2.exportecs configure -state disabled .mfe.up2.mixdown configure -state disabled set w2 $w for {set number_of_tracks1 1} {$number_of_tracks1 <= $number_of_tracks} {incr number_of_tracks1} { set w "$w2.track$number_of_tracks1" set mfe(track_status$number_of_tracks1) "Deleted" destroy $w.number$number_of_tracks1 destroy $w.delete$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.solo$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 destroy $w # set track_num $number_of_tracks1 # track_data_reset } set w $w2 set number_of_tracks 0 set mfe(openfile0) "" set play_command "play" set mfe(multichannel) 0 set mfe(master) 100 set mfe(rec_prop_bits) "Signed 16Bit Little Endian" set mfe(rec_prop_channels) "2" set mfe(rec_prop_srate) "44100" set mfe(rec_prop_interl) "i" set mfe(rec_prop_bits0) "Signed 16Bit Little Endian" set mfe(rec_prop_channels0) "2" set mfe(rec_prop_srate0) "44100" set mfe(rec_prop_interl0) "i" set mfe(rec_prop_bitsMD) "Signed 16Bit Little Endian" set mfe(rec_prop_channelsMD) "2" set mfe(rec_prop_srateMD) "44100" set mfe(rec_prop_interlMD) "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 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: lpgasparotto@gmail.com"]} 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] set real_number_of_tracks $number_of_tracks for {set n 1} {$n <= $number_of_tracks} {incr n} { if {$mfe(track_status$n)=="Deleted"} { set real_number_of_tracks [expr $real_number_of_tracks-1] } } while {[gets $file_to_open input_line] != -1 } { set temp_file($line_number) $input_line incr line_number } set line_number 1 if {$real_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(master) != $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_bits) != $temp_file($line_number)} {set saved 0} incr line_number if {$mfe(rec_prop_channels) != $temp_file($line_number)} {set saved 0} incr line_number if {$mfe(rec_prop_srate) != $temp_file($line_number)} {set saved 0} incr line_number if {$mfe(rec_prop_interl) != $temp_file($line_number)} {set saved 0} incr line_number if {$mfe(latency) != $temp_file($line_number)} {set saved 0} incr line_number if {$mfe(mixdown_normalize) != $temp_file($line_number)} {set saved 0} incr line_number if {$mfe(mixdown_normalize_amp) != $temp_file($line_number)} {set saved 0} incr line_number if {$mfe(mixdown_normalize_lev) != $temp_file($line_number)} {set saved 0} incr line_number for {set n 0} {$n <= $number_of_tracks && $saved >0} {incr n} { if {$mfe(track_status$n)!="Deleted"} { 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(track_name$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 <= 8 && $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_attached$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} { if {[winfo exists .save_alert] != 0} {destroy .save_alert} toplevel .save_alert wm title .save_alert "Lose Changes Warning!" 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} { del_all_tracks 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 del_all_tracks 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} { del_all_tracks file_browser } } } 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 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 stop_command if {$stop_command==0} { messages [format "Please, press the STOP button\nbefore add new effects to Track $track_num"] return } if {[winfo exists .effect$effect_num$track_num] != 0} {destroy .effect$effect_num$track_num} toplevel .effect$effect_num$track_num wm title .effect$effect_num$track_num "Effect List" frame .effect$effect_num$track_num.list listbox .effect$effect_num$track_num.list.list -width 60 -height 25 -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 both -expand yes 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 -fill both -expand yes .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 button .effect$effect_num$track_num.buttons.button1 -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) set mfe(effect_attached$effect_num$track_num) "Bypassed" effect_bypass effect} button .effect$effect_num$track_num.buttons.button2 -text Cancel -command { destroy .effect$effect_num$track_num return} pack .effect$effect_num$track_num.buttons.button1 -padx 5 -side left -fill x -expand yes pack .effect$effect_num$track_num.buttons.button2 -padx 5 -side left -fill x -expand yes pack .effect$effect_num$track_num.buttons -in .effect$effect_num$track_num -pady 5 -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 -width 600 wm title .options "Ecasound Global Settings" frame .options.up message .options.up.out -width 540 -text "Global Settings" pack .options.up.out -side top pack .options.up -pady 2 #-expand 1 -fill x -side top frame .options.med canvas .options.med.canvas -width 520 -height 300 -yscrollcommand [list .options.med.yscroll set] set w2 [frame .options.med.canvas.f -bd 0] .options.med.canvas create window 0 0 -anchor nw -window $w2 -tags options scrollbar .options.med.yscroll -orient vertical -width 8 -command [list .options.med.canvas yview] 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] regsub -all {( )} $option_parameter($line_number) {} option_parameter($line_number) set option_value($line_number) [lindex $current_parameter 1] regsub -all {( )} $option_value($line_number) {} option_value($line_number) if {[string match *adspa* $option_parameter($line_number)] == 1} { set ladspa_path $option_value($line_number) } .options.med.canvas config -scrollregion "0 0 0 [expr $line_number *23]" # set w3 $w2.$line_number # frame $w3 label $w2.param$line_number -width 30 -font $mt_font -text $option_parameter($line_number) -anchor w # $w2 create label -width 30 -font $mt_font -text $option_parameter($line_number) -anchor w # entry $w2.value$line_number -bg white -width 400 -textvariable option_value($line_number) # $w2 create entry -bg white -width 50 -textvariable option_value($line_number) entry $w2.value$line_number -bg white -width 50 -textvariable option_value($line_number) # pack $w2.param$line_number -side left # pack $w2.value$line_number -side left -expand 1 -fill x grid $w2.param$line_number $w2.value$line_number -sticky news grid columnconfig $w2 1 -weight 10 # pack $w2 -expand 1 -fill x -side top incr line_number } # for {set row_number 0} {$row_number < $line_number} {incr row_number} { # } #pack .options.med.canvas.f -expand 1 -fill x -side top pack .options.med.canvas -expand 1 -fill both -side left pack .options.med.yscroll -fill y -expand 1 -side top pack .options.med -fill both -expand 1 -side top frame .options.low button .options.low.ok -text Ok -command {save_options} button .options.low.cancel -text Cancel -command {destroy .options} pack .options.low.ok -padx 5 -fill x -expand 1 -side left pack .options.low.cancel -padx 5 -fill x -expand 1 -side left pack .options.low -pady 5 -fill x -expand 1 -side left bind .options {.options.med.canvas itemconfigure options -width [expr [winfo width .options]-15]} close $rc_infile } proc save_options {} { global option_value option_parameter line_number wave_editor ladspa_path eca_effects ecasoundrc default_audio_io 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} { set wave_editor $option_value($row_number) } if {[string match *ladsp* $option_parameter($row_number)] == 1 && $ladspa_path != $option_value($row_number)} { set ladspa_path $option_value($row_number) set eca_effects 69 ladspa } if {[string match *efault-outpu* $option_parameter($row_number)] == 1 && $default_audio_io != $option_value($row_number)} { set default_audio_io $option_value($row_number) } } close $rc_infile destroy .options } proc rec_properties {} { global mfe track_num bgcolor mixdown mt_font time_format 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} if {$mixdown==0} { set w .rec_properties$track_num toplevel $w label $w.text -text "$mfe(track_name$track_num) Recording Properties" wm title .rec_properties$track_num "$mfe(track_name$track_num)" set current_track_bits $mfe(rec_prop_bits$track_num) set current_track_chn $mfe(rec_prop_channels$track_num) set current_track_srate $mfe(rec_prop_srate$track_num) set current_track_interl $mfe(rec_prop_interl$track_num) } elseif {$mixdown==1} { set w .rec_properties$track_num toplevel $w label $w.text -text "Mixdown Properties" wm title $w "Mixdown Properties Window" if {[winfo exists .locate] != 0} {destroy} if {$time_format=="Seconds"} {time_format} set current_track_bits $mfe(rec_prop_bitsMD) set current_track_chn $mfe(rec_prop_channelsMD) set current_track_srate $mfe(rec_prop_srateMD) set current_track_interl $mfe(rec_prop_interlMD) set mixdown_begin_min $mfe(mixdown_begin_min) set mixdown_begin_sec $mfe(mixdown_begin_sec) set mixdown_end_min $mfe(mixdown_end_min) set mixdown_end_sec $mfe(mixdown_end_sec) set mixdown_normalize $mfe(mixdown_normalize) set mixdown_normalize_amp $mfe(mixdown_normalize_amp) set mixdown_normalize_lev $mfe(mixdown_normalize_lev) } else { set w .rec_properties toplevel $w label $w.text -text "Global Multichannel Properties" wm title $w "Multichannel" set track_num "" set current_track_bits $mfe(rec_prop_bits) set current_track_chn $mfe(rec_prop_channels) set current_track_srate $mfe(rec_prop_srate) set current_track_interl $mfe(rec_prop_interl) } #set bits_list {u8 s16_le s16_be s24_le s24_be s32_le s32_be f32_le f32_be} set bits_list {"Unsigned 8Bit" "Signed 16Bit Little Endian" "Signed 16Bit Big Endian" "Signed 24Bit Little Endian" "Signed 24Bit Big Endian" "Signed 32Bit Little Endian" "Signed 32Bit Big Endian" "F. Point 32Bit Little Endian" "F. Point 32Bit Big Endian"} frame $w.bits # label $w.bits.l -text "Bits:" -justify left labelframe $w.bits.title -text "Depth" # ttk::combobox $w.bits.title.box -textvariable mfe(rec_prop_bits$track_num) -state readonly -values $bits_list spinbox $w.bits.title.box -textvariable mfe(rec_prop_bits$track_num) -state readonly -values $bits_list # frame $w.bitsa -bg $bgcolor # frame $w.bitsb -bg $bgcolor # frame $w.bitsc -bg $bgcolor # frame $w.bitsd -bg $bgcolor # frame $w.bitse -bg $bgcolor # radiobutton $w.bitsa.1 -font $mt_font -bg $bgcolor -text "Unsigned 8 bits" -variable mfe(rec_prop_bits$track_num) -value "u8" -justify left # radiobutton $w.bitsb.2 -font $mt_font -bg $bgcolor -text "Signed 16 bits little endian" -variable mfe(rec_prop_bits$track_num) -value "s16_le" -justify left # radiobutton $w.bitsb.3 -font $mt_font -bg $bgcolor -text "Signed 16 bits big endian" -variable mfe(rec_prop_bits$track_num) -value "s16_be" -justify left # radiobutton $w.bitsc.4 -font $mt_font -bg $bgcolor -text "Signed 24 bits little endian" -variable mfe(rec_prop_bits$track_num) -value "s24_le" -justify left # radiobutton $w.bitsc.5 -font $mt_font -bg $bgcolor -text "Signed 24 bits big endian" -variable mfe(rec_prop_bits$track_num) -value "s24_be" -justify left # radiobutton $w.bitsd.6 -font $mt_font -bg $bgcolor -text "Signed 32 bits little endian" -variable mfe(rec_prop_bits$track_num) -value "s32_le" -justify left # radiobutton $w.bitsd.7 -font $mt_font -bg $bgcolor -text "Signed 32 bits big endian" -variable mfe(rec_prop_bits$track_num) -value "s32_be" -justify left # radiobutton $w.bitse.8 -font $mt_font -bg $bgcolor -text "Floating point 32 bits little endian" -variable mfe(rec_prop_bits$track_num) -value "f32_le" -justify left # radiobutton $w.bitse.9 -font $mt_font -bg $bgcolor -text "Floating point 32 bits big endian" -variable mfe(rec_prop_bits$track_num) -value "f32_be" -justify left if {$mixdown!=1} { set channels_list {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} frame $w.channels labelframe $w.channels.title -text "Channels" # ttk::combobox $w.channels.title.box -textvariable mfe(rec_prop_channels$track_num) -state readonly -values $channels_list spinbox $w.channels.title.box -textvariable mfe(rec_prop_channels$track_num) -state readonly -values $channels_list # frame $w.channels # label $w.channels.l -text "Channels:" -justify left # frame $w.channels1 -bg $bgcolor # frame $w.channels2 -bg $bgcolor # radiobutton $w.channels1.1 -font $mt_font -bg $bgcolor -text "1" -variable mfe(rec_prop_channels$track_num) -value "1" # radiobutton $w.channels1.2 -font $mt_font -bg $bgcolor -text "2" -variable mfe(rec_prop_channels$track_num) -value "2" # radiobutton $w.channels1.3 -font $mt_font -bg $bgcolor -text "3" -variable mfe(rec_prop_channels$track_num) -value "3" # radiobutton $w.channels1.4 -font $mt_font -bg $bgcolor -text "4" -variable mfe(rec_prop_channels$track_num) -value "4" # radiobutton $w.channels1.5 -font $mt_font -bg $bgcolor -text "5" -variable mfe(rec_prop_channels$track_num) -value "5" # radiobutton $w.channels1.6 -font $mt_font -bg $bgcolor -text "6" -variable mfe(rec_prop_channels$track_num) -value "6" # radiobutton $w.channels1.7 -font $mt_font -bg $bgcolor -text "7" -variable mfe(rec_prop_channels$track_num) -value "7" # radiobutton $w.channels1.8 -font $mt_font -bg $bgcolor -text "8" -variable mfe(rec_prop_channels$track_num) -value "8" # radiobutton $w.channels2.9 -font $mt_font -bg $bgcolor -text "9" -variable mfe(rec_prop_channels$track_num) -value "9" # radiobutton $w.channels2.10 -font $mt_font -bg $bgcolor -text "10" -variable mfe(rec_prop_channels$track_num) -value "10" # radiobutton $w.channels2.11 -font $mt_font -bg $bgcolor -text "11" -variable mfe(rec_prop_channels$track_num) -value "11" # radiobutton $w.channels2.12 -font $mt_font -bg $bgcolor -text "12" -variable mfe(rec_prop_channels$track_num) -value "12" # radiobutton $w.channels2.13 -font $mt_font -bg $bgcolor -text "13" -variable mfe(rec_prop_channels$track_num) -value "13" # radiobutton $w.channels2.14 -font $mt_font -bg $bgcolor -text "14" -variable mfe(rec_prop_channels$track_num) -value "14" # radiobutton $w.channels2.15 -font $mt_font -bg $bgcolor -text "15" -variable mfe(rec_prop_channels$track_num) -value "15" # radiobutton $w.channels2.16 -font $mt_font -bg $bgcolor -text "16" -variable mfe(rec_prop_channels$track_num) -value "16" } set srates_list {8000 11025 16000 22050 32000 44100 48000 88200 96000 192000} frame $w.srate labelframe $w.srate.title -text "Sample Rate (KHz)" # ttk::combobox $w.srate.title.box -textvariable mfe(rec_prop_srate$track_num) -state readonly -values $srates_list spinbox $w.srate.title.box -textvariable mfe(rec_prop_srate$track_num) -state readonly -values $srates_list # frame $w.srate # label $w.srate.l -text "Sample Rate:" -justify left # frame $w.srate1 -bg $bgcolor # frame $w.srate2 -bg $bgcolor # radiobutton $w.srate1.1 -font $mt_font -bg $bgcolor -text "8000" -variable mfe(rec_prop_srate$track_num) -value "8000" # radiobutton $w.srate1.2 -font $mt_font -bg $bgcolor -text "11025" -variable mfe(rec_prop_srate$track_num) -value "11025" # radiobutton $w.srate1.3 -font $mt_font -bg $bgcolor -text "16000" -variable mfe(rec_prop_srate$track_num) -value "16000" # radiobutton $w.srate1.4 -font $mt_font -bg $bgcolor -text "22050" -variable mfe(rec_prop_srate$track_num) -value "22050" # radiobutton $w.srate1.5 -font $mt_font -bg $bgcolor -text "32000" -variable mfe(rec_prop_srate$track_num) -value "32000" # radiobutton $w.srate1.6 -font $mt_font -bg $bgcolor -text "44100" -variable mfe(rec_prop_srate$track_num) -value "44100" # radiobutton $w.srate1.7 -font $mt_font -bg $bgcolor -text "48000" -variable mfe(rec_prop_srate$track_num) -value "48000" # radiobutton $w.srate1.8 -font $mt_font -bg $bgcolor -text "96000" -variable mfe(rec_prop_srate$track_num) -value "96000" # set interl_list {i n} frame $w.interl labelframe $w.interl.title -text "Interleaved" # ttk::combobox $w.interl.title.box -textvariable mfe(rec_prop_interl$track_num) -state readonly -values $interl_list radiobutton $w.interl.title.box -text "Yes" -variable mfe(rec_prop_interl$track_num) -value "i" radiobutton $w.interl.title.box1 -text "No" -variable mfe(rec_prop_interl$track_num) -value "n" # frame $w.interleaved # label $w.interleaved.l -text "Interleaved:" -justify left # frame $w.interleaved1 -bg $bgcolor # radiobutton $w.interleaved1.1 -font $mt_font -bg $bgcolor -text "Interleaved " -variable mfe(rec_prop_interl$track_num) -value "i" # radiobutton $w.interleaved1.2 -font $mt_font -bg $bgcolor -text "Non Interleaved" -variable mfe(rec_prop_interl$track_num) -value "n" pack $w.text -side top pack $w.bits.title.box pack $w.bits.title pack $w.bits -padx 3 -pady 3 # pack $w.bits.l -expand yes -fill x -side top # pack $w.bits -expand yes -fill x -side top # pack $w.bitsa.1 # grid $w.bitsb.2 $w.bitsb.3 # grid $w.bitsc.4 $w.bitsc.5 # grid $w.bitsd.6 $w.bitsd.7 # grid $w.bitse.8 $w.bitse.9 # pack $w.bitsa # pack $w.bitsb # pack $w.bitsc # pack $w.bitsd # pack $w.bitse if {$mixdown!=1} { pack $w.channels.title.box pack $w.channels.title pack $w.channels -padx 3 -pady 3 # pack $w.channels.l -expand yes -fill x -side top # pack $w.channels -expand yes -fill x -side top # grid $w.channels1.1 $w.channels1.2 $w.channels1.3 $w.channels1.4 $w.channels1.5 $w.channels1.6 $w.channels1.7 $w.channels1.8 -sticky ewns # grid $w.channels2.9 $w.channels2.10 $w.channels2.11 $w.channels2.12 $w.channels2.13 $w.channels2.14 $w.channels2.15 $w.channels2.16 -sticky ewns # pack $w.channels1 # pack $w.channels2 } pack $w.srate.title.box pack $w.srate.title pack $w.srate -padx 3 -pady 3 # pack $w.srate.l -expand yes -fill x -side top # pack $w.srate -expand yes -fill x -side top # grid $w.srate1.1 $w.srate1.2 $w.srate1.3 $w.srate1.4 $w.srate1.5 $w.srate1.6 $w.srate1.7 $w.srate1.8 -sticky ewns # pack $w.srate1 #pack $w.interl.title.box #pack $w.interl.title.box1 grid $w.interl.title.box $w.interl.title.box1 pack $w.interl.title pack $w.interl -padx 3 -pady 3 # pack $w.interleaved.l -expand yes -fill x -side top # pack $w.interleaved -expand yes -fill x -side top # grid $w.interleaved1.1 $w.interleaved1.2 -sticky ewns # pack $w.interleaved1 if {$mixdown != 1} { button $w.close -text "Close" -command {if {$mixdown != 0} {destroy .rec_properties} else {destroy .rec_properties$track_num}} pack $w.close -expand yes -fill x -side top set mfe(rec_prop_bits$track_num) $current_track_bits set mfe(rec_prop_channels$track_num) $current_track_chn set mfe(rec_prop_srate$track_num) $current_track_srate set mfe(rec_prop_interl$track_num) $current_track_interl } else { frame $w.pr_time labelframe $w.pr_time.l -text "Processing Time:" #frame $w.pr_time.l label $w.pr_time.l.1 -text "Start Position: " entry $w.pr_time.l.2 -bg White -justify right -width 3 -textvariable mfe(mixdown_begin_min) label $w.pr_time.l.3 -text : entry $w.pr_time.l.4 -bg White -justify right -width 5 -textvariable mfe(mixdown_begin_sec) label $w.pr_time.l.5 -text "End Position: " entry $w.pr_time.l.6 -bg White -justify right -width 3 -textvariable mfe(mixdown_end_min) label $w.pr_time.l.7 -text : entry $w.pr_time.l.8 -bg White -justify right -width 5 -textvariable mfe(mixdown_end_sec) #grid $w.pr_time.l grid $w.pr_time.l.1 $w.pr_time.l.2 $w.pr_time.l.3 $w.pr_time.l.4 grid $w.pr_time.l.5 $w.pr_time.l.6 $w.pr_time.l.7 $w.pr_time.l.8 pack $w.pr_time.l pack $w.pr_time set disabled {Disabled "not available"} set normalize_list {Yes No} set normalize_amp_list {-12dBFS -11dBFS -10dBFS -9dBFS -8dBFS -7dBFS -6dBFS -5dBFS -4dBFS -3dBFS -2dBFS -1dBFS 0dBFS} set normalize_lev_list {-6dBFS -5dBFS -4dBFS -3dBFS -2dBFS -1dBFS 0dBFS} frame $w.normalize labelframe $w.normalize.title -text "Normalize: " radiobutton $w.normalize.title.1 -text "Yes" -variable mfe(mixdown_normalize) -value "Yes" -command { .rec_propertiesMD.normalize_amp.title.box configure -state readonly -textvariable mfe(mixdown_normalize_amp) .rec_propertiesMD.normalize_lev.title.box configure -state readonly -textvariable mfe(mixdown_normalize_lev) } radiobutton $w.normalize.title.2 -text "No" -variable mfe(mixdown_normalize) -value "No" -command { .rec_propertiesMD.normalize_amp.title.box configure -state disabled -textvariable disabled .rec_propertiesMD.normalize_lev.title.box configure -state disabled -textvariable disabled } #ttk::combobox $w.normalize.title.box -textvariable mfe(mixdown_normalize) -state readonly -values $normalize_list frame $w.normalize_amp labelframe $w.normalize_amp.title -text "Amplitude" # ttk::combobox $w.normalize_amp.title.box -textvariable mfe(mixdown_normalize_amp) -state readonly -values $normalize_amp_list spinbox $w.normalize_amp.title.box -textvariable mfe(mixdown_normalize_amp) -state readonly -values $normalize_amp_list frame $w.normalize_lev labelframe $w.normalize_lev.title -text "Level" # ttk::combobox $w.normalize_lev.title.box -textvariable mfe(mixdown_normalize_lev) -state readonly -values $normalize_lev_list spinbox $w.normalize_lev.title.box -textvariable mfe(mixdown_normalize_lev) -state readonly -values $normalize_lev_list # frame $w.normalize # label $w.normalize.l -text "Apply Normalize After Mixdown:" -justify left # frame $w.normalize1 -bg $bgcolor # radiobutton $w.normalize1.1 -font $mt_font -bg $bgcolor -text "Yes " -variable mfe(mixdown_normalize) -value "Yes" # radiobutton $w.normalize1.2 -font $mt_font -bg $bgcolor -text "No" -variable mfe(mixdown_normalize) -value "No" # pack $w.normalize.l # pack $w.normalize -expand yes -fill x -side top # grid $w.normalize1.1 $w.normalize1.2 -sticky ewns # pack $w.normalize1 #pack $w.normalize.title.box grid $w.normalize.title.1 $w.normalize.title.2 #pack $w.normalize.title.1 #pack $w.normalize.title.2 pack $w.normalize.title pack $w.normalize -padx 3 -pady 3 pack $w.normalize_amp.title.box pack $w.normalize_amp.title pack $w.normalize_amp -padx 3 -pady 3 pack $w.normalize_lev.title.box pack $w.normalize_lev.title pack $w.normalize_lev -padx 3 -pady 3 # frame $w.buttons set mixdown 5 if {$mfe(mixdown_normalize)=="Yes"} { .rec_propertiesMD.normalize_amp.title.box configure -state readonly -textvariable mfe(mixdown_normalize_amp) .rec_propertiesMD.normalize_lev.title.box configure -state readonly -textvariable mfe(mixdown_normalize_lev) } else { .rec_propertiesMD.normalize_amp.title.box configure -state disabled -textvariable disabled .rec_propertiesMD.normalize_lev.title.box configure -state disabled -textvariable disabled } button $w.close -justify right -text "Ok" -command { set mixdown 1 destroy .rec_propertiesMD } button $w.close2 -justify right -text "Cancel" -command { set mixdown 5 destroy .rec_propertiesMD return } # file_browser2 # set mixdown 4 # .mfe.up1.button configure -state disabled # .mfe.up2.mixdown configure -state disabled # .mfe.up2.addtrack configure -state disabled # .mfe.up2.del_all_tracks configure -state disabled # .mfe.up2.quit configure -state disabled # .mfe.low.multich2 configure -state disabled # .mfe.low.play configure -state disabled # .mfe.low.master configure -state disabled # .mfe.low.loc configure -state disabled # .mfe.low.rew_to_begin configure -state disabled # .mfe.low.rew_5 configure -state disabled # .mfe.low.forw_5 configure -state disabled # mixdown" #grid $w.buttons.close $w.buttons.close2 -sticky ewns pack $w.close -side left -expand yes -fill x -padx 2 -pady 2 pack $w.close2 -side left -expand yes -fill x -padx 2 -pady 2 set mfe(rec_prop_bitsMD) $current_track_bits set mfe(rec_prop_channelsMD) $current_track_chn set mfe(rec_prop_srateMD) $current_track_srate set mfe(rec_prop_interlMD) $current_track_interl set mfe(mixdown_begin_min) $mixdown_begin_min set mfe(mixdown_begin_sec) $mixdown_begin_sec set mfe(mixdown_end_min) $mixdown_end_min set mfe(mixdown_end_sec) $mixdown_end_sec set mfe(mixdown_normalize) $mixdown_normalize set mfe(mixdown_normalize_amp) $mixdown_normalize_amp set mfe(mixdown_normalize_lev) $mixdown_normalize_lev } } proc ladspa_loading_window {} { if {[winfo exists .ladspa_loading] != 0} { destroy .ladspa_loading .mfe.up1.button configure -state normal .mfe.up2.options configure -state normal .mfe.up2.colors configure -state normal .mfe.up2.time_format configure -state normal .mfe.up2.metronome configure -state normal .mfe.up2.addtrack configure -state normal .mfe.up2.del_all_tracks configure -state normal .mfe.up2.quit configure -state normal .mfe.up2.about configure -state normal .mfe.low.multich2 configure -state normal .mfe.low.latcomp configure -state normal .mfe.low.loc configure -state normal .mfe.low.master configure -state normal .mfe.low.play configure -state normal .mfe.low.rew_to_begin configure -state normal .mfe.low.rew_5 configure -state normal .mfe.low.forw_5 configure -state normal } else { toplevel .ladspa_loading message .ladspa_loading.out -width 350 -text "Please wait!\nTkeca is loading LADSPA plug-ins" pack .ladspa_loading.out -expand y -fill x wm title .ladspa_loading "LADSPA" tkwait visibility .ladspa_loading tkwait visibility .ladspa_loading.out } } proc time_format {} { global time_format bgcolor sp_minutes sp_seconds sp_seconds_loc sp_minutes_loc mfe set loc_number 1 if {[winfo exists .locate] != 0} { destroy .locate set locate_present 1 } else { set locate_present 0 } if {$time_format=="Minutes"} { set time_format "Seconds" set sp_seconds [expr $sp_seconds+$sp_minutes*60] set sp_minutes 0 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 .mfe.low.minutes configure -width 0 -text "" .mfe.low.position2 configure -width 0 -text "" .mfe.low.seconds configure -width 7 -text $sp_seconds 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] 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] .mfe.low.minutes configure -width 3 -text $sp_minutes .mfe.low.position2 configure -text : .mfe.low.seconds configure -width 5 -text $sp_seconds 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] } } if {$locate_present==1} {locate} } proc wave_file_ext {} { global mfe wf_ext n if {[string match *.wav $mfe(file$n)]==1} {set wf_ext ".wav"} if {[string match *.mp2 $mfe(file$n)]==1} {set wf_ext ".mp2"} if {[string match *.mp3 $mfe(file$n)]==1} {set wf_ext ".mp3"} if {[string match *.raw $mfe(file$n)]==1} {set wf_ext ".raw"} if {[string match *.au $mfe(file$n)]==1} {set wf_ext ".au"} if {[string match *.aif $mfe(file$n)]==1} {set wf_ext ".aif"} if {[string match *.aiff $mfe(file$n)]==1} {set wf_ext ".aiff"} if {[string match *.aifc $mfe(file$n)]==1} {set wf_ext ".aifc"} if {[string match *.snd $mfe(file$n)]==1} {set wf_ext ".snd"} if {[string match *.mid $mfe(file$n)]==1} {set wf_ext ".mid"} if {[string match *.midi $mfe(file$n)]==1} {set wf_ext ".midi"} if {[string match *.mod $mfe(file$n)]==1} {set wf_ext ".mod"} } 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 start_time2 sp_seconds2 punch wf_ext n punch_y punch_t default_audio_io w w2 solo_tracks preview missed_files if {$mfe(directory)==""} {set mfe(directory) "."} set missed_files "" set eca_string {} set eca_string_i {} set eca_string_o {} set track_count 0 set preview 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 metronome 0 set punch_sequence "" set punch 0 set punched 0 set start_time [expr $sp_minutes*60+$sp_seconds] # messages [format "Iniciando MIXDOWN"] if {$mfe(punch_in_minutes)!=0 || $mfe(punch_in_seconds)!=0 || $mfe(punch_out_minutes)!=0 || $mfe(punch_out_seconds)!=0} { set punch 1 set punch_in [expr $mfe(punch_in_minutes)*60+$mfe(punch_in_seconds)] if {$punch_in<$start_time} { set punch_in $start_time } set punch_out [expr $mfe(punch_out_minutes)*60+$mfe(punch_out_seconds)] if {$punch_out<$start_time} { set punch 3 # messages [format "Start Position Time is beyond\nthe Punch Out Position\n\nYou should:\n- Uncheck the REC checkboxes,\n- Change the Start Position or\n- Change the Punch Out position"] # return } set proc_time [expr $punch_out-$punch_in] set punch_y "-y:$punch_in" set punch_t "-t:$proc_time" } if {$mfe(track_status0)=="Play" && $mixdown!=1} { set l 0 } else { set l 1 } if {$mixdown!=0} { if {$mfe(rec_prop_bitsMD)=="Unsigned 8Bit"} {set bitsMD "u8"} if {$mfe(rec_prop_bitsMD)=="Signed 16Bit Little Endian"} {set bitsMD "s16_le"} if {$mfe(rec_prop_bitsMD)=="Signed 16Bit Big Endian"} {set bitsMD "s16_be"} if {$mfe(rec_prop_bitsMD)=="Signed 24Bit Little Endian"} {set bitsMD "s24_le"} if {$mfe(rec_prop_bitsMD)=="Signed 24Bit Big Endian"} {set bitsMD "s24_be"} if {$mfe(rec_prop_bitsMD)=="Signed 32Bit Little Endian"} {set bitsMD "s32_le"} if {$mfe(rec_prop_bitsMD)=="Signed 32Bit Big Endian"} {set bitsMD "s32_be"} if {$mfe(rec_prop_bitsMD)=="F. Point 32Bit Little Endian"} {set bitsMD "f32_le"} if {$mfe(rec_prop_bitsMD)=="F. Point 32Bit Big Endian"} {set bitsMD "f32_be"} } for {set n $l} {$n <= $number_of_tracks} {incr n} { if {$mfe(rec_prop_bits$n)=="Unsigned 8Bit"} {set bits "u8"} if {$mfe(rec_prop_bits$n)=="Signed 16Bit Little Endian"} {set bits "s16_le"} if {$mfe(rec_prop_bits$n)=="Signed 16Bit Big Endian"} {set bits "s16_be"} if {$mfe(rec_prop_bits$n)=="Signed 24Bit Little Endian"} {set bits "s24_le"} if {$mfe(rec_prop_bits$n)=="Signed 24Bit Big Endian"} {set bits "s24_be"} if {$mfe(rec_prop_bits$n)=="Signed 32Bit Little Endian"} {set bits "s32_le"} if {$mfe(rec_prop_bits$n)=="Signed 32Bit Big Endian"} {set bits "s32_be"} if {$mfe(rec_prop_bits$n)=="F. Point 32Bit Little Endian"} {set bits "f32_le"} if {$mfe(rec_prop_bits$n)=="F. Point 32Bit Big Endian"} {set bits "f32_be"} if {[file exists $mfe(file$n)] != 1 && $mfe(track_rec_status$n) == "No" && $mfe(file$n)!="null" && $mfe(track_status$n)!="Deleted"} { set missed_files "$missed_files$mfe(file$n)\n" incr n } else { if {$mixdown == 1 || $export_ecs == 1} { set skip_muted_tracks "Yes" } else { .mfe.up1.button configure -state disabled .mfe.up2.mixdown configure -state disabled # .mfe.up2.metronome configure -state disabled .mfe.up2.addtrack configure -state disabled .mfe.up2.del_all_tracks configure -state disabled .mfe.up2.quit configure -state disabled .mfe.low.multich2 configure -state disabled # .mfe.low.rew_to_begin configure -state disabled # .mfe.low.rew_5 configure -state disabled # .mfe.low.forw_5 configure -state disabled # set mfe(directory) "$w.rec$n" if {$n!=0 && $mfe(track_status$n)!="Deleted"} { $w2.track$n.rec configure -state disabled $w2.track$n.delete configure -state disabled $w2.track$n.file configure -state disabled $w2.track$n.open configure -state disabled $w2.track$n.track_properties configure -state disabled $w2.track$n.dev_text configure -state disabled $w2.track$n.dev_entry configure -state disabled $w2.track$n.chn_text configure -state disabled $w2.track$n.chn_entry configure -state disabled $w2.track$n.eca_tools configure -state disabled set skip_muted_tracks "No" # set quote "'" # set mfe(file_quoted$n) "$quote$mfe(file$n)$quote" } } if {$mfe(track_status$n)!="Mute" || $skip_muted_tracks!="Yes"} { set mfe(volume_position$n) 1 set mfe(pan_position$n) 2 if {$punch==3 && $mfe(track_rec_status$n)=="Yes"} { set mfe(track_rec_status$n) "No" set punch 4 } 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 } } #[string length $mfe(file$n)] > 3 if {$mfe(track_status$n)!="Deleted" && $mfe(file$n)!="(Wave File)"} { if {$mfe(track_rec_status$n)=="No"} { if {$punched==1} { set mfe(track_rec_status$n) "Yes" set punched 0 } # set mfe(file$n) "[list $mfe(file$n)]" # set eca_string "$eca_string-a:$n -i:\"$mfe(file$n)\"" # set eca_string "$eca_string-a:$n -i:'$mfe(file$n)'" # este es el que funciona # set eca_string "$eca_string-a:$n -i:[list $mfe(file$n)]" if {$export_ecs == 1} { if {$n > 1} { lappend eca_string "\n-a:$n" # set eca_string "$eca_string\n-a:$n " } else { lappend eca_string "-a:$n" # set eca_string "$eca_string-a:$n " } lappend eca_string "-i:\"$mfe(file$n)\"" # set eca_string "$eca_string-i:$mfe(file_quoted$n)" } else { lappend eca_string "-a:$n" # set eca_string "$eca_string-a:$n " lappend eca_string "-i:$mfe(file$n)" # set eca_string "$eca_string-i:$mfe(file_quoted$n) " } if {$mfe(rec_prop_channels$n)==1} { if {$mfe(chn$n)!= "n/a" && $mfe(multichannel)==1} { lappend eca_string "-erc:1,$mfe(chn$n)" # set eca_string "$eca_string-erc:1,$mfe(chn$n) " } else { lappend eca_string "-erc:1,2" # set eca_string "$eca_string-erc:1,2 " } set mfe(volume_position$n) 2 set mfe(pan_position$n) 3 } lappend eca_string "-ea:[expr $mfe(volume$n)*$mfe(master)/100]" # set eca_string "$eca_string-ea:[expr $mfe(volume$n)*$mfe(master)/100]" lappend eca_string "-epp:$mfe(pan$n)" # set eca_string "$eca_string-epp:$mfe(pan$n) " set tracks_to_play 1 if {$mixdown!=1} { if {$mfe(device$n)=="Default" || $mfe(device$n)=="(I / O Dev.)"} { set current_audio_output $default_audio_io } else { set current_audio_output $mfe(device$n) } for {set nd 0} {$nd <= $number_of_devices} {incr nd} { if {$device($nd)==$current_audio_output} { 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) $current_audio_output } else { set added_device 0 } } set mfe(number_of_effects$n) 0 set effect_list "" for {set en 1} {$en <= 8} {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 effect_list "$effect_list-el:$current_effect," } elseif {[string match pn:* $mfe(effect$en$n)]==1} { set effect_list "$effect_list-$mfe(effect$en$n)," } else { set effect_list "$effect_list-$mfe(effect$en$n):" } for {set par 1} {$par <= $effect_param($mfe(effect$en$n)) } {incr par} { if {$par>1} {set effect_list "$effect_list,"} set effect_list "$effect_list$mfe(effect_parameter$par$en$n)" } lappend eca_string "$effect_list" # set eca_string "$eca_string$effect_list " set effect_list "" } } # set eca_string "$eca_string $punch_sequence" if {$mixdown == 1} { if {$mfe(mixdown_begin_min)!=0 || $mfe(mixdown_begin_sec)!=0 || $mfe(mixdown_end_min)!=0 || $mfe(mixdown_end_sec)!=0} { set mixdown_start [expr $mfe(mixdown_begin_sec)+($mfe(mixdown_begin_min)*60)] set mixdown_end [expr $mfe(mixdown_end_sec)+($mfe(mixdown_end_min)*60)] set mixdown_proc_time [expr $mixdown_end-$mixdown_start] lappend eca_string "-y:$mixdown_start" # set eca_string "$eca_string-y:$mixdown_start " if {$mixdown_proc_time>0} { lappend eca_string "-t:$mixdown_proc_time" # set eca_string "$eca_string-t:$mixdown_proc_time " } } # lappebd eca_string "\\" } # lappend eca_string "\n" } else { set tracks_to_rec 1 if {$punch==0} { for {set nd 0} {$nd <= $number_of_devices_i} {incr nd} { if {$mfe(device$n)=="Default" || $mfe(device$n)=="(I / O Dev.)"} { set current_audio_input $default_audio_io } else { set current_audio_input $mfe(device$n) } if {$device_i($nd)==$current_audio_input} { 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) $current_audio_input } else { set added_device_i 0 } # set eca_string "$eca_string-a:$n" if {$mfe(multichannel)==1} { if {$export_ecs == 1 && $n > 1} { lappend eca_string_o "\n-a:$n" # set eca_string_o "$eca_string_o\n-a:$n " } else { lappend eca_string_o "-a:$n" # set eca_string_o "$eca_string_o-a:$n " } lappend eca_string_o "-f:$bits,1ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n)" # set eca_string_o "$eca_string_o-f:$mfe(rec_prop_bits$n),1ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n) " lappend eca_string_o "-erc:$mfe(chn$n),1" lappend eca_string_o "-o:$mfe(file$n)" # set eca_string_o "$eca_string_o-erc:$mfe(chn$n),1 -o:$mfe(file$n) " } else { set mfe(rec_prop_channels$n) 2 if {$export_ecs == 1 && $n > 1} { lappend eca_string_o "\n-a:$n" # set eca_string_o "$eca_string_o\n-a:$n " } else { lappend eca_string_o "-a:$n" # set eca_string_o "$eca_string_o-a:$n " } lappend eca_string_o "-f:$bits,$mfe(rec_prop_channels$n)ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n)" lappend eca_string_o "-o:$mfe(file$n)" # set eca_string_o "$eca_string_o-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) " } # lappend eca_string_o "\n" } else { set punch 2 for {set nd 0} {$nd <= $number_of_devices_i} {incr nd} { if {$mfe(device$n)=="Default" || $mfe(device$n)=="(I / O Dev.)"} { set current_audio_input $default_audio_io } else { set current_audio_input $mfe(device$n) } if {$device_i($nd)==$current_audio_input} { set device_chains_i($nd) "$device_chains_i($nd),temp-$n" set added_device_i 1 } } if {$added_device_i==0} { incr number_of_devices_i set device_chains_i($number_of_devices_i) "temp-$n" set device_i($nd) $current_audio_input } else { set added_device_i 0 } # lappend eca_string_o "-a:temp-$n" wave_file_ext set mfe(temp_file$n) "temp-$n$wf_ext" if {$mfe(multichannel)==1} { lappend eca_string_o "-f:$bits,1ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n)" # set eca_string_o "$eca_string_o-f:$mfe(rec_prop_bits$n),1ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n) " lappend eca_string_o "-erc:$mfe(chn$n),1" # set eca_string_o "$eca_string_o-erc:$mfe(chn$n),1 " lappend eca_string_o "-o:$mfe(temp_file$n)" # set eca_string_o "$eca_string_o-o:$mfe(temp_file$n) " } else { set mfe(rec_prop_channels$n) 2 lappend eca_string_o "-f:$bits,$mfe(rec_prop_channels$n)ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n)" # set eca_string_o "$eca_string_o-f:$mfe(rec_prop_bits$n),$mfe(rec_prop_channels$n)ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n) " lappend eca_string_o "-o:$mfe(temp_file$n)" # set eca_string_o "$eca_string_o-o:$mfe(temp_file$n)" } set punched 1 set mfe(track_rec_status$n) "No" set n [expr $n-1] # lappend eca_string_o "\n" } } } if {$punch==4} { set mfe(track_rec_status$n) "Yes" set punch 3 } } } } if {$tracks_to_play == 1} { for {set n 1} {$n <= $number_of_devices} {incr n} { if {$export_ecs == 1} { lappend eca_string_o "\n-a:$device_chains($n)" # set eca_string_o "$eca_string_o\n-a:$device_chains($n) " } else { lappend eca_string_o "-a:$device_chains($n)" # set eca_string_o "$eca_string_o-a:$device_chains($n) " } lappend eca_string_o "-o:$device($n)" # set eca_string_o "$eca_string_o-o:$device($n) " } } if {$mixdown == 1} { set normalize "" set exec_out1 "" set exec_out3 "" lappend eca_string "-a:all" # set eca_string "$eca_string-a:all " lappend eca_string "-f:$bitsMD,$mfe(rec_prop_channelsMD)ch,$mfe(rec_prop_srateMD),$mfe(rec_prop_interlMD)" # set eca_string "$eca_string-f:$mfe(rec_prop_bitsMD),$mfe(rec_prop_channelsMD)ch,$mfe(rec_prop_srateMD),$mfe(rec_prop_interlMD) " lappend eca_string "-o:$mfe(openfileMD)" # set eca_string "$eca_string-o:$mfe(openfileMD) " if {$mfe(mixdown_normalize)=="Yes"} { set normalize "ecanormalize $mfe(openfileMD) -a $mfe(mixdown_normalize_amp) -l $mfe(mixdown_normalize_lev)" } set mixdown 0 set cmd1 "exec ecasound $eca_string" catch {eval $cmd1} exec_out1 puts $eca_string if {$mfe(mixdown_normalize)=="Yes"} { set cmd3 "exec $normalize" catch {eval $cmd3} exec_out3 } # set mixdown_out [open "mixdown.txt" w] # puts $mixdown_out "eca_string: $eca_string" # puts $mixdown_out "$exec_out1" # puts $mixdown_out "normalize: $normalize" # puts $mixdown_out "$exec_out3" # close $mixdown_out messages [format "MIXDOWN done"] destroy .rec_propertiesMD tkwait visibility .msg tkwait window .msg .mfe.up1.button configure -state normal .mfe.up2.options configure -state normal .mfe.up1.save configure -state normal .mfe.up1.saveas configure -state normal .mfe.up2.time_format configure -state normal .mfe.up2.metronome configure -state normal .mfe.up2.exportecs configure -state normal .mfe.up2.mixdown configure -state normal .mfe.up2.addtrack configure -state normal .mfe.up2.del_all_tracks configure -state normal .mfe.up2.quit configure -state normal .mfe.up2.about configure -state normal .mfe.low.multich2 configure -state normal .mfe.low.latcomp configure -state normal .mfe.low.loc configure -state normal .mfe.low.master configure -state normal .mfe.low.play configure -state normal # .mfe.low.rew_to_begin configure -state normal # .mfe.low.rew_5 configure -state normal # .mfe.low.forw_5 configure -state normal return } if {$tracks_to_rec == 1} { for {set n 1} {$n <= $number_of_devices_i} {incr n} { lappend eca_string_i "-a:$device_chains_i($n)" # set eca_string_i "$eca_string_i-a:$device_chains_i($n) " lappend eca_string_i "-i:$device_i($n)" # set eca_string_i "$eca_string_i-i:$device_i($n)\n" } } set eca_string "$eca_string_i $eca_string $eca_string_o" if {$mfe(multichannel)==1} { set eca_string "[list -f:$bits,$mfe(rec_prop_channels)ch,$mfe(rec_prop_srate),$mfe(rec_prop_interl)] $eca_string" # set eca_string "-f:$mfe(rec_prop_bits),$mfe(rec_prop_channels)ch,$mfe(rec_prop_srate),$mfe(rec_prop_interl)] $eca_string" } puts "Ecasound Chainsetup:\n$eca_string" puts "--------------------\n" if {$export_ecs == 1} { .mfe.up1.button configure -state normal .mfe.up2.mixdown configure -state normal # .mfe.up2.metronome configure -state normal .mfe.up2.addtrack configure -state normal .mfe.up2.del_all_tracks configure -state normal .mfe.up2.quit configure -state normal .mfe.low.multich2 configure -state normal # .mfe.low.rew_to_begin configure -state normal # .mfe.low.rew_5 configure -state normal # .mfe.low.forw_5 configure -state normal regsub -all {\{} $eca_string {} eca_string regsub -all {\}} $eca_string {} eca_string # regsub -all {(\-a)} $eca_string {\\n} eca_string return } if {$punch==2} { for {set n 1} {$n <= $number_of_tracks} {incr n} { if {$mfe(track_rec_status$n)=="Yes"} { wave_file_ext set mfe(temp_file2$n) "temp2-$n$wf_ext" set cmd "exec ecasound [list -i:$mfe(file$n) $punch_y $punch_t -o:$mfe(temp_file2$n) $punch_t ]" # set cmd "exec ecasound -i:$mfe(file_quoted$n) $punch_y $punch_t -o:$mfe(temp_file2$n) $punch_t" catch {eval $cmd} exec_out set cmd2 "exec ecasound [list -i:$mfe(file$n) $punch_y $punch_t -ea:0 -o:$mfe(file$n) $punch_y $punch_t ]" # set cmd2 "exec ecasound -i:$mfe(file_quoted$n) $punch_y $punch_t -ea:0 -o:$mfe(file_quoted$n) $punch_y $punch_t " catch {eval $cmd2} exec_out } } } # if {$mfe(metronome_enable)=="Yes"} { # set eca_string "$eca_string -a:metronome -i:null -o:$mfe(metronome_device) -pn:metronome,$mfe(metronome_beat)" # } set tkeca_log [open "~/tkeca.log" w] puts $tkeca_log "eca_string: $eca_string" puts $tkeca_log "eca_string_i: $eca_string_i" puts $tkeca_log "eca_string_o: $eca_string_o" puts $tkeca_log "tracks_to_rec:$tracks_to_rec" close $tkeca_log puts "eca_string: $eca_string" set playhandle [open "|ecasound -c $eca_string" w] puts "playhandle: $playhandle" puts "Ecasound Interactive Mode Commands:\n" puts "-----------------------------------\n" fconfigure $playhandle -buffering line -buffersize 8000 -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" } puts $playhandle "setpos $start_time\n" puts "setpos $start_time\n" puts $playhandle "t\n" puts "t\n" #remover esta linea despues set start_time2 [clock clicks -milliseconds] set sp_seconds2 $sp_seconds tick if {$tracks_to_play == 0 && $tracks_to_rec == 0} { # set stop_command 1 if {$missed_files != ""} { messages [format "No tracks to be played or recorded\nFile(s):\n$missed_files\nWas(Were) not found."] } else { messages [format "No tracks to be played or recorded"] } stop } if {$missed_files != ""} { messages [format "File(s):\n$missed_files\nWas(Were) not found."] } } proc preview {} { global mfe msg stop_command sp_minutes sp_seconds punch effect_param playhandle mixdown eca_string track effect effect2 preview default_audio_io number_of_tracks w play_text set start_time [expr $sp_minutes*60+$sp_seconds] set punch 0 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 && $mfe(file$n)!="(Wave File)"} { .mfe.up1.button configure -state disabled .mfe.up2.mixdown configure -state disabled # .mfe.up2.metronome configure -state disabled .mfe.up2.addtrack configure -state disabled .mfe.up2.del_all_tracks configure -state disabled .mfe.up2.quit configure -state disabled .mfe.low.multich2 configure -state disabled # .mfe.low.rew_to_begin configure -state disabled # .mfe.low.rew_5 configure -state disabled # .mfe.low.forw_5 configure -state disabled set play_text "stop" if {$mfe(track_status$n)=="Play"} { lappend eca_string "-a:$n" lappend eca_string "-i:$mfe(file$n)" if {$mfe(rec_prop_channels$n)==1} { if {$mfe(chn$n)!= "n/a" && $mfe(multichannel)==1} { lappend eca_string "-erc:1,$mfe(chn$n)" } else { lappend eca_string "-erc:1,2" } lappend eca_string "-ea:[expr $mfe(volume$n)*$mfe(master)/100]" lappend eca_string "-epp:$mfe(pan$n)" set mfe(volume_position$n) 2 set mfe(pan_position$n) 3 } set tracks_to_play 1 } if {$preview == 2} { set mfe(number_of_effects$track) 0 for {set en 1} {$en <= 8} {incr en} { set effect_list "" if {$mfe(effect$en$track) != "None" && $mfe(effect_attached$en$track) != "Bypassed"} { set mfe(effect_position$en$track) [expr $mfe(pan_position$track)+$mfe(number_of_effects$track)] if {[string match ladspa* $mfe(effect$en$track)]==1} { regsub ladspa_ $mfe(effect$en$track) {} current_effect set effect_list "$effect_list-el:$current_effect," } elseif {[string match pn:* $mfe(effect$en$track)]==1} { set effect_list "$effect_list-$mfe(effect$en$track)," } else { set effect_list "$effect_list-$mfe(effect$en$track):" } for {set par 1} {$par <= $effect_param($mfe(effect$en$track)) } {incr par} { if {$par>1} {set effect_list "$effect_list,"} set effect_list "$effect_list$mfe(effect_parameter$par$en$track)" } } lappend eca_string "$effect_list" } } else { set effect_list "" set mfe(effect_position1$track) [expr $mfe(pan_position$track)+1] set en $effect2 if {$mfe(effect$en$track) != "None" && $mfe(effect_attached$en$track) != "Bypassed"} { if {[string match ladspa* $mfe(effect$en$track)]==1} { regsub ladspa_ $mfe(effect$en$track) {} current_effect set effect_list "$effect_list-el:$current_effect," } elseif {[string match pn:* $mfe(effect$en$track)]==1} { set effect_list "$effect_list-$mfe(effect$en$track)," } else { set effect_list "$effect_list-$mfe(effect$en$track):" } for {set par 1} {$par <= $effect_param($mfe(effect$en$track)) } {incr par} { if {$par>1} {set effect_list "$effect_list,"} set effect_list "$effect_list$mfe(effect_parameter$par$en$track)" } lappend eca_string "$effect_list" } } } if {$tracks_to_play ==1} { for {set n1 1} {$n1 <= $number_of_tracks} {incr n1} { $w.track$n1.rec configure -state disabled } if {$mfe(device$track)=="Default" || $mfe(device$track)=="(I / O Dev.)"} { lappend eca_string "-a:$n" lappend eca_string "-o:$default_audio_io" } else { lappend eca_string "-a:$n" lappend eca_string "-o:$mfe(device$track)" } # set review_status [open track_view_status.txt2 w] # puts $review_status $eca_string # close $review_status set playhandle [open "|ecasound -c $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"] } } ############################### 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 effect_param 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 prev_loaded_file default_audio_io solo_tracks effect sp_seconds sp_minutes sp_seconds2 start_time2 bit_list #ttk::setTheme clam tk_setPalette seashell3 set bgcolor cyan3 frame .mfe frame .mfe.up1 -bd 6 frame .mfe.up2 -bd 6 #frame .mfe.header -bg $bgcolor frame .mfe.tracks frame .mfe.low -bd 6 set row 1 set number_of_tracks 0 set toprocess " " set solo_tracks 0 set mt_font [font create -family Helvetica -size 9 -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) "Signed 16Bit Little Endian" set mfe(rec_prop_channels0) "2" set mfe(rec_prop_srate0) "44100" set mfe(rec_prop_interl0) "i" set mfe(rec_prop_bits) "Signed 16Bit Little Endian" set mfe(rec_prop_channels) "2" set mfe(rec_prop_srate) "44100" set mfe(rec_prop_interl) "i" set mfe(rec_prop_bitsMD) "Signed 16Bit Little Endian" set mfe(rec_prop_channelsMD) "2" set mfe(rec_prop_srateMD) "44100" set mfe(rec_prop_interlMD) "i" set mfe(master) 100 set mfe(mixdown_begin_min) 0 set mfe(mixdown_begin_sec) 0 set mfe(mixdown_end_min) 0 set mfe(mixdown_end_sec) 0 set mfe(mixdown_normalize) "No" 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(mixdown_normalize) "No" set mfe(mixdown_normalize_amp) "-12dBFS" set mfe(mixdown_normalize_lev) "-6dBFS" 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 mfe(latency) 0 set mfe(track_status0) "Mute" set mfe(track_name0) "Metronome" set mfe(volume0) 100 set mfe(file0) null set mfe(pan0) 50 set mfe(device0) "Default" set mfe(chn0) 2 set mfe(track_solo0) "No Solo" set mfe(track_rec_status0) "No" set mfe(effect10) "pn:metronome" set mfe(effect_parameter110) 120 set mfe_temp(effect10) "None" set mfe(effect_attached10) "Connected" set mfe(effect_parameters10) 1 set n 0 for {set en 2} {$en <= 8} {incr en} { set mfe(effect$en$n) "None" set mfe_temp(effect$en$n) "None" set mfe(effect_attached$en$n) "Bypassed" } set mfe(metronome_beat) 100 set time_format "Minutes" label .mfe.up1.title -justify left -text "TKECA 4.4.3 - Tcl/Tk Frontend for Ecasound - 2003-2011 Luis Pablo Gasparotto " label .mfe.up1.text -text "Current Directory: " entry .mfe.up1.entry -bg White -textvariable mfe(directory) label .mfe.up1.text2 -text "Current File: " entry .mfe.up1.entry2 -state disabled -textvariable mfe(openfile0) button .mfe.up1.button -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 -text "Save file" -height 0 -command { set save_as 0 save_file} button .mfe.up1.saveas -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 -text "Export .ecs" -command {export_ecs} #button .mfe.up2.mixdown -activebackground LightPink -text "Mixdown" -command {mixdown} button .mfe.up2.mixdown -text "Mixdown" -command { .mfe.up1.button configure -state disabled .mfe.up1.save configure -state disabled .mfe.up1.saveas configure -state disabled .mfe.up2.options configure -state disabled .mfe.up2.colors configure -state disabled .mfe.up2.time_format configure -state disabled .mfe.up2.metronome configure -state disabled .mfe.up2.mixdown configure -state disabled .mfe.up2.exportecs configure -state disabled .mfe.up2.addtrack configure -state disabled .mfe.up2.del_all_tracks configure -state disabled .mfe.up2.quit configure -state disabled .mfe.up2.about configure -state disabled .mfe.low.multich2 configure -state disabled .mfe.low.loc configure -state disabled .mfe.low.latcomp configure -state disabled .mfe.low.master configure -state disabled .mfe.low.play configure -state disabled # .mfe.low.rew_to_begin configure -state disabled # .mfe.low.rew_5 configure -state disabled # .mfe.low.forw_5 configure -state disabled set types {{{Wav files} {*.wav}} {{mp3 files} {*.mp3}} {{raw files} {*.raw}} {{all} {*}}} 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 tkwait window .rec_propertiesMD destroy .rec_propertiesMD if {$mixdown==5} { messages [format "Mixdown aborted by user!"] .mfe.up1.button configure -state normal .mfe.up1.save configure -state normal .mfe.up1.saveas configure -state normal .mfe.up2.options configure -state normal .mfe.up2.colors configure -state normal .mfe.up2.time_format configure -state normal .mfe.up2.metronome configure -state normal .mfe.up2.mixdown configure -state normal .mfe.up2.exportecs configure -state normal .mfe.up2.addtrack configure -state normal .mfe.up2.del_all_tracks configure -state normal .mfe.up2.quit configure -state normal .mfe.up2.about configure -state normal .mfe.low.multich2 configure -state normal .mfe.low.loc configure -state normal .mfe.low.latcomp configure -state normal .mfe.low.master configure -state normal .mfe.low.play configure -state normal return } file_browser2 toplevel .rec_propertiesMD wm title .rec_propertiesMD "Processing..." message .rec_propertiesMD.out -width 350 -text "Please wait!\nProcessing Mixdown" pack .rec_propertiesMD.out -expand y -fill x tkwait visibility .rec_propertiesMD tkwait visibility .rec_propertiesMD.out play } button .mfe.up2.options -justify right -text Options -command {options} button .mfe.up2.colors -justify right -text Colors -command {colors} button .mfe.up2.time_format -justify right -text "Time Format" -command {time_format} button .mfe.up2.metronome -justify right -text "Metronome" -command {metronome} button .mfe.up2.addtrack -justify right -text "Add Track" -command { incr number_of_tracks set mfe(volume_position$number_of_tracks) 1 set mfe(pan_position$number_of_tracks) 2 set mfe(track_name$number_of_tracks) "Track $number_of_tracks" set track_num $number_of_tracks track_data_reset set mfe(track_name$number_of_tracks) "Track $number_of_tracks" set mfe(device$number_of_tracks) "(I / O Dev.)" add_track} button .mfe.up2.del_all_tracks -justify right -text "Close" -command { set save_as 0 set exit_yes 2 proc_exit } button .mfe.up2.quit -justify right -text Quit -command { set exit_yes 1 proc_exit } button .mfe.up2.about -justify right -text "About TKECA" -command { proc_about } #label .mfe.header.text1 -bg $bgcolor -justify left -text " Name " #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 "Solo 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 " 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.colors -side left -fill x -expand 1 pack .mfe.up2.time_format -side left -fill x -expand 1 pack .mfe.up2.metronome -side left -fill x -expand 1 pack .mfe.up2.addtrack -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 # grid .mfe.up2.exportecs .mfe.up2.mixdown .mfe.up2.options .mfe.up2.time_format .mfe.up2.addtrack .mfe.up2.del_all_tracks .mfe.up2.quit .mfe.up2.about -sticky ewns pack .mfe.up1 -side top -fill x pack .mfe.up2 -side top -fill x # pack .mfe.header.text1 -side left -fill x # pack .mfe.header.text2 -side left -fill x # pack .mfe.header.text3 -side left -fill x # pack .mfe.header.text4 -side left -fill x # pack .mfe.header.text5 -side left -fill x # pack .mfe.header.text6 -side left -fill x # pack .mfe.header.text7 -side left -fill x # pack .mfe.header.text8 -side left -fill x # pack .mfe.header -pady 2 # pack .mfe.tracks -expand true -fill both .mfe.up1.save configure -state disabled .mfe.up1.saveas configure -state disabled .mfe.up2.exportecs configure -state disabled .mfe.up2.mixdown configure -state disabled set bgcolor2 AntiqueWhite3 canvas .mfe.tracks.canvas -width 780 -height 400 -yscrollcommand [list .mfe.tracks.yscroll set] .mfe.tracks.canvas config -scrollregion "0 0 0 400" scrollbar .mfe.tracks.yscroll -orient vertical -width 8 -command [list .mfe.tracks.canvas yview] set w [frame .mfe.tracks.canvas.f -width 780 -height 400 -bd 0] .mfe.tracks.canvas create window 0 0 -anchor nw -window $w -tags tracks_window #pack .mfe.tracks.canvas.f -side left -fill x -expand true pack .mfe.tracks.canvas -side left -fill both -expand true pack .mfe.tracks.yscroll -side top -fill y -expand true pack .mfe.tracks -side top -fill both -expand true set stop_command 1 set sp_minutes 0 set sp_seconds 0 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 -text "Position:" label .mfe.low.minutes -width 3 -text 0 label .mfe.low.position2 -text : label .mfe.low.seconds -width 5 -text 0.00 label .mfe.low.spaces -text " " label .mfe.low.multich -text "Multichannel:" checkbutton .mfe.low.multich2 -width 1 -variable mfe(multichannel) -onvalue 1 -offvalue 0 -command " set mixdown 3 set track_num 0 rec_properties" button .mfe.low.latcomp -text "Latency Compensation" -height 0 -command { latency_comp } button .mfe.low.loc -text Loc -height 0 -command { locate } button .mfe.low.master -text Master -height 0 -command { master } button .mfe.low.play -textvariable play_text -height 0 -command { if {$stop_command == 1} { set stop_command 0 set play_text "Stop" play if {$tracks_to_play==0 && $tracks_to_rec==0} { set stop_command 1 set play_text "Play" } } else { set stop_command 1 set play_text "Play" stop } } button .mfe.low.rew_to_begin -textvariable rewbeg_text -height 0 -command { set sp_minutes 0 set sp_seconds 0 set sp_seconds2 0 if {$stop_command == 1} { display_position } else { puts $playhandle "setpos 0" set start_time2 [clock clicks -milliseconds] tick } } button .mfe.low.rew_5 -textvariable rew_text -height 0 -command { set starting_time [expr $sp_seconds+$sp_minutes*60] if {$starting_time > 5} { set starting_time [expr $starting_time-5] if {$time_format=="Minutes"} { set sp_minutes [expr $starting_time/60] set sp_minutes [expr int($sp_minutes)] set sp_seconds [expr $starting_time-$sp_minutes*60] } else { set sp_seconds $starting_time } } else { set sp_minutes 0 set sp_seconds 0 } if {$stop_command == 1} { display_position } else { set sp_seconds2 $starting_time puts $playhandle "setpos $starting_time" set start_time2 [clock clicks -milliseconds] tick } } button .mfe.low.forw_5 -textvariable fw_text -height 0 -command { set starting_time [expr $sp_seconds+$sp_minutes*60] set starting_time [expr $starting_time+5] if {$time_format=="Minutes"} { set sp_minutes [expr $starting_time/60] set sp_minutes [expr int($sp_minutes)] set sp_seconds [expr $starting_time-$sp_minutes*60] } else { set sp_seconds $starting_time } if {$stop_command == 1} { display_position } else { set sp_seconds2 $starting_time puts $playhandle "setpos $starting_time" set start_time2 [clock clicks -milliseconds] tick } } 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.latcomp -side left pack .mfe.low.loc -side left -fill x -expand true pack .mfe.low.master -side left -fill x -expand true pack .mfe.low.play -side left -fill x -expand true pack .mfe.low.rew_to_begin -side left -fill x -expand true pack .mfe.low.rew_5 -side left -fill x -expand true pack .mfe.low.forw_5 -side left -fill x pack .mfe.low -fill x -expand false pack .mfe -fill both -expand true bind .mfe {.mfe.tracks.canvas itemconfigure tracks_window -width [expr [winfo width .mfe]-15]} set ecasoundrc "~/.ecasoundrc" if {[file exists $ecasoundrc] != 1} { set ecasoundrc "~/.ecasound/ecasoundrc" if {[file exists $ecasoundrc] != 1} { set ecasoundrc "/usr/local/share/ecasound/ecasoundrc" if {[file exists $ecasoundrc] != 1} { set ecasoundrc "/usr/share/ecasound/ecasoundrc" if {[file exists $ecasoundrc] != 1} { puts "Tkeca is unable to find ecasoundrc file" exit } } } } set rc_infile [open $ecasoundrc r] tkwait visibility .mfe tkwait visibility .mfe.low #tkwait visibility .mfe.up1 #tkwait visibility .mfe.up2 wm title . "TKECA 4.4.3 - Tcl/Tk Frontend for Ecasound" set ladspa_path 0 set prev_loaded_file 0 set eca_effects 69 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(21) "pn:metronome|Metronome|1|BPM|30|300|120|1" set effect(22) "pn:dyn_compress_supersoft|Dynamic Compressor (Super Soft)|1|Gain %|0|1000|100|1" set effect(23) "pn:dyn_compress_soft|Dynamic Compressor (Soft)|1|Gain %|0|1000|100|1" set effect(24) "pn:dyn_compress_medium|Dynamic Compressor (Medium)|1|Gain %|0|1000|100|1" set effect(25) "pn:dyn_compress_hard|Dynamic Compressor (Hard)|1|Gain %|0|1000|100|1" set effect(26) "pn:dyn_compress_brutal|Dynamic Compressor (Brutal)|1|Gain %|0|1000|100|1" set effect(27) "pn:eq_template|10 Bands Equalizer|10|10hz|0|500|100|1|40hz|0|500|100|1|100hz|0|500|100|1|220hz|0|500|100|1|460hz|0|500|100|1|940hz|0|500|100|1|1900hz|0|500|100|1|3800hz|0|500|100|1|7620hz|0|500|100|1|15300hz|0|500|100|1" set effect(28) "pn:eq_template2|2 Bands Equalizer|2|1000hz|0|500|100|1|4000hz|0|500|100|1" set effect(29) "pn:f_lowp_sine|Resonator Lowpass Filter (Controlled by a sine wave)|0" set effect(30) "pn:f_lowp_sine2|Lowpass Filter (Controlled by a sine wave)|0" set effect(31) "pn:f_high_and_low|Parallel High amd Lowpass Filter|0" set effect(32) "pn:f_res_bandpass|Resonator Bandpass Filter|2|Freq|0|4500|1500|1|Width|1|2100|700|1" set effect(33) "pn:f_res_lowpass|Resonator Lowpass Filter|1|Freq|0|2000|800|1" set effect(34) "pn:f_lowpass|Simple Lowpass Filter|1|Freq|0|2000|300|1" set effect(35) "pn:f_bandpass|Bandpass Filter|2|Freq|0|4500|1500|1|Width|1|2100|700|1" set effect(36) "pn:f_rejectband|Band Reject Filter|0" set effect(37) "pn:f_highpass|Resonator Lowpass Filter|1|Freq|0|3000|1500|1" set effect(38) "pn:f_inverse_comb|Inverse Combined Filter|0" set effect(39) "pn:f_resonator|Resonator Filter|0" set effect(40) "pn:f_two_filters|Parallel Highpass and Lowpass Filter|2|Low Freq Gain %|0|1000|100|1|High Freq Gain %|0|1000|100|1" set effect(41) "pn:f_two_filters_pareq|Two Parallel Filters with Gain Controls|4|Low Freq|0|2000|200|1|Low Gain %|0|1000|100|1|High Freq|2000|4000|2000|1|High Gain %|0|1000|100|1" set effect(42) "pn:f_filtertest|Two Parallel Filters|2|Freq 1|0|2000|100|1|Freq 2|4000|10000|5000|1" set effect(43) "pn:gate_noisegate_1|Noise Gate|0" set effect(44) "pn:gate_noisegate_delanalog|Noise Gate for Analog Hum Removal|0" set effect(45) "pn:gate_crop|Crop Gate Example|0" set effect(46) "pn:gate_threshold|Threshold Gate Example|0" set effect(47) "pn:time_reverb1|Bathroom Reverb|0" set effect(48) "pn:time_reverb2|Plain Reverb|0" set effect(49) "pn:time_reverb3|Fake Stereo|0" set effect(50) "pn:time_reverb4|Reverb Combo|0" set effect(51) "pn:time_delay1|200ms Triple Delay|0" set effect(52) "pn:time_delay2|200ms Triple Multidelay|0" set effect(53) "pn:time_wicked_dub|Wicked Dub Mix|0" set effect(54) "pn:time_flanger1|Flanger Example|0" set effect(55) "pn:time_chorus1|Chorus Example|0" set effect(56) "pn:time_phaser1|Phaser Example|0" set effect(57) "pn:var_sweeping_pan|Sweeping Pan Envelope|1|Speed Hz|0.1|100|0.2|0.01" set effect(58) "pn:var_switching_pan|Alternates between Left and Right|1|Speed Hz|0.1|100|0.2|0.01" set effect(59) "pn:chipmunk_generator|Chipmunk Generator|0" set effect(60) "pn:var_parchid|Chipmunk Sweep|2|Pitch |0|500|100|1|Mod. Freq |0|1|0.5|0.01" set effect(61) "pn:var_paralmadness|Parallel Madness|3|Freq 1|0|1|0.2|0.01|Freq 2|0|1|0.2|0.01|Freq 3|0|1|0.2|0.01" # Contributed Arto Hamara set effect(62) "pn:var_stretched_tape|Stretched Tape|0" set effect(63) "pn:var_molten_tape|Molten Tape|0" set effect(64) "pn:var_dali|Dali|0" # Contributed S Macy set effect(65) "pn:var_aw|Classic Auto Wah|1|Speed|0.01|1|0.1|0.01" set effect(66) "pn:var_aw_custom|Classic Auto Wah with Controls|3|Low|0|1000|100|1|High|5000|10000|8000|1|Speed|0.01|1|0.1|0.01" set effect(67) "pn:var_aw_tri|Auto Wah Triangular Osc.|1|Speed|0.01|1|0.1|0.01" set effect(68) "pn:var_aw_tri_custom|Auto Wah Triangular Osc. with Control|1|Speed|0.01|1|0.1|0.01" set effect(69) "pn:var_aw_ksv|Volume Sensitive Wah|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" if {$n>=62 && $n<= 64} { set effect_maker($effect_index($n)) "Arto Hamara" set effect_copy($effect_index($n)) "(c) Unknown" } if {$n>=65 && $n<= 69} { set effect_maker($effect_index($n)) "S. Macy" set effect_copy($effect_index($n)) "(c) Unknown" } 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 } } 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 *efault-output* $current_parameter] == 1} { regsub {default-output =} $current_value {} current_value regsub { } $current_value {} current_value set default_audio_io $current_value } } if {[string match */* $ladspa_path] == 1 || [string match /* $ladspa_path] == 1} {ladspa} else {messages [format "No LADSPA Support"]}