1#!/bin/sh 2# the next line restarts using wish \ 3exec /usr/local/bin/wish8.6 "$0" "$@" > ~/tkeca.log 4 5# Tkeca is a Tcl/Tk frontend for Kai Vehmanen's Ecasound 6# Copyright (C) 2002-2009 Luis Pablo Gasparotto 7# 8# This program is free software; you can redistribute it and/or modify 9# it under the terms of the GNU General Public License as published by 10# the Free Software Foundation; either version 2 of the License, or 11# (at your option) any later version. 12# 13# This program is distributed in the hope that it will be useful, 14# but WITHOUT ANY WARRANTY; without even the implied warranty of 15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16# GNU General Public License for more details. 17# 18# You should have received a copy of the GNU General Public License 19# along with this program; if not, write to the Free Software 20# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21# 22# To contact me: lpgasparotto@gmail.com 23 24proc colors {} { 25 package require Tk 26 set wcolors .colors 27 catch {destroy $wcolors} 28 toplevel $wcolors 29 wm title $wcolors "Color palette" 30 wm iconname $wcolors "Listbox" 31 #positionWindow $wcolors 32 33## See Code / Dismiss buttons 34 #set btns [addSeeDismiss $wcolors.buttons $wcolors] 35 #pack $btns -side bottom -fill x 36 frame $wcolors.frame -borderwidth 10 37 pack $wcolors.frame -side top -expand yes -fill y 38 39 scrollbar $wcolors.frame.scroll -command "$wcolors.frame.list yview" 40 listbox $wcolors.frame.list -yscroll "$wcolors.frame.scroll set" \ 41 -width 20 -height 16 -setgrid 1 42 pack $wcolors.frame.list $wcolors.frame.scroll -side left -fill y -expand 1 43 44 bind $wcolors.frame.list <Double-1> { 45 tk_setPalette [selection get] 46 } 47 $wcolors.frame.list insert 0 gray60 gray70 gray80 gray85 gray90 gray95 \ 48 snow1 snow2 snow3 snow4 seashell1 seashell2 \ 49 seashell3 seashell4 AntiqueWhite1 AntiqueWhite2 AntiqueWhite3 \ 50 AntiqueWhite4 bisque1 bisque2 bisque3 bisque4 PeachPuff1 \ 51 PeachPuff2 PeachPuff3 PeachPuff4 NavajoWhite1 NavajoWhite2 \ 52 NavajoWhite3 NavajoWhite4 LemonChiffon1 LemonChiffon2 \ 53 LemonChiffon3 LemonChiffon4 cornsilk1 cornsilk2 cornsilk3 \ 54 cornsilk4 ivory1 ivory2 ivory3 ivory4 honeydew1 honeydew2 \ 55 honeydew3 honeydew4 LavenderBlush1 LavenderBlush2 \ 56 LavenderBlush3 LavenderBlush4 MistyRose1 MistyRose2 \ 57 MistyRose3 MistyRose4 azure1 azure2 azure3 azure4 \ 58 SlateBlue1 SlateBlue2 SlateBlue3 SlateBlue4 RoyalBlue1 \ 59 RoyalBlue2 RoyalBlue3 RoyalBlue4 blue1 blue2 blue3 blue4 \ 60 DodgerBlue1 DodgerBlue2 DodgerBlue3 DodgerBlue4 SteelBlue1 \ 61 SteelBlue2 SteelBlue3 SteelBlue4 DeepSkyBlue1 DeepSkyBlue2 \ 62 DeepSkyBlue3 DeepSkyBlue4 SkyBlue1 SkyBlue2 SkyBlue3 \ 63 SkyBlue4 LightSkyBlue1 LightSkyBlue2 LightSkyBlue3 \ 64 LightSkyBlue4 SlateGray1 SlateGray2 SlateGray3 SlateGray4 \ 65 LightSteelBlue1 LightSteelBlue2 LightSteelBlue3 \ 66 LightSteelBlue4 LightBlue1 LightBlue2 LightBlue3 \ 67 LightBlue4 LightCyan1 LightCyan2 LightCyan3 LightCyan4 \ 68 PaleTurquoise1 PaleTurquoise2 PaleTurquoise3 PaleTurquoise4 \ 69 CadetBlue1 CadetBlue2 CadetBlue3 CadetBlue4 turquoise1 \ 70 turquoise2 turquoise3 turquoise4 cyan1 cyan2 cyan3 cyan4 \ 71 DarkSlateGray1 DarkSlateGray2 DarkSlateGray3 \ 72 DarkSlateGray4 aquamarine1 aquamarine2 aquamarine3 \ 73 aquamarine4 DarkSeaGreen1 DarkSeaGreen2 DarkSeaGreen3 \ 74 DarkSeaGreen4 SeaGreen1 SeaGreen2 SeaGreen3 SeaGreen4 \ 75 PaleGreen1 PaleGreen2 PaleGreen3 PaleGreen4 SpringGreen1 \ 76 SpringGreen2 SpringGreen3 SpringGreen4 green1 green2 \ 77 green3 green4 chartreuse1 chartreuse2 chartreuse3 \ 78 chartreuse4 OliveDrab1 OliveDrab2 OliveDrab3 OliveDrab4 \ 79 DarkOliveGreen1 DarkOliveGreen2 DarkOliveGreen3 \ 80 DarkOliveGreen4 khaki1 khaki2 khaki3 khaki4 \ 81 LightGoldenrod1 LightGoldenrod2 LightGoldenrod3 \ 82 LightGoldenrod4 LightYellow1 LightYellow2 LightYellow3 \ 83 LightYellow4 yellow1 yellow2 yellow3 yellow4 gold1 gold2 \ 84 gold3 gold4 goldenrod1 goldenrod2 goldenrod3 goldenrod4 \ 85 DarkGoldenrod1 DarkGoldenrod2 DarkGoldenrod3 DarkGoldenrod4 \ 86 RosyBrown1 RosyBrown2 RosyBrown3 RosyBrown4 IndianRed1 \ 87 IndianRed2 IndianRed3 IndianRed4 sienna1 sienna2 sienna3 \ 88 sienna4 burlywood1 burlywood2 burlywood3 burlywood4 wheat1 \ 89 wheat2 wheat3 wheat4 tan1 tan2 tan3 tan4 chocolate1 \ 90 chocolate2 chocolate3 chocolate4 firebrick1 firebrick2 \ 91 firebrick3 firebrick4 brown1 brown2 brown3 brown4 salmon1 \ 92 salmon2 salmon3 salmon4 LightSalmon1 LightSalmon2 \ 93 LightSalmon3 LightSalmon4 orange1 orange2 orange3 orange4 \ 94 DarkOrange1 DarkOrange2 DarkOrange3 DarkOrange4 coral1 \ 95 coral2 coral3 coral4 tomato1 tomato2 tomato3 tomato4 \ 96 OrangeRed1 OrangeRed2 OrangeRed3 OrangeRed4 red1 red2 red3 \ 97 red4 DeepPink1 DeepPink2 DeepPink3 DeepPink4 HotPink1 \ 98 HotPink2 HotPink3 HotPink4 pink1 pink2 pink3 pink4 \ 99 LightPink1 LightPink2 LightPink3 LightPink4 PaleVioletRed1 \ 100 PaleVioletRed2 PaleVioletRed3 PaleVioletRed4 maroon1 \ 101 maroon2 maroon3 maroon4 VioletRed1 VioletRed2 VioletRed3 \ 102 VioletRed4 magenta1 magenta2 magenta3 magenta4 orchid1 \ 103 orchid2 orchid3 orchid4 plum1 plum2 plum3 plum4 \ 104 MediumOrchid1 MediumOrchid2 MediumOrchid3 MediumOrchid4 \ 105 DarkOrchid1 DarkOrchid2 DarkOrchid3 DarkOrchid4 purple1 \ 106 purple2 purple3 purple4 MediumPurple1 MediumPurple2 \ 107 MediumPurple3 MediumPurple4 thistle1 thistle2 thistle3 \ 108 thistle4 109 button $wcolors.dismiss -text "Close" -command { 110 destroy .colors 111 return 112 } 113 pack $wcolors.dismiss -expand yes -fill x 114 115} 116 117proc master {} { 118 global mfe bgcolor mt_font 119 if {[winfo exists .master] != 0} {destroy .master} 120# toplevel .master -bd 6 -bg $bgcolor -height 200 -width 10 121 toplevel .master -bd 6 -height 200 -width 10 122 wm title .master "Master Volume Control" 123# frame .master.up -bg $bgcolor 124 frame .master.up 125# label .master.up.title -bg $bgcolor -text "Master Control" 126 label .master.up.title -text "Master Control" 127# frame .master.med -bg AntiqueWhite 128 frame .master.med 129# 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 " 130 scale .master.med.control -resolution 1 -from 200 -to 0 -length 250 -width 10 -orient vertical -showvalue true -variable mfe(master) -command " 131 set mfe(controller_number) 0 132 set mfe(param_number) 1 133 change_master_volume_on_the_fly 134 set mfe(master)" 135 136# frame .master.low -bg $bgcolor 137 frame .master.low 138# button .master.low.close -activebackground LightPink -text Close -command {destroy .master} 139 button .master.low.close -text Close -command {destroy .master} 140 pack .master.up.title -side top -fill x -expand yes 141 pack .master.up -side top -fill x -expand yes 142 pack .master.med.control -side top -fill y -expand yes 143 pack .master.med -side top -fill both -expand yes 144 pack .master.low.close -padx 5 -side left -fill x -expand yes 145 pack .master.low -pady 5 -side top -fill x -expand yes 146 147} 148 149proc change_master_volume_on_the_fly {} { 150 global mfe number_of_tracks stop_command playhandle 151 if {$stop_command==0} { 152 for {set n 1} {$n <= $number_of_tracks} {incr n} { 153 set master_volume [expr $mfe(volume$n)*$mfe(master)/100] 154 puts $playhandle "c-select $n\ncop-select $mfe(volume_position$n) \ncopp-select $mfe(param_number)\ncopp-set $master_volume" 155 } 156 } 157} 158 159proc metronome {} { 160 global bgcolor bgcolor2 bgcolor3 mfe track_num 161 162 set bgcolor3 AntiqueWhite2 163 set mt_font [font create -family Helvetica -size 9 -weight normal] 164 if {[winfo exists .metronome] != 0} {destroy .metronome} 165 toplevel .metronome -bd 6 166 frame .metronome.frame1 167 label .metronome.frame1.label1 -text "Beats per minute: " 168 entry .metronome.frame1.beat -bg White -width 3 -textvariable mfe(effect_parameter110) 169 frame .metronome.frame2 170 menubutton .metronome.frame2.dev_text -text "Device" -relief raised -padx 1 -menu .metronome.frame2.dev_text.type 171 menu .metronome.frame2.dev_text.type -tearoff 0 172 .metronome.frame2.dev_text.type add radiobutton -label Default -variable mfe(device0) -value "Default" 173 .metronome.frame2.dev_text.type add radiobutton -label alsa,hw:0 -variable mfe(device0) -value "alsa,hw:0" 174 .metronome.frame2.dev_text.type add radiobutton -label alsa,hw:1 -variable mfe(device0) -value "alsa,hw:1" 175 .metronome.frame2.dev_text.type add radiobutton -label alsa,hw:2 -variable mfe(device0) -value "alsa,hw:2" 176 .metronome.frame2.dev_text.type add radiobutton -label alsa,hw:3 -variable mfe(device0) -value "alsa,hw:3" 177 .metronome.frame2.dev_text.type add radiobutton -label alsaplugin,0 -variable mfe(device0) -value "alsaplugin,0" 178 .metronome.frame2.dev_text.type add radiobutton -label alsaplugin,1 -variable mfe(device0) -value "alsaplugin,1" 179 .metronome.frame2.dev_text.type add radiobutton -label alsaplugin,2 -variable mfe(device0) -value "alsaplugin,2" 180 .metronome.frame2.dev_text.type add radiobutton -label alsaplugin,3 -variable mfe(device0) -value "alsaplugin,3" 181 .metronome.frame2.dev_text.type add radiobutton -label jack,system -variable mfe(device0) -value "jack,system" 182 .metronome.frame2.dev_text.type add radiobutton -label /dev/dsp -variable mfe(device0) -value "/dev/dsp" 183 .metronome.frame2.dev_text.type add radiobutton -label /dev/dsp1 -variable mfe(device0) -value "/dev/dsp1" 184 .metronome.frame2.dev_text.type add radiobutton -label /dev/dsp2 -variable mfe(device0) -value "/dev/dsp2" 185 .metronome.frame2.dev_text.type add radiobutton -label /dev/dsp3 -variable mfe(device0) -value "/dev/dsp3" 186 entry .metronome.frame2.dev_entry -bg White -width 16 -textvariable mfe(device0) 187 checkbutton .metronome.enable -width 18 -text "Enable metronome" -variable mfe(track_status0) -onvalue "Play" -offvalue "Mute" -padx 0 -command " 188 set track_num 0 189 mute_unmute" 190 191 button .metronome.button -text Ok -command {destroy .metronome} 192 193 grid .metronome.frame1.label1 .metronome.frame1.beat 194 pack .metronome.frame1 -fill both -expand yes -padx 2 -pady 2 195 grid .metronome.frame2.dev_text .metronome.frame2.dev_entry 196 pack .metronome.frame2 -fill both -expand yes -padx 2 -pady 2 197 pack .metronome.enable -fill x -padx 2 198 pack .metronome.button -side bottom -anchor s -fill x 199} 200 201proc latency_comp {} { 202 global sp_minutes sp_seconds sp_minutes_loc sp_seconds_loc locate_name bgcolor bgcolor2 bgcolor3 mfe time_format 203 if {[winfo exists .latency] != 0} {destroy .latency} 204 toplevel .latency -bd 6 205 wm title .latency "Latency Compensation" 206 frame .latency.frame 207 label .latency.frame.label -text "Latency Compensation (ms): " 208 entry .latency.frame.input -bg White -width 4 -textvariable mfe(latency) 209# frame .latency.frame2 -bg $bgcolor 210# button .latency.frame2.button -activebackground LightPink -text Ok -command {destroy .latency} 211 button .latency.button -text Ok -command {destroy .latency} 212 grid .latency.frame.label .latency.frame.input -sticky ewns 213# grid .latency.frame2.button -sticky ewns 214 pack .latency.frame -fill both -expand yes -padx 2 -pady 2 215# pack .latency.frame2 -fill both -expand yes 216 pack .latency.button -fill both -expand yes -padx 2 -pady 2 217} 218 219proc locate {} { 220 global sp_minutes sp_seconds sp_minutes_loc sp_seconds_loc locate_name bgcolor bgcolor2 bgcolor3 mfe time_format 221 if {[winfo exists .locate] != 0} {destroy .locate} 222 toplevel .locate -bd 6 223 wm title .locate "Locates" 224 frame .locate.locate 225 set loc_number 1 226 if {$time_format=="Minutes"} { 227 for {set loc_number 1} {$loc_number <= 16} {incr loc_number} { 228 entry .locate.locate.minutes$loc_number -bg White -justify right -width 3 -textvariable sp_minutes_loc($loc_number) 229 label .locate.locate.position$loc_number -text : 230 entry .locate.locate.seconds$loc_number -bg White -justify right -width 5 -textvariable sp_seconds_loc($loc_number) 231 button .locate.locate.button$loc_number -text $loc_number -command " 232 set locate_name $loc_number 233 move_to_locate" 234 } 235 grid .locate.locate.minutes1 .locate.locate.position1 .locate.locate.seconds1 .locate.locate.button1 -sticky ewns -padx 3 236 grid .locate.locate.minutes2 .locate.locate.position2 .locate.locate.seconds2 .locate.locate.button2 -sticky ewns -padx 3 237 grid .locate.locate.minutes3 .locate.locate.position3 .locate.locate.seconds3 .locate.locate.button3 -sticky ewns -padx 3 238 grid .locate.locate.minutes4 .locate.locate.position4 .locate.locate.seconds4 .locate.locate.button4 -sticky ewns -padx 3 239 240 grid .locate.locate.minutes5 .locate.locate.position5 .locate.locate.seconds5 .locate.locate.button5 -sticky ewns -padx 3 241 grid .locate.locate.minutes6 .locate.locate.position6 .locate.locate.seconds6 .locate.locate.button6 -sticky ewns -padx 3 242 grid .locate.locate.minutes7 .locate.locate.position7 .locate.locate.seconds7 .locate.locate.button7 -sticky ewns -padx 3 243 grid .locate.locate.minutes8 .locate.locate.position8 .locate.locate.seconds8 .locate.locate.button8 -sticky ewns -padx 3 244 245 grid .locate.locate.minutes9 .locate.locate.position9 .locate.locate.seconds9 .locate.locate.button9 -sticky ewns -padx 3 246 grid .locate.locate.minutes10 .locate.locate.position10 .locate.locate.seconds10 .locate.locate.button10 -sticky ewns -padx 3 247 grid .locate.locate.minutes11 .locate.locate.position11 .locate.locate.seconds11 .locate.locate.button11 -sticky ewns -padx 3 248 grid .locate.locate.minutes12 .locate.locate.position12 .locate.locate.seconds12 .locate.locate.button12 -sticky ewns -padx 3 249 250 grid .locate.locate.minutes13 .locate.locate.position13 .locate.locate.seconds13 .locate.locate.button13 -sticky ewns -padx 3 251 grid .locate.locate.minutes14 .locate.locate.position14 .locate.locate.seconds14 .locate.locate.button14 -sticky ewns -padx 3 252 grid .locate.locate.minutes15 .locate.locate.position15 .locate.locate.seconds15 .locate.locate.button15 -sticky ewns -padx 3 253 grid .locate.locate.minutes16 .locate.locate.position16 .locate.locate.seconds16 .locate.locate.button16 -sticky ewns -padx 3 254 255 frame .locate.punch 256 label .locate.punch.in_text -text "Punch-in:" 257 entry .locate.punch.in_minutes -bg White -justify right -width 2 -textvariable mfe(punch_in_minutes) 258 label .locate.punch.in_sep -text : 259 entry .locate.punch.in_seconds -bg White -justify right -width 5 -textvariable mfe(punch_in_seconds) 260 261 label .locate.punch.out_text -text "Punch-Out:" 262 entry .locate.punch.out_minutes -bg White -justify right -width 2 -textvariable mfe(punch_out_minutes) 263 label .locate.punch.out_sep -text : 264 entry .locate.punch.out_seconds -bg White -justify right -width 5 -textvariable mfe(punch_out_seconds) 265 266 pack .locate.locate -fill both -expand yes 267 grid .locate.punch.in_text .locate.punch.in_minutes .locate.punch.in_sep .locate.punch.in_seconds 268 grid .locate.punch.out_text .locate.punch.out_minutes .locate.punch.out_sep .locate.punch.out_seconds 269 pack .locate.punch -fill both -expand yes 270 271 } else { 272 for {set loc_number 1} {$loc_number <= 16} {incr loc_number} { 273 entry .locate.locate.seconds$loc_number -bg White -justify right -width 7 -textvariable sp_seconds_loc($loc_number) 274 button .locate.locate.button$loc_number -width 7 -text $loc_number -command " 275 set locate_name $loc_number 276 move_to_locate" 277 } 278 279 frame .locate.punch 280 label .locate.punch.in_text -text "Punch-in:" 281 entry .locate.punch.in_seconds -bg White -justify right -width 7 -textvariable mfe(punch_in_seconds) 282 283 label .locate.punch.out_text -text "Punch-Out:" 284 entry .locate.punch.out_seconds -bg White -justify right -width 7 -textvariable mfe(punch_out_seconds) 285 286 grid .locate.locate.seconds1 .locate.locate.button1 -sticky ewns -padx 3 287 grid .locate.locate.seconds2 .locate.locate.button2 -sticky ewns -padx 3 288 grid .locate.locate.seconds3 .locate.locate.button3 -sticky ewns -padx 3 289 grid .locate.locate.seconds4 .locate.locate.button4 -sticky ewns -padx 3 290 291 grid .locate.locate.seconds5 .locate.locate.button5 -sticky ewns -padx 3 292 grid .locate.locate.seconds6 .locate.locate.button6 -sticky ewns -padx 3 293 grid .locate.locate.seconds7 .locate.locate.button7 -sticky ewns -padx 3 294 grid .locate.locate.seconds8 .locate.locate.button8 -sticky ewns -padx 3 295 296 grid .locate.locate.seconds9 .locate.locate.button9 -sticky ewns -padx 3 297 grid .locate.locate.seconds10 .locate.locate.button10 -sticky ewns -padx 3 298 grid .locate.locate.seconds11 .locate.locate.button11 -sticky ewns -padx 3 299 grid .locate.locate.seconds12 .locate.locate.button12 -sticky ewns -padx 3 300 301 grid .locate.locate.seconds13 .locate.locate.button13 -sticky ewns -padx 3 302 grid .locate.locate.seconds14 .locate.locate.button14 -sticky ewns -padx 3 303 grid .locate.locate.seconds15 .locate.locate.button15 -sticky ewns -padx 3 304 grid .locate.locate.seconds16 .locate.locate.button16 -sticky ewns -padx 3 305 306 pack .locate.locate -fill both -expand yes 307 grid .locate.punch.in_text .locate.punch.in_seconds 308 grid .locate.punch.out_text .locate.punch.out_seconds 309 pack .locate.punch -fill both -expand yes 310 } 311} 312 313proc ladspa {} { 314 315global 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 316 317set env(LADSPA_PATH) $ladspa_path 318.mfe.up1.button configure -state disabled 319.mfe.up2.options configure -state disabled 320.mfe.up2.colors configure -state disabled 321.mfe.up2.time_format configure -state disabled 322.mfe.up2.metronome configure -state disabled 323.mfe.up2.addtrack configure -state disabled 324.mfe.up2.del_all_tracks configure -state disabled 325.mfe.up2.quit configure -state disabled 326.mfe.up2.about configure -state disabled 327.mfe.low.multich2 configure -state disabled 328.mfe.low.latcomp configure -state disabled 329.mfe.low.loc configure -state disabled 330.mfe.low.master configure -state disabled 331.mfe.low.play configure -state disabled 332.mfe.low.rew_to_begin configure -state disabled 333.mfe.low.rew_5 configure -state disabled 334.mfe.low.forw_5 configure -state disabled 335 336ladspa_loading_window 337 338set cmd "exec listplugins" 339catch {eval $cmd} exec_out1 340 341if {[string match *egmentation* $exec_out1] == 1} { 342return} 343 344set exec_out2 [split $exec_out1 \n] 345set file_number 0 346set parameters 0 347 348for {set n 0} {$n <= [llength $exec_out2]} {incr n} { 349 set current_line [lindex $exec_out2 $n] 350 if {[string match *.so* $current_line] == 1} { 351 regsub : $current_line {} current_line 352 set files($file_number) $current_line 353 incr file_number 354 355 } 356} 357 358set exec_out2 " " 359 360for {set n 0} {$n < $file_number} {incr n} { 361 362 set cmd "exec analyseplugin $files($n)" 363 catch {eval $cmd} exec_out1 364 set exec_out2 "$exec_out2$exec_out1" 365# puts "$exec_out2" 366 367} 368 369set exec_out3 [split $exec_out2 \n] 370set index [expr $eca_effects+1] 371 372for {set n 0} {$n <= [llength $exec_out3]} {incr n} { 373 set srate 0 374 set current_line [lindex $exec_out3 $n] 375 if {[string match {Plugin Label:*} $current_line] == 1} { 376 set parameters 0 377 regsub {Plugin Label: "} $current_line {} plugin_label 378 regsub {"} $plugin_label {} plugin_label 379 set effect_param(ladspa_$plugin_label) 0 380 set effect_index($index) "ladspa_$plugin_label" 381 incr index 382 set past_line [lindex $exec_out3 [expr $n-1]] 383 regsub {Plugin Name: "} $past_line {} plugin_name 384 regsub {"} $plugin_name {} effect_name(ladspa_$plugin_label) 385 set n [expr $n+2] 386 set current_line [lindex $exec_out3 $n] 387 regsub {Maker: "} $current_line {} plugin_maker 388 regsub {"} $plugin_maker {} effect_maker(ladspa_$plugin_label) 389 incr n 390 set current_line [lindex $exec_out3 $n] 391 regsub {Copyright: "} $current_line {} plugin_copy 392 regsub {"} $plugin_copy {} effect_copy(ladspa_$plugin_label) 393 set n [expr $n+6] 394 set current_line [lindex $exec_out3 $n] 395 } 396 397 if {[string match {Ports:*} $current_line] == 1 || $parameters == 1} { 398 set parameters 1 399 if {[string match {*control,*} $current_line] == 1 } { 400 if {[string match *ERROR:* $current_line ] == 1 || [string match *toggled* $current_line ] == 1} { 401 incr effect_param(ladspa_$plugin_label) 402 set effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 1 403 set effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 0 404 set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 1 405 set effect_param_value(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 0 406 } 407 if {[string match *srate* $current_line] == 1 } { 408 regsub -all {\*srate} $current_line {} current_line 409 set srate 1 410 } 411 if {[regexp -all {([-+.0-9]+)( to)} $current_line param_from] == 1} { 412 incr effect_param(ladspa_$plugin_label) 413 regsub -all { to} $param_from {} effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 414 set effect_param_value(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) $effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 415 } 416 if {[regexp -all {(\")([(= ),&+-?/%A-Za-z0-9]+)(\")} $current_line param_name] == 1} { 417 regsub -all {\"} $param_name {} effect_param_name(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 418 } 419 420 if {[regexp -all {(to )([-+.0-9]+)} $current_line param_to] == 1} { 421 regsub -all {to } $param_to {} effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 422 if {[string match {*integer*} $current_line]} {set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 1} else { 423 set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 0 424 } 425 if {[string match {*logarithmic*} $current_line] == 1} { 426 set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 100 427 } 428 if {[string match *...* $effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))] == 1} { 429 set effect_param_to(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 10000 430 set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 100 431 } 432 if {[string match *...* $effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label))] == 1} { 433 set effect_param_from(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 10000 434 set effect_param_resolution(ladspa_$plugin_label$effect_param(ladspa_$plugin_label)) 100 435 } 436 if {$srate==1} { 437 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] 438 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] 439 } 440 } 441 } 442 } 443 444} 445ladspa_loading_window 446set eca_effects [expr $index - 1] 447} 448 449proc solo_unsolo {} { 450 global stop_command mfe track_num playhandle solo_tracks number_of_tracks w w2 451 if {$solo_tracks==0} { 452 set solo_tracks 1 453 set mfe(prev_track_status$track_num) $mfe(track_status$track_num) 454 if {$mfe(track_status$track_num)=="Mute"} { 455 if {$stop_command==0} { 456 puts $playhandle "c-select $track_num\nc-muting" 457 } 458 } 459 for {set n 1} {$n <= $number_of_tracks} {incr n} { 460 puts "4.4.2 $w.play$n configure -state disabled" 461 $w.track$track_num.play configure -state disabled 462 if {$n!=$track_num} { 463 set mfe(prev_track_status$n) $mfe(track_status$n) 464 if {$stop_command==0 && $mfe(track_status$n)=="Play"} { 465 puts $playhandle "c-select $n\nc-muting" 466 } 467 set mfe(track_status$n) "Mute" 468 } else { 469 set mfe(track_status$n) "Play" 470 } 471 } 472 } elseif {$solo_tracks==1 && $mfe(track_solo$track_num)=="No Solo"} { 473 set solo_tracks 0 474 for {set n 1} {$n <= $number_of_tracks} {incr n} { 475 $w.track$track_num.play configure -state normal 476 if {$mfe(track_status$n)!=$mfe(prev_track_status$n)} { 477 if {$stop_command==0} { 478 puts $playhandle "c-select $n\nc-muting" 479 } 480 set mfe(track_status$n) $mfe(prev_track_status$n) 481 } 482 } 483 } else { 484 if {$mfe(track_solo$track_num)=="Solo"} { 485 incr solo_tracks 486 set mfe(track_status$track_num) "Play" 487 } else { 488 set solo_tracks [expr $solo_tracks-1] 489 set mfe(track_status$track_num) "Mute" 490 } 491 if {$stop_command==0} { 492 puts $playhandle "c-select $track_num\nc-muting" 493 } 494 } 495} 496 497proc unsolo_all {} { 498 global stop_command mfe track_num playhandle solo_tracks number_of_tracks w 499 if {$solo_tracks==0} {return} 500 for {set n 1} {$n <= $number_of_tracks} {incr n} { 501 $w.track$n.play configure -state normal 502 if {$mfe(track_solo$n)=="Solo"} { 503 if {$mfe(prev_track_status$n)=="Mute" && $stop_command==0} { 504 puts $playhandle "c-select $n\nc-muting" 505 } 506 } else { 507 if {$mfe(prev_track_status$n)=="Play" && $stop_command==0} { 508 puts $playhandle "c-select $n\nc-muting" 509 } 510 } 511 set mfe(track_status$n) $mfe(prev_track_status$n) 512 set mfe(track_solo$n) "No Solo" 513# $w.play$n configure -state normal 514 } 515 set solo_tracks 0 516} 517 518proc delete_current_track {} { 519 global mfe track_num w 520 unsolo_all 521 set w2 "$w.track$track_num" 522 set mfe(track_status$track_num) "Deleted" 523 destroy $w2.number$track_num 524 destroy $w2.delete$track_num 525 destroy $w2.file$track_num 526 destroy $w2.open$track_num 527 destroy $w2.track_properties$track_num 528 destroy $w2.dev_text$track_num 529 destroy $w2.dev_entry$track_num 530 destroy $w2.chn_text$track_num 531 destroy $w2.chn_entry$track_num 532 destroy $w2.solo$track_num 533 destroy $w2.play$track_num 534 destroy $w2.rec$track_num 535 destroy $w2.effect$track_num 536 destroy $w2.eca_tools$track_num 537 destroy $w2.pan$track_num 538 destroy $w2.slide$track_num 539 destroy $w2 540} 541 542proc add_track {} { 543 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 544 545 set bgcolor3 AntiqueWhite2 546 .mfe.up1.save configure -state normal 547 .mfe.up1.saveas configure -state normal 548 .mfe.up2.exportecs configure -state normal 549 .mfe.up2.mixdown configure -state normal 550 551 set number_of_tracks [expr $number_of_tracks-1] 552 unsolo_all 553 554 incr number_of_tracks 555 set n $number_of_tracks 556 if {$mfe(track_status$n)=="Deleted"} {return} 557 set mfe(prev_track_status$n) "Play" 558 set mfe(track_status$n) "Play" 559# set mfe(track_status$n) "Play" 560# set mfe(rec_prop_bits$n) "s16_le" 561# set mfe(rec_prop_channels$n) "1" 562# set mfe(rec_prop_srate$n) "44100" 563# set mfe(rec_prop_interl$n) "i" 564# set mfe(volume$n) 100 565# set mfe(pan$n) 50 566# set mfe(device$n) "/dev/dsp" 567# set mfe(chn$n) "n/a" 568set mfe(volume_position$n) 1 569set mfe(pan_position$n) 2 570set number $n 571set mfe(track_solo$n) "No Solo" 572# set mfe(track_rec_status$n) "No" 573# set mfe(track_status$n) "Play" 574 575 .mfe.tracks.canvas config -scrollregion "0 0 0 [expr $number_of_tracks *30]" 576 if {$n < 10} {set number "0$n"} 577 set w2 $w 578 set w "$w.track$n" 579 frame $w -width 780 -bd 2 -relief ridge 580 entry $w.number -bg White -width 5 -textvariable mfe(track_name$n) 581 button $w.delete -text "Del" -padx 1 -command " 582 set track_num $n 583 delete_current_track" 584 entry $w.file -bg White -width 12 -textvariable mfe(file$n) 585 button $w.open -font $mt_font -text ... -padx 1 -command " 586 set track_num $n 587 set types {{{Wav files} {*.wav}} {{mp3 files} {*.mp3}} {{raw files} {*.raw}} {{MIDI files} {*.mid}} {{MIDI files} {*.midi}} {{Modules files} {*.mod}} {{efw files} {*.efw}} {{all} {*}}} 588 file_browser" 589 button $w.track_properties -text "P" -relief raised -padx 1 -command " 590 set track_num $n 591 set mixdown 0 592 rec_properties" 593 594 menubutton $w.dev_text -text "D" -relief raised -padx 1 -menu $w.dev_text.type 595 menu $w.dev_text.type -tearoff 0 596 $w.dev_text.type add radiobutton -label Default -variable mfe(device$n) -value "Default" 597 $w.dev_text.type add radiobutton -label alsa,hw:0 -variable mfe(device$n) -value "alsa,hw:0" 598 $w.dev_text.type add radiobutton -label alsa,hw:1 -variable mfe(device$n) -value "alsa,hw:1" 599 $w.dev_text.type add radiobutton -label alsa,hw:2 -variable mfe(device$n) -value "alsa,hw:2" 600 $w.dev_text.type add radiobutton -label alsa,hw:3 -variable mfe(device$n) -value "alsa,hw:3" 601 $w.dev_text.type add radiobutton -label alsaplugin,0 -variable mfe(device$n) -value "alsaplugin,0" 602 $w.dev_text.type add radiobutton -label alsaplugin,1 -variable mfe(device$n) -value "alsaplugin,1" 603 $w.dev_text.type add radiobutton -label alsaplugin,2 -variable mfe(device$n) -value "alsaplugin,2" 604 $w.dev_text.type add radiobutton -label alsaplugin,3 -variable mfe(device$n) -value "alsaplugin,3" 605 $w.dev_text.type add radiobutton -label jack,system -variable mfe(device$n) -value "jack,system" 606 $w.dev_text.type add radiobutton -label /dev/dsp -variable mfe(device$n) -value "/dev/dsp" 607 $w.dev_text.type add radiobutton -label /dev/dsp1 -variable mfe(device$n) -value "/dev/dsp1" 608 $w.dev_text.type add radiobutton -label /dev/dsp2 -variable mfe(device$n) -value "/dev/dsp2" 609 $w.dev_text.type add radiobutton -label /dev/dsp3 -variable mfe(device$n) -value "/dev/dsp3" 610 611 entry $w.dev_entry -width 8 -bg White -textvariable mfe(device$n) 612 613 menubutton $w.chn_text -text "Ch" -relief raised -padx 1 -menu $w.chn_text.type 614 menu $w.chn_text.type -tearoff 0 615 $w.chn_text.type add radiobutton -label n/a -variable mfe(chn$n) -value "n/a" 616 $w.chn_text.type add radiobutton -label 1 -variable mfe(chn$n) -value "1" 617 $w.chn_text.type add radiobutton -label 2 -variable mfe(chn$n) -value "2" 618 $w.chn_text.type add radiobutton -label 3 -variable mfe(chn$n) -value "3" 619 $w.chn_text.type add radiobutton -label 4 -variable mfe(chn$n) -value "4" 620 $w.chn_text.type add radiobutton -label 5 -variable mfe(chn$n) -value "5" 621 $w.chn_text.type add radiobutton -label 6 -variable mfe(chn$n) -value "6" 622 $w.chn_text.type add radiobutton -label 7 -variable mfe(chn$n) -value "7" 623 $w.chn_text.type add radiobutton -label 8 -variable mfe(chn$n) -value "8" 624 $w.chn_text.type add radiobutton -label 9 -variable mfe(chn$n) -value "9" 625 $w.chn_text.type add radiobutton -label 10 -variable mfe(chn$n) -value "10" 626 $w.chn_text.type add radiobutton -label 11 -variable mfe(chn$n) -value "11" 627 $w.chn_text.type add radiobutton -label 12 -variable mfe(chn$n) -value "12" 628 $w.chn_text.type add radiobutton -label 13 -variable mfe(chn$n) -value "13" 629 $w.chn_text.type add radiobutton -label 14 -variable mfe(chn$n) -value "14" 630 $w.chn_text.type add radiobutton -label 15 -variable mfe(chn$n) -value "15" 631 $w.chn_text.type add radiobutton -label 16 -variable mfe(chn$n) -value "16" 632 633 entry $w.chn_entry -width 3 -bg White -textvariable mfe(chn$n) 634 635 checkbutton $w.solo -width 1 -text "S" -variable mfe(track_solo$n) -onvalue "Solo" -offvalue "No Solo" -padx 0 -command " 636 set track_num $n 637 solo_unsolo" 638 checkbutton $w.play -width 1 -text "M" -variable mfe(track_status$n) -onvalue "Mute" -offvalue "Play" -padx 0 -command " 639 set track_num $n 640 mute_unmute" 641 checkbutton $w.rec -width 1 -text "R" -variable mfe(track_rec_status$n) -onvalue "Yes" -offvalue "No" -padx 0 642 643 menubutton $w.effect -text "E" -relief raised -padx 1 -menu $w.effect.type 644 menu $w.effect.type -tearoff 0 645 646 for {set en 1} {$en <= 8} {incr en} { 647 if {$prev_loaded_file == 0} { 648 set mfe(effect$en$n) "None" 649 set mfe_temp(effect$en$n) "None" 650 set mfe(effect_attached$en$n) "Bypassed" 651 set effect_fg "gray40" 652 } else { 653 set mfe_temp(effect$en$n) $mfe(effect$en$n) 654 if {$mfe(effect_attached$en$n)=="Bypassed"} { 655 set effect_fg "gray40" 656 } else { 657 set effect_fg "black" 658 } 659 } 660 if {$mfe(effect$en$n)=="None"} { 661 set effect_name_current "Effect $en" 662 set effect_fg2 "gray40" 663 } else { 664 set effect_name_current $effect_name($mfe_temp(effect$en$n)) 665 set effect_fg2 "black" 666 } 667 668 $w.effect.type add cascade -label $effect_name_current -foreground $effect_fg -menu $w.effect.type.$en 669 menu $w.effect.type.$en -tearoff 0 670 $w.effect.type.$en add command -label "Add a New Effect" -command " 671 set effect_num $en 672 set track_num $n 673 set edit_effect 0 674 effect_list" 675 $w.effect.type.$en add command -label "Edit Current Effect" -foreground $effect_fg2 -command " 676 set effect_num $en 677 set track_num $n 678 set edit_effect 1 679 effect" 680 $w.effect.type.$en add command -label "Connect/Bypass" -foreground $effect_fg2 -command " 681 set effect_num $en 682 set track_num $n 683 effect_bypass 684 " 685 $w.effect.type.$en add command -label "Delete Effect" -foreground $effect_fg2 -state disabled -command " 686 set effect_num $en 687 set track_num $n 688 delete_effect" 689 690# $w.effect$n.type entryconfigure $en -foreground $effect_fg 691 692 if { $mfe(effect$en$n) != "None"} { 693 $w.effect.type.$en entryconfigure 1 -foreground black 694 $w.effect.type.$en entryconfigure 2 -foreground black 695 $w.effect.type.$en entryconfigure 3 -foreground black -state normal 696 .mfe.tracks.canvas.f.track$n.effect.type.$en entryconfigure 0 -label $mfe(effect_attached$en$n) -state disabled -foreground gray40 697 } 698 } 699 set prev_loaded_file 0 700 menubutton $w.eca_tools -text "T" -relief raised -padx 1 -menu $w.eca_tools.type 701 menu $w.eca_tools.type -tearoff 0 702 $w.eca_tools.type add command -label "Normalize" -command " 703 set track_num $n 704 ecanormalize" 705 $w.eca_tools.type add command -label "DC Offset Fix" -command " 706 set track_num $n 707 ecafixdc" 708 $w.eca_tools.type add command -label "Wave Edit" -command " 709 set track_num $n 710 wave_edit" 711 $w.eca_tools.type add command -label "Wave File Delete" -command " 712 set track_num $n 713 wave_file_delete" 714 715 scale $w.pan -resolution 1 -from 0 -to 100 -length 130 -width 2 -orient horizontal -showvalue true -variable mfe(pan$n) -command " 716 set track_num $n 717 set mfe(param_number) 1 718 set mfe(param_value) pan$n 719 change_pan_on_the_fly 720 set mfe(pan$n)" 721 scale $w.slide -resolution 1 -from 0 -to 400 -length 200 -width 2 -orient horizontal -showvalue true -variable mfe(volume$n) -command " 722 set track_num $n 723 set mfe(param_number) 1 724 set mfe(param_value) volume$n 725 change_volume_on_the_fly 726 set mfe(volume$n)" 727 728 pack $w.number -expand 1 -fill both -side left 729 pack $w.delete -fill y -side left 730 pack $w.file -expand 1 -fill both -side left 731 pack $w.open -side left -fill y 732 pack $w.track_properties -fill y -side left 733 pack $w.dev_text -fill y -side left 734 pack $w.dev_entry -fill y -side left 735 pack $w.chn_text -fill y -side left 736 pack $w.chn_entry -fill y -side left 737 pack $w.solo -fill y -side left 738 pack $w.play -fill y -side left 739 pack $w.rec -fill y -side left 740 pack $w.effect -fill y -side left 741 pack $w.eca_tools -fill y -side left 742 pack $w.pan -expand yes -fill both -side left 743 pack $w.slide -expand yes -fill both -side left 744 pack $w -expand yes -fill both -side top 745# pack $w.button -fill both -expand 1 -side left 746# pack $w -fill both -expand 1 -side top 747 748 set w $w2 749} 750 751proc effect {} { 752 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 753 if {[winfo exists .effect$effect_num$track_num] != 0} {destroy .effect$effect_num$track_num} 754 set effect_label $mfe_temp(effect$effect_num$track_num) 755 set w2 $w 756 set w "$w.track$track_num" 757 if {$effect_label=="pn:metronome"} { 758 set mfe(track_status$track_num) "Play" 759 set mfe(track_rec_status$track_num) "No" 760 if {$mfe(file$track_num)=="" || $mfe(file$track_num)=="(Wave File)"} {set mfe(file$track_num) "null"} 761 } 762 if { $mfe_temp(effect$effect_num$track_num) == "None"} { 763 set mfe(effect$effect_num$track_num) $mfe_temp(effect$effect_num$track_num) 764 $w.effect.type.$effect_num entryconfigure 1 -foreground gray40 765 $w.effect.type.$effect_num entryconfigure 2 -foreground gray40 766 $w.effect.type.$effect_num entryconfigure 3 -foreground gray40 767 set w $w2 768 return 769 } else { 770 $w.effect.type.$effect_num entryconfigure 1 -foreground black 771 $w.effect.type.$effect_num entryconfigure 2 -foreground black 772 $w.effect.type.$effect_num entryconfigure 3 -foreground black -state normal 773 } 774 set effect_label $mfe_temp(effect$effect_num$track_num) 775 set effect_menu_order [expr $effect_num-1] 776 $w.effect.type entryconfigure $effect_menu_order -menu $w.effect.type.$effect_num -label $effect_name($mfe_temp(effect$effect_num$track_num)) 777 set w $w2 778 toplevel .effect$effect_num$track_num 779 wm title .effect$effect_num$track_num "$mfe(track_name$track_num) --- Effect: $effect_name($mfe_temp(effect$effect_num$track_num)) Window" 780 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))" 781 pack .effect$effect_num$track_num.out -expand yes -fill both 782 783 if { $mfe(effect$effect_num$track_num) != $mfe_temp(effect$effect_num$track_num) || $edit_effect==0 } { 784 set mfe(effect$effect_num$track_num) $mfe_temp(effect$effect_num$track_num) 785 for {set n 1} {$n <= $effect_param($effect_label)} {incr n} { 786 set mfe(effect_parameter$n$effect_num$track_num) $effect_param_value($effect_label$n) 787 set mfe_temp2(effect_parameter$n$effect_num$track_num) $effect_param_value($effect_label$n) 788 } 789 } else { 790 for {set n 1} {$n <= $effect_param($effect_label)} {incr n} { 791 set effect_param_value($effect_label$n) $mfe(effect_parameter$n$effect_num$track_num) 792 set mfe_temp2(effect_parameter$n$effect_num$track_num) $effect_param_value($effect_label$n) 793 } 794 } 795 set mfe(effect_parameters$effect_num$track_num) $effect_param($effect_label) 796 for {set n 1} {$n <= $effect_param($effect_label)} {incr n} { 797 set res [expr ($effect_param_to($effect_label$n)-$effect_param_from($effect_label$n))/100] 798 set res [expr abs($res)] 799 set logarithmic 0 800 if {$effect_param_resolution($effect_label$n) != 0 } {set res $effect_param_resolution($effect_label$n)} 801 if {$effect_param_resolution($effect_label$n) == 100 } { 802 set res [expr ($effect_param_to($effect_label$n)-$effect_param_from($effect_label$n))/10000] 803 set res [expr abs($res)] 804 set logarithmic 1 805 } 806 set position "effect_parameter$n$effect_num$track_num" 807 frame .effect$effect_num$track_num.$n 808 label .effect$effect_num$track_num.$n.param_name$n -width 30 -text "$effect_param_name($effect_label$n): " -justify left 809 entry .effect$effect_num$track_num.$n.param_value$n -width 5 -justify left -relief flat -textvariable mfe($position) 810 pack .effect$effect_num$track_num.$n.param_name$n -side left 811 pack .effect$effect_num$track_num.$n.param_value$n -side left 812 813 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 " 814 set position effect_parameter$n$effect_num$track_num 815 log 816 set track_num $track_num 817 set effect_number $effect_num 818 # set mfe(controller_number) [expr $effect_num+2] 819 set mfe(param_number) $n 820 set mfe(param_value) $position 821 change_controller_on_the_fly 822 set mfe_temp2($position)" 823 pack .effect$effect_num$track_num.$n.param$n -expand 1 -fill x -side right 824# 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 825 pack .effect$effect_num$track_num.$n -expand 1 -fill x -side top 826 } 827 828 frame .effect$effect_num$track_num.buttons -bd 6 829 button .effect$effect_num$track_num.buttons.close -text Close -command " 830 set effect2 $effect_num 831 set track $track_num 832 close_effect 833 " 834 835 button .effect$effect_num$track_num.buttons.preview -text " Preview " -height 0 -command { 836 if {$stop_command == 1} { 837 set stop_command 0 838 set preview 1 839 set effect2 "$effect_num" 840 set track "$track_num" 841 preview} 842 } 843 button .effect$effect_num$track_num.buttons.full_preview -text " Full Preview " -height 0 -command { 844 if {$stop_command == 1} { 845 set stop_command 0 846 set preview 2 847 set track "$track_num" 848 preview } 849 } 850 button .effect$effect_num$track_num.buttons.stop -text " Stop " -height 0 -command { 851 if {$stop_command == 0} { 852 set play_text "Play" 853 stop 854 } 855 } 856 857 button .effect$effect_num$track_num.buttons.info -text "Info " -command { 858 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))" 859 messages [format $plugin_info] 860 } 861 862 pack .effect$effect_num$track_num.buttons.preview -side left -expand 1 -fill x 863 pack .effect$effect_num$track_num.buttons.full_preview -side left -expand 1 -fill x 864 pack .effect$effect_num$track_num.buttons.stop -side left -expand 1 -fill x 865 pack .effect$effect_num$track_num.buttons.close -side left -expand 1 -fill x 866 pack .effect$effect_num$track_num.buttons.info -side left -expand 1 -fill x 867 pack .effect$effect_num$track_num.buttons -in .effect$effect_num$track_num -side top -expand 1 -fill both 868 869} 870 871proc delete_effect {} { 872 873global mfe mfe_temp track_num effect_num w 874 set mfe(effect$effect_num$track_num) "None" 875 set mfe_temp(effect$effect_num$track_num) "None" 876 set effect_order [expr $effect_num-1] 877 .mfe.tracks.canvas.f.track$track_num.effect.type entryconfigure $effect_order -label "Effect $effect_num" -foreground gray40 878 .mfe.tracks.canvas.f.track$track_num.effect.type.$effect_num entryconfigure 0 -label "Add a New Effect" -state normal -foreground black 879 .mfe.tracks.canvas.f.track$track_num.effect.type.$effect_num entryconfigure 3 -state disabled 880 set mfe(effect_attached$effect_num$track_num) "Connected" 881 if {[winfo exists .effect$effect_num$track_num] != 0} {destroy .effect$effect_num$track_num} 882 effect_bypass 883 #effect 884} 885 886proc effect_bypass {} { 887 global mfe mfe_temp track_num effect_num playhandle stop_command effect_param w 888 if {$mfe(effect$effect_num$track_num)=="None" && $mfe_temp(effect$effect_num$track_num)=="None"} {return} 889 set effect_order_number [expr $effect_num-1] 890 if {$stop_command==1} { 891 effect_bypass2 892 return} 893 if {$mfe(effect_attached$effect_num$track_num)=="Connected"} { 894 set mfe(effect_attached$effect_num$track_num) "Bypassed" 895 $w.track$track_num.effect.type entryconfigure $effect_order_number -foreground gray40 896# $w.effect$track_num.type.$effect_num entryconfigure 4 -label "Bypassed" 897 puts $playhandle "c-select $track_num\n" 898 puts $playhandle "cop-select $mfe(effect_position$effect_num$track_num)\n" 899 puts $playhandle "cop-remove\n" 900 set mfe(number_of_effects$track_num) [expr $mfe(number_of_effects$track_num)-1] 901 set start [expr $mfe(effect_position$effect_num$track_num)-$mfe(pan_position$track_num)] 902 for {set enb $start} {$enb <= 8} {incr enb} { 903 set mfe(effect_position$effect_num$track_num) [expr $mfe(effect_position$effect_num$track_num)-1] 904 } 905 } else { 906 set mfe(effect_attached$effect_num$track_num) "Connected" 907 $w.track$track_num.effect.type entryconfigure $effect_order_number -foreground black 908# $w.effect$track_num.type.$effect_num entryconfigure 4 -label "Connected" 909 set effect_to_add "" 910 if {[string match ladspa* $mfe(effect$effect_num$track_num)]==1} { 911 regsub ladspa_ $mfe(effect$effect_num$track_num) {} current_effect 912 set effect_to_add "-el:$current_effect," 913 } else { 914 set effect_to_add "-$mfe(effect$effect_num$track_num):" 915 } 916 for {set par 1} {$par <= $effect_param($mfe(effect$effect_num$track_num))} {incr par} { 917 if {$par>1} {set effect_to_add "$effect_to_add,"} 918 set effect_to_add "$effect_to_add$mfe(effect_parameter$par$effect_num$track_num)" 919 } 920 puts $playhandle "c-select $track_num\n" 921 puts $playhandle "cop-add $effect_to_add\n" 922 incr mfe(number_of_effects$track_num) 923 set mfe(effect_position$effect_num$track_num) [expr $mfe(number_of_effects$track_num)+$mfe(pan_position$track_num)] 924 } 925} 926 927proc effect_bypass2 {} { 928 global mfe track_num effect_num stop_command effect_param w 929 set w2 $w 930 set w "$w.track$track_num" 931 set effect_order_number [expr $effect_num-1] 932 if {$mfe(effect_attached$effect_num$track_num)=="Connected"} { 933 set mfe(effect_attached$effect_num$track_num) "Bypassed" 934 $w.effect.type entryconfigure $effect_order_number -foreground gray40 935 $w.effect.type.$effect_num entryconfigure 0 -label "Bypassed" -state disabled 936 } else { 937 set mfe(effect_attached$effect_num$track_num) "Connected" 938 $w.effect.type.$effect_num entryconfigure 0 -label "Connected" -state disabled 939 $w.effect.type entryconfigure $effect_order_number -foreground black 940 } 941 set w $w2 942} 943 944proc file_browser {} { 945 global mfe n types track_num track_num2 file_num numbre_of_tracks 946 if {$mfe(directory)==""} {set mfe(directory) "."} 947 if {$track_num == 0} { 948 set mfe(openfile0) [tk_getOpenFile -initialdir $mfe(directory) -filetypes $types] 949 open_file 950 } else { 951 set mfe(file$track_num) [tk_getOpenFile -initialdir $mfe(directory) -filetypes $types] 952 if {$mfe(file$track_num) != "" && $mfe(file$track_num) != "(Wave File)"} { 953 set mfe(track_status$track_num) "Play" 954 } 955 } 956} 957 958proc file_browser2 {} { 959 global mfe n types track_num save_as 960 set save_as 1 961 if {$mfe(directory)==""} {set mfe(directory) "."} 962 set mfe(openfile$track_num) [tk_getSaveFile -initialdir $mfe(directory) -filetypes $types] 963} 964 965proc wave_file_delete {} { 966 global track_num mfe 967 if {[winfo exists .wave_file_delete] != 0} {destroy .wave_file_delete} 968 toplevel .wave_file_delete 969 wm title .wave_file_delete "Wave File Delete Warning!" 970 message .wave_file_delete.out -width 300 -text "Are you sure you want to delete\nfile Track $track_num" 971 button .wave_file_delete.button1 -text Cancel -command {destroy .wave_file_delete} 972 button .wave_file_delete.button2 -text Ok -command { 973 if {[file exists $mfe(file$track_num)]==1} { 974 file delete $mfe(file$track_num) 975 } 976 destroy .wave_file_delete 977 messages [format "File $mfe(file$track_num) DELETED!"] 978 } 979 pack .wave_file_delete.out 980 pack .wave_file_delete.button1 -padx 30 -side left 981 pack .wave_file_delete.button2 -padx 30 982 983} 984 985proc move_to_locate {} { 986 global sp_minutes sp_seconds sp_seconds2 locate_name sp_minutes_loc sp_seconds_loc playhandle stop_command time_format start_time start_time2 987 if {$stop_command==0} { 988 if {$time_format=="Minutes"} { 989 set target_time [expr $sp_minutes_loc($locate_name)*60+$sp_seconds_loc($locate_name)] 990 } else { 991 set target_time $sp_seconds_loc($locate_name) 992 } 993 set sp_minutes $sp_minutes_loc($locate_name) 994 set sp_seconds $sp_seconds_loc($locate_name) 995 set sp_seconds2 $sp_seconds_loc($locate_name) 996 puts $playhandle "setpos $target_time" 997 set start_time2 [clock clicks -milliseconds] 998 tick 999 } else { 1000 set sp_minutes $sp_minutes_loc($locate_name) 1001 set sp_seconds $sp_seconds_loc($locate_name) 1002 display_position 1003 } 1004} 1005 1006proc tick {} { 1007 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 1008 if {$stop_command==1} {return} 1009 after 50 tick 1010 set elapsedMS [expr {[clock clicks -milliseconds] - $start_time2} - 250] 1011 set sp_seconds [expr $sp_seconds2 + {double($elapsedMS)/1000}] 1012 if {$sp_seconds >= 60 && $time_format=="Minutes"} { 1013 set start_time2 [expr $start_time2+60000+$sp_seconds2] 1014 set sp_minutes [expr $sp_minutes+1] 1015 } 1016 display_position 1017# if {$stop_command==3} { 1018# set stop_command 1 1019# set stop_command 3 } 1020} 1021 1022proc display_position {} { 1023 global sp_minutes sp_seconds time_format 1024 .mfe.low.seconds config -text [format "%.2f" $sp_seconds] 1025 if {$time_format=="Minutes"} { 1026 .mfe.low.minutes config -text [format "%02d" $sp_minutes] 1027 } 1028} 1029 1030proc mute_unmute {} { 1031 global stop_command mfe track_num playhandle 1032 1033 if {$stop_command==0} { 1034 puts $playhandle "c-select $track_num\nc-muting" 1035 } 1036} 1037 1038proc change_controller_on_the_fly {} { 1039 global stop_command mfe track_num effect_number playhandle preview 1040# set mfe(controller_number) [expr $mfe(controller_number)+$mfe(volume_position$track_num)] 1041 1042 if {$stop_command==0} { 1043 if {$preview==1} { 1044 puts $playhandle "c-select $track_num\ncop-select $mfe(effect_position1$track_num) \ncopp-select $mfe(param_number)\ncopp-set $mfe($mfe(param_value))" 1045 } else { 1046 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))" 1047 } 1048 } 1049} 1050 1051proc change_volume_on_the_fly {} { 1052 global stop_command mfe track_num effect_number playhandle 1053 1054 if {$stop_command==0} { 1055 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]" 1056 } 1057} 1058 1059proc change_pan_on_the_fly {} { 1060 global stop_command mfe track_num effect_number playhandle 1061 1062 if {$stop_command==0} { 1063 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)" 1064 } 1065} 1066 1067proc stop {} { 1068 global stop_command playhandle punch punch_y punch_t sp_minutes2 sp_seconds2 number_of_tracks mfe start_time w 1069 puts $playhandle "s\n" 1070 puts $playhandle "dump-position \n" 1071 puts $playhandle "q\n" 1072 set stop_command 1 1073 fileevent $playhandle writable read_stop_position 1074 for {set n 1} {$n <= $number_of_tracks} {incr n} { 1075 if {$mfe(track_status$n)!= "Deleted"} { 1076 $w.track$n.rec configure -state normal 1077 $w.track$n.delete configure -state normal 1078 $w.track$n.file configure -state normal 1079 $w.track$n.open configure -state normal 1080 $w.track$n.track_properties configure -state normal 1081 $w.track$n.dev_text configure -state normal 1082 $w.track$n.dev_entry configure -state normal 1083 $w.track$n.chn_text configure -state normal 1084 $w.track$n.chn_entry configure -state normal 1085 $w.track$n.eca_tools configure -state normal 1086 } 1087 } 1088 .mfe.up1.button configure -state normal 1089 .mfe.up2.mixdown configure -state normal 1090# .mfe.up2.metronome configure -state normal 1091 .mfe.up2.addtrack configure -state normal 1092 .mfe.up2.del_all_tracks configure -state normal 1093 .mfe.up2.quit configure -state normal 1094 .mfe.low.multich2 configure -state normal 1095# .mfe.low.rew_to_begin configure -state normal 1096# .mfe.low.rew_5 configure -state normal 1097# .mfe.low.forw_5 configure -state normal 1098 1099 1100 if {$punch==2} { 1101 set punch 0 1102 for {set n 1} {$n <= $number_of_tracks} {incr n} { 1103 if {$mfe(track_rec_status$n)=="Yes"} { 1104 1105 if {$mfe(latency)!=0} { 1106 set latency_seconds [expr $mfe(latency)/1000] 1107 set cmd2 "exec [list ecasound -i:$mfe(temp_file$n) -y:$latency_seconds -o:$mfe(temp_file$n)]" 1108 catch {eval $cmd2} exec_out 1109 } 1110 1111 set cmd "exec [list ecasound -i:$mfe(temp_file2$n) $punch_t -o:$mfe(file$n) $punch_y $punch_t ]" 1112 catch {eval $cmd} exec_out 1113 set total_punch_out [expr $mfe(punch_out_minutes)*60+$mfe(punch_out_seconds)] 1114 set total_punch_in [expr $mfe(punch_in_minutes)*60+$mfe(punch_in_seconds)] 1115 if {$start_time>$total_punch_in} { 1116 if {$start_time<$total_punch_out} { 1117 set real_proc_time [expr $start_time-$total_punch_in] 1118 set punch_t "-t:$real_proc_time" 1119 } 1120 set cmd2 "exec [list ecasound -i:$mfe(temp_file$n) $punch_y $punch_t -o:$mfe(file$n) $punch_y $punch_t ]" 1121 catch {eval $cmd2} exec_out 1122 } 1123 } 1124 file delete $mfe(temp_file$n) 1125 file delete $mfe(temp_file2$n) 1126 } 1127 } else { 1128 1129 if {$mfe(latency)!=0} { 1130 set latency_seconds [expr $mfe(latency)/1000] 1131 for {set n 1} {$n <= $number_of_tracks} {incr n} { 1132 if {$mfe(track_rec_status$n)=="Yes"} { 1133 set cmd2 "exec [list ecasound -i:$mfe(file$n) -y:$latency_seconds -o:$mfe(file$n)]" 1134 catch {eval $cmd2} exec_out 1135 } 1136 } 1137 } 1138 } 1139 1140} 1141 1142proc read_stop_position {} { 1143 global sp_seconds sp_minutes sp_seconds2 sp_minutes2 playhandle start_time mfe 1144 close $playhandle 1145 set tkeca_log [open "~/tkeca.log" r] 1146 while {[gets $tkeca_log input_line]!= -1} { 1147 if {[string match dump-position* $input_line] ==1} { 1148 regsub dump-position $input_line {} input_line 1149 regsub { } $input_line {} start_time 1150 set sp_minutes2 [expr int($start_time/60)] 1151 set sp_seconds2 [expr $start_time-60*$sp_minutes] 1152 if {[expr $sp_seconds+$sp_minutes*60-$start_time] < 1} { 1153 set sp_minutes [expr int($start_time/60)] 1154 set sp_seconds [expr $start_time-60*$sp_minutes] 1155 } else { 1156 set sp_minutes 0 1157 set sp_seconds 0 1158 } 1159 display_position 1160 } 1161 } 1162 close $tkeca_log 1163} 1164 1165proc messages {msg} { 1166 if {[winfo exists .msg] != 0} {destroy .msg} 1167 toplevel .msg 1168 wm title .msg "Tkeca Message" 1169 message .msg.out -width 300 -text $msg 1170 button .msg.button -text Ok -command {destroy .msg} 1171 pack .msg.out -expand 1 -fill x 1172 pack .msg.button 1173} 1174 1175proc ecanormalize {} { 1176 global mfe track_num 1177 if {[winfo exists .normalize] != 0} {destroy .normalize} 1178 toplevel .normalize 1179 wm title .normalize "Normalize Warning!" 1180 message .normalize.out -width 300 -text "Are you sure you want to Normalize\nfiles on Track $track_num" 1181 button .normalize.button1 -text Cancel -command {destroy .normalize} 1182 button .normalize.button2 -text Ok -command { 1183 set pointer "file$track_num" 1184 if {[string length $mfe($pointer)] > 3} { 1185 set cmd "exec ecanormalize $mfe($pointer) &" 1186 catch {eval $cmd} exec_out 1187 destroy .normalize 1188 messages [format "File $mfe(file$track_num) NORMALIZED!"] 1189 } else { 1190 destroy .normalize 1191 } 1192 } 1193 pack .normalize.out 1194 pack .normalize.button1 -padx 30 -side left 1195 pack .normalize.button2 -padx 30 1196} 1197 1198proc ecafixdc {} { 1199 global mfe track_num 1200 if {[winfo exists .fixdc] != 0} {destroy .fixdc} 1201 toplevel .fixdc 1202 wm title .fixdc "Fix DC Warning!" 1203 message .fixdc.out -width 300 -text "Are you sure you want to fix DC Offset\nin files on Track $track_num" 1204 button .fixdc.button1 -text Cancel -command {destroy .fixdc} 1205 button .fixdc.button2 -text Ok -command { 1206 set pointer "file$track_num" 1207 if {[string length $mfe($pointer)] > 3} { 1208 set cmd "exec ecafixdc $mfe($pointer) &" 1209 catch {eval $cmd} exec_out 1210 destroy .fixdc 1211# messages [format "DC Offset fixed in file\n$mfe(file$track_num)"] 1212 } else { 1213 destroy .fixdc 1214 } 1215 } 1216 pack .fixdc.out 1217 pack .fixdc.button1 -padx 35 -side left 1218 pack .fixdc.button2 -padx 35 1219} 1220 1221proc wave_edit {} { 1222 global mfe track_num wave_editor file_num 1223 set pointer "file$track_num" 1224 set cmd "exec $wave_editor \"$mfe($pointer)\"" 1225 catch {eval $cmd} exec_out 1226} 1227 1228proc save_file {} { 1229 global mfe number_of_tracks sp_minutes sp_seconds save_as track_num types sp_minutes_loc sp_seconds_loc 1230 unsolo_all 1231 if {$mfe(openfile0) == ""} { 1232 if {$save_as == 1} {return} else { 1233 set types {{{mfe files} {*.mfe}} {{all} {*}}} 1234 set track_num 0 1235 file_browser2 1236 if {$mfe(openfile0) == ""} {return} 1237 1238 } 1239 } 1240 if {[string match *.mfe* $mfe(openfile0)] == 0 && [string match *.MFE* $mfe(openfile0)] == 0} { 1241 set mfe(openfile0) "$mfe(openfile0).mfe" 1242 } 1243 set real_number_of_tracks $number_of_tracks 1244 for {set n 1} {$n <= $number_of_tracks} {incr n} { 1245 if {$mfe(track_status$n)=="Deleted"} { 1246 set real_number_of_tracks [expr $real_number_of_tracks-1] 1247 } 1248 } 1249 set file_to_save [open "$mfe(openfile0)" w] 1250 puts $file_to_save "This file was created by tkeca.tcl version 4.4.2" 1251 puts $file_to_save "$real_number_of_tracks" 1252 puts $file_to_save "$mfe(directory)" 1253 puts $file_to_save "$sp_minutes" 1254 puts $file_to_save "$sp_seconds" 1255 puts $file_to_save "$mfe(master)" 1256 puts $file_to_save "$mfe(multichannel)" 1257 puts $file_to_save "$mfe(rec_prop_bits)" 1258 puts $file_to_save "$mfe(rec_prop_channels)" 1259 puts $file_to_save "$mfe(rec_prop_srate)" 1260 puts $file_to_save "$mfe(rec_prop_interl)" 1261 puts $file_to_save "$mfe(latency)" 1262 puts $file_to_save "$mfe(mixdown_normalize)" 1263 puts $file_to_save "$mfe(mixdown_normalize_amp)" 1264 puts $file_to_save "$mfe(mixdown_normalize_lev)" 1265 1266 for {set n 0} {$n <= $number_of_tracks} {incr n} { 1267 if {$mfe(track_status$n)!="Deleted"} { 1268 puts $file_to_save "$mfe(rec_prop_bits$n)" 1269 puts $file_to_save "$mfe(rec_prop_channels$n)" 1270 puts $file_to_save "$mfe(rec_prop_srate$n)" 1271 puts $file_to_save "$mfe(rec_prop_interl$n)" 1272 puts $file_to_save "$mfe(track_name$n)" 1273 puts $file_to_save "$mfe(file$n)" 1274 puts $file_to_save "$mfe(device$n)" 1275 puts $file_to_save "$mfe(chn$n)" 1276 puts $file_to_save "$mfe(track_status$n)" 1277 puts $file_to_save "$mfe(track_rec_status$n)" 1278 for {set en 1} {$en <= 8} {incr en} { 1279 puts $file_to_save "$mfe(effect$en$n)" 1280 puts $file_to_save "$mfe(effect_attached$en$n)" 1281 if {$mfe(effect$en$n)!="None"} { 1282 puts $file_to_save "$mfe(effect_parameters$en$n)" 1283 for {set p 1} {$p <= $mfe(effect_parameters$en$n)} {incr p} { 1284 puts $file_to_save "$mfe(effect_parameter$p$en$n)" 1285 } 1286 } 1287 } 1288 puts $file_to_save "$mfe(volume$n)" 1289 puts $file_to_save "$mfe(pan$n)" 1290 1291 } 1292 } 1293 1294 for {set n 1} {$n <= 16} {incr n} { 1295 puts $file_to_save "$sp_minutes_loc($n)" 1296 puts $file_to_save "$sp_seconds_loc($n)" 1297 } 1298 puts $file_to_save "$mfe(punch_in_minutes)" 1299 puts $file_to_save "$mfe(punch_in_seconds)" 1300 puts $file_to_save "$mfe(punch_out_minutes)" 1301 puts $file_to_save "$mfe(punch_out_seconds)" 1302 1303 puts $file_to_save "\n" 1304 close $file_to_save 1305 messages [format "File $mfe(openfile0) saved"] 1306} 1307 1308proc open_file {} { 1309 global mfe mfe_temp number_of_tracks sp_minutes sp_seconds w sp_minutes_loc sp_seconds_loc prev_loaded_file 1310 if {$number_of_tracks > 0} { 1311 del_all_tracks 1312 } 1313 if {$mfe(openfile0) == ""} { 1314 return 1315 } 1316 set line_number 0 1317 set file_to_open [open "$mfe(openfile0)" r] 1318 while {[gets $file_to_open input_line] != -1 } { 1319 set temp_file($line_number) $input_line 1320 incr line_number 1321 } 1322 set line_number 0 1323 set number_of_effects 8 1324 set tkeca_version $temp_file($line_number) 1325 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"} { 1326 set number_of_effects 4 1327 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"} { 1328 messages [format "File $mfe(openfile0)\nwas not created by tkeca.tcl 3.0.0 or superior"] 1329 set mfe(openfile0) "" 1330 return 1331 } 1332 } 1333 incr line_number 1334# set number_of_tracks3 $number_of_tracks 1335 set number_of_tracks $temp_file($line_number) 1336# set number_of_tracks2 $number_of_tracks 1337# for {set number_of_tracks 1} {$number_of_tracks <= $number_of_tracks3} {incr number_of_tracks} { 1338# set w "$w2.track$number_of_tracks" 1339# destroy $w.number$number_of_tracks 1340# destroy $w.delete$number_of_tracks 1341# destroy $w.name$number_of_tracks 1342# destroy $w.track_properties$number_of_tracks 1343# destroy $w.wave_info$number_of_tracks 1344# destroy $w.dev_text$number_of_tracks 1345# destroy $w.dev_entry$number_of_tracks 1346# destroy $w.chn_text$number_of_tracks 1347# destroy $w.chn_entry$number_of_tracks 1348# destroy $w.solo$number_of_tracks 1349# destroy $w.play$number_of_tracks 1350# destroy $w.rec$number_of_tracks 1351# destroy $w.effect1$number_of_tracks 1352# destroy $w.effect2$number_of_tracks 1353# destroy $w.effect3$number_of_tracks 1354# destroy $w.effect4$number_of_tracks 1355# destroy $w.eca_tools$number_of_tracks 1356# destroy $w.pan$number_of_tracks 1357# destroy $w.slide$number_of_tracks 1358# } 1359# set w $w2 1360# set number_of_tracks $number_of_tracks2 1361 incr line_number 1362 set mfe(directory) $temp_file($line_number) 1363 incr line_number 1364 set sp_minutes $temp_file($line_number) 1365 incr line_number 1366 set sp_seconds $temp_file($line_number) 1367 incr line_number 1368 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"} { 1369 set mfe(master) $temp_file($line_number) 1370 incr line_number 1371 } 1372 1373 set mfe(multichannel) $temp_file($line_number) 1374 incr line_number 1375 1376 if {$tkeca_version == "This file was created by tkeca.tcl version 4.4.2"} { 1377 set mfe(rec_prop_bits) $temp_file($line_number) 1378 incr line_number 1379 set mfe(rec_prop_channels) $temp_file($line_number) 1380 incr line_number 1381 set mfe(rec_prop_srate) $temp_file($line_number) 1382 incr line_number 1383 set mfe(rec_prop_interl) $temp_file($line_number) 1384 incr line_number 1385 set mfe(latency) $temp_file($line_number) 1386 incr line_number 1387 set $mfe(mixdown_normalize) $temp_file($line_number) 1388 incr line_number 1389 set $mfe(mixdown_normalize_amp) $temp_file($line_number) 1390 incr line_number 1391 set $mfe(mixdown_normalize_lev) $temp_file($line_number) 1392 incr line_number 1393 set l 0 1394 } else { 1395 set mfe(rec_prop_bits0) $temp_file($line_number) 1396 incr line_number 1397 set mfe(rec_prop_channels0) $temp_file($line_number) 1398 incr line_number 1399 set mfe(rec_prop_srate0) $temp_file($line_number) 1400 incr line_number 1401 set mfe(rec_prop_interl0) $temp_file($line_number) 1402 incr line_number 1403 set l 1 1404 } 1405 1406 for {set n $l} {$n <= $number_of_tracks} {incr n} { 1407 set mfe(rec_prop_bits$n) $temp_file($line_number) 1408 incr line_number 1409 set mfe(rec_prop_channels$n) $temp_file($line_number) 1410 incr line_number 1411 set mfe(rec_prop_srate$n) $temp_file($line_number) 1412 incr line_number 1413 set mfe(rec_prop_interl$n) $temp_file($line_number) 1414 incr line_number 1415 if {$number_of_effects==4} { 1416 set mfe(track_name$n) "Track $n" 1417 } else { 1418 set mfe(track_name$n) $temp_file($line_number) 1419 incr line_number 1420 } 1421 set mfe(file$n) $temp_file($line_number) 1422 incr line_number 1423 set mfe(device$n) $temp_file($line_number) 1424 incr line_number 1425 set mfe(chn$n) $temp_file($line_number) 1426 incr line_number 1427 set mfe(track_status$n) $temp_file($line_number) 1428 incr line_number 1429 set mfe(track_rec_status$n) $temp_file($line_number) 1430 incr line_number 1431 for {set en 1} {$en <= $number_of_effects} {incr en} { 1432 set mfe(effect$en$n) $temp_file($line_number) 1433 set mfe_temp(effect$en$n) $temp_file($line_number) 1434 incr line_number 1435 if {$number_of_effects==4} { 1436 if {$mfe(effect$en$n)!="None"} { 1437 set mfe(effect_attached$en$n) "Connected" 1438 } else { 1439 set mfe(effect_attached$en$n) "Bypassed" 1440 } 1441 } else { 1442 set mfe(effect_attached$en$n) $temp_file($line_number) 1443 incr line_number 1444 } 1445 if {$mfe(effect$en$n)!="None"} { 1446 set mfe(effect_parameters$en$n) $temp_file($line_number) 1447 incr line_number 1448 for {set p 1} {$p <= $mfe(effect_parameters$en$n)} {incr p} { 1449 set mfe(effect_parameter$p$en$n) $temp_file($line_number) 1450 incr line_number 1451 } 1452 } 1453 } 1454 if {$number_of_effects==4} { 1455 set mfe(effect5$n) "None" 1456 set mfe(effect_attached5$n) "Bypassed" 1457 set mfe(effect6$n) "None" 1458 set mfe(effect_attached6$n) "Bypassed" 1459 set mfe(effect7$n) "None" 1460 set mfe(effect_attached7$n) "Bypassed" 1461 set mfe(effect8$n) "None" 1462 set mfe(effect_attached8$n) "Bypassed" 1463 } 1464 set mfe(volume$n) $temp_file($line_number) 1465 incr line_number 1466 set mfe(pan$n) $temp_file($line_number) 1467 incr line_number 1468 set line_number2 $line_number 1469 set prev_loaded_file 1 1470 set number_of_tracks3 $number_of_tracks 1471 set number_of_tracks $n 1472 set n2 $n 1473# puts "En open_file w:$w y w2:$w2" 1474 if {$n!=0} { 1475 add_track 1476 } 1477 1478 set number_of_tracks $number_of_tracks3 1479 set n $n2 1480 set line_number $line_number2 1481 } 1482 1483 for {set locn 1} {$locn <= 16} {incr locn} { 1484 set sp_minutes_loc($locn) $temp_file($line_number) 1485 incr line_number 1486 set sp_seconds_loc($locn) $temp_file($line_number) 1487 incr line_number 1488 } 1489 set mfe(punch_in_minutes) $temp_file($line_number) 1490 incr line_number 1491 set mfe(punch_in_seconds) $temp_file($line_number) 1492 incr line_number 1493 set mfe(punch_out_minutes) $temp_file($line_number) 1494 incr line_number 1495 set mfe(punch_out_seconds) $temp_file($line_number) 1496display_position 1497} 1498 1499proc track_data_reset {} { 1500 global mfe track_num 1501 set mfe(rec_prop_bits$track_num) "Signed 16Bit Little Endian" 1502 set mfe(rec_prop_channels$track_num) "1" 1503 set mfe(rec_prop_srate$track_num) "44100" 1504 set mfe(rec_prop_interl$track_num) "i" 1505 set mfe(file$track_num) "(Wave File)" 1506 set mfe(device$track_num) "(I / O Dev.)" 1507 set mfe(chn$track_num) "n/a" 1508 set mfe(track_solo$track_num) "No Solo" 1509 set mfe(track_status$track_num) "Play" 1510 set mfe(track_rec_status$track_num) "No" 1511 for {set en 1} {$en <= 8} {incr en} { 1512 set mfe(effect$en$track_num) "None" 1513 set mfe_temp(effect$en$track_num) "None" 1514 set mfe(effect_attached$en$track_num) "Bypassed" 1515 } 1516 set mfe(volume$track_num) 100 1517 set mfe(pan$track_num) 50 1518} 1519 1520proc del_all_tracks {} { 1521 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 1522 unsolo_all 1523 .mfe.up1.save configure -state disabled 1524 .mfe.up1.saveas configure -state disabled 1525 .mfe.up2.exportecs configure -state disabled 1526 .mfe.up2.mixdown configure -state disabled 1527 1528 set w2 $w 1529 for {set number_of_tracks1 1} {$number_of_tracks1 <= $number_of_tracks} {incr number_of_tracks1} { 1530 set w "$w2.track$number_of_tracks1" 1531 set mfe(track_status$number_of_tracks1) "Deleted" 1532 destroy $w.number$number_of_tracks1 1533 destroy $w.delete$number_of_tracks1 1534 destroy $w.file$number_of_tracks1 1535 destroy $w.open$number_of_tracks1 1536 destroy $w.track_properties$number_of_tracks1 1537 destroy $w.dev_text$number_of_tracks1 1538 destroy $w.dev_entry$number_of_tracks1 1539 destroy $w.chn_text$number_of_tracks1 1540 destroy $w.chn_entry$number_of_tracks1 1541 destroy $w.solo$number_of_tracks1 1542 destroy $w.play$number_of_tracks1 1543 destroy $w.rec$number_of_tracks1 1544 destroy $w.effect$number_of_tracks1 1545 destroy $w.eca_tools$number_of_tracks1 1546 destroy $w.pan$number_of_tracks1 1547 destroy $w.slide$number_of_tracks1 1548 destroy $w 1549# set track_num $number_of_tracks1 1550# track_data_reset 1551 } 1552 set w $w2 1553 set number_of_tracks 0 1554 set mfe(openfile0) "" 1555 set play_command "play" 1556 set mfe(multichannel) 0 1557 set mfe(master) 100 1558 set mfe(rec_prop_bits) "Signed 16Bit Little Endian" 1559 set mfe(rec_prop_channels) "2" 1560 set mfe(rec_prop_srate) "44100" 1561 set mfe(rec_prop_interl) "i" 1562 set mfe(rec_prop_bits0) "Signed 16Bit Little Endian" 1563 set mfe(rec_prop_channels0) "2" 1564 set mfe(rec_prop_srate0) "44100" 1565 set mfe(rec_prop_interl0) "i" 1566 set mfe(rec_prop_bitsMD) "Signed 16Bit Little Endian" 1567 set mfe(rec_prop_channelsMD) "2" 1568 set mfe(rec_prop_srateMD) "44100" 1569 set mfe(rec_prop_interlMD) "i" 1570 set sp_minutes 0 1571 set sp_seconds 0 1572 set sp_minutes_loc(1) 0 1573 set sp_minutes_loc(2) 0 1574 set sp_minutes_loc(3) 0 1575 set sp_minutes_loc(4) 0 1576 set sp_minutes_loc(5) 0 1577 set sp_minutes_loc(6) 0 1578 set sp_minutes_loc(7) 0 1579 set sp_minutes_loc(8) 0 1580 set sp_minutes_loc(9) 0 1581 set sp_minutes_loc(10) 0 1582 set sp_minutes_loc(11) 0 1583 set sp_minutes_loc(12) 0 1584 set sp_minutes_loc(13) 0 1585 set sp_minutes_loc(14) 0 1586 set sp_minutes_loc(15) 0 1587 set sp_minutes_loc(16) 0 1588 set sp_seconds_loc(1) 0 1589 set sp_seconds_loc(2) 0 1590 set sp_seconds_loc(3) 0 1591 set sp_seconds_loc(4) 0 1592 set sp_seconds_loc(5) 0 1593 set sp_seconds_loc(6) 0 1594 set sp_seconds_loc(7) 0 1595 set sp_seconds_loc(8) 0 1596 set sp_seconds_loc(9) 0 1597 set sp_seconds_loc(10) 0 1598 set sp_seconds_loc(11) 0 1599 set sp_seconds_loc(12) 0 1600 set sp_seconds_loc(13) 0 1601 set sp_seconds_loc(14) 0 1602 set sp_seconds_loc(15) 0 1603 set sp_seconds_loc(16) 0 1604 1605} 1606 1607proc proc_about {} { 1608messages [format "Tkeca is a Tcl/Tk frontend for Kai Vehmanen's Ecasound 1609Copyright (C) 2002-2003 Luis Pablo Gasparotto 1610This program is free software; you can redistribute it and/or modify \ 1611it under the terms of the GNU General Public License as published by \ 1612the Free Software Foundation; either version 2 of the License, or \ 1613(at your option) any later version. 1614 1615This program is distributed in the hope that it will be useful, \ 1616but WITHOUT ANY WARRANTY; without even the implied warranty of \ 1617MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \ 1618GNU General Public License for more details. 1619 1620You should have received a copy of the GNU General Public License \ 1621along with this program; if not, write to the Free Software \ 1622Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1623 1624To contact me: lpgasparotto@gmail.com"]} 1625 1626proc proc_exit {} { 1627 global mfe mfe_temp number_of_tracks sp_minutes sp_seconds sp_minutes_loc sp_seconds_loc saved exit_yes save_as 1628 set saved 1 1629 set line_number 0 1630 1631 if {$number_of_tracks == 0} { 1632 set saved 2 1633 } 1634 if {$mfe(openfile0) == ""} { 1635 set saved [expr $saved - 1]} else { 1636 set file_to_open [open "$mfe(openfile0)" r] 1637 set real_number_of_tracks $number_of_tracks 1638 for {set n 1} {$n <= $number_of_tracks} {incr n} { 1639 if {$mfe(track_status$n)=="Deleted"} { 1640 set real_number_of_tracks [expr $real_number_of_tracks-1] 1641 } 1642 } 1643 while {[gets $file_to_open input_line] != -1 } { 1644 set temp_file($line_number) $input_line 1645 incr line_number 1646 } 1647 set line_number 1 1648 if {$real_number_of_tracks != $temp_file($line_number)} {set saved 0} 1649 incr line_number 1650 if {$mfe(directory) != $temp_file($line_number)} {set saved 0} 1651 incr line_number 1652# if {$sp_minutes != $temp_file($line_number)} {set saved 0} 1653 incr line_number 1654# if {$sp_seconds != $temp_file($line_number)} {set saved 0} 1655 incr line_number 1656 if {$mfe(master) != $temp_file($line_number)} {set saved 0} 1657 incr line_number 1658 if {$mfe(multichannel) != $temp_file($line_number)} {set saved 0} 1659 incr line_number 1660 if {$mfe(rec_prop_bits) != $temp_file($line_number)} {set saved 0} 1661 incr line_number 1662 if {$mfe(rec_prop_channels) != $temp_file($line_number)} {set saved 0} 1663 incr line_number 1664 if {$mfe(rec_prop_srate) != $temp_file($line_number)} {set saved 0} 1665 incr line_number 1666 if {$mfe(rec_prop_interl) != $temp_file($line_number)} {set saved 0} 1667 incr line_number 1668 if {$mfe(latency) != $temp_file($line_number)} {set saved 0} 1669 incr line_number 1670 if {$mfe(mixdown_normalize) != $temp_file($line_number)} {set saved 0} 1671 incr line_number 1672 if {$mfe(mixdown_normalize_amp) != $temp_file($line_number)} {set saved 0} 1673 incr line_number 1674 if {$mfe(mixdown_normalize_lev) != $temp_file($line_number)} {set saved 0} 1675 incr line_number 1676 1677 for {set n 0} {$n <= $number_of_tracks && $saved >0} {incr n} { 1678 if {$mfe(track_status$n)!="Deleted"} { 1679 if {$mfe(rec_prop_bits$n) != $temp_file($line_number)} {set saved 0} 1680 incr line_number 1681 if {$mfe(rec_prop_channels$n) != $temp_file($line_number)} {set saved 0} 1682 incr line_number 1683 if {$mfe(rec_prop_srate$n) != $temp_file($line_number)} {set saved 0} 1684 incr line_number 1685 if {$mfe(rec_prop_interl$n) != $temp_file($line_number)} {set saved 0} 1686 incr line_number 1687 if {$mfe(track_name$n)!= $temp_file($line_number)} {set saved 0 } 1688 incr line_number 1689 if {$mfe(file$n)!= $temp_file($line_number)} {set saved 0 } 1690 incr line_number 1691 if {$mfe(device$n) != $temp_file($line_number)} {set saved 0} 1692 incr line_number 1693 if {$mfe(chn$n) != $temp_file($line_number)} {set saved 0} 1694 incr line_number 1695 if {$mfe(track_status$n) != $temp_file($line_number)} {set saved 0} 1696 incr line_number 1697 if {$mfe(track_rec_status$n) != $temp_file($line_number)} {set saved 0} 1698 incr line_number 1699 for {set en 1} {$en <= 8 && $saved > 0} {incr en} { 1700 if {$mfe(effect$en$n) != $temp_file($line_number)} {set saved 0} 1701 if {$mfe_temp(effect$en$n) != $temp_file($line_number)} {set saved 0} 1702 incr line_number 1703 if {$mfe(effect_attached$en$n) != $temp_file($line_number)} {set saved 0} 1704 incr line_number 1705 if {$mfe(effect$en$n)!="None"} { 1706 set effect_parameters $temp_file($line_number) 1707 incr line_number 1708 for {set p 1} {$p <= $effect_parameters && $saved >0} {incr p} { 1709 if {$mfe(effect_parameter$p$en$n) != $temp_file($line_number)} {set saved 0} 1710 incr line_number 1711 } 1712 } 1713 } 1714 if {$mfe(volume$n) != $temp_file($line_number)} {set saved 0} 1715 incr line_number 1716 if {$mfe(pan$n) != $temp_file($line_number)} {set saved 0} 1717 incr line_number 1718 } 1719 } 1720 for {set n 1} {$n <= 16} {incr n} { 1721 if {$sp_minutes_loc($n)!= $temp_file($line_number)} {set saved 0} 1722 incr line_number 1723 if {$sp_seconds_loc($n)!= $temp_file($line_number)} {set saved 0} 1724 incr line_number 1725 } 1726 if {$mfe(punch_in_minutes)!= $temp_file($line_number)} {set saved 0 } 1727 incr line_number 1728 if {$mfe(punch_in_seconds)!= $temp_file($line_number)} {set saved 0 } 1729 incr line_number 1730 if {$mfe(punch_out_minutes)!= $temp_file($line_number)} {set saved 0 } 1731 incr line_number 1732 if {$mfe(punch_out_seconds)!= $temp_file($line_number)} {set saved 0 } 1733 incr line_number 1734 } 1735 if {$saved == 0} { 1736 if {[winfo exists .save_alert] != 0} {destroy .save_alert} 1737 toplevel .save_alert 1738 wm title .save_alert "Lose Changes Warning!" 1739 message .save_alert.out -width 300 -text "You will lose the latest changes! \nWhat do you want to do?" 1740 button .save_alert.button1 -text Cancel -command { 1741 destroy .save_alert 1742 } 1743 button .save_alert.button2 -text "Lose changes" -command { 1744 destroy .save_alert 1745 if {$exit_yes==1} {exit} 1746 if {$exit_yes==2} {del_all_tracks} 1747 if {$exit_yes==5} { 1748 del_all_tracks 1749 file_browser 1750 } 1751 } 1752 button .save_alert.button3 -text "Save changes" -command { 1753 destroy .save_alert 1754 set save_as 0 1755 if {$exit_yes==1} { 1756 save_file 1757 exit} 1758 if {$exit_yes==2} { 1759 save_file 1760 del_all_tracks 1761 } 1762 if {$exit_yes==5} { 1763 save_file 1764 del_all_tracks 1765 file_browser 1766 } 1767 } 1768 pack .save_alert.out 1769 pack .save_alert.button1 -padx 10 -side left 1770 pack .save_alert.button2 -padx 10 -side left 1771 pack .save_alert.button3 -padx 10 1772 } else { 1773 if {$exit_yes==1} {exit} 1774 if {$exit_yes==2} {del_all_tracks} 1775 if {$exit_yes==5} { 1776 del_all_tracks 1777 file_browser 1778 } 1779 } 1780} 1781 1782proc export_ecs {} { 1783 global export_ecs eca_string mfe 1784 set export_ecs 1 1785 play 1786 set export_ecs 0 1787 set types {{{Ecasound Chain Setup} {*.ecs}}} 1788 if {$mfe(directory)==""} {set mfe(directory) "."} 1789 set ecs_file [tk_getSaveFile -initialdir $mfe(directory) -filetypes $types] 1790 if {$ecs_file==""} {return} 1791 if {[string match *.ecs* $ecs_file] == 0 && [string match *.ECS* $ecs_file] == 0} { 1792 set ecs_file "$ecs_file.ecs" 1793 } 1794 set ecs_exported_file [open "$ecs_file" w] 1795 puts $ecs_exported_file $eca_string 1796 close $ecs_exported_file 1797 messages [format "Exported to\n$ecs_file"] 1798} 1799 1800proc log {} { 1801 global mfe logarithmic position mfe_temp2 1802 if {$logarithmic == 1} { 1803 set mfe($position) [expr $mfe_temp2($position)/100] 1804 set mfe($position) [expr $mfe($position)*$mfe($position)] 1805 } else {set mfe($position) $mfe_temp2($position)} 1806} 1807 1808proc effect_list {} { 1809 global mfe mfe_temp track_num effect_num eca_effects effect_index effect_name bgcolor stop_command 1810 if {$stop_command==0} { 1811 messages [format "Please, press the STOP button\nbefore add new effects to Track $track_num"] 1812 return 1813 } 1814 if {[winfo exists .effect$effect_num$track_num] != 0} {destroy .effect$effect_num$track_num} 1815 toplevel .effect$effect_num$track_num 1816 wm title .effect$effect_num$track_num "Effect List" 1817 frame .effect$effect_num$track_num.list 1818 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 1819 scrollbar .effect$effect_num$track_num.list.ysbar -width 8 -command {.effect$effect_num$track_num.list.list yview} 1820 pack .effect$effect_num$track_num.list.list -side left -fill both -expand yes 1821 pack .effect$effect_num$track_num.list.ysbar -side left -fill y 1822 pack .effect$effect_num$track_num.list -in .effect$effect_num$track_num -side top -fill both -expand yes 1823 .effect$effect_num$track_num.list.list insert end "None" 1824 for {set en 1} {$en <= $eca_effects } {incr en} { 1825 .effect$effect_num$track_num.list.list insert end $effect_name($effect_index($en)) 1826 } 1827 frame .effect$effect_num$track_num.buttons 1828 button .effect$effect_num$track_num.buttons.button1 -text Ok -command { 1829 set selected [.effect$effect_num$track_num.list.list curselection] 1830 if {$selected < 1} {set selected 0} 1831 set mfe_temp(effect$effect_num$track_num) $effect_index($selected) 1832 set mfe(effect_attached$effect_num$track_num) "Bypassed" 1833 effect_bypass 1834 effect} 1835 button .effect$effect_num$track_num.buttons.button2 -text Cancel -command { 1836 destroy .effect$effect_num$track_num 1837 return} 1838 pack .effect$effect_num$track_num.buttons.button1 -padx 5 -side left -fill x -expand yes 1839 pack .effect$effect_num$track_num.buttons.button2 -padx 5 -side left -fill x -expand yes 1840 pack .effect$effect_num$track_num.buttons -in .effect$effect_num$track_num -pady 5 -side bottom -fill x 1841} 1842 1843proc close_effect {} { 1844 global mfe mfe_temp effect2 track stop_command 1845 set mfe(effect$effect2$track) $mfe_temp(effect$effect2$track) 1846 destroy .effect$effect2$track 1847} 1848 1849proc options {} { 1850 global mt_font option_value option_parameter bgcolor bgcolor2 line_number ladspa_path ecasoundrc 1851 if {[winfo exists .options] != 0} {destroy .options} 1852 set rc_infile [open $ecasoundrc r] 1853 set line_number 0 1854 toplevel .options -width 600 1855 wm title .options "Ecasound Global Settings" 1856 frame .options.up 1857 message .options.up.out -width 540 -text "Global Settings" 1858 pack .options.up.out -side top 1859 pack .options.up -pady 2 1860 #-expand 1 -fill x -side top 1861 1862 frame .options.med 1863 canvas .options.med.canvas -width 520 -height 300 -yscrollcommand [list .options.med.yscroll set] 1864 set w2 [frame .options.med.canvas.f -bd 0] 1865 .options.med.canvas create window 0 0 -anchor nw -window $w2 -tags options 1866 scrollbar .options.med.yscroll -orient vertical -width 8 -command [list .options.med.canvas yview] 1867 while {[gets $rc_infile input_line] != -1} { 1868 set temp_file($line_number) $input_line 1869 set current_parameter [split $input_line =] 1870 set option_parameter($line_number) [lindex $current_parameter 0] 1871 regsub -all {( )} $option_parameter($line_number) {} option_parameter($line_number) 1872 set option_value($line_number) [lindex $current_parameter 1] 1873 regsub -all {( )} $option_value($line_number) {} option_value($line_number) 1874 if {[string match *adspa* $option_parameter($line_number)] == 1} { 1875 set ladspa_path $option_value($line_number) 1876 } 1877 .options.med.canvas config -scrollregion "0 0 0 [expr $line_number *23]" 1878# set w3 $w2.$line_number 1879# frame $w3 1880 label $w2.param$line_number -width 30 -font $mt_font -text $option_parameter($line_number) -anchor w 1881# $w2 create label -width 30 -font $mt_font -text $option_parameter($line_number) -anchor w 1882# entry $w2.value$line_number -bg white -width 400 -textvariable option_value($line_number) 1883# $w2 create entry -bg white -width 50 -textvariable option_value($line_number) 1884 entry $w2.value$line_number -bg white -width 50 -textvariable option_value($line_number) 1885# pack $w2.param$line_number -side left 1886# pack $w2.value$line_number -side left -expand 1 -fill x 1887 grid $w2.param$line_number $w2.value$line_number -sticky news 1888 grid columnconfig $w2 1 -weight 10 1889# pack $w2 -expand 1 -fill x -side top 1890 incr line_number 1891 } 1892# for {set row_number 0} {$row_number < $line_number} {incr row_number} { 1893 1894# } 1895 1896 #pack .options.med.canvas.f -expand 1 -fill x -side top 1897 pack .options.med.canvas -expand 1 -fill both -side left 1898 pack .options.med.yscroll -fill y -expand 1 -side top 1899 pack .options.med -fill both -expand 1 -side top 1900 frame .options.low 1901 button .options.low.ok -text Ok -command {save_options} 1902 button .options.low.cancel -text Cancel -command {destroy .options} 1903 pack .options.low.ok -padx 5 -fill x -expand 1 -side left 1904 pack .options.low.cancel -padx 5 -fill x -expand 1 -side left 1905 pack .options.low -pady 5 -fill x -expand 1 -side left 1906 bind .options <Configure> {.options.med.canvas itemconfigure options -width [expr [winfo width .options]-15]} 1907 close $rc_infile 1908} 1909 1910proc save_options {} { 1911 global option_value option_parameter line_number wave_editor ladspa_path eca_effects ecasoundrc default_audio_io 1912 set rc_infile [open $ecasoundrc w] 1913 for {set row_number 0} {$row_number < $line_number} {incr row_number} { 1914 puts $rc_infile "$option_parameter($row_number) = $option_value($row_number)" 1915 if {[string match *wave-editor* $option_parameter($row_number)] == 1} { 1916 set wave_editor $option_value($row_number) 1917 } 1918 if {[string match *ladsp* $option_parameter($row_number)] == 1 && $ladspa_path != $option_value($row_number)} { 1919 set ladspa_path $option_value($row_number) 1920 set eca_effects 69 1921 ladspa 1922 } 1923 if {[string match *efault-outpu* $option_parameter($row_number)] == 1 && $default_audio_io != $option_value($row_number)} { 1924 set default_audio_io $option_value($row_number) 1925 } 1926 } 1927 close $rc_infile 1928 destroy .options 1929} 1930 1931proc rec_properties {} { 1932 global mfe track_num bgcolor mixdown mt_font time_format 1933 if {[winfo exists .rec_properties$track_num] != 0} {destroy .rec_properties$track_num} 1934 if {$mfe(multichannel)==1 && $track_num!=0} {return} 1935 if {$mfe(multichannel)==0 && $track_num==0} {return} 1936 1937 if {$mixdown==0} { 1938 set w .rec_properties$track_num 1939 toplevel $w 1940 label $w.text -text "$mfe(track_name$track_num) Recording Properties" 1941 wm title .rec_properties$track_num "$mfe(track_name$track_num)" 1942 set current_track_bits $mfe(rec_prop_bits$track_num) 1943 set current_track_chn $mfe(rec_prop_channels$track_num) 1944 set current_track_srate $mfe(rec_prop_srate$track_num) 1945 set current_track_interl $mfe(rec_prop_interl$track_num) 1946 } elseif {$mixdown==1} { 1947 set w .rec_properties$track_num 1948 toplevel $w 1949 label $w.text -text "Mixdown Properties" 1950 wm title $w "Mixdown Properties Window" 1951 if {[winfo exists .locate] != 0} {destroy} 1952 if {$time_format=="Seconds"} {time_format} 1953 set current_track_bits $mfe(rec_prop_bitsMD) 1954 set current_track_chn $mfe(rec_prop_channelsMD) 1955 set current_track_srate $mfe(rec_prop_srateMD) 1956 set current_track_interl $mfe(rec_prop_interlMD) 1957 set mixdown_begin_min $mfe(mixdown_begin_min) 1958 set mixdown_begin_sec $mfe(mixdown_begin_sec) 1959 set mixdown_end_min $mfe(mixdown_end_min) 1960 set mixdown_end_sec $mfe(mixdown_end_sec) 1961 set mixdown_normalize $mfe(mixdown_normalize) 1962 set mixdown_normalize_amp $mfe(mixdown_normalize_amp) 1963 set mixdown_normalize_lev $mfe(mixdown_normalize_lev) 1964 } else { 1965 set w .rec_properties 1966 toplevel $w 1967 label $w.text -text "Global Multichannel Properties" 1968 wm title $w "Multichannel" 1969 set track_num "" 1970 set current_track_bits $mfe(rec_prop_bits) 1971 set current_track_chn $mfe(rec_prop_channels) 1972 set current_track_srate $mfe(rec_prop_srate) 1973 set current_track_interl $mfe(rec_prop_interl) 1974 } 1975 #set bits_list {u8 s16_le s16_be s24_le s24_be s32_le s32_be f32_le f32_be} 1976 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"} 1977 frame $w.bits 1978# label $w.bits.l -text "Bits:" -justify left 1979 labelframe $w.bits.title -text "Depth" 1980# ttk::combobox $w.bits.title.box -textvariable mfe(rec_prop_bits$track_num) -state readonly -values $bits_list 1981 spinbox $w.bits.title.box -textvariable mfe(rec_prop_bits$track_num) -state readonly -values $bits_list 1982# frame $w.bitsa -bg $bgcolor 1983# frame $w.bitsb -bg $bgcolor 1984# frame $w.bitsc -bg $bgcolor 1985# frame $w.bitsd -bg $bgcolor 1986# frame $w.bitse -bg $bgcolor 1987# radiobutton $w.bitsa.1 -font $mt_font -bg $bgcolor -text "Unsigned 8 bits" -variable mfe(rec_prop_bits$track_num) -value "u8" -justify left 1988# 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 1989# 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 1990# 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 1991# 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 1992# 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 1993# 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 1994# 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 1995# 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 1996 1997 if {$mixdown!=1} { 1998 set channels_list {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} 1999 frame $w.channels 2000 labelframe $w.channels.title -text "Channels" 2001# ttk::combobox $w.channels.title.box -textvariable mfe(rec_prop_channels$track_num) -state readonly -values $channels_list 2002 spinbox $w.channels.title.box -textvariable mfe(rec_prop_channels$track_num) -state readonly -values $channels_list 2003# frame $w.channels 2004# label $w.channels.l -text "Channels:" -justify left 2005# frame $w.channels1 -bg $bgcolor 2006# frame $w.channels2 -bg $bgcolor 2007# radiobutton $w.channels1.1 -font $mt_font -bg $bgcolor -text "1" -variable mfe(rec_prop_channels$track_num) -value "1" 2008# radiobutton $w.channels1.2 -font $mt_font -bg $bgcolor -text "2" -variable mfe(rec_prop_channels$track_num) -value "2" 2009# radiobutton $w.channels1.3 -font $mt_font -bg $bgcolor -text "3" -variable mfe(rec_prop_channels$track_num) -value "3" 2010# radiobutton $w.channels1.4 -font $mt_font -bg $bgcolor -text "4" -variable mfe(rec_prop_channels$track_num) -value "4" 2011# radiobutton $w.channels1.5 -font $mt_font -bg $bgcolor -text "5" -variable mfe(rec_prop_channels$track_num) -value "5" 2012# radiobutton $w.channels1.6 -font $mt_font -bg $bgcolor -text "6" -variable mfe(rec_prop_channels$track_num) -value "6" 2013# radiobutton $w.channels1.7 -font $mt_font -bg $bgcolor -text "7" -variable mfe(rec_prop_channels$track_num) -value "7" 2014# radiobutton $w.channels1.8 -font $mt_font -bg $bgcolor -text "8" -variable mfe(rec_prop_channels$track_num) -value "8" 2015# radiobutton $w.channels2.9 -font $mt_font -bg $bgcolor -text "9" -variable mfe(rec_prop_channels$track_num) -value "9" 2016# radiobutton $w.channels2.10 -font $mt_font -bg $bgcolor -text "10" -variable mfe(rec_prop_channels$track_num) -value "10" 2017# radiobutton $w.channels2.11 -font $mt_font -bg $bgcolor -text "11" -variable mfe(rec_prop_channels$track_num) -value "11" 2018# radiobutton $w.channels2.12 -font $mt_font -bg $bgcolor -text "12" -variable mfe(rec_prop_channels$track_num) -value "12" 2019# radiobutton $w.channels2.13 -font $mt_font -bg $bgcolor -text "13" -variable mfe(rec_prop_channels$track_num) -value "13" 2020# radiobutton $w.channels2.14 -font $mt_font -bg $bgcolor -text "14" -variable mfe(rec_prop_channels$track_num) -value "14" 2021# radiobutton $w.channels2.15 -font $mt_font -bg $bgcolor -text "15" -variable mfe(rec_prop_channels$track_num) -value "15" 2022# radiobutton $w.channels2.16 -font $mt_font -bg $bgcolor -text "16" -variable mfe(rec_prop_channels$track_num) -value "16" 2023 } 2024 2025 set srates_list {8000 11025 16000 22050 32000 44100 48000 88200 96000 192000} 2026 frame $w.srate 2027 labelframe $w.srate.title -text "Sample Rate (KHz)" 2028# ttk::combobox $w.srate.title.box -textvariable mfe(rec_prop_srate$track_num) -state readonly -values $srates_list 2029 spinbox $w.srate.title.box -textvariable mfe(rec_prop_srate$track_num) -state readonly -values $srates_list 2030# frame $w.srate 2031# label $w.srate.l -text "Sample Rate:" -justify left 2032# frame $w.srate1 -bg $bgcolor 2033# frame $w.srate2 -bg $bgcolor 2034# radiobutton $w.srate1.1 -font $mt_font -bg $bgcolor -text "8000" -variable mfe(rec_prop_srate$track_num) -value "8000" 2035# radiobutton $w.srate1.2 -font $mt_font -bg $bgcolor -text "11025" -variable mfe(rec_prop_srate$track_num) -value "11025" 2036# radiobutton $w.srate1.3 -font $mt_font -bg $bgcolor -text "16000" -variable mfe(rec_prop_srate$track_num) -value "16000" 2037# radiobutton $w.srate1.4 -font $mt_font -bg $bgcolor -text "22050" -variable mfe(rec_prop_srate$track_num) -value "22050" 2038# radiobutton $w.srate1.5 -font $mt_font -bg $bgcolor -text "32000" -variable mfe(rec_prop_srate$track_num) -value "32000" 2039# radiobutton $w.srate1.6 -font $mt_font -bg $bgcolor -text "44100" -variable mfe(rec_prop_srate$track_num) -value "44100" 2040# radiobutton $w.srate1.7 -font $mt_font -bg $bgcolor -text "48000" -variable mfe(rec_prop_srate$track_num) -value "48000" 2041# radiobutton $w.srate1.8 -font $mt_font -bg $bgcolor -text "96000" -variable mfe(rec_prop_srate$track_num) -value "96000" 2042 2043# set interl_list {i n} 2044 frame $w.interl 2045 labelframe $w.interl.title -text "Interleaved" 2046# ttk::combobox $w.interl.title.box -textvariable mfe(rec_prop_interl$track_num) -state readonly -values $interl_list 2047 radiobutton $w.interl.title.box -text "Yes" -variable mfe(rec_prop_interl$track_num) -value "i" 2048 radiobutton $w.interl.title.box1 -text "No" -variable mfe(rec_prop_interl$track_num) -value "n" 2049# frame $w.interleaved 2050# label $w.interleaved.l -text "Interleaved:" -justify left 2051# frame $w.interleaved1 -bg $bgcolor 2052# radiobutton $w.interleaved1.1 -font $mt_font -bg $bgcolor -text "Interleaved " -variable mfe(rec_prop_interl$track_num) -value "i" 2053# radiobutton $w.interleaved1.2 -font $mt_font -bg $bgcolor -text "Non Interleaved" -variable mfe(rec_prop_interl$track_num) -value "n" 2054 2055 pack $w.text -side top 2056 2057 pack $w.bits.title.box 2058 pack $w.bits.title 2059 pack $w.bits -padx 3 -pady 3 2060# pack $w.bits.l -expand yes -fill x -side top 2061# pack $w.bits -expand yes -fill x -side top 2062# pack $w.bitsa.1 2063# grid $w.bitsb.2 $w.bitsb.3 2064# grid $w.bitsc.4 $w.bitsc.5 2065# grid $w.bitsd.6 $w.bitsd.7 2066# grid $w.bitse.8 $w.bitse.9 2067# pack $w.bitsa 2068# pack $w.bitsb 2069# pack $w.bitsc 2070# pack $w.bitsd 2071# pack $w.bitse 2072 if {$mixdown!=1} { 2073 pack $w.channels.title.box 2074 pack $w.channels.title 2075 pack $w.channels -padx 3 -pady 3 2076# pack $w.channels.l -expand yes -fill x -side top 2077# pack $w.channels -expand yes -fill x -side top 2078# 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 2079# 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 2080# pack $w.channels1 2081# pack $w.channels2 2082 } 2083 2084 pack $w.srate.title.box 2085 pack $w.srate.title 2086 pack $w.srate -padx 3 -pady 3 2087 2088# pack $w.srate.l -expand yes -fill x -side top 2089# pack $w.srate -expand yes -fill x -side top 2090# 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 2091# pack $w.srate1 2092 #pack $w.interl.title.box 2093 #pack $w.interl.title.box1 2094 grid $w.interl.title.box $w.interl.title.box1 2095 pack $w.interl.title 2096 pack $w.interl -padx 3 -pady 3 2097# pack $w.interleaved.l -expand yes -fill x -side top 2098# pack $w.interleaved -expand yes -fill x -side top 2099# grid $w.interleaved1.1 $w.interleaved1.2 -sticky ewns 2100# pack $w.interleaved1 2101 2102 if {$mixdown != 1} { 2103 button $w.close -text "Close" -command {if {$mixdown != 0} {destroy .rec_properties} else {destroy .rec_properties$track_num}} 2104 pack $w.close -expand yes -fill x -side top 2105 set mfe(rec_prop_bits$track_num) $current_track_bits 2106 set mfe(rec_prop_channels$track_num) $current_track_chn 2107 set mfe(rec_prop_srate$track_num) $current_track_srate 2108 set mfe(rec_prop_interl$track_num) $current_track_interl 2109 2110 } else { 2111 2112 frame $w.pr_time 2113 labelframe $w.pr_time.l -text "Processing Time:" 2114 2115 #frame $w.pr_time.l 2116 label $w.pr_time.l.1 -text "Start Position: " 2117 entry $w.pr_time.l.2 -bg White -justify right -width 3 -textvariable mfe(mixdown_begin_min) 2118 label $w.pr_time.l.3 -text : 2119 entry $w.pr_time.l.4 -bg White -justify right -width 5 -textvariable mfe(mixdown_begin_sec) 2120 2121 label $w.pr_time.l.5 -text "End Position: " 2122 entry $w.pr_time.l.6 -bg White -justify right -width 3 -textvariable mfe(mixdown_end_min) 2123 label $w.pr_time.l.7 -text : 2124 entry $w.pr_time.l.8 -bg White -justify right -width 5 -textvariable mfe(mixdown_end_sec) 2125 2126 #grid $w.pr_time.l 2127 grid $w.pr_time.l.1 $w.pr_time.l.2 $w.pr_time.l.3 $w.pr_time.l.4 2128 grid $w.pr_time.l.5 $w.pr_time.l.6 $w.pr_time.l.7 $w.pr_time.l.8 2129 pack $w.pr_time.l 2130 pack $w.pr_time 2131 2132 set disabled {Disabled "not available"} 2133 set normalize_list {Yes No} 2134 set normalize_amp_list {-12dBFS -11dBFS -10dBFS -9dBFS -8dBFS -7dBFS -6dBFS -5dBFS -4dBFS -3dBFS -2dBFS -1dBFS 0dBFS} 2135 set normalize_lev_list {-6dBFS -5dBFS -4dBFS -3dBFS -2dBFS -1dBFS 0dBFS} 2136 frame $w.normalize 2137 labelframe $w.normalize.title -text "Normalize: " 2138 radiobutton $w.normalize.title.1 -text "Yes" -variable mfe(mixdown_normalize) -value "Yes" -command { 2139 .rec_propertiesMD.normalize_amp.title.box configure -state readonly -textvariable mfe(mixdown_normalize_amp) 2140 .rec_propertiesMD.normalize_lev.title.box configure -state readonly -textvariable mfe(mixdown_normalize_lev) 2141 } 2142 radiobutton $w.normalize.title.2 -text "No" -variable mfe(mixdown_normalize) -value "No" -command { 2143 .rec_propertiesMD.normalize_amp.title.box configure -state disabled -textvariable disabled 2144 .rec_propertiesMD.normalize_lev.title.box configure -state disabled -textvariable disabled 2145 } 2146 2147 #ttk::combobox $w.normalize.title.box -textvariable mfe(mixdown_normalize) -state readonly -values $normalize_list 2148 frame $w.normalize_amp 2149 labelframe $w.normalize_amp.title -text "Amplitude" 2150# ttk::combobox $w.normalize_amp.title.box -textvariable mfe(mixdown_normalize_amp) -state readonly -values $normalize_amp_list 2151 spinbox $w.normalize_amp.title.box -textvariable mfe(mixdown_normalize_amp) -state readonly -values $normalize_amp_list 2152 frame $w.normalize_lev 2153 labelframe $w.normalize_lev.title -text "Level" 2154# ttk::combobox $w.normalize_lev.title.box -textvariable mfe(mixdown_normalize_lev) -state readonly -values $normalize_lev_list 2155 spinbox $w.normalize_lev.title.box -textvariable mfe(mixdown_normalize_lev) -state readonly -values $normalize_lev_list 2156# frame $w.normalize 2157# label $w.normalize.l -text "Apply Normalize After Mixdown:" -justify left 2158# frame $w.normalize1 -bg $bgcolor 2159# radiobutton $w.normalize1.1 -font $mt_font -bg $bgcolor -text "Yes " -variable mfe(mixdown_normalize) -value "Yes" 2160# radiobutton $w.normalize1.2 -font $mt_font -bg $bgcolor -text "No" -variable mfe(mixdown_normalize) -value "No" 2161# pack $w.normalize.l 2162# pack $w.normalize -expand yes -fill x -side top 2163# grid $w.normalize1.1 $w.normalize1.2 -sticky ewns 2164# pack $w.normalize1 2165 #pack $w.normalize.title.box 2166 grid $w.normalize.title.1 $w.normalize.title.2 2167 #pack $w.normalize.title.1 2168 #pack $w.normalize.title.2 2169 pack $w.normalize.title 2170 pack $w.normalize -padx 3 -pady 3 2171 pack $w.normalize_amp.title.box 2172 pack $w.normalize_amp.title 2173 pack $w.normalize_amp -padx 3 -pady 3 2174 pack $w.normalize_lev.title.box 2175 pack $w.normalize_lev.title 2176 pack $w.normalize_lev -padx 3 -pady 3 2177 2178# frame $w.buttons 2179 set mixdown 5 2180 if {$mfe(mixdown_normalize)=="Yes"} { 2181 .rec_propertiesMD.normalize_amp.title.box configure -state readonly -textvariable mfe(mixdown_normalize_amp) 2182 .rec_propertiesMD.normalize_lev.title.box configure -state readonly -textvariable mfe(mixdown_normalize_lev) 2183 } else { 2184 .rec_propertiesMD.normalize_amp.title.box configure -state disabled -textvariable disabled 2185 .rec_propertiesMD.normalize_lev.title.box configure -state disabled -textvariable disabled 2186 } 2187 2188 button $w.close -justify right -text "Ok" -command { 2189 set mixdown 1 2190 destroy .rec_propertiesMD 2191 } 2192 button $w.close2 -justify right -text "Cancel" -command { 2193 set mixdown 5 2194 destroy .rec_propertiesMD 2195 return 2196 } 2197# file_browser2 2198# set mixdown 4 2199# .mfe.up1.button configure -state disabled 2200# .mfe.up2.mixdown configure -state disabled 2201# .mfe.up2.addtrack configure -state disabled 2202# .mfe.up2.del_all_tracks configure -state disabled 2203# .mfe.up2.quit configure -state disabled 2204# .mfe.low.multich2 configure -state disabled 2205# .mfe.low.play configure -state disabled 2206# .mfe.low.master configure -state disabled 2207# .mfe.low.loc configure -state disabled 2208# .mfe.low.rew_to_begin configure -state disabled 2209# .mfe.low.rew_5 configure -state disabled 2210# .mfe.low.forw_5 configure -state disabled 2211# mixdown" 2212 #grid $w.buttons.close $w.buttons.close2 -sticky ewns 2213 pack $w.close -side left -expand yes -fill x -padx 2 -pady 2 2214 pack $w.close2 -side left -expand yes -fill x -padx 2 -pady 2 2215 set mfe(rec_prop_bitsMD) $current_track_bits 2216 set mfe(rec_prop_channelsMD) $current_track_chn 2217 set mfe(rec_prop_srateMD) $current_track_srate 2218 set mfe(rec_prop_interlMD) $current_track_interl 2219 set mfe(mixdown_begin_min) $mixdown_begin_min 2220 set mfe(mixdown_begin_sec) $mixdown_begin_sec 2221 set mfe(mixdown_end_min) $mixdown_end_min 2222 set mfe(mixdown_end_sec) $mixdown_end_sec 2223 set mfe(mixdown_normalize) $mixdown_normalize 2224 set mfe(mixdown_normalize_amp) $mixdown_normalize_amp 2225 set mfe(mixdown_normalize_lev) $mixdown_normalize_lev 2226 } 2227} 2228 2229proc ladspa_loading_window {} { 2230 if {[winfo exists .ladspa_loading] != 0} { 2231 destroy .ladspa_loading 2232 .mfe.up1.button configure -state normal 2233 .mfe.up2.options configure -state normal 2234 .mfe.up2.colors configure -state normal 2235 .mfe.up2.time_format configure -state normal 2236 .mfe.up2.metronome configure -state normal 2237 .mfe.up2.addtrack configure -state normal 2238 .mfe.up2.del_all_tracks configure -state normal 2239 .mfe.up2.quit configure -state normal 2240 .mfe.up2.about configure -state normal 2241 .mfe.low.multich2 configure -state normal 2242 .mfe.low.latcomp configure -state normal 2243 .mfe.low.loc configure -state normal 2244 .mfe.low.master configure -state normal 2245 .mfe.low.play configure -state normal 2246 .mfe.low.rew_to_begin configure -state normal 2247 .mfe.low.rew_5 configure -state normal 2248 .mfe.low.forw_5 configure -state normal 2249 } else { 2250 toplevel .ladspa_loading 2251 message .ladspa_loading.out -width 350 -text "Please wait!\nTkeca is loading LADSPA plug-ins" 2252 pack .ladspa_loading.out -expand y -fill x 2253 wm title .ladspa_loading "LADSPA" 2254 tkwait visibility .ladspa_loading 2255 tkwait visibility .ladspa_loading.out 2256 } 2257} 2258 2259proc time_format {} { 2260 global time_format bgcolor sp_minutes sp_seconds sp_seconds_loc sp_minutes_loc mfe 2261 set loc_number 1 2262 if {[winfo exists .locate] != 0} { 2263 destroy .locate 2264 set locate_present 1 2265 } else { 2266 set locate_present 0 2267 } 2268 if {$time_format=="Minutes"} { 2269 set time_format "Seconds" 2270 set sp_seconds [expr $sp_seconds+$sp_minutes*60] 2271 set sp_minutes 0 2272 set mfe(punch_in_seconds) [expr $mfe(punch_in_minutes)*60+$mfe(punch_in_seconds)] 2273 set mfe(punch_in_minutes) 0 2274 set mfe(punch_out_seconds) [expr $mfe(punch_out_minutes)*60+$mfe(punch_out_seconds)] 2275 set mfe(punch_out_minutes) 0 2276 .mfe.low.minutes configure -width 0 -text "" 2277 .mfe.low.position2 configure -width 0 -text "" 2278 .mfe.low.seconds configure -width 7 -text $sp_seconds 2279 for {set n 1} {$n <= 16} {incr n} { 2280 set sp_seconds_loc($n) [expr $sp_seconds_loc($n)+$sp_minutes_loc($n)*60] 2281 set sp_minutes_loc($n) 0 2282 } 2283 } else { 2284 set time_format "Minutes" 2285 set sp_minutes [expr $sp_seconds/60] 2286 set sp_minutes [expr int($sp_minutes)] 2287 set sp_seconds [expr $sp_seconds-$sp_minutes*60] 2288 set mfe(punch_in_minutes) [expr $mfe(punch_in_seconds)/60] 2289 set mfe(punch_in_minutes) [expr int($mfe(punch_in_seconds))] 2290 set mfe(punch_in_seconds) [expr $mfe(punch_in_seconds)-$mfe(punch_in_minutes)*60] 2291 .mfe.low.minutes configure -width 3 -text $sp_minutes 2292 .mfe.low.position2 configure -text : 2293 .mfe.low.seconds configure -width 5 -text $sp_seconds 2294 for {set n 1} {$n <= 16} {incr n} { 2295 set sp_minutes_loc($n) [expr $sp_seconds_loc($n)/60] 2296 set sp_minutes_loc($n) [expr int($sp_minutes_loc($n))] 2297 set sp_seconds_loc($n) [expr $sp_seconds_loc($n)-$sp_minutes_loc($n)*60] 2298 } 2299 } 2300 if {$locate_present==1} {locate} 2301} 2302 2303proc wave_file_ext {} { 2304global mfe wf_ext n 2305 if {[string match *.wav $mfe(file$n)]==1} {set wf_ext ".wav"} 2306 if {[string match *.mp2 $mfe(file$n)]==1} {set wf_ext ".mp2"} 2307 if {[string match *.mp3 $mfe(file$n)]==1} {set wf_ext ".mp3"} 2308 if {[string match *.raw $mfe(file$n)]==1} {set wf_ext ".raw"} 2309 if {[string match *.au $mfe(file$n)]==1} {set wf_ext ".au"} 2310 if {[string match *.aif $mfe(file$n)]==1} {set wf_ext ".aif"} 2311 if {[string match *.aiff $mfe(file$n)]==1} {set wf_ext ".aiff"} 2312 if {[string match *.aifc $mfe(file$n)]==1} {set wf_ext ".aifc"} 2313 if {[string match *.snd $mfe(file$n)]==1} {set wf_ext ".snd"} 2314 if {[string match *.mid $mfe(file$n)]==1} {set wf_ext ".mid"} 2315 if {[string match *.midi $mfe(file$n)]==1} {set wf_ext ".midi"} 2316 if {[string match *.mod $mfe(file$n)]==1} {set wf_ext ".mod"} 2317} 2318 2319proc play {} { 2320 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 2321 if {$mfe(directory)==""} {set mfe(directory) "."} 2322 set missed_files "" 2323 set eca_string {} 2324 set eca_string_i {} 2325 set eca_string_o {} 2326 set track_count 0 2327 set preview 0 2328 set number_of_devices 0 2329 set number_of_devices_i 0 2330 set device(0) " " 2331 set device(1) " " 2332 set device_i(0) " " 2333 set device_i(1) " " 2334 set added_device 0 2335 set added_device_i 0 2336 set tracks_to_play 0 2337 set tracks_to_rec 0 2338 set mfe(muted_chains) "" 2339 set metronome 0 2340 set punch_sequence "" 2341 set punch 0 2342 set punched 0 2343 set start_time [expr $sp_minutes*60+$sp_seconds] 2344# messages [format "Iniciando MIXDOWN"] 2345 2346 if {$mfe(punch_in_minutes)!=0 || $mfe(punch_in_seconds)!=0 || $mfe(punch_out_minutes)!=0 || $mfe(punch_out_seconds)!=0} { 2347 set punch 1 2348 set punch_in [expr $mfe(punch_in_minutes)*60+$mfe(punch_in_seconds)] 2349 if {$punch_in<$start_time} { 2350 set punch_in $start_time 2351 } 2352 set punch_out [expr $mfe(punch_out_minutes)*60+$mfe(punch_out_seconds)] 2353 if {$punch_out<$start_time} { 2354 set punch 3 2355# 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"] 2356# return 2357 } 2358 set proc_time [expr $punch_out-$punch_in] 2359 set punch_y "-y:$punch_in" 2360 set punch_t "-t:$proc_time" 2361 } 2362 2363 if {$mfe(track_status0)=="Play" && $mixdown!=1} { 2364 set l 0 2365 } else { 2366 set l 1 2367 } 2368 if {$mixdown!=0} { 2369 if {$mfe(rec_prop_bitsMD)=="Unsigned 8Bit"} {set bitsMD "u8"} 2370 if {$mfe(rec_prop_bitsMD)=="Signed 16Bit Little Endian"} {set bitsMD "s16_le"} 2371 if {$mfe(rec_prop_bitsMD)=="Signed 16Bit Big Endian"} {set bitsMD "s16_be"} 2372 if {$mfe(rec_prop_bitsMD)=="Signed 24Bit Little Endian"} {set bitsMD "s24_le"} 2373 if {$mfe(rec_prop_bitsMD)=="Signed 24Bit Big Endian"} {set bitsMD "s24_be"} 2374 if {$mfe(rec_prop_bitsMD)=="Signed 32Bit Little Endian"} {set bitsMD "s32_le"} 2375 if {$mfe(rec_prop_bitsMD)=="Signed 32Bit Big Endian"} {set bitsMD "s32_be"} 2376 if {$mfe(rec_prop_bitsMD)=="F. Point 32Bit Little Endian"} {set bitsMD "f32_le"} 2377 if {$mfe(rec_prop_bitsMD)=="F. Point 32Bit Big Endian"} {set bitsMD "f32_be"} 2378 } 2379 2380 for {set n $l} {$n <= $number_of_tracks} {incr n} { 2381 if {$mfe(rec_prop_bits$n)=="Unsigned 8Bit"} {set bits "u8"} 2382 if {$mfe(rec_prop_bits$n)=="Signed 16Bit Little Endian"} {set bits "s16_le"} 2383 if {$mfe(rec_prop_bits$n)=="Signed 16Bit Big Endian"} {set bits "s16_be"} 2384 if {$mfe(rec_prop_bits$n)=="Signed 24Bit Little Endian"} {set bits "s24_le"} 2385 if {$mfe(rec_prop_bits$n)=="Signed 24Bit Big Endian"} {set bits "s24_be"} 2386 if {$mfe(rec_prop_bits$n)=="Signed 32Bit Little Endian"} {set bits "s32_le"} 2387 if {$mfe(rec_prop_bits$n)=="Signed 32Bit Big Endian"} {set bits "s32_be"} 2388 if {$mfe(rec_prop_bits$n)=="F. Point 32Bit Little Endian"} {set bits "f32_le"} 2389 if {$mfe(rec_prop_bits$n)=="F. Point 32Bit Big Endian"} {set bits "f32_be"} 2390 if {[file exists $mfe(file$n)] != 1 && $mfe(track_rec_status$n) == "No" && $mfe(file$n)!="null" && $mfe(track_status$n)!="Deleted"} { 2391 set missed_files "$missed_files$mfe(file$n)\n" 2392 incr n 2393 } else { 2394 if {$mixdown == 1 || $export_ecs == 1} { 2395 set skip_muted_tracks "Yes" 2396 } else { 2397 .mfe.up1.button configure -state disabled 2398 .mfe.up2.mixdown configure -state disabled 2399# .mfe.up2.metronome configure -state disabled 2400 .mfe.up2.addtrack configure -state disabled 2401 .mfe.up2.del_all_tracks configure -state disabled 2402 .mfe.up2.quit configure -state disabled 2403 .mfe.low.multich2 configure -state disabled 2404# .mfe.low.rew_to_begin configure -state disabled 2405# .mfe.low.rew_5 configure -state disabled 2406# .mfe.low.forw_5 configure -state disabled 2407# set mfe(directory) "$w.rec$n" 2408 if {$n!=0 && $mfe(track_status$n)!="Deleted"} { 2409 $w2.track$n.rec configure -state disabled 2410 $w2.track$n.delete configure -state disabled 2411 $w2.track$n.file configure -state disabled 2412 $w2.track$n.open configure -state disabled 2413 $w2.track$n.track_properties configure -state disabled 2414 $w2.track$n.dev_text configure -state disabled 2415 $w2.track$n.dev_entry configure -state disabled 2416 $w2.track$n.chn_text configure -state disabled 2417 $w2.track$n.chn_entry configure -state disabled 2418 $w2.track$n.eca_tools configure -state disabled 2419 2420 set skip_muted_tracks "No" 2421# set quote "'" 2422# set mfe(file_quoted$n) "$quote$mfe(file$n)$quote" 2423 } 2424 } 2425 2426 if {$mfe(track_status$n)!="Mute" || $skip_muted_tracks!="Yes"} { 2427 set mfe(volume_position$n) 1 2428 set mfe(pan_position$n) 2 2429 if {$punch==3 && $mfe(track_rec_status$n)=="Yes"} { 2430 set mfe(track_rec_status$n) "No" 2431 set punch 4 2432 } 2433 if {$mfe(track_status$n)=="Mute" && $mfe(track_rec_status$n)=="No"} { 2434 if {$mfe(muted_chains)!=""} { 2435 set mfe(muted_chains) "$mfe(muted_chains),$n" 2436 } else { 2437 set mfe(muted_chains) $n 2438 } 2439 } 2440#[string length $mfe(file$n)] > 3 2441 if {$mfe(track_status$n)!="Deleted" && $mfe(file$n)!="(Wave File)"} { 2442 2443 if {$mfe(track_rec_status$n)=="No"} { 2444 if {$punched==1} { 2445 set mfe(track_rec_status$n) "Yes" 2446 set punched 0 2447 } 2448# set mfe(file$n) "[list $mfe(file$n)]" 2449# set eca_string "$eca_string-a:$n -i:\"$mfe(file$n)\"" 2450# set eca_string "$eca_string-a:$n -i:'$mfe(file$n)'" 2451# este es el que funciona 2452# set eca_string "$eca_string-a:$n -i:[list $mfe(file$n)]" 2453 2454 if {$export_ecs == 1} { 2455 if {$n > 1} { 2456 lappend eca_string "\n-a:$n" 2457# set eca_string "$eca_string\n-a:$n " 2458 } else { 2459 lappend eca_string "-a:$n" 2460# set eca_string "$eca_string-a:$n " 2461 } 2462 lappend eca_string "-i:\"$mfe(file$n)\"" 2463# set eca_string "$eca_string-i:$mfe(file_quoted$n)" 2464 } else { 2465 lappend eca_string "-a:$n" 2466# set eca_string "$eca_string-a:$n " 2467 lappend eca_string "-i:$mfe(file$n)" 2468# set eca_string "$eca_string-i:$mfe(file_quoted$n) " 2469 } 2470 if {$mfe(rec_prop_channels$n)==1} { 2471 if {$mfe(chn$n)!= "n/a" && $mfe(multichannel)==1} { 2472 lappend eca_string "-erc:1,$mfe(chn$n)" 2473# set eca_string "$eca_string-erc:1,$mfe(chn$n) " 2474 } else { 2475 lappend eca_string "-erc:1,2" 2476# set eca_string "$eca_string-erc:1,2 " 2477 } 2478 2479 set mfe(volume_position$n) 2 2480 set mfe(pan_position$n) 3 2481 } 2482 lappend eca_string "-ea:[expr $mfe(volume$n)*$mfe(master)/100]" 2483# set eca_string "$eca_string-ea:[expr $mfe(volume$n)*$mfe(master)/100]" 2484 lappend eca_string "-epp:$mfe(pan$n)" 2485# set eca_string "$eca_string-epp:$mfe(pan$n) " 2486 set tracks_to_play 1 2487 if {$mixdown!=1} { 2488 if {$mfe(device$n)=="Default" || $mfe(device$n)=="(I / O Dev.)"} { 2489 set current_audio_output $default_audio_io 2490 } else { 2491 set current_audio_output $mfe(device$n) 2492 } 2493 for {set nd 0} {$nd <= $number_of_devices} {incr nd} { 2494 if {$device($nd)==$current_audio_output} { 2495 set device_chains($nd) "$device_chains($nd),$n" 2496 set added_device 1 2497 } 2498 } 2499 if {$added_device==0} { 2500 incr number_of_devices 2501 set device_chains($number_of_devices) "$n" 2502 set device($nd) $current_audio_output 2503 2504 } else { 2505 set added_device 0 2506 } 2507 } 2508 set mfe(number_of_effects$n) 0 2509 set effect_list "" 2510 for {set en 1} {$en <= 8} {incr en} { 2511 if {$mfe(effect$en$n) != "None" && $mfe(effect_attached$en$n) == "Connected"} { 2512 incr mfe(number_of_effects$n) 2513 set mfe(effect_position$en$n) [expr $mfe(pan_position$n)+$mfe(number_of_effects$n)] 2514 if {[string match ladspa* $mfe(effect$en$n)]==1} { 2515 regsub ladspa_ $mfe(effect$en$n) {} current_effect 2516 set effect_list "$effect_list-el:$current_effect," 2517 } elseif {[string match pn:* $mfe(effect$en$n)]==1} { 2518 set effect_list "$effect_list-$mfe(effect$en$n)," 2519 } else { 2520 set effect_list "$effect_list-$mfe(effect$en$n):" 2521 } 2522 for {set par 1} {$par <= $effect_param($mfe(effect$en$n)) } {incr par} { 2523 if {$par>1} {set effect_list "$effect_list,"} 2524 set effect_list "$effect_list$mfe(effect_parameter$par$en$n)" 2525 } 2526 lappend eca_string "$effect_list" 2527# set eca_string "$eca_string$effect_list " 2528 set effect_list "" 2529 } 2530 } 2531# set eca_string "$eca_string $punch_sequence" 2532 if {$mixdown == 1} { 2533 if {$mfe(mixdown_begin_min)!=0 || $mfe(mixdown_begin_sec)!=0 || $mfe(mixdown_end_min)!=0 || $mfe(mixdown_end_sec)!=0} { 2534 set mixdown_start [expr $mfe(mixdown_begin_sec)+($mfe(mixdown_begin_min)*60)] 2535 set mixdown_end [expr $mfe(mixdown_end_sec)+($mfe(mixdown_end_min)*60)] 2536 set mixdown_proc_time [expr $mixdown_end-$mixdown_start] 2537 lappend eca_string "-y:$mixdown_start" 2538# set eca_string "$eca_string-y:$mixdown_start " 2539 if {$mixdown_proc_time>0} { 2540 lappend eca_string "-t:$mixdown_proc_time" 2541# set eca_string "$eca_string-t:$mixdown_proc_time " 2542 } 2543 } 2544# lappebd eca_string "\\" 2545 } 2546# lappend eca_string "\n" 2547 } else { 2548 set tracks_to_rec 1 2549 if {$punch==0} { 2550 for {set nd 0} {$nd <= $number_of_devices_i} {incr nd} { 2551 if {$mfe(device$n)=="Default" || $mfe(device$n)=="(I / O Dev.)"} { 2552 set current_audio_input $default_audio_io 2553 } else { 2554 set current_audio_input $mfe(device$n) 2555 } 2556 if {$device_i($nd)==$current_audio_input} { 2557 set device_chains_i($nd) "$device_chains_i($nd),$n" 2558 set added_device_i 1 2559 } 2560 } 2561 if {$added_device_i==0} { 2562 incr number_of_devices_i 2563 set device_chains_i($number_of_devices_i) "$n" 2564 set device_i($nd) $current_audio_input 2565 } else { 2566 set added_device_i 0 2567 } 2568# set eca_string "$eca_string-a:$n" 2569 if {$mfe(multichannel)==1} { 2570 if {$export_ecs == 1 && $n > 1} { 2571 lappend eca_string_o "\n-a:$n" 2572# set eca_string_o "$eca_string_o\n-a:$n " 2573 } else { 2574 lappend eca_string_o "-a:$n" 2575# set eca_string_o "$eca_string_o-a:$n " 2576 } 2577 lappend eca_string_o "-f:$bits,1ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n)" 2578# set eca_string_o "$eca_string_o-f:$mfe(rec_prop_bits$n),1ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n) " 2579 lappend eca_string_o "-erc:$mfe(chn$n),1" 2580 lappend eca_string_o "-o:$mfe(file$n)" 2581# set eca_string_o "$eca_string_o-erc:$mfe(chn$n),1 -o:$mfe(file$n) " 2582 } else { 2583 set mfe(rec_prop_channels$n) 2 2584 if {$export_ecs == 1 && $n > 1} { 2585 lappend eca_string_o "\n-a:$n" 2586# set eca_string_o "$eca_string_o\n-a:$n " 2587 } else { 2588 lappend eca_string_o "-a:$n" 2589# set eca_string_o "$eca_string_o-a:$n " 2590 } 2591 lappend eca_string_o "-f:$bits,$mfe(rec_prop_channels$n)ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n)" 2592 lappend eca_string_o "-o:$mfe(file$n)" 2593# 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) " 2594 } 2595# lappend eca_string_o "\n" 2596 } else { 2597 set punch 2 2598 for {set nd 0} {$nd <= $number_of_devices_i} {incr nd} { 2599 if {$mfe(device$n)=="Default" || $mfe(device$n)=="(I / O Dev.)"} { 2600 set current_audio_input $default_audio_io 2601 } else { 2602 set current_audio_input $mfe(device$n) 2603 } 2604 if {$device_i($nd)==$current_audio_input} { 2605 set device_chains_i($nd) "$device_chains_i($nd),temp-$n" 2606 set added_device_i 1 2607 } 2608 } 2609 2610 if {$added_device_i==0} { 2611 incr number_of_devices_i 2612 set device_chains_i($number_of_devices_i) "temp-$n" 2613 set device_i($nd) $current_audio_input 2614 } else { 2615 set added_device_i 0 2616 } 2617# lappend eca_string_o "-a:temp-$n" 2618 wave_file_ext 2619 set mfe(temp_file$n) "temp-$n$wf_ext" 2620 if {$mfe(multichannel)==1} { 2621 lappend eca_string_o "-f:$bits,1ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n)" 2622# set eca_string_o "$eca_string_o-f:$mfe(rec_prop_bits$n),1ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n) " 2623 lappend eca_string_o "-erc:$mfe(chn$n),1" 2624# set eca_string_o "$eca_string_o-erc:$mfe(chn$n),1 " 2625 lappend eca_string_o "-o:$mfe(temp_file$n)" 2626# set eca_string_o "$eca_string_o-o:$mfe(temp_file$n) " 2627 } else { 2628 set mfe(rec_prop_channels$n) 2 2629 lappend eca_string_o "-f:$bits,$mfe(rec_prop_channels$n)ch,$mfe(rec_prop_srate$n),$mfe(rec_prop_interl$n)" 2630# 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) " 2631 lappend eca_string_o "-o:$mfe(temp_file$n)" 2632# set eca_string_o "$eca_string_o-o:$mfe(temp_file$n)" 2633 } 2634 set punched 1 2635 set mfe(track_rec_status$n) "No" 2636 set n [expr $n-1] 2637# lappend eca_string_o "\n" 2638 } 2639 } 2640 2641 2642 } 2643 if {$punch==4} { 2644 set mfe(track_rec_status$n) "Yes" 2645 set punch 3 2646 } 2647 2648 } 2649 } 2650 } 2651 2652 if {$tracks_to_play == 1} { 2653 for {set n 1} {$n <= $number_of_devices} {incr n} { 2654 if {$export_ecs == 1} { 2655 lappend eca_string_o "\n-a:$device_chains($n)" 2656# set eca_string_o "$eca_string_o\n-a:$device_chains($n) " 2657 } else { 2658 lappend eca_string_o "-a:$device_chains($n)" 2659# set eca_string_o "$eca_string_o-a:$device_chains($n) " 2660 } 2661 lappend eca_string_o "-o:$device($n)" 2662# set eca_string_o "$eca_string_o-o:$device($n) " 2663 } 2664 } 2665 2666 if {$mixdown == 1} { 2667 set normalize "" 2668 set exec_out1 "" 2669 set exec_out3 "" 2670 lappend eca_string "-a:all" 2671# set eca_string "$eca_string-a:all " 2672 lappend eca_string "-f:$bitsMD,$mfe(rec_prop_channelsMD)ch,$mfe(rec_prop_srateMD),$mfe(rec_prop_interlMD)" 2673# set eca_string "$eca_string-f:$mfe(rec_prop_bitsMD),$mfe(rec_prop_channelsMD)ch,$mfe(rec_prop_srateMD),$mfe(rec_prop_interlMD) " 2674 lappend eca_string "-o:$mfe(openfileMD)" 2675# set eca_string "$eca_string-o:$mfe(openfileMD) " 2676 2677 2678 if {$mfe(mixdown_normalize)=="Yes"} { 2679 set normalize "ecanormalize $mfe(openfileMD) -a $mfe(mixdown_normalize_amp) -l $mfe(mixdown_normalize_lev)" 2680 } 2681 set mixdown 0 2682 set cmd1 "exec ecasound $eca_string" 2683 catch {eval $cmd1} exec_out1 2684 puts $eca_string 2685 if {$mfe(mixdown_normalize)=="Yes"} { 2686 set cmd3 "exec $normalize" 2687 catch {eval $cmd3} exec_out3 2688 } 2689# set mixdown_out [open "mixdown.txt" w] 2690# puts $mixdown_out "eca_string: $eca_string" 2691# puts $mixdown_out "$exec_out1" 2692# puts $mixdown_out "normalize: $normalize" 2693# puts $mixdown_out "$exec_out3" 2694# close $mixdown_out 2695 2696 messages [format "MIXDOWN done"] 2697 destroy .rec_propertiesMD 2698 tkwait visibility .msg 2699 tkwait window .msg 2700 2701 .mfe.up1.button configure -state normal 2702 .mfe.up2.options configure -state normal 2703 .mfe.up1.save configure -state normal 2704 .mfe.up1.saveas configure -state normal 2705 .mfe.up2.time_format configure -state normal 2706 .mfe.up2.metronome configure -state normal 2707 .mfe.up2.exportecs configure -state normal 2708 .mfe.up2.mixdown configure -state normal 2709 .mfe.up2.addtrack configure -state normal 2710 .mfe.up2.del_all_tracks configure -state normal 2711 .mfe.up2.quit configure -state normal 2712 .mfe.up2.about configure -state normal 2713 .mfe.low.multich2 configure -state normal 2714 .mfe.low.latcomp configure -state normal 2715 .mfe.low.loc configure -state normal 2716 .mfe.low.master configure -state normal 2717 .mfe.low.play configure -state normal 2718# .mfe.low.rew_to_begin configure -state normal 2719# .mfe.low.rew_5 configure -state normal 2720# .mfe.low.forw_5 configure -state normal 2721 return 2722 } 2723 if {$tracks_to_rec == 1} { 2724 for {set n 1} {$n <= $number_of_devices_i} {incr n} { 2725 lappend eca_string_i "-a:$device_chains_i($n)" 2726# set eca_string_i "$eca_string_i-a:$device_chains_i($n) " 2727 lappend eca_string_i "-i:$device_i($n)" 2728# set eca_string_i "$eca_string_i-i:$device_i($n)\n" 2729 } 2730 } 2731 set eca_string "$eca_string_i $eca_string $eca_string_o" 2732 if {$mfe(multichannel)==1} { 2733 set eca_string "[list -f:$bits,$mfe(rec_prop_channels)ch,$mfe(rec_prop_srate),$mfe(rec_prop_interl)] $eca_string" 2734# set eca_string "-f:$mfe(rec_prop_bits),$mfe(rec_prop_channels)ch,$mfe(rec_prop_srate),$mfe(rec_prop_interl)] $eca_string" 2735 } 2736 2737 puts "Ecasound Chainsetup:\n$eca_string" 2738 puts "--------------------\n" 2739 2740 if {$export_ecs == 1} { 2741 .mfe.up1.button configure -state normal 2742 .mfe.up2.mixdown configure -state normal 2743# .mfe.up2.metronome configure -state normal 2744 .mfe.up2.addtrack configure -state normal 2745 .mfe.up2.del_all_tracks configure -state normal 2746 .mfe.up2.quit configure -state normal 2747 .mfe.low.multich2 configure -state normal 2748# .mfe.low.rew_to_begin configure -state normal 2749# .mfe.low.rew_5 configure -state normal 2750# .mfe.low.forw_5 configure -state normal 2751 regsub -all {\{} $eca_string {} eca_string 2752 regsub -all {\}} $eca_string {} eca_string 2753# regsub -all {(\-a)} $eca_string {\\n} eca_string 2754 return 2755 } 2756 if {$punch==2} { 2757 for {set n 1} {$n <= $number_of_tracks} {incr n} { 2758 if {$mfe(track_rec_status$n)=="Yes"} { 2759 wave_file_ext 2760 set mfe(temp_file2$n) "temp2-$n$wf_ext" 2761 set cmd "exec ecasound [list -i:$mfe(file$n) $punch_y $punch_t -o:$mfe(temp_file2$n) $punch_t ]" 2762# set cmd "exec ecasound -i:$mfe(file_quoted$n) $punch_y $punch_t -o:$mfe(temp_file2$n) $punch_t" 2763 catch {eval $cmd} exec_out 2764 set cmd2 "exec ecasound [list -i:$mfe(file$n) $punch_y $punch_t -ea:0 -o:$mfe(file$n) $punch_y $punch_t ]" 2765# set cmd2 "exec ecasound -i:$mfe(file_quoted$n) $punch_y $punch_t -ea:0 -o:$mfe(file_quoted$n) $punch_y $punch_t " 2766 catch {eval $cmd2} exec_out 2767 } 2768 } 2769 } 2770 2771# if {$mfe(metronome_enable)=="Yes"} { 2772# set eca_string "$eca_string -a:metronome -i:null -o:$mfe(metronome_device) -pn:metronome,$mfe(metronome_beat)" 2773# } 2774 2775 2776 set tkeca_log [open "~/tkeca.log" w] 2777 puts $tkeca_log "eca_string: $eca_string" 2778 puts $tkeca_log "eca_string_i: $eca_string_i" 2779 puts $tkeca_log "eca_string_o: $eca_string_o" 2780 puts $tkeca_log "tracks_to_rec:$tracks_to_rec" 2781 close $tkeca_log 2782 puts "eca_string: $eca_string" 2783 set playhandle [open "|ecasound -c $eca_string" w] 2784 puts "playhandle: $playhandle" 2785 puts "Ecasound Interactive Mode Commands:\n" 2786 puts "-----------------------------------\n" 2787 fconfigure $playhandle -buffering line -buffersize 8000 -blocking 0 2788 if {$mfe(muted_chains)!=""} { 2789 puts $playhandle "c-select $mfe(muted_chains)\n" 2790 puts "c-select $mfe(muted_chains)\n" 2791 puts $playhandle "c-muting\n" 2792 puts "c-muting\n" 2793 } 2794 puts $playhandle "setpos $start_time\n" 2795 puts "setpos $start_time\n" 2796 puts $playhandle "t\n" 2797 puts "t\n" 2798#remover esta linea despues 2799 set start_time2 [clock clicks -milliseconds] 2800 set sp_seconds2 $sp_seconds 2801 tick 2802 if {$tracks_to_play == 0 && $tracks_to_rec == 0} { 2803# set stop_command 1 2804 if {$missed_files != ""} { 2805 messages [format "No tracks to be played or recorded\nFile(s):\n$missed_files\nWas(Were) not found."] 2806 } else { 2807 messages [format "No tracks to be played or recorded"] 2808 } 2809 stop 2810 } 2811 if {$missed_files != ""} { 2812 messages [format "File(s):\n$missed_files\nWas(Were) not found."] 2813 } 2814} 2815 2816proc preview {} { 2817 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 2818 set start_time [expr $sp_minutes*60+$sp_seconds] 2819 set punch 0 2820 set eca_string {} 2821 set n $track 2822 set tracks_to_play 0 2823 set mfe(volume_position$n) 1 2824 set mfe(pan_position$n) 2 2825 2826 if {[string length $mfe(file$n)] > 3 && $mfe(file$n)!="(Wave File)"} { 2827 .mfe.up1.button configure -state disabled 2828 .mfe.up2.mixdown configure -state disabled 2829# .mfe.up2.metronome configure -state disabled 2830 .mfe.up2.addtrack configure -state disabled 2831 .mfe.up2.del_all_tracks configure -state disabled 2832 .mfe.up2.quit configure -state disabled 2833 .mfe.low.multich2 configure -state disabled 2834# .mfe.low.rew_to_begin configure -state disabled 2835# .mfe.low.rew_5 configure -state disabled 2836# .mfe.low.forw_5 configure -state disabled 2837 set play_text "stop" 2838 if {$mfe(track_status$n)=="Play"} { 2839 lappend eca_string "-a:$n" 2840 lappend eca_string "-i:$mfe(file$n)" 2841 2842 if {$mfe(rec_prop_channels$n)==1} { 2843 if {$mfe(chn$n)!= "n/a" && $mfe(multichannel)==1} { 2844 lappend eca_string "-erc:1,$mfe(chn$n)" 2845 } else { 2846 lappend eca_string "-erc:1,2" 2847 } 2848 lappend eca_string "-ea:[expr $mfe(volume$n)*$mfe(master)/100]" 2849 lappend eca_string "-epp:$mfe(pan$n)" 2850 set mfe(volume_position$n) 2 2851 set mfe(pan_position$n) 3 2852 } 2853 2854 set tracks_to_play 1 2855 } 2856 2857 if {$preview == 2} { 2858 set mfe(number_of_effects$track) 0 2859 for {set en 1} {$en <= 8} {incr en} { 2860 set effect_list "" 2861 if {$mfe(effect$en$track) != "None" && $mfe(effect_attached$en$track) != "Bypassed"} { 2862 set mfe(effect_position$en$track) [expr $mfe(pan_position$track)+$mfe(number_of_effects$track)] 2863 if {[string match ladspa* $mfe(effect$en$track)]==1} { 2864 regsub ladspa_ $mfe(effect$en$track) {} current_effect 2865 set effect_list "$effect_list-el:$current_effect," 2866 } elseif {[string match pn:* $mfe(effect$en$track)]==1} { 2867 set effect_list "$effect_list-$mfe(effect$en$track)," 2868 } else { 2869 set effect_list "$effect_list-$mfe(effect$en$track):" 2870 } 2871 for {set par 1} {$par <= $effect_param($mfe(effect$en$track)) } {incr par} { 2872 if {$par>1} {set effect_list "$effect_list,"} 2873 set effect_list "$effect_list$mfe(effect_parameter$par$en$track)" 2874 } 2875 } 2876 lappend eca_string "$effect_list" 2877 } 2878 2879 } else { 2880 set effect_list "" 2881 set mfe(effect_position1$track) [expr $mfe(pan_position$track)+1] 2882 set en $effect2 2883 if {$mfe(effect$en$track) != "None" && $mfe(effect_attached$en$track) != "Bypassed"} { 2884 if {[string match ladspa* $mfe(effect$en$track)]==1} { 2885 regsub ladspa_ $mfe(effect$en$track) {} current_effect 2886 set effect_list "$effect_list-el:$current_effect," 2887 } elseif {[string match pn:* $mfe(effect$en$track)]==1} { 2888 set effect_list "$effect_list-$mfe(effect$en$track)," 2889 } else { 2890 set effect_list "$effect_list-$mfe(effect$en$track):" 2891 } 2892 for {set par 1} {$par <= $effect_param($mfe(effect$en$track)) } {incr par} { 2893 if {$par>1} {set effect_list "$effect_list,"} 2894 set effect_list "$effect_list$mfe(effect_parameter$par$en$track)" 2895 } 2896 lappend eca_string "$effect_list" 2897 } 2898 2899 } 2900 } 2901 if {$tracks_to_play ==1} { 2902 for {set n1 1} {$n1 <= $number_of_tracks} {incr n1} { 2903 $w.track$n1.rec configure -state disabled 2904 } 2905 if {$mfe(device$track)=="Default" || $mfe(device$track)=="(I / O Dev.)"} { 2906 lappend eca_string "-a:$n" 2907 lappend eca_string "-o:$default_audio_io" 2908 } else { 2909 lappend eca_string "-a:$n" 2910 lappend eca_string "-o:$mfe(device$track)" 2911 } 2912# set review_status [open track_view_status.txt2 w] 2913# puts $review_status $eca_string 2914# close $review_status 2915 set playhandle [open "|ecasound -c $eca_string" w] 2916 fconfigure $playhandle -buffering none -blocking 0 2917 puts $playhandle "setpos $start_time\n" 2918 puts $playhandle "t\n" 2919 } else { 2920 set stop_command 1 2921 messages [format "No tracks to be played or recorded"] 2922 } 2923} 2924 2925############################### Main Section ################################################# 2926# VARIABLES DESCRIPTION: 2927# mt_font: Default font 2928# number_of_tracks: Number of displayed tracks 2929# track_number: Number of current track 2930# sp_minutes: Starting position in minutes and; 2931# sp_seconds: Starting position in seconds 2932# mfe(track_nameN): Name of track N 2933# mfe(openfileN): Name and path of the track N wave file 2934# mfe(deviceN): Name and path of the track N audio device 2935# mfe(track_statusN): Status of track N (Could be "Play", "Rec" or "Mute") 2936# mfe(effectnN): Name of effect n on track N 2937# mfe(effect_parametersnN): Number of parameters of effect n on track N 2938# mfe(effect_parameterPnN): Value for parameter P of effect n on track N 2939# mfe(volumeN): volume of track N 2940# mfe(panN): Left/Right percent 2941# effect_name(nnn): A more descriptive name of the effect called nnn by ecasound 2942# effect_param(nnn): Number of parameters of the effect called nnn by ecasound 2943# effect_param_name(nnnN): Name of parameter N of effect called nnn by ecasound 2944# effect_param_value(nnnN): Default value for parameter N of effect called nnn by ecasound 2945# effect_param_from(nnnN): Begin value for parameter N of effect called nnn by ecasound 2946# effect_param_to(nnnN): Ending value for parameter N of effect called nnn by ecasound 2947# effect_param_resolution(nnnN): Resolution for parameter N of effect called nnn by ecasound 2948 2949# Variables definition section 2950 2951global 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 2952 2953#ttk::setTheme clam 2954tk_setPalette seashell3 2955 2956set bgcolor cyan3 2957 2958frame .mfe 2959frame .mfe.up1 -bd 6 2960frame .mfe.up2 -bd 6 2961#frame .mfe.header -bg $bgcolor 2962frame .mfe.tracks 2963frame .mfe.low -bd 6 2964 2965set row 1 2966set number_of_tracks 0 2967set toprocess " " 2968set solo_tracks 0 2969 2970set mt_font [font create -family Helvetica -size 9 -weight normal] 2971 2972set play_command "play" 2973set mixdown 0 2974set export_ecs 0 2975set stop_position 0 2976set mfe(directory) "." 2977set mfe(multichannel) 0 2978set mfe(rec_prop_bits0) "Signed 16Bit Little Endian" 2979set mfe(rec_prop_channels0) "2" 2980set mfe(rec_prop_srate0) "44100" 2981set mfe(rec_prop_interl0) "i" 2982set mfe(rec_prop_bits) "Signed 16Bit Little Endian" 2983set mfe(rec_prop_channels) "2" 2984set mfe(rec_prop_srate) "44100" 2985set mfe(rec_prop_interl) "i" 2986set mfe(rec_prop_bitsMD) "Signed 16Bit Little Endian" 2987set mfe(rec_prop_channelsMD) "2" 2988set mfe(rec_prop_srateMD) "44100" 2989set mfe(rec_prop_interlMD) "i" 2990 2991set mfe(master) 100 2992set mfe(mixdown_begin_min) 0 2993set mfe(mixdown_begin_sec) 0 2994set mfe(mixdown_end_min) 0 2995set mfe(mixdown_end_sec) 0 2996set mfe(mixdown_normalize) "No" 2997 2998set sp_minutes_loc(1) 0 2999set sp_minutes_loc(2) 0 3000set sp_minutes_loc(3) 0 3001set sp_minutes_loc(4) 0 3002set sp_minutes_loc(5) 0 3003set sp_minutes_loc(6) 0 3004set sp_minutes_loc(7) 0 3005set sp_minutes_loc(8) 0 3006set sp_minutes_loc(9) 0 3007set sp_minutes_loc(10) 0 3008set sp_minutes_loc(11) 0 3009set sp_minutes_loc(12) 0 3010set sp_minutes_loc(13) 0 3011set sp_minutes_loc(14) 0 3012set sp_minutes_loc(15) 0 3013set sp_minutes_loc(16) 0 3014 3015set sp_seconds_loc(1) 0 3016set sp_seconds_loc(2) 0 3017set sp_seconds_loc(3) 0 3018set sp_seconds_loc(4) 0 3019set sp_seconds_loc(5) 0 3020set sp_seconds_loc(6) 0 3021set sp_seconds_loc(7) 0 3022set sp_seconds_loc(8) 0 3023set sp_seconds_loc(9) 0 3024set sp_seconds_loc(10) 0 3025set sp_seconds_loc(11) 0 3026set sp_seconds_loc(12) 0 3027set sp_seconds_loc(13) 0 3028set sp_seconds_loc(14) 0 3029set sp_seconds_loc(15) 0 3030set sp_seconds_loc(16) 0 3031set mfe(mixdown_normalize) "No" 3032set mfe(mixdown_normalize_amp) "-12dBFS" 3033set mfe(mixdown_normalize_lev) "-6dBFS" 3034set mfe(punch_in_minutes) 0 3035set mfe(punch_in_seconds) 0 3036set mfe(punch_out_minutes) 0 3037set mfe(punch_out_seconds) 0 3038set mfe(latency) 0 3039set mfe(track_status0) "Mute" 3040set mfe(track_name0) "Metronome" 3041set mfe(volume0) 100 3042set mfe(file0) null 3043set mfe(pan0) 50 3044set mfe(device0) "Default" 3045set mfe(chn0) 2 3046set mfe(track_solo0) "No Solo" 3047set mfe(track_rec_status0) "No" 3048set mfe(effect10) "pn:metronome" 3049set mfe(effect_parameter110) 120 3050set mfe_temp(effect10) "None" 3051set mfe(effect_attached10) "Connected" 3052set mfe(effect_parameters10) 1 3053set n 0 3054for {set en 2} {$en <= 8} {incr en} { 3055 set mfe(effect$en$n) "None" 3056 set mfe_temp(effect$en$n) "None" 3057 set mfe(effect_attached$en$n) "Bypassed" 3058} 3059 3060set mfe(metronome_beat) 100 3061 3062set time_format "Minutes" 3063 3064label .mfe.up1.title -justify left -text "TKECA 4.4.3 - Tcl/Tk Frontend for Ecasound - 2003-2011 Luis Pablo Gasparotto " 3065label .mfe.up1.text -text "Current Directory: " 3066entry .mfe.up1.entry -bg White -textvariable mfe(directory) 3067label .mfe.up1.text2 -text "Current File: " 3068entry .mfe.up1.entry2 -state disabled -textvariable mfe(openfile0) 3069button .mfe.up1.button -text "Open file" -height 0 -command {set n 0 3070set types {{{mfe files} {*.mfe}} {{all} {*}}} 3071set track_num 0 3072set save_as 0 3073set exit_yes 5 3074proc_exit 3075} 3076button .mfe.up1.save -text "Save file" -height 0 -command { 3077set save_as 0 3078save_file} 3079button .mfe.up1.saveas -text "Save file as" -height 0 -command { 3080set types {{{mfe files} {*.mfe}} {{all} {*}}} 3081set track_num 0 3082file_browser2 3083save_file} 3084button .mfe.up2.exportecs -text "Export .ecs" -command {export_ecs} 3085#button .mfe.up2.mixdown -activebackground LightPink -text "Mixdown" -command {mixdown} 3086button .mfe.up2.mixdown -text "Mixdown" -command { 3087 .mfe.up1.button configure -state disabled 3088 .mfe.up1.save configure -state disabled 3089 .mfe.up1.saveas configure -state disabled 3090 .mfe.up2.options configure -state disabled 3091 .mfe.up2.colors configure -state disabled 3092 .mfe.up2.time_format configure -state disabled 3093 .mfe.up2.metronome configure -state disabled 3094 .mfe.up2.mixdown configure -state disabled 3095 .mfe.up2.exportecs configure -state disabled 3096 .mfe.up2.addtrack configure -state disabled 3097 .mfe.up2.del_all_tracks configure -state disabled 3098 .mfe.up2.quit configure -state disabled 3099 .mfe.up2.about configure -state disabled 3100 .mfe.low.multich2 configure -state disabled 3101 .mfe.low.loc configure -state disabled 3102 .mfe.low.latcomp configure -state disabled 3103 .mfe.low.master configure -state disabled 3104 .mfe.low.play configure -state disabled 3105# .mfe.low.rew_to_begin configure -state disabled 3106# .mfe.low.rew_5 configure -state disabled 3107# .mfe.low.forw_5 configure -state disabled 3108 3109 set types {{{Wav files} {*.wav}} {{mp3 files} {*.mp3}} {{raw files} {*.raw}} {{all} {*}}} 3110 set track_num "MD" 3111 set mfe(track_statusMD) "Rec" 3112 if {$number_of_tracks==0} { 3113 messages [format "There's no tracks to make Mixdown!"] 3114 return 3115 } 3116 set mixdown 1 3117 rec_properties 3118 tkwait window .rec_propertiesMD 3119 destroy .rec_propertiesMD 3120 if {$mixdown==5} { 3121 messages [format "Mixdown aborted by user!"] 3122 .mfe.up1.button configure -state normal 3123 .mfe.up1.save configure -state normal 3124 .mfe.up1.saveas configure -state normal 3125 .mfe.up2.options configure -state normal 3126 .mfe.up2.colors configure -state normal 3127 .mfe.up2.time_format configure -state normal 3128 .mfe.up2.metronome configure -state normal 3129 .mfe.up2.mixdown configure -state normal 3130 .mfe.up2.exportecs configure -state normal 3131 .mfe.up2.addtrack configure -state normal 3132 .mfe.up2.del_all_tracks configure -state normal 3133 .mfe.up2.quit configure -state normal 3134 .mfe.up2.about configure -state normal 3135 .mfe.low.multich2 configure -state normal 3136 .mfe.low.loc configure -state normal 3137 .mfe.low.latcomp configure -state normal 3138 .mfe.low.master configure -state normal 3139 .mfe.low.play configure -state normal 3140 return 3141 } 3142 file_browser2 3143 toplevel .rec_propertiesMD 3144 wm title .rec_propertiesMD "Processing..." 3145 message .rec_propertiesMD.out -width 350 -text "Please wait!\nProcessing Mixdown" 3146 pack .rec_propertiesMD.out -expand y -fill x 3147 tkwait visibility .rec_propertiesMD 3148 tkwait visibility .rec_propertiesMD.out 3149 play 3150} 3151 3152button .mfe.up2.options -justify right -text Options -command {options} 3153button .mfe.up2.colors -justify right -text Colors -command {colors} 3154button .mfe.up2.time_format -justify right -text "Time Format" -command {time_format} 3155button .mfe.up2.metronome -justify right -text "Metronome" -command {metronome} 3156button .mfe.up2.addtrack -justify right -text "Add Track" -command { 3157incr number_of_tracks 3158set mfe(volume_position$number_of_tracks) 1 3159set mfe(pan_position$number_of_tracks) 2 3160set mfe(track_name$number_of_tracks) "Track $number_of_tracks" 3161set track_num $number_of_tracks 3162track_data_reset 3163set mfe(track_name$number_of_tracks) "Track $number_of_tracks" 3164set mfe(device$number_of_tracks) "(I / O Dev.)" 3165add_track} 3166button .mfe.up2.del_all_tracks -justify right -text "Close" -command { 3167set save_as 0 3168set exit_yes 2 3169proc_exit 3170} 3171button .mfe.up2.quit -justify right -text Quit -command { 3172set exit_yes 1 3173proc_exit 3174} 3175button .mfe.up2.about -justify right -text "About TKECA" -command { 3176proc_about 3177} 3178 3179#label .mfe.header.text1 -bg $bgcolor -justify left -text " Name " 3180#label .mfe.header.text2 -bg $bgcolor -justify left -text "File " 3181#label .mfe.header.text3 -bg $bgcolor -justify left -text " " 3182#label .mfe.header.text4 -bg $bgcolor -justify left -text " " 3183#label .mfe.header.text5 -bg $bgcolor -justify left -text "Solo Mute Rec. " 3184#label .mfe.header.text6 -bg $bgcolor -justify left -text " " 3185#label .mfe.header.text7 -bg $bgcolor -justify left -text "Pan " 3186#label .mfe.header.text8 -bg $bgcolor -justify left -text "Volume " 3187 3188pack .mfe.up1.title -side top -fill x -expand 1 3189pack .mfe.up1.text -side left -fill x -expand 1 3190pack .mfe.up1.entry -side left -fill x -expand 1 3191pack .mfe.up1.text2 -side left -fill x -expand 1 3192pack .mfe.up1.entry2 -side left -fill x -expand 1 3193pack .mfe.up1.button -side left -fill x -expand 1 3194pack .mfe.up1.save -side left -fill x -expand 1 3195pack .mfe.up1.saveas -side top -fill x -expand 1 3196 3197pack .mfe.up2.exportecs -side left -fill x -expand 1 3198pack .mfe.up2.mixdown -side left -fill x -expand 1 3199pack .mfe.up2.options -side left -fill x -expand 1 3200pack .mfe.up2.colors -side left -fill x -expand 1 3201pack .mfe.up2.time_format -side left -fill x -expand 1 3202pack .mfe.up2.metronome -side left -fill x -expand 1 3203pack .mfe.up2.addtrack -side left -fill x -expand 1 3204pack .mfe.up2.del_all_tracks -side left -fill x -expand 1 3205pack .mfe.up2.quit -side left -fill x -expand 1 3206pack .mfe.up2.about -side left -fill x -expand 1 3207# 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 3208pack .mfe.up1 -side top -fill x 3209pack .mfe.up2 -side top -fill x 3210 3211# pack .mfe.header.text1 -side left -fill x 3212# pack .mfe.header.text2 -side left -fill x 3213# pack .mfe.header.text3 -side left -fill x 3214# pack .mfe.header.text4 -side left -fill x 3215# pack .mfe.header.text5 -side left -fill x 3216# pack .mfe.header.text6 -side left -fill x 3217# pack .mfe.header.text7 -side left -fill x 3218# pack .mfe.header.text8 -side left -fill x 3219# pack .mfe.header -pady 2 3220# pack .mfe.tracks -expand true -fill both 3221.mfe.up1.save configure -state disabled 3222.mfe.up1.saveas configure -state disabled 3223.mfe.up2.exportecs configure -state disabled 3224.mfe.up2.mixdown configure -state disabled 3225 3226set bgcolor2 AntiqueWhite3 3227canvas .mfe.tracks.canvas -width 780 -height 400 -yscrollcommand [list .mfe.tracks.yscroll set] 3228.mfe.tracks.canvas config -scrollregion "0 0 0 400" 3229scrollbar .mfe.tracks.yscroll -orient vertical -width 8 -command [list .mfe.tracks.canvas yview] 3230 3231set w [frame .mfe.tracks.canvas.f -width 780 -height 400 -bd 0] 3232.mfe.tracks.canvas create window 0 0 -anchor nw -window $w -tags tracks_window 3233 3234#pack .mfe.tracks.canvas.f -side left -fill x -expand true 3235pack .mfe.tracks.canvas -side left -fill both -expand true 3236pack .mfe.tracks.yscroll -side top -fill y -expand true 3237pack .mfe.tracks -side top -fill both -expand true 3238 3239set stop_command 1 3240set sp_minutes 0 3241set sp_seconds 0 3242set play_text "Play" 3243set fw_text "Fw 5''" 3244set rew_text "Rew 5''" 3245set rewbeg_text "Go to 00:00" 3246 3247label .mfe.low.position -text "Position:" 3248label .mfe.low.minutes -width 3 -text 0 3249label .mfe.low.position2 -text : 3250label .mfe.low.seconds -width 5 -text 0.00 3251label .mfe.low.spaces -text " " 3252label .mfe.low.multich -text "Multichannel:" 3253checkbutton .mfe.low.multich2 -width 1 -variable mfe(multichannel) -onvalue 1 -offvalue 0 -command " 3254set mixdown 3 3255set track_num 0 3256rec_properties" 3257 3258button .mfe.low.latcomp -text "Latency Compensation" -height 0 -command { 3259latency_comp 3260} 3261 3262button .mfe.low.loc -text Loc -height 0 -command { 3263locate 3264} 3265 3266button .mfe.low.master -text Master -height 0 -command { 3267master 3268} 3269 3270button .mfe.low.play -textvariable play_text -height 0 -command { 3271 if {$stop_command == 1} { 3272 set stop_command 0 3273 set play_text "Stop" 3274 play 3275 if {$tracks_to_play==0 && $tracks_to_rec==0} { 3276 set stop_command 1 3277 set play_text "Play" 3278 } 3279 } else { 3280 set stop_command 1 3281 set play_text "Play" 3282 stop 3283 } 3284} 3285 3286button .mfe.low.rew_to_begin -textvariable rewbeg_text -height 0 -command { 3287 set sp_minutes 0 3288 set sp_seconds 0 3289 set sp_seconds2 0 3290 if {$stop_command == 1} { 3291 display_position 3292 } else { 3293 puts $playhandle "setpos 0" 3294 set start_time2 [clock clicks -milliseconds] 3295 tick 3296 } 3297} 3298 3299button .mfe.low.rew_5 -textvariable rew_text -height 0 -command { 3300 set starting_time [expr $sp_seconds+$sp_minutes*60] 3301 if {$starting_time > 5} { 3302 set starting_time [expr $starting_time-5] 3303 if {$time_format=="Minutes"} { 3304 set sp_minutes [expr $starting_time/60] 3305 set sp_minutes [expr int($sp_minutes)] 3306 set sp_seconds [expr $starting_time-$sp_minutes*60] 3307 } else { 3308 set sp_seconds $starting_time 3309 } 3310 } else { 3311 set sp_minutes 0 3312 set sp_seconds 0 3313 } 3314 if {$stop_command == 1} { 3315 display_position 3316 } else { 3317 set sp_seconds2 $starting_time 3318 puts $playhandle "setpos $starting_time" 3319 set start_time2 [clock clicks -milliseconds] 3320 tick 3321 } 3322} 3323 3324button .mfe.low.forw_5 -textvariable fw_text -height 0 -command { 3325 set starting_time [expr $sp_seconds+$sp_minutes*60] 3326 set starting_time [expr $starting_time+5] 3327 if {$time_format=="Minutes"} { 3328 set sp_minutes [expr $starting_time/60] 3329 set sp_minutes [expr int($sp_minutes)] 3330 set sp_seconds [expr $starting_time-$sp_minutes*60] 3331 } else { 3332 set sp_seconds $starting_time 3333 } 3334 if {$stop_command == 1} { 3335 display_position 3336 } else { 3337 set sp_seconds2 $starting_time 3338 puts $playhandle "setpos $starting_time" 3339 set start_time2 [clock clicks -milliseconds] 3340 tick 3341 } 3342} 3343 3344pack .mfe.low.position -side left 3345pack .mfe.low.minutes -side left 3346pack .mfe.low.position2 -side left 3347pack .mfe.low.seconds -side left 3348pack .mfe.low.spaces -side left 3349pack .mfe.low.multich -side left 3350pack .mfe.low.multich2 -side left 3351pack .mfe.low.latcomp -side left 3352 3353pack .mfe.low.loc -side left -fill x -expand true 3354pack .mfe.low.master -side left -fill x -expand true 3355pack .mfe.low.play -side left -fill x -expand true 3356pack .mfe.low.rew_to_begin -side left -fill x -expand true 3357pack .mfe.low.rew_5 -side left -fill x -expand true 3358pack .mfe.low.forw_5 -side left -fill x 3359pack .mfe.low -fill x -expand false 3360pack .mfe -fill both -expand true 3361 3362bind .mfe <Configure> {.mfe.tracks.canvas itemconfigure tracks_window -width [expr [winfo width .mfe]-15]} 3363 3364set ecasoundrc "~/.ecasoundrc" 3365 3366if {[file exists $ecasoundrc] != 1} { 3367 set ecasoundrc "~/.ecasound/ecasoundrc" 3368 if {[file exists $ecasoundrc] != 1} { 3369 set ecasoundrc "/usr/local/share/ecasound/ecasoundrc" 3370 if {[file exists $ecasoundrc] != 1} { 3371 set ecasoundrc "/usr/share/ecasound/ecasoundrc" 3372 if {[file exists $ecasoundrc] != 1} { 3373 puts "Tkeca is unable to find ecasoundrc file" 3374 exit 3375 } 3376 } 3377 } 3378} 3379 3380set rc_infile [open $ecasoundrc r] 3381 3382tkwait visibility .mfe 3383tkwait visibility .mfe.low 3384#tkwait visibility .mfe.up1 3385#tkwait visibility .mfe.up2 3386wm title . "TKECA 4.4.3 - Tcl/Tk Frontend for Ecasound" 3387 3388set ladspa_path 0 3389 3390set prev_loaded_file 0 3391set eca_effects 69 3392 3393set effect(1) "eal|Limiter|1|Limit %|0|100|100|0" 3394set effect(2) "ec|Compressor|2|Compression Rate (Db)|0|1|1|0|Threshold %|0|100|50|0" 3395set 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" 3396set 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" 3397set effect(5) "ef1|Resonant Bandpass Filter|2|Center Frequency (Hz)|0|20000|0|0|Width (Hz)|0|2000|0|0" 3398set effect(6) "ef3|Resonant Lowpass Filter|3|Cutoff Frequency (Hz)|0|5000|0|0|Resonance|0|2|0|0|Gain|0|1|0|0" 3399set effect(7) "efa|Allpass Filter|2|Delay Samples|0|10000|0|0|Feedback %|0|100|50|0" 3400set effect(8) "efb|Bandpass Filter|2|Center Frequency (Hz)|0|11000|11000|0|Width (Hz)|0|22000|22000|0" 3401set effect(9) "efh|Highpass Filter|1|Cutoff Frequency (Hz)|10000|22000|10000|0" 3402set effect(10) "efl|Lowpass Filter|1|Cutoff Frequency (Hz)|0|10000|0|0" 3403set effect(11) "efr|Bandreject Filter|2|Center Frequency (Hz)|0|11000|11000|0|Width (Hz)|0|22000|22000|0" 3404set effect(12) "efs|Resonator Filter|2|Center Frequency (Hz)|0|11000|11000|0|Width (Hz)|0|22000|22000|0" 3405set 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" 3406set 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" 3407set 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" 3408set effect(16) "ete|Advanced Reverb|3|Room Size (Meters)|0|100|10|0|Feedback %|0|100|50|0|Wet %|0|100|50|0" 3409set effect(17) "etf|Fake Stereo|1|Delay Time (ms)|0|500|40|0" 3410set 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" 3411set 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" 3412set 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" 3413set effect(21) "pn:metronome|Metronome|1|BPM|30|300|120|1" 3414set effect(22) "pn:dyn_compress_supersoft|Dynamic Compressor (Super Soft)|1|Gain %|0|1000|100|1" 3415set effect(23) "pn:dyn_compress_soft|Dynamic Compressor (Soft)|1|Gain %|0|1000|100|1" 3416set effect(24) "pn:dyn_compress_medium|Dynamic Compressor (Medium)|1|Gain %|0|1000|100|1" 3417set effect(25) "pn:dyn_compress_hard|Dynamic Compressor (Hard)|1|Gain %|0|1000|100|1" 3418set effect(26) "pn:dyn_compress_brutal|Dynamic Compressor (Brutal)|1|Gain %|0|1000|100|1" 3419set 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" 3420set effect(28) "pn:eq_template2|2 Bands Equalizer|2|1000hz|0|500|100|1|4000hz|0|500|100|1" 3421set effect(29) "pn:f_lowp_sine|Resonator Lowpass Filter (Controlled by a sine wave)|0" 3422set effect(30) "pn:f_lowp_sine2|Lowpass Filter (Controlled by a sine wave)|0" 3423set effect(31) "pn:f_high_and_low|Parallel High amd Lowpass Filter|0" 3424set effect(32) "pn:f_res_bandpass|Resonator Bandpass Filter|2|Freq|0|4500|1500|1|Width|1|2100|700|1" 3425set effect(33) "pn:f_res_lowpass|Resonator Lowpass Filter|1|Freq|0|2000|800|1" 3426set effect(34) "pn:f_lowpass|Simple Lowpass Filter|1|Freq|0|2000|300|1" 3427set effect(35) "pn:f_bandpass|Bandpass Filter|2|Freq|0|4500|1500|1|Width|1|2100|700|1" 3428set effect(36) "pn:f_rejectband|Band Reject Filter|0" 3429set effect(37) "pn:f_highpass|Resonator Lowpass Filter|1|Freq|0|3000|1500|1" 3430set effect(38) "pn:f_inverse_comb|Inverse Combined Filter|0" 3431set effect(39) "pn:f_resonator|Resonator Filter|0" 3432set 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" 3433set 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" 3434set effect(42) "pn:f_filtertest|Two Parallel Filters|2|Freq 1|0|2000|100|1|Freq 2|4000|10000|5000|1" 3435set effect(43) "pn:gate_noisegate_1|Noise Gate|0" 3436set effect(44) "pn:gate_noisegate_delanalog|Noise Gate for Analog Hum Removal|0" 3437set effect(45) "pn:gate_crop|Crop Gate Example|0" 3438set effect(46) "pn:gate_threshold|Threshold Gate Example|0" 3439set effect(47) "pn:time_reverb1|Bathroom Reverb|0" 3440set effect(48) "pn:time_reverb2|Plain Reverb|0" 3441set effect(49) "pn:time_reverb3|Fake Stereo|0" 3442set effect(50) "pn:time_reverb4|Reverb Combo|0" 3443set effect(51) "pn:time_delay1|200ms Triple Delay|0" 3444set effect(52) "pn:time_delay2|200ms Triple Multidelay|0" 3445set effect(53) "pn:time_wicked_dub|Wicked Dub Mix|0" 3446set effect(54) "pn:time_flanger1|Flanger Example|0" 3447set effect(55) "pn:time_chorus1|Chorus Example|0" 3448set effect(56) "pn:time_phaser1|Phaser Example|0" 3449set effect(57) "pn:var_sweeping_pan|Sweeping Pan Envelope|1|Speed Hz|0.1|100|0.2|0.01" 3450set effect(58) "pn:var_switching_pan|Alternates between Left and Right|1|Speed Hz|0.1|100|0.2|0.01" 3451set effect(59) "pn:chipmunk_generator|Chipmunk Generator|0" 3452set effect(60) "pn:var_parchid|Chipmunk Sweep|2|Pitch |0|500|100|1|Mod. Freq |0|1|0.5|0.01" 3453set 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" 3454# Contributed Arto Hamara 3455set effect(62) "pn:var_stretched_tape|Stretched Tape|0" 3456set effect(63) "pn:var_molten_tape|Molten Tape|0" 3457set effect(64) "pn:var_dali|Dali|0" 3458# Contributed S Macy 3459set effect(65) "pn:var_aw|Classic Auto Wah|1|Speed|0.01|1|0.1|0.01" 3460set 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" 3461set effect(67) "pn:var_aw_tri|Auto Wah Triangular Osc.|1|Speed|0.01|1|0.1|0.01" 3462set effect(68) "pn:var_aw_tri_custom|Auto Wah Triangular Osc. with Control|1|Speed|0.01|1|0.1|0.01" 3463set effect(69) "pn:var_aw_ksv|Volume Sensitive Wah|0" 3464 3465set effect_index(0) "None" 3466 3467for {set n 1} {$n <= $eca_effects} {incr n} { 3468 set current_effect [split $effect($n) |] 3469 set effect_index($n) [lindex $current_effect 0] 3470 set effect_name($effect_index($n)) [lindex $current_effect 1] 3471 set effect_maker($effect_index($n)) "Kai Vehmanen" 3472 set effect_copy($effect_index($n)) "(c) 1997-2001 Kai Vehmanen" 3473 if {$n>=62 && $n<= 64} { 3474 set effect_maker($effect_index($n)) "Arto Hamara" 3475 set effect_copy($effect_index($n)) "(c) Unknown" 3476 } 3477 if {$n>=65 && $n<= 69} { 3478 set effect_maker($effect_index($n)) "S. Macy" 3479 set effect_copy($effect_index($n)) "(c) Unknown" 3480 } 3481 set effect_param($effect_index($n)) [lindex $current_effect 2] 3482 set pn2 3 3483 for {set pn 1} {$pn <= $effect_param($effect_index($n))} {incr pn} { 3484 set effect_param_name($effect_index($n)$pn) [lindex $current_effect $pn2] 3485 incr pn2 3486 set effect_param_from($effect_index($n)$pn) [lindex $current_effect $pn2] 3487 incr pn2 3488 set effect_param_to($effect_index($n)$pn) [lindex $current_effect $pn2] 3489 incr pn2 3490 set effect_param_value($effect_index($n)$pn) [lindex $current_effect $pn2] 3491 incr pn2 3492 set effect_param_resolution($effect_index($n)$pn) [lindex $current_effect $pn2] 3493 incr pn2 3494 } 3495} 3496 3497while {[gets $rc_infile input_line] != -1 } { 3498 set current_line [split $input_line =] 3499 set current_parameter [lindex $current_line 0] 3500 set current_value [lindex $current_line 1] 3501 if {[string match *ladspa* $current_parameter] == 1} { 3502 regsub { } $current_value {} current_value 3503 set ladspa_path $current_value 3504 } 3505 if {[string match *wave-editor* $current_parameter] == 1} { 3506 regsub { } $current_value {} current_value 3507 set wave_editor $current_value 3508 } 3509 if {[string match *efault-output* $current_parameter] == 1} { 3510 regsub {default-output =} $current_value {} current_value 3511 regsub { } $current_value {} current_value 3512 set default_audio_io $current_value 3513 } 3514} 3515 3516if {[string match */* $ladspa_path] == 1 || [string match /* $ladspa_path] == 1} {ladspa} else {messages [format "No LADSPA Support"]} 3517 3518