Merging from trunk
authorHans Fugal <hans@fugal.net>
Thu, 22 Jun 2006 23:40:55 +0000 (23:40 +0000)
committerHans Fugal <hans@fugal.net>
Thu, 22 Jun 2006 23:40:55 +0000 (23:40 +0000)
git-svn-id: svn://localhost/ardour2/branches/undo@638 d708f5d6-7413-0410-9779-e7cbd77b26cf

267 files changed:
SConstruct
gtk2_ardour/SConscript
gtk2_ardour/about.cc
gtk2_ardour/actions.cc
gtk2_ardour/add_route_dialog.cc
gtk2_ardour/analysis_window.cc
gtk2_ardour/ardev_common.sh
gtk2_ardour/ardour.menus
gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui2.cc
gtk2_ardour/ardour_ui_dependents.cc
gtk2_ardour/ardour_ui_dialogs.cc
gtk2_ardour/ardour_ui_ed.cc
gtk2_ardour/ardour_ui_mixer.cc
gtk2_ardour/ardour_ui_options.cc
gtk2_ardour/audio_clock.cc
gtk2_ardour/audio_clock.h
gtk2_ardour/audio_time_axis.cc
gtk2_ardour/audio_time_axis.h
gtk2_ardour/automation_gain_line.cc
gtk2_ardour/automation_line.cc
gtk2_ardour/automation_pan_line.cc
gtk2_ardour/automation_time_axis.cc
gtk2_ardour/axis_view.h
gtk2_ardour/canvas-waveview.c
gtk2_ardour/color_manager.cc
gtk2_ardour/connection_editor.cc
gtk2_ardour/crossfade_edit.cc
gtk2_ardour/crossfade_view.cc
gtk2_ardour/crossfade_view.h
gtk2_ardour/curvetest.cc
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_actions.cc
gtk2_ardour/editor_audio_import.cc
gtk2_ardour/editor_audiotrack.cc
gtk2_ardour/editor_canvas.cc
gtk2_ardour/editor_canvas_events.cc
gtk2_ardour/editor_cursors.cc
gtk2_ardour/editor_edit_groups.cc
gtk2_ardour/editor_export_audio.cc
gtk2_ardour/editor_hscroller.cc
gtk2_ardour/editor_imageframe.cc
gtk2_ardour/editor_keys.cc
gtk2_ardour/editor_markers.cc
gtk2_ardour/editor_mouse.cc
gtk2_ardour/editor_nudge.cc
gtk2_ardour/editor_ops.cc
gtk2_ardour/editor_region_list.cc
gtk2_ardour/editor_route_list.cc
gtk2_ardour/editor_rulers.cc
gtk2_ardour/editor_selection_list.cc
gtk2_ardour/editor_tempodisplay.cc
gtk2_ardour/editor_timefx.cc
gtk2_ardour/export_dialog.cc
gtk2_ardour/export_range_markers_dialog.cc
gtk2_ardour/gain_automation_time_axis.cc
gtk2_ardour/gain_meter.cc
gtk2_ardour/glade_factory.cc [deleted file]
gtk2_ardour/glade_factory.h [deleted file]
gtk2_ardour/glade_path.cc [deleted file]
gtk2_ardour/glade_path.h [deleted file]
gtk2_ardour/imageframe_socket_handler.cc
gtk2_ardour/imageframe_time_axis.cc
gtk2_ardour/imageframe_time_axis_view.cc
gtk2_ardour/imageframe_view.cc
gtk2_ardour/imageframe_view.h
gtk2_ardour/io_selector.cc
gtk2_ardour/keyboard.cc
gtk2_ardour/location_ui.cc
gtk2_ardour/main.cc
gtk2_ardour/marker_time_axis.cc
gtk2_ardour/meter_bridge.cc
gtk2_ardour/meter_bridge_strip.cc
gtk2_ardour/mixer_strip.cc
gtk2_ardour/mixer_strip.h
gtk2_ardour/mixer_ui.cc
gtk2_ardour/mixer_ui.h
gtk2_ardour/new_session_dialog.cc
gtk2_ardour/option_editor.cc
gtk2_ardour/opts.cc
gtk2_ardour/pan_automation_time_axis.cc
gtk2_ardour/panner2d.cc
gtk2_ardour/panner2d.h
gtk2_ardour/panner_ui.cc
gtk2_ardour/playlist_selector.cc
gtk2_ardour/plugin_selector.cc
gtk2_ardour/plugin_ui.cc
gtk2_ardour/plugin_ui.h
gtk2_ardour/po/de_DE.po
gtk2_ardour/po/el_GR.po
gtk2_ardour/po/es_ES.po
gtk2_ardour/po/fr_FR.po
gtk2_ardour/po/it_IT.po
gtk2_ardour/po/pt_BR.po
gtk2_ardour/po/pt_PT.po
gtk2_ardour/po/ru_RU.po
gtk2_ardour/redirect_automation_line.cc
gtk2_ardour/redirect_automation_line.h
gtk2_ardour/redirect_automation_time_axis.cc
gtk2_ardour/redirect_box.cc
gtk2_ardour/region_editor.cc
gtk2_ardour/region_gain_line.cc
gtk2_ardour/region_selection.cc
gtk2_ardour/regionview.cc
gtk2_ardour/regionview.h
gtk2_ardour/route_params_ui.cc
gtk2_ardour/route_redirect_selection.cc
gtk2_ardour/route_ui.cc
gtk2_ardour/route_ui.h
gtk2_ardour/selectable.h
gtk2_ardour/selection.cc
gtk2_ardour/send_ui.cc
gtk2_ardour/sfdb_ui.cc
gtk2_ardour/sfdb_ui.h
gtk2_ardour/streamview.cc
gtk2_ardour/streamview.h
gtk2_ardour/taperegionview.cc
gtk2_ardour/tempo_dialog.cc
gtk2_ardour/time_axis_view.cc
gtk2_ardour/time_axis_view_item.cc
gtk2_ardour/time_axis_view_item.h
gtk2_ardour/time_selection.cc
gtk2_ardour/utils.cc
gtk2_ardour/visual_time_axis.cc
gtk2_ardour/vst_pluginui.cc
libs/ardour/SConscript
libs/ardour/ardour/ardour.h
libs/ardour/ardour/audio_diskstream.h [new file with mode: 0644]
libs/ardour/ardour/audio_track.h
libs/ardour/ardour/audiofilesource.h [new file with mode: 0644]
libs/ardour/ardour/audiofilter.h
libs/ardour/ardour/audioregion.h
libs/ardour/ardour/audiosource.h [new file with mode: 0644]
libs/ardour/ardour/constsource.h [deleted file]
libs/ardour/ardour/coreaudio_source.h
libs/ardour/ardour/cycle_timer.h
libs/ardour/ardour/destructive_filesource.h
libs/ardour/ardour/diskstream.h [deleted file]
libs/ardour/ardour/externalsource.h [deleted file]
libs/ardour/ardour/filesource.h [deleted file]
libs/ardour/ardour/io.h
libs/ardour/ardour/osc.h
libs/ardour/ardour/playlist.h
libs/ardour/ardour/region.h
libs/ardour/ardour/route.h
libs/ardour/ardour/seqsource.h [deleted file]
libs/ardour/ardour/session.h
libs/ardour/ardour/session_diskstream.h
libs/ardour/ardour/silentsource.h [deleted file]
libs/ardour/ardour/sndfilesource.h
libs/ardour/ardour/source.h
libs/ardour/ardour/types.h
libs/ardour/audio_diskstream.cc [new file with mode: 0644]
libs/ardour/audio_library.cc
libs/ardour/audio_playlist.cc
libs/ardour/audio_track.cc
libs/ardour/audioengine.cc
libs/ardour/audiofilesource.cc [new file with mode: 0644]
libs/ardour/audiofilter.cc
libs/ardour/audioregion.cc
libs/ardour/audiosource.cc [new file with mode: 0644]
libs/ardour/auditioner.cc
libs/ardour/automation_event.cc
libs/ardour/configuration.cc
libs/ardour/connection.cc
libs/ardour/control_protocol_manager.cc
libs/ardour/coreaudio_source.cc
libs/ardour/crossfade.cc
libs/ardour/curve.cc
libs/ardour/cycle_timer.cc
libs/ardour/destructive_filesource.cc
libs/ardour/diskstream.cc [deleted file]
libs/ardour/externalsource.cc [deleted file]
libs/ardour/filesource.cc [deleted file]
libs/ardour/globals.cc
libs/ardour/import.cc
libs/ardour/insert.cc
libs/ardour/io.cc
libs/ardour/jack_slave.cc
libs/ardour/ladspa_plugin.cc
libs/ardour/location.cc
libs/ardour/mtc_slave.cc
libs/ardour/named_selection.cc
libs/ardour/osc.cc
libs/ardour/panner.cc
libs/ardour/playlist.cc
libs/ardour/playlist_factory.cc
libs/ardour/plugin.cc
libs/ardour/plugin_manager.cc
libs/ardour/po/el_GR.po
libs/ardour/po/it_IT.po
libs/ardour/po/ru_RU.po
libs/ardour/recent_sessions.cc
libs/ardour/redirect.cc
libs/ardour/region.cc
libs/ardour/reverse.cc
libs/ardour/route.cc
libs/ardour/route_group.cc
libs/ardour/send.cc
libs/ardour/session.cc
libs/ardour/session_butler.cc
libs/ardour/session_click.cc
libs/ardour/session_control.cc
libs/ardour/session_events.cc
libs/ardour/session_export.cc
libs/ardour/session_feedback.cc
libs/ardour/session_midi.cc
libs/ardour/session_process.cc
libs/ardour/session_state.cc
libs/ardour/session_time.cc
libs/ardour/session_timefx.cc
libs/ardour/session_transport.cc
libs/ardour/sndfilesource.cc
libs/ardour/source.cc
libs/ardour/state_manager.cc
libs/ardour/stateful.cc
libs/ardour/tempo.cc
libs/ardour/utils.cc
libs/ardour/vst_plugin.cc
libs/fst/SConscript [new file with mode: 0644]
libs/fst/fst.c [new file with mode: 0644]
libs/fst/fst.h [new file with mode: 0644]
libs/fst/fstinfofile.c [new file with mode: 0644]
libs/fst/jackvst.h [new file with mode: 0644]
libs/fst/vsti.c [new file with mode: 0644]
libs/fst/vstwin.c [new file with mode: 0644]
libs/gtkmm2ext/fastmeter.cc
libs/gtkmm2ext/gtk_ui.cc
libs/gtkmm2ext/po/el_GR.po
libs/gtkmm2ext/po/es_ES.po
libs/gtkmm2ext/po/pt_BR.po
libs/gtkmm2ext/po/ru_RU.po
libs/gtkmm2ext/selector.cc
libs/libsndfile/src/sndfile.c
libs/libsndfile/src/wav.c
libs/midi++2/fd_midiport.cc
libs/midi++2/midicontrollable.cc
libs/midi++2/midimanager.cc
libs/midi++2/mmc.cc
libs/midi++2/mmctest.cc
libs/pbd3/SConscript
libs/pbd3/base_ui.cc
libs/pbd3/error.cc [new file with mode: 0644]
libs/pbd3/pathscanner.cc
libs/pbd3/pbd/error.h
libs/pbd3/pbd/transmitter.h
libs/pbd3/pool.cc
libs/pbd3/transmitter.cc
libs/surfaces/control_protocol/SConscript
libs/surfaces/control_protocol/basic_ui.cc
libs/surfaces/control_protocol/basic_ui.h [deleted file]
libs/surfaces/control_protocol/control_protocol.cc
libs/surfaces/control_protocol/control_protocol.h [deleted file]
libs/surfaces/control_protocol/control_protocol/basic_ui.h [new file with mode: 0644]
libs/surfaces/control_protocol/control_protocol/control_protocol.h [new file with mode: 0644]
libs/surfaces/control_protocol/control_protocol/smpte.h [new file with mode: 0644]
libs/surfaces/control_protocol/smpte.cc [new file with mode: 0644]
libs/surfaces/generic_midi/generic_midi_control_protocol.h
libs/surfaces/generic_midi/interface.cc
libs/surfaces/tranzport/interface.cc
libs/surfaces/tranzport/tranzport_control_protocol.cc
libs/surfaces/tranzport/tranzport_control_protocol.h
templates/SConscript
vst/SConscript [new file with mode: 0644]
vst/winmain.c [new file with mode: 0644]

index b0c0bb07ccc15731884a8f640f51401ac5fa05aa..65dfd3b06e1356d38fed7e826a49c76e3a44bbbf 100644 (file)
@@ -8,13 +8,14 @@ import glob
 import errno
 import time
 import platform
+import string
 from sets import Set
 import SCons.Node.FS
 
 SConsignFile()
 EnsureSConsVersion(0, 96)
 
-version = '2.0beta1'
+version = '2.0beta2'
 
 subst_dict = { }
 
@@ -25,20 +26,20 @@ subst_dict = { }
 opts = Options('scache.conf')
 opts.AddOptions(
   ('ARCH', 'Set architecture-specific compilation flags by hand (all flags as 1 argument)',''),
-    BoolOption('SYSLIBS', 'USE AT YOUR OWN RISK: CANCELS ALL SUPPORT FROM ARDOUR AUTHORS: Use existing system versions of various libraries instead of internal ones', 0),
+    BoolOption('COREAUDIO', 'Compile with Apple\'s CoreAudio library', 0),
     BoolOption('DEBUG', 'Set to build with debugging information and no optimizations', 0),
     PathOption('DESTDIR', 'Set the intermediate install "prefix"', '/'),
-    BoolOption('NLS', 'Set to turn on i18n support', 1),
-    PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'),
-    BoolOption('VST', 'Compile with support for VST', 0),
-    BoolOption('VERSIONED', 'Add version information to ardour/gtk executable name inside the build directory', 0),
     EnumOption('DIST_TARGET', 'Build target for cross compiling packagers', 'auto', allowed_values=('auto', 'i386', 'i686', 'x86_64', 'powerpc', 'tiger', 'panther', 'none' ), ignorecase=2),
-    BoolOption('FPU_OPTIMIZATION', 'Build runtime checked assembler code', 1),
-    BoolOption('FFT_ANALYSIS', 'Include FFT analysis window', 0),
-    BoolOption('SURFACES', 'Build support for control surfaces', 0),
     BoolOption('DMALLOC', 'Compile and link using the dmalloc library', 0),
+    BoolOption('FFT_ANALYSIS', 'Include FFT analysis window', 0),
+    BoolOption('FPU_OPTIMIZATION', 'Build runtime checked assembler code', 1),
     BoolOption('LIBLO', 'Compile with support for liblo library', 1),
-    BoolOption('COREAUDIO', 'Compile with Apple\'s CoreAudio library -- UNSTABLE', 0)
+    BoolOption('NLS', 'Set to turn on i18n support', 1),
+    PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'),
+    BoolOption('SURFACES', 'Build support for control surfaces', 0),
+    BoolOption('SYSLIBS', 'USE AT YOUR OWN RISK: CANCELS ALL SUPPORT FROM ARDOUR AUTHORS: Use existing system versions of various libraries instead of internal ones', 0),
+    BoolOption('VERSIONED', 'Add version information to ardour/gtk executable name inside the build directory', 0),
+    BoolOption('VST', 'Compile with support for VST', 0)
 )
 
 #----------------------------------------------------------------------
@@ -58,8 +59,8 @@ class LibraryInfo(Environment):
             self.Append (LINKFLAGS = other.get('LINKFLAGS', []))
        self.Replace(LIBPATH = list(Set(self.get('LIBPATH', []))))
        self.Replace(CPPPATH = list(Set(self.get('CPPPATH',[]))))
-       #doing LINKFLAGS breaks -framework
-    #doing LIBS break link order dependency
+        #doing LINKFLAGS breaks -framework
+        #doing LIBS break link order dependency
 
 
 env = LibraryInfo (options = opts,
@@ -345,6 +346,21 @@ tarball_bld = Builder (action = tarballer,
 env.Append (BUILDERS = {'Distribute' : dist_bld})
 env.Append (BUILDERS = {'Tarball' : tarball_bld})
 
+#
+# Make sure they know what they are doing
+#
+
+if env['VST']:
+    sys.stdout.write ("Are you building Ardour for personal use (rather than distributiont to others)? [no]: ")
+    answer = sys.stdin.readline ()
+    answer = answer.rstrip().strip()
+    if answer != "yes" and answer != "y":
+        print 'You cannot build Ardour with VST support for distribution to others.\nIt is a violation of several different licenses. VST support disabled.'
+        env['VST'] = 0;
+    else:
+        print "OK, VST support will be enabled"
+        
+
 # ----------------------------------------------------------------------
 # Construction environment setup
 # ----------------------------------------------------------------------
@@ -353,7 +369,7 @@ libraries = { }
 
 libraries['core'] = LibraryInfo (CCFLAGS = '-Ilibs')
 
-#libraries['sndfile'] = LibraryInfo(CCFLAGS = '-Ilibs/libsndfile/src')
+#libraries['sndfile'] = LibraryInfo()
 #libraries['sndfile'].ParseConfig('pkg-config --cflags --libs sndfile')
 
 libraries['lrdf'] = LibraryInfo()
@@ -408,10 +424,6 @@ libraries['pbd3']    = LibraryInfo (LIBS='pbd', LIBPATH='#libs/pbd3', CPPPATH='#
 libraries['gtkmm2ext'] = LibraryInfo (LIBS='gtkmm2ext', LIBPATH='#libs/gtkmm2ext', CPPPATH='#libs/gtkmm2ext')
 #libraries['cassowary'] = LibraryInfo(LIBS='cassowary', LIBPATH='#libs/cassowary', CPPPATH='#libs/cassowary')
 
-libraries['fst'] = LibraryInfo()
-if env['VST']:
-    libraries['fst'].ParseConfig('pkg-config --cflags --libs libfst')
-
 #
 # Check for libusb
 
@@ -425,6 +437,15 @@ else:
     
 libraries['usb'] = conf.Finish ()
 
+#
+# Check for FLAC
+
+libraries['flac'] = LibraryInfo ()
+
+conf = Configure (libraries['flac'])
+conf.CheckLib ('FLAC', 'FLAC__stream_decoder_new')
+libraries['flac'] = conf.Finish ()
+
 #
 # Check for liblo
 
@@ -497,6 +518,14 @@ if env['SYSLIBS']:
     libraries['libgnomecanvasmm'] = LibraryInfo()
     libraries['libgnomecanvasmm'].ParseConfig ('pkg-config --cflags --libs libgnomecanvasmm-2.6')
 
+#
+# cannot use system one for the time being
+#
+
+    libraries['sndfile'] = LibraryInfo(LIBS='libsndfile',
+                                    LIBPATH='#libs/libsndfile',
+                                    CPPPATH=['#libs/libsndfile', '#libs/libsndfile/src'])
+
 #    libraries['libglademm'] = LibraryInfo()
 #    libraries['libglademm'].ParseConfig ('pkg-config --cflags --libs libglademm-2.4')
 
@@ -509,11 +538,15 @@ if env['SYSLIBS']:
     ]
 
     subdirs = [
+        'libs/libsndfile',
         'libs/pbd3',
         'libs/midi++2',
         'libs/ardour'
         ]
 
+    if env['VST']:
+        subdirs = ['libs/fst'] + subdirs + ['vst']
+
     gtk_subdirs = [
 #        'libs/flowcanvas',
         'libs/gtkmm2ext',
@@ -548,7 +581,7 @@ else:
                                           CPPPATH=['#libs', '#libs/soundtouch'])
     libraries['sndfile'] = LibraryInfo(LIBS='libsndfile',
                                     LIBPATH='#libs/libsndfile',
-                                    CPPPATH='#libs/libsndfile')
+                                    CPPPATH=['#libs/libsndfile', '#libs/libsndfile/src'])
 #    libraries['libglademm'] = LibraryInfo(LIBS='libglademm',
 #                                          LIBPATH='#libs/libglademm',
 #                                          CPPPATH='#libs/libglademm')
@@ -567,6 +600,9 @@ else:
         'libs/ardour'
         ]
 
+    if env['VST']:
+        subdirs = ['libs/fst'] + subdirs + ['vst']
+
     gtk_subdirs = [
        'libs/glibmm2',
        'libs/gtkmm2/pango',
@@ -769,10 +805,12 @@ if env['DEBUG'] == 1:
 else:
     env.Append(CCFLAGS=" ".join (opt_flags))
 
-env.Append(CCFLAGS="-Wall")
+#
+# warnings flags
+#
 
-if env['VST']:
-    env.Append(CCFLAGS="-DVST_SUPPORT")
+env.Append(CCFLAGS="-Wall")
+env.Append(CXXFLAGS="-Woverloaded-virtual")
 
 if env['LIBLO']:
     env.Append(CCFLAGS="-DHAVE_LIBLO")
index 8ab1c0c19cca7e30e32cf8c9b1251d13a25b7de3..55fa26ec857db124d3cc9a7257e4a6f97ebce36a 100644 (file)
@@ -26,7 +26,6 @@ gtkardour.Merge ([
     libraries['ardour'],
     libraries['ardour_cp'],
     libraries['gtkmm2ext'],
-#    libraries['flowcanvas'],
     libraries['midi++2'],
     libraries['pbd3'],
     libraries['gtkmm2'],
@@ -35,6 +34,7 @@ gtkardour.Merge ([
     libraries['libgnomecanvasmm'],
     libraries['sysmidi'],
     libraries['sndfile'],
+    libraries['flac'],
     libraries['lrdf'],
     libraries['glibmm2'],
     libraries['pangomm'],
@@ -57,13 +57,11 @@ if gtkardour['FFT_ANALYSIS']:
        gtkardour.Merge ([libraries['fftw3f']])
        gtkardour.Append(CCFLAGS='-DFFT_ANALYSIS')
 
-if gtkardour['VST']:
-    gtkardour.Merge ([ libraries['fst']])
-
 skipped_files=Split("""
 connection_editor.cc
 """)
 
+
 gtkardour_files=Split("""
 about.cc
 actions.cc
@@ -183,6 +181,7 @@ visual_time_axis.cc
 waveview.cc
 """)
 
+
 fft_analysis_files=Split("""
 analysis_window.cc
 fft_graph.cc
@@ -202,15 +201,16 @@ itest.cc
 """)
 
 extra_sources = []
+
 vst_files = [ 'vst_pluginui.cc' ]
 
 if env['VST']:
-   extra_sources += vst_files
-
+       extra_sources += vst_files
+       gtkardour.Append (CCFLAGS="-DVST_SUPPORT", CPPPATH="#libs/fst")
+  
 if env['FFT_ANALYSIS']:
        extra_sources += fft_analysis_files
 
-
 intl_files += extra_sources
 
 gtkardour.Append(CCFLAGS="-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE")
@@ -225,6 +225,8 @@ gtkardour.VersionBuild(['version.cc','version.h'], 'SConscript')
 executable = 'ardour.bin'
 
 ardour = gtkardour.Program(target = executable, source = gtkardour_files + extra_sources)
+ardourlib = gtkardour.SharedLibrary(target = 'ardourgtk', source = gtkardour_files + extra_sources)
+
 mtest = gtkardour.Program(target = 'mtest', source = mtest_files)
 itest = gtkardour.Program(target = 'itest', source = itest_files)
 
@@ -234,21 +236,28 @@ my_subst_dict['%INSTALL_PREFIX%'] = install_prefix
 ardoursh = env.SubstInFile ('ardour.sh','ardour.sh.in', SUBST_DICT = my_subst_dict);
 env.AddPostAction (ardoursh, Chmod ('$TARGET', 0755))
 
-Default(ardour)
+if env['VST']:
+       Default(ardourlib)
+       # the library - into the library dir
+       env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), ardourlib))
+else:
+
+       if env['VERSIONED']:
+               Default (env.VersionedExecutable ('tagged_executable', ardour))
+       else:
+               Default(ardour)
 
-if env['VERSIONED']:
-    Default (env.VersionedExecutable ('tagged_executable', ardour))
+        #install
+
+       # the executable - into the library dir
+       env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), ardour))
+       # the script - into the bin dir
+       env.Alias('install', env.InstallAs(os.path.join(install_prefix, 'bin')+'/ardour2', ardoursh))
 
 if env['NLS']:
-    Export('gtkardour', 'intl_files')
-    SConscript ('po/SConscript')
+       Export('gtkardour', 'intl_files')
+       SConscript ('po/SConscript')
     
-#install
-
-# the executable - into the library dir
-env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), ardour))
-# the script - into the bin dir
-env.Alias('install', env.InstallAs(os.path.join(install_prefix, 'bin')+'/ardour2', ardoursh))
 # configuration files
 env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour2_ui.rc'))
 env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour.menus'))
@@ -258,6 +267,7 @@ env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour
 env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2'), 'splash.ppm'))
 env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2/pixmaps'), pixmap_files))
 
+               
 #dist
 env.Alias ('tarball', env.Distribute (env['DISTTREE'],
                                       [ 'SConscript',
index 94284f58d413f08b87b6774bd4eb4028081f6b04..033b5c460413e0b4fd305f5953bc359b72e72bbd 100644 (file)
@@ -43,6 +43,7 @@ using namespace Gdk;
 using namespace std;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 
 #ifdef WITH_PAYMENT_OPTIONS
 
index 78acffd6d1f01b7f583b88992c58d378fa2920e6..ee688c366006d72e710e15e5769d053523761311 100644 (file)
@@ -39,6 +39,7 @@ using namespace std;
 using namespace Gtk;
 using namespace Glib;
 using namespace sigc;
+using namespace PBD;
 
 vector<RefPtr<Gtk::Action> > ActionManager::session_sensitive_actions;
 vector<RefPtr<Gtk::Action> > ActionManager::region_list_selection_sensitive_actions;
index 8664dae61c61f25b230d31202f73fba864f58734..7e89489afd92cdcb5e3da60f5c40bc427c98f8f0 100644 (file)
@@ -35,6 +35,7 @@ using namespace Gtk;
 using namespace Gtkmm2ext;
 using namespace sigc;
 using namespace std;
+using namespace PBD;
 
 static const char* channel_setup_names[] = {
        "Mono",
index f044ca7388e5e31410d9ef6768200c9de1086352..b8318f45feae0b3967bc444a67e2aa4c207ad2c3 100644 (file)
@@ -40,6 +40,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 AnalysisWindow::AnalysisWindow()
        : ArdourDialog(_("analysis window")),
index 9483ae29719835522efb6043a8bd030f31289683..5c68933a963f1443de292f4009b1be4c85693867 100755 (executable)
@@ -2,7 +2,7 @@
 
 export ARDOUR_PATH=./glade:./pixmaps:.
 
-export LD_LIBRARY_PATH=../libs/surfaces/control_protocol:../libs/ardour:../libs/midi++2:../libs/pbd3:../libs/soundtouch:../libs/gtkmm2ext:../libs/sigc++2:../libs/glibmm2:../libs/gtkmm2/atk:../libs/gtkmm2/pango:../libs/gtkmm2/gdk:../libs/gtkmm2/gtk:../libs/libgnomecanvasmm:../libs/libglademm:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH=../libs/surfaces/control_protocol:../libs/ardour:../libs/midi++2:../libs/pbd3:../libs/soundtouch:../libs/gtkmm2ext:../libs/sigc++2:../libs/glibmm2:../libs/gtkmm2/atk:../libs/gtkmm2/pango:../libs/gtkmm2/gdk:../libs/gtkmm2/gtk:../libs/libgnomecanvasmm:../libs/libsndfile:$LD_LIBRARY_PATH
 
 # DYLD_LIBRARY_PATH is for darwin.
 export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH
index 3c13ac8342fce442536d48159acd560e6f6d4381..9293883067040bd2beb789c22ec272f2e6b3f734 100644 (file)
                    <menu action='AudioFileFormatHeader'>
                        <menuitem action='FileHeaderFormatBWF'/>
                        <menuitem action='FileHeaderFormatWAVE'/>
+                       <menuitem action='FileHeaderFormatWAVE64'/>
+                       <menuitem action='FileHeaderFormatCAF'/>
                   </menu>
                </menu>
                <menu action='Autoconnect'>
index 640b62df1fb0773f31656b43c273d9339da07c0b..f452ec9c7ea3a96e133637dfdd70f63ac2f26acf 100644 (file)
@@ -50,8 +50,8 @@
 #include <ardour/audioengine.h>
 #include <ardour/playlist.h>
 #include <ardour/utils.h>
-#include <ardour/diskstream.h>
-#include <ardour/filesource.h>
+#include <ardour/audio_diskstream.h>
+#include <ardour/audiofilesource.h>
 #include <ardour/recent_sessions.h>
 #include <ardour/session_diskstream.h>
 #include <ardour/port.h>
@@ -76,6 +76,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtkmm2ext;
 using namespace Gtk;
 using namespace sigc;
@@ -184,9 +185,9 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
        gettimeofday (&last_peak_grab, 0);
        gettimeofday (&last_shuttle_request, 0);
 
-       ARDOUR::DiskStream::DeleteSources.connect (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread));
-       ARDOUR::DiskStream::DiskOverrun.connect (mem_fun(*this, &ARDOUR_UI::disk_overrun_handler));
-       ARDOUR::DiskStream::DiskUnderrun.connect (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
+       ARDOUR::AudioDiskstream::DeleteSources.connect (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread));
+       ARDOUR::AudioDiskstream::DiskOverrun.connect (mem_fun(*this, &ARDOUR_UI::disk_overrun_handler));
+       ARDOUR::AudioDiskstream::DiskUnderrun.connect (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
 
        /* handle pending state with a dialog */
 
@@ -241,10 +242,10 @@ ARDOUR_UI::set_engine (AudioEngine& e)
 
        /* this being a GUI and all, we want peakfiles */
 
-       FileSource::set_build_peakfiles (true);
-       FileSource::set_build_missing_peakfiles (true);
+       AudioFileSource::set_build_peakfiles (true);
+       AudioFileSource::set_build_missing_peakfiles (true);
 
-       if (Source::start_peak_thread ()) {
+       if (AudioSource::start_peak_thread ()) {
                throw failed_constructor();
        }
 
@@ -281,7 +282,7 @@ ARDOUR_UI::~ARDOUR_UI ()
                delete add_route_dialog;
        }
 
-       Source::stop_peak_thread ();
+       AudioSource::stop_peak_thread ();
 }
 
 gint
@@ -542,7 +543,7 @@ ARDOUR_UI::update_buffer_load ()
 }
 
 void
-ARDOUR_UI::count_recenabled_diskstreams (DiskStream& ds)
+ARDOUR_UI::count_recenabled_diskstreams (AudioDiskstream& ds)
 {
        if (ds.record_enabled()) {
                rec_enabled_diskstreams++;
@@ -570,7 +571,7 @@ ARDOUR_UI::update_disk_space()
                if (session->actively_recording()){
                        
                        rec_enabled_diskstreams = 0;
-                       session->foreach_diskstream (this, &ARDOUR_UI::count_recenabled_diskstreams);
+                       session->foreach_audio_diskstream (this, &ARDOUR_UI::count_recenabled_diskstreams);
                        
                        if (rec_enabled_diskstreams) {
                                frames /= rec_enabled_diskstreams;
@@ -917,7 +918,7 @@ restart JACK with more ports."));
 }
 
 void
-ARDOUR_UI::diskstream_added (DiskStream* ds)
+ARDOUR_UI::diskstream_added (AudioDiskstream* ds)
 {
 }
 
@@ -1164,7 +1165,7 @@ ARDOUR_UI::toggle_monitor_enable (guint32 dstream)
                return;
        }
 
-       DiskStream *ds;
+       AudioDiskstream *ds;
 
        if ((ds = session->diskstream_by_id (dstream)) != 0) {
                Port *port = ds->io()->input (0);
@@ -1179,7 +1180,7 @@ ARDOUR_UI::toggle_record_enable (guint32 dstream)
                return;
        }
 
-       DiskStream *ds;
+       AudioDiskstream *ds;
 
        if ((ds = session->diskstream_by_id (dstream)) != 0) {
                ds->set_record_enabled (!ds->record_enabled(), this);
@@ -1386,7 +1387,7 @@ ARDOUR_UI::stop_blinking ()
 
 
 void
-ARDOUR_UI::add_diskstream_to_menu (DiskStream& dstream)
+ARDOUR_UI::add_diskstream_to_menu (AudioDiskstream& dstream)
 {
        using namespace Gtk;
        using namespace Menu_Helpers;
@@ -1424,7 +1425,7 @@ ARDOUR_UI::select_diskstream (GdkEventButton *ev)
        MenuList& items = diskstream_menu->items();
        items.push_back (MenuElem (_("No Stream"), (bind (mem_fun(*this, &ARDOUR_UI::diskstream_selected), -1))));
 
-       session->foreach_diskstream (this, &ARDOUR_UI::add_diskstream_to_menu);
+       session->foreach_audio_diskstream (this, &ARDOUR_UI::add_diskstream_to_menu);
 
        if (ev) {
                diskstream_menu->popup (ev->button, ev->time);
@@ -1569,7 +1570,7 @@ ARDOUR_UI::secondary_clock_value_changed ()
 }
 
 void
-ARDOUR_UI::rec_enable_button_blink (bool onoff, DiskStream *dstream, Widget *w)
+ARDOUR_UI::rec_enable_button_blink (bool onoff, AudioDiskstream *dstream, Widget *w)
 {
        if (session && dstream && dstream->record_enabled()) {
 
@@ -2216,11 +2217,11 @@ ARDOUR_UI::halt_on_xrun_message ()
 }
 
 void 
-ARDOUR_UI::delete_sources_in_the_right_thread (list<ARDOUR::Source*>* deletion_list)
+ARDOUR_UI::delete_sources_in_the_right_thread (list<ARDOUR::AudioFileSource*>* deletion_list)
 {
        ENSURE_GUI_THREAD (bind (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread), deletion_list));
 
-       for (list<Source*>::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) {
+       for (list<AudioFileSource*>::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) {
                delete *i;
        }
 
@@ -2377,6 +2378,12 @@ ARDOUR_UI::set_native_file_header_format (HeaderFormat hf)
        case RF64:
                act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatRF64"));
                break;
+       case CAF:
+               act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatCAF"));
+               break;
+       case AIFF:
+               act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatAIFF"));
+               break;
        }
 
        if (act) {
@@ -2451,6 +2458,12 @@ ARDOUR_UI::use_config ()
        case RF64:
                act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatRF64"));
                break;
+       case CAF:
+               act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatCAF"));
+               break;
+       case AIFF:
+               act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatAIFF"));
+               break;
        }
 
        if (act) {
index a759c6cd613dae819d5dac7fc312e21fd90e885b..678342f32bb6ad683ff64a1dead56dfa9110dec1 100644 (file)
@@ -167,7 +167,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
           blinking rec-enable buttons.
        */
 
-       void rec_enable_button_blink (bool onoff, ARDOUR::DiskStream *, Gtk::Widget *w);
+       void rec_enable_button_blink (bool onoff, ARDOUR::AudioDiskstream *, Gtk::Widget *w);
 
        void name_io_setup (ARDOUR::AudioEngine&, string&, ARDOUR::IO& io, bool in);
        void choose_io (ARDOUR::IO&, bool input);
@@ -522,7 +522,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
        sigc::connection point_one_second_connection;
        sigc::connection point_zero_one_second_connection;
 
-       void diskstream_added (ARDOUR::DiskStream*);
+       void diskstream_added (ARDOUR::AudioDiskstream*);
 
        gint session_menu (GdkEventButton *);
 
@@ -539,7 +539,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
 
        void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode);
 
-       void add_diskstream_to_menu (ARDOUR::DiskStream&);
+       void add_diskstream_to_menu (ARDOUR::AudioDiskstream&);
        void diskstream_selected (gint32);
        Gtk::Menu *diskstream_menu;
        gint32 selected_dstream;
@@ -630,7 +630,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
        void toggle_monitor_enable (guint32);
 
        uint32_t rec_enabled_diskstreams;
-       void count_recenabled_diskstreams (ARDOUR::DiskStream&);
+       void count_recenabled_diskstreams (ARDOUR::AudioDiskstream&);
 
        About* about;
        bool shown_flag;
@@ -649,7 +649,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
        struct timeval last_peak_grab;
        struct timeval last_shuttle_request;
 
-       void delete_sources_in_the_right_thread (list<ARDOUR::Source*>*);
+       void delete_sources_in_the_right_thread (list<ARDOUR::AudioFileSource*>*);
 
        void editor_display_control_changed (Editing::DisplayControl c);
 
index af1f3094bcdb4f94f4d83bf06c7f1a9732618070..f92201e36c543e75bb5dc42238237b7d6bc0987c 100644 (file)
@@ -47,6 +47,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtkmm2ext;
 using namespace Gtk;
 using namespace Glib;
index 1f8b0ef702bdf40c34be573e94ed250e221f5a91..0603fc6baa5acb95ee365736ac18eb2be21734c1 100644 (file)
@@ -36,6 +36,7 @@
 
 using namespace sigc;
 using namespace Gtk;
+using namespace PBD;
 
 namespace ARDOUR {
        class Session;
index 6b1d0224db06394a9940762df974049e288c329e..202fa88b59f3011a825c4e9bd4c50e245c3e30a7 100644 (file)
@@ -39,6 +39,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Glib;
 using namespace Gtk;
 using namespace Gtkmm2ext;
@@ -75,8 +76,8 @@ ARDOUR_UI::connect_to_session (Session *s)
        rec_button.set_sensitive (true);
        shuttle_box.set_sensitive (true);
        
-       if (session->n_diskstreams() == 0) {
-               session->DiskStreamAdded.connect (mem_fun(*this, &ARDOUR_UI::diskstream_added));
+       if (session->n_audio_diskstreams() == 0) {
+               session->AudioDiskstreamAdded.connect (mem_fun(*this, &ARDOUR_UI::diskstream_added));
        }
 
        if (connection_editor) {
index 5bcad97d26f23407c7cc79353e02c0b3cbfead6e..1bc2de26d1014f3f1c4c3518ff192c7d9e73bfa7 100644 (file)
 #include <ardour/session.h>
 #include <ardour/control_protocol_manager.h>
 
-#include "control_protocol.h"
+#include <control_protocol/control_protocol.h>
 
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Gtkmm2ext;
 
@@ -364,7 +365,7 @@ ARDOUR_UI::install_actions ()
 
        act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
        ActionManager::session_sensitive_actions.push_back (act);
-       act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
+       act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mmc));
        ActionManager::session_sensitive_actions.push_back (act);
        act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
        ActionManager::session_sensitive_actions.push_back (act);
@@ -381,8 +382,9 @@ ARDOUR_UI::install_actions ()
        act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatBWF"), X_("Broadcast WAVE"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::BWF));
        act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatWAVE"), X_("WAVE"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::WAVE));
        act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatWAVE64"), X_("WAVE-64"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::WAVE64));
-       act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatiXML"), X_("iXML"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::iXML));
-       act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatRF64"), X_("RF64"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::RF64));
+       // act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatiXML"), X_("iXML"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::iXML));
+       // act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatRF64"), X_("RF64"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::RF64));
+       act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatCAF"), X_("CAF"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::CAF));
 
        RadioAction::Group file_data_group;
 
index 8d92f70ae2d7d1957e9b891e538192c098091fb1..991f37c3a7a2cb4669bf1ec842049f638d824a78 100644 (file)
@@ -28,6 +28,7 @@
 #include "mixer_ui.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 int
 ARDOUR_UI::create_mixer ()
index dbdcd6ae4582dc97800efd814689ab2e6c1ffbf5..665c92d264b2725fd1bedecb24d7ca19749661db 100644 (file)
@@ -35,6 +35,7 @@
 using namespace Gtk;
 using namespace Gtkmm2ext;
 using namespace ARDOUR;
+using namespace PBD;
 
 void
 ARDOUR_UI::setup_config_options ()
@@ -46,7 +47,7 @@ ARDOUR_UI::setup_config_options ()
        struct { 
            char* name;
            bool (Configuration::*method)(void) const;
-           char act_type;  // (t)oggle or (r)adio
+           char act_type;  //(t)oggle or (r)adio
        } options[] = {
                { "ToggleTimeMaster", &Configuration::get_jack_time_master, 't' },
                { "StopPluginsWithTransport", &Configuration::get_plugins_stop_with_transport, 't' },
@@ -76,7 +77,6 @@ ARDOUR_UI::setup_config_options ()
                        Glib::RefPtr<Action> act = ActionManager::get_action (i->c_str(), options[n].name);
                        if (act) {
                                Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
-                               cerr << "action = " << (options[n].name) << " val = " << (Config->*(options[n].method))() << endl;//DEBUG
                                if (options[n].act_type == 't' || (options[n].act_type == 'r' && (Config->*(options[n].method))()))
                                        tact->set_active ((Config->*(options[n].method))());
                                continue;
@@ -257,7 +257,6 @@ ARDOUR_UI::toggle_UseHardwareMonitoring()
        Glib::RefPtr<Action> act = ActionManager::get_action ("options", "UseHardwareMonitoring");
        if (act) {
                Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
-               cerr << "get_active() cond = " << tact->get_active() << endl;//DEBUG
                if (tact->get_active()) {
                        Config->set_use_hardware_monitoring (true);
                        Config->set_use_sw_monitoring (false);
index a5e7aa719319d91034ec598a85cb96c034916f8f..8c6f3a7d8277f7ffddafe4f9821a7b708b89ff2f 100644 (file)
@@ -37,6 +37,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
 
@@ -195,6 +196,8 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
        clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
        clock_base.signal_button_release_event().connect (bind (mem_fun (*this, &AudioClock::field_button_release_event), SMPTE_Hours));
 
+       Session::SMPTEOffsetChanged.connect (mem_fun (*this, &AudioClock::smpte_offset_changed));
+
        if (editable) {
                setup_events ();
        }
@@ -389,6 +392,25 @@ AudioClock::set (jack_nframes_t when, bool force)
        last_when = when;
 }
 
+void
+AudioClock::smpte_offset_changed ()
+{
+       jack_nframes_t current;
+
+       switch (_mode) {
+       case SMPTE:
+               if (is_duration) {
+                       current = current_duration();
+               } else {
+                       current = current_time ();
+               }
+               set (current, true);
+               break;
+       default:
+               break;
+       }
+}
+
 void
 AudioClock::set_frames (jack_nframes_t when, bool force)
 {
@@ -436,7 +458,7 @@ void
 AudioClock::set_smpte (jack_nframes_t when, bool force)
 {
        char buf[32];
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
        
        if (is_duration) {
                session->smpte_duration (when, smpte);
@@ -446,9 +468,9 @@ AudioClock::set_smpte (jack_nframes_t when, bool force)
 
        if (force || smpte.hours != last_hrs || smpte.negative != last_negative) {
                if (smpte.negative) {
-                       sprintf (buf, "-%02ld", smpte.hours);
+                       sprintf (buf, "-%02" PRIu32, smpte.hours);
                } else {
-                       sprintf (buf, " %02ld", smpte.hours);
+                       sprintf (buf, " %02" PRIu32, smpte.hours);
                }
                hours_label.set_text (buf);
                last_hrs = smpte.hours;
@@ -456,19 +478,19 @@ AudioClock::set_smpte (jack_nframes_t when, bool force)
        }
 
        if (force || smpte.minutes != last_mins) {
-               sprintf (buf, "%02ld", smpte.minutes);
+               sprintf (buf, "%02" PRIu32, smpte.minutes);
                minutes_label.set_text (buf);
                last_mins = smpte.minutes;
        }
 
        if (force || smpte.seconds != last_secs) {
-               sprintf (buf, "%02ld", smpte.seconds);
+               sprintf (buf, "%02" PRIu32, smpte.seconds);
                seconds_label.set_text (buf);
                last_secs = smpte.seconds;
        }
 
        if (force || smpte.frames != last_frames) {
-               sprintf (buf, "%02ld", smpte.frames);
+               sprintf (buf, "%02" PRIu32, smpte.frames);
                frames_label.set_text (buf);
                last_frames = smpte.frames;
        }
@@ -1260,14 +1282,14 @@ AudioClock::smpte_frame_from_display () const
                return 0;
        }
        
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
        jack_nframes_t sample;
        
        smpte.hours = atoi (hours_label.get_text());
        smpte.minutes = atoi (minutes_label.get_text());
        smpte.seconds = atoi (seconds_label.get_text());
        smpte.frames = atoi (frames_label.get_text());
-       
+
        session->smpte_to_sample( smpte, sample, false /* use_offset */, false /* use_subframes */ );
        
 
@@ -1281,10 +1303,10 @@ AudioClock::smpte_frame_from_display () const
 #define SMPTE_SAMPLE_TEST_7
 
        // Testcode for smpte<->sample conversions (P.S.)
-       SMPTE_Time smpte1;
+       SMPTE::Time smpte1;
        jack_nframes_t sample1;
        jack_nframes_t oldsample = 0;
-       SMPTE_Time smpte2;
+       SMPTE::Time smpte2;
        jack_nframes_t sample_increment;
 
        sample_increment = (long)rint(session->frame_rate() / session->smpte_frames_per_second);
index a0733e7de3acd1d229ee983f2bfc8970f963182a..14dc6ba67385057658fde5740001cfbeb5f571f5 100644 (file)
@@ -175,6 +175,8 @@ class AudioClock : public Gtk::HBox
        void build_ops_menu ();
        void setup_events ();
 
+       void smpte_offset_changed ();
+
        static const uint32_t field_length[(int)AudioFrames+1];
 };
 
index 84c7bf7e15b72616860c352b988e2b301a7e218f..01205abfc897865f233350ac86d865bc7bc76547 100644 (file)
@@ -38,7 +38,7 @@
 #include <gtkmm2ext/utils.h>
 
 #include <ardour/audioplaylist.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/insert.h>
 #include <ardour/ladspa_plugin.h>
 #include <ardour/location.h>
@@ -80,6 +80,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace LADSPA;
 using namespace Gtk;
 using namespace Editing;
@@ -823,7 +824,7 @@ AudioTimeAxisView::rename_current_playlist ()
        string name;
 
        AudioPlaylist *pl;
-       DiskStream *ds;
+       AudioDiskstream *ds;
 
        if (((ds = get_diskstream()) == 0) || ds->destructive() || ((pl = ds->playlist()) == 0)) {
                return;
@@ -851,7 +852,7 @@ void
 AudioTimeAxisView::use_copy_playlist (bool prompt)
 {
        AudioPlaylist *pl;
-       DiskStream *ds;
+       AudioDiskstream *ds;
        string name;
 
        if (((ds = get_diskstream()) == 0) || ds->destructive() || ((pl = ds->playlist()) == 0)) {
@@ -891,7 +892,7 @@ void
 AudioTimeAxisView::use_new_playlist (bool prompt)
 {
        AudioPlaylist *pl;
-       DiskStream *ds;
+       AudioDiskstream *ds;
        string name;
 
        if (((ds = get_diskstream()) == 0) || ds->destructive() || ((pl = ds->playlist()) == 0)) {
@@ -930,7 +931,7 @@ void
 AudioTimeAxisView::clear_playlist ()
 {
        AudioPlaylist *pl;
-       DiskStream *ds;
+       AudioDiskstream *ds;
        
        if ((ds = get_diskstream()) != 0) {
                if ((pl = ds->playlist()) != 0) {
@@ -988,7 +989,7 @@ AudioTimeAxisView::diskstream_changed (void *src)
 void
 AudioTimeAxisView::update_diskstream_display ()
 {
-       DiskStream *ds;
+       AudioDiskstream *ds;
 
        if ((ds = get_diskstream()) != 0) {
                set_playlist (ds->playlist ());
@@ -1092,7 +1093,7 @@ AudioTimeAxisView::name() const
 Playlist *
 AudioTimeAxisView::playlist () const 
 {
-       DiskStream *ds;
+       AudioDiskstream *ds;
 
        if ((ds = get_diskstream()) != 0) {
                return ds->playlist(); 
@@ -1142,7 +1143,7 @@ AudioTimeAxisView::hide_click ()
 Region*
 AudioTimeAxisView::find_next_region (jack_nframes_t pos, RegionPoint point, int32_t dir)
 {
-       DiskStream *stream;
+       AudioDiskstream *stream;
        AudioPlaylist *playlist;
 
        if ((stream = get_diskstream()) != 0 && (playlist = stream->playlist()) != 0) {
@@ -1717,7 +1718,7 @@ bool
 AudioTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
 {
        Playlist* what_we_got;
-       DiskStream* ds = get_diskstream();
+       AudioDiskstream* ds = get_diskstream();
        Playlist* playlist;
        bool ret = false;
 
index d1fbde3e9cf6ffd95d6704958aa3748c58850a41..b319d0ea9945c08733712f68a0cf3f222c908ded 100644 (file)
@@ -48,7 +48,7 @@ namespace ALSA {
 
 namespace ARDOUR {
        class Session;
-       class DiskStream;
+       class AudioDiskstream;
        class RouteGroup;
        class Redirect;
        class Insert;
index 272e6cfc52e1283bbaac98ccab996e8d16f7412e..74e4f64e3c81ce00d8f378fe41a04af7bee4377d 100644 (file)
@@ -31,6 +31,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 AutomationGainLine::AutomationGainLine (const string & name, Session& s, TimeAxisView& tv, ArdourCanvas::Group& parent, Curve& c)
 
index 70bc676fca8cae35848bb730bc02f55292e9b3b3..b87a71ca875aa1699dc861659856f08371a4ec0b 100644 (file)
@@ -48,6 +48,7 @@
 using namespace std;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Editing;
 using namespace Gnome; // for Canvas
 
index 7a264502affc3682f48abc2126eb65e3a6fafb22..aacfbdde75972ac92cc8bf338bae87538019c900 100644 (file)
@@ -31,6 +31,7 @@
 #include <ardour/session.h>
 
 using namespace ARDOUR;
+using namespace PBD;
 
 AutomationPanLine::AutomationPanLine (const string & name, Session& s, TimeAxisView& tv, ArdourCanvas::Group& parent, Curve& c)
 
index 670a718736e8c1dfcb7139e379d1419a5c85700a..165e124adde41a35ca3254bb317268cf5c4a44f7 100644 (file)
@@ -16,6 +16,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Editing;
 
index 38deece11a0da2b4a2ebf0c68ee8225648577eb9..12b7d32188d38d1fda1ea5d6ea60430381a096cf 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <pbd/xml++.h>
 #include "prompter.h"
+#include "selectable.h"
 
 namespace ARDOUR {
        class Session;
@@ -37,7 +38,7 @@ namespace ARDOUR {
  * AxisView defines the abstract base class for time-axis trackviews and routes.
  *
  */
-class AxisView : public virtual sigc::trackable
+class AxisView : public virtual Selectable
 {
   public:
        /**
@@ -51,12 +52,6 @@ class AxisView : public virtual sigc::trackable
 
        virtual string name() const = 0;
 
-       virtual void set_selected (bool yn) {
-               if (yn != _selected) {
-                       _selected = yn;
-               }
-       }
-       
        virtual bool marked_for_display() const { return _marked_for_display; }
 
        virtual void set_marked_for_display (bool yn) {
@@ -65,7 +60,6 @@ class AxisView : public virtual sigc::trackable
                }
        }
        
-       virtual bool selected() const { return _selected; }
        sigc::signal<void> Hiding;
        sigc::signal<void> GoingAway;
 
index 34b64770a6b770293b997bdaf1361d03fb29a035..3e4a14d86a482dd48b9505fa383c729703474351 100644 (file)
@@ -389,7 +389,11 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_
        /* but make sure it doesn't extend beyond the end of the source material */
 
        rf3 = (gulong) (waveview->sourcefile_length_function (waveview->data_src, waveview->samples_per_unit)) + 1;
-       rf3 -= new_cache_start;
+       if (rf3 < new_cache_start) {
+               rf3 = 0;
+       } else {
+               rf3 -= new_cache_start;
+       }
 
 #if DEBUG_CACHE
        fprintf (stderr, "\n\nAVAILABLE FRAMES = %lu of %lu, start = %lu, sstart = %lu, cstart = %lu\n", 
@@ -405,8 +409,8 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_
 
 #if DEBUG_CACHE
        fprintf (stderr, "new cache = %lu - %lu\n", new_cache_start, new_cache_end);
-       fprintf(stderr,"required_cach_entries = %lu, samples_per_unit = %f\n",
-               required_cache_entries,waveview->samples_per_unit);
+       fprintf(stderr,"required_cach_entries = %lu, samples_per_unit = %f req frames = %lu\n",
+               required_cache_entries,waveview->samples_per_unit, required_frames);
 #endif
 
        if (required_cache_entries > cache->allocated) {
@@ -514,8 +518,8 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_
 
 //     fprintf(stderr,"length == %lu\n",waveview->length_function (waveview->data_src));
 //     required_frames = MIN (waveview->length_function (waveview->data_src) - new_cache_start, required_frames);
+
        npeaks = (gulong) floor (required_frames / waveview->samples_per_unit);
-       npeaks = MAX (1, npeaks);
        required_frames = npeaks * waveview->samples_per_unit;
 
 #if DEBUG_CACHE
@@ -532,11 +536,15 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_
 //             start_sample, end_sample);
 #endif
 
-       waveview->peak_function (waveview->data_src, npeaks, new_cache_start, required_frames, cache->data + offset, waveview->channel,waveview->samples_per_unit);
-
-       /* take into account any copied peaks */
+       if (required_frames) {
+               waveview->peak_function (waveview->data_src, npeaks, new_cache_start, required_frames, cache->data + offset, waveview->channel,waveview->samples_per_unit);
 
-       npeaks += copied;
+               /* take into account any copied peaks */
+               
+               npeaks += copied;
+       } else {
+               npeaks = copied;
+       }
 
        if (npeaks < cache->allocated) {
 #if DEBUG_CACHE
index db88e6622c51462b78cab45cb73a286cd4ca6af7..2f1a286467de7767f6e88b2485b9f3f6368fafce 100644 (file)
@@ -12,6 +12,7 @@
 
 using namespace std;
 using namespace Gtk;
+using namespace PBD;
 
 /* the global color map */
 
index f411f945c833b28bc2c76d3f2f5391216d2dae37..a7c6e265ed5adb6aa14c4bcba5c85eda031d35e9 100644 (file)
@@ -43,6 +43,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace sigc;
 
index 6363178004811927697342d82e5b37314fe61783..5b587594de730f9bfc7b1397907587092e41253f 100644 (file)
@@ -34,6 +34,7 @@
 #include <ardour/session.h>
 #include <ardour/auditioner.h>
 #include <ardour/audioplaylist.h>
+#include <ardour/audiosource.h>
 #include <ardour/playlist_templates.h>
 
 #include <gtkmm2ext/gtk_ui.h>
@@ -51,6 +52,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace sigc;
 using namespace Editing;
index aef54f2c5dd8851b31d2a330a5b4dc2839781254..350698ec483b4ef8e16119a6cd743b08aca6ac43 100644 (file)
@@ -35,6 +35,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Editing;
 using namespace Gnome;
 using namespace Canvas;
@@ -50,7 +51,7 @@ CrossfadeView::CrossfadeView (ArdourCanvas::Group *parent,
                              AudioRegionView& rview)
                              
 
-       : TimeAxisViewItem ("xf.name()", *parent, tv, spu, basic_color, xf.position(), 
+       : TimeAxisViewItem ("xfade" /*xf.name()*/, *parent, tv, spu, basic_color, xf.position(), 
                            xf.overlap_length(), TimeAxisViewItem::Visibility (TimeAxisViewItem::ShowFrame)),
          crossfade (xf),
          left_view (lview),
@@ -91,13 +92,6 @@ CrossfadeView::~CrossfadeView ()
         GoingAway (this) ; /* EMIT_SIGNAL */
 }
 
-std::string
-CrossfadeView::get_item_name ()
-{
-       return "xfade";
-//     return crossfade.name();
-}
-
 void
 CrossfadeView::reset_width_dependent_items (double pixel_width)
 {
index b4931c94c0b3f3ff5579d54262bccffaa566be6e..403edfe297d3ca338a76adf0da0cfda8a54ce4b2 100644 (file)
@@ -46,7 +46,6 @@ struct CrossfadeView : public TimeAxisViewItem
     AudioRegionView& left_view;    // and these too
     AudioRegionView& right_view;
 
-    std::string get_item_name();
     void set_height (double);
 
     bool valid() const { return _valid; }
index 613835aa4c2956e86268c9b9b7268eedbb480e17..3c9836a5e6e5c6e123f012454f10acc0ef29da6a 100644 (file)
@@ -7,6 +7,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 int
 curvetest (string filename)
index c7956386ced6848b3058a29d7e9122f12b3c9bbc..08c716d4422751d6d9d09a7660a9ca7faa670cc5 100644 (file)
@@ -38,7 +38,7 @@
 #include <gtkmm2ext/utils.h>
 
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/plugin_manager.h>
 #include <ardour/location.h>
 #include <ardour/audioplaylist.h>
@@ -48,7 +48,7 @@
 #include <ardour/tempo.h>
 #include <ardour/utils.h>
 
-#include "control_protocol.h"
+#include <control_protocol/control_protocol.h>
 
 #include "ardour_ui.h"
 #include "editor.h"
@@ -84,6 +84,7 @@
 using namespace std;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Glib;
 using namespace Gtkmm2ext;
@@ -1636,7 +1637,7 @@ Editor::build_track_region_context_menu (jack_nframes_t frame)
        AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (clicked_trackview);
 
        if (atv) {
-               DiskStream* ds;
+               AudioDiskstream* ds;
                Playlist* pl;
                
                if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()))) {
@@ -1663,7 +1664,7 @@ Editor::build_track_crossfade_context_menu (jack_nframes_t frame)
        AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (clicked_trackview);
 
        if (atv) {
-               DiskStream* ds;
+               AudioDiskstream* ds;
                Playlist* pl;
                AudioPlaylist* apl;
 
@@ -3107,7 +3108,7 @@ Editor::mapped_set_selected_regionview_from_click (AudioTimeAxisView& atv, uint3
        AudioPlaylist* pl;
        vector<AudioRegion*> results;
        AudioRegionView* marv;
-       DiskStream* ds;
+       AudioDiskstream* ds;
 
        if ((ds = atv.get_diskstream()) == 0) {
                /* bus */
@@ -3338,7 +3339,7 @@ Editor::set_selected_regionview_from_region_list (Region& r, Selection::Operatio
                        AudioPlaylist* pl;
                        vector<AudioRegion*> results;
                        AudioRegionView* marv;
-                       DiskStream* ds;
+                       AudioDiskstream* ds;
                        
                        if ((ds = tatv->get_diskstream()) == 0) {
                                /* bus */
index e73d44971bc9b5b4980e17ea710740d50a62fc01..e517b1eaf1c9231d6123c2f3aeccc7414b005f32 100644 (file)
@@ -45,7 +45,6 @@
 #include <ardour/tempo.h>
 #include <ardour/location.h>
 #include <ardour/region.h>
-#include <ardour/externalsource.h>
 
 #include "audio_clock.h"
 #include "gtk-custom-ruler.h"
@@ -67,9 +66,8 @@ namespace LinuxAudioSystems {
 }
 
 namespace ARDOUR {
-       class DiskStream;
+       class AudioDiskstream;
        class RouteGroup;
-       class Source;
        class Playlist;
        class Region;
        class Location;
index d88cda61e64ef85c7b5237238d9ed472a435ed1b..e20e6ee8eb51690e0d70240d787df78948a5f731 100644 (file)
@@ -12,6 +12,7 @@ using namespace Glib;
 using namespace std;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Editing;
 
 void
index ee73c46b244f485955c7bf9324f930868846fc0a..f3e2ee1cb29046bcff46ba32984ba668af326fe2 100644 (file)
 #include <ardour/session.h>
 #include <ardour/audioplaylist.h>
 #include <ardour/audioregion.h>
-#include <ardour/diskstream.h>
-#include <ardour/filesource.h>
-#include <ardour/externalsource.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/utils.h>
 #include <ardour/audio_track.h>
 #include <ardour/audioplaylist.h>
+#include <ardour/audiofilesource.h>
 
 #include "ardour_ui.h"
 #include "editor.h"
@@ -43,6 +42,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
 using namespace Editing;
@@ -187,7 +187,7 @@ int
 Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool& check_sample_rate, ImportMode mode, 
                       AudioTrack* track, jack_nframes_t& pos, bool prompt)
 {
-       ExternalSource *source = 0; /* keep g++ quiet */
+       AudioFileSource *source = 0; /* keep g++ quiet */
        AudioRegion::SourceList sources;
        AudioRegion* region;
        string idspec;
@@ -220,7 +220,7 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
 
        string error_msg;
 
-       if (!ExternalSource::get_soundfile_info (path, finfo, error_msg)) {
+       if (!AudioFileSource::get_soundfile_info (path, finfo, error_msg)) {
                error << string_compose(_("Editor: cannot open file \"%1\", (%2)"), selection, error_msg ) << endmsg;
                return 0;
        }
@@ -267,7 +267,7 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
                idspec += string_compose(":%1", n);
                
                try {
-                       source = ExternalSource::create (idspec.c_str());
+                       source = AudioFileSource::create (idspec.c_str());
                        sources.push_back(source);
                } 
                
index b9ae734bde59f589f30a1f5c07266b2e8477ed29..acad3371a0d8cd09cf8feeaf5a127930969085ee 100644 (file)
@@ -1,5 +1,5 @@
 #include <ardour/location.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 
 #include "editor.h"
 #include "editing.h"
@@ -8,6 +8,7 @@
 #include "selection.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 void
 Editor::set_route_loop_selection ()
index 69aa6428a680d58ed0ec08f01d5f3faf4ffb71ab..41350a1da421142759d00e033f0ae31ba3176395 100644 (file)
@@ -46,6 +46,7 @@
 using namespace std;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Glib;
 using namespace Gtkmm2ext;
index 29997f5f57f6dd85cfa587cb10582884880f9db5..43114534c5a4bf780325b1499f9ee2b7142483f9 100644 (file)
@@ -21,7 +21,7 @@
 #include <cstdlib>
 #include <cmath>
 
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/audioplaylist.h>
 
 #include "editor.h"
@@ -42,6 +42,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 bool
index 5dd1eb075bf9f6052f77027830eec1625d8587b1..2353481daf1305e530cda2aad2955469a2cf7894 100644 (file)
@@ -28,6 +28,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 Editor::Cursor::Cursor (Editor& ed, const string& color, bool (Editor::*callbck)(GdkEvent*,ArdourCanvas::Item*))
index 0047999f71e69c31da8362ceded6af9c866de854..8df76fef258ca5c18c592a01efa1603e4d50a163 100644 (file)
@@ -38,6 +38,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 void
index 8ad432ece6287f605a0604069ca293cd590ad353..7339536e4255a3fb8979063a47ef53ede7b93163 100644 (file)
@@ -37,8 +37,8 @@
 #include <ardour/types.h>
 #include <ardour/export.h>
 #include <ardour/audio_track.h>
-#include <ardour/filesource.h>
-#include <ardour/diskstream.h>
+#include <ardour/audiofilesource.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/audioregion.h>
 #include <ardour/audioplaylist.h>
 
@@ -46,6 +46,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 void
@@ -154,7 +155,7 @@ Editor::bounce_region_selection ()
 bool
 Editor::write_region (string path, AudioRegion& region)
 {
-       FileSource* fs;
+       AudioFileSource* fs;
        const jack_nframes_t chunk_size = 4096;
        jack_nframes_t to_read;
        Sample buf[chunk_size];
@@ -163,7 +164,7 @@ Editor::write_region (string path, AudioRegion& region)
        jack_nframes_t pos;
        char s[PATH_MAX+1];
        uint32_t cnt;
-       vector<FileSource *> sources;
+       vector<AudioFileSource *> sources;
        uint32_t nchans;
        
        nchans = region.n_channels();
@@ -204,7 +205,7 @@ Editor::write_region (string path, AudioRegion& region)
                
                        
                        try {
-                               fs = new FileSource (path, session->frame_rate());
+                               fs = AudioFileSource::create (path);
                        }
                        
                        catch (failed_constructor& err) {
@@ -227,10 +228,10 @@ Editor::write_region (string path, AudioRegion& region)
 
                this_time = min (to_read, chunk_size);
 
-               for (vector<FileSource *>::iterator src=sources.begin(); src != sources.end(); ++src) {
-
-                       fs = (*src);
+               for (vector<AudioFileSource *>::iterator src=sources.begin(); src != sources.end(); ++src) {
                        
+                       fs = (*src);
+
                        if (region.read_at (buf, buf, gain_buffer, workbuf, pos, this_time) != this_time) {
                                break;
                        }
@@ -250,7 +251,7 @@ Editor::write_region (string path, AudioRegion& region)
        time (&tnow);
        now = localtime (&tnow);
        
-       for (vector<FileSource *>::iterator src = sources.begin(); src != sources.end(); ++src) {
+       for (vector<AudioFileSource *>::iterator src = sources.begin(); src != sources.end(); ++src) {
                (*src)->update_header (0, *now, tnow);
        }
 
@@ -258,7 +259,8 @@ Editor::write_region (string path, AudioRegion& region)
 
 error_out:
 
-       for (vector<FileSource*>::iterator i = sources.begin(); i != sources.end(); ++i) {
+       for (vector<AudioFileSource*>::iterator i = sources.begin(); i != sources.end(); ++i) {
+               
                (*i)->mark_for_remove ();
                delete (*i);
        }
@@ -300,7 +302,7 @@ Editor::write_audio_selection (TimeSelection& ts)
 bool
 Editor::write_audio_range (Playlist& playlist, uint32_t channels, list<AudioRange>& range)
 {
-       FileSource* fs;
+       AudioFileSource* fs;
        const jack_nframes_t chunk_size = 4096;
        jack_nframes_t nframes;
        Sample buf[chunk_size];
@@ -310,7 +312,7 @@ Editor::write_audio_range (Playlist& playlist, uint32_t channels, list<AudioRang
        char s[PATH_MAX+1];
        uint32_t cnt;
        string path;
-       vector<FileSource *> sources;
+       vector<AudioFileSource *> sources;
 
        for (uint32_t n=0; n < channels; ++n) {
                
@@ -337,7 +339,7 @@ Editor::write_audio_range (Playlist& playlist, uint32_t channels, list<AudioRang
                path = s;
                
                try {
-                       fs = new FileSource (path, session->frame_rate());
+                       fs = AudioFileSource::create (path);
                }
                
                catch (failed_constructor& err) {
@@ -420,7 +422,7 @@ Editor::write_audio_range (Playlist& playlist, uint32_t channels, list<AudioRang
 error_out:
        /* unref created files */
 
-       for (vector<FileSource*>::iterator i = sources.begin(); i != sources.end(); ++i) {
+       for (vector<AudioFileSource*>::iterator i = sources.begin(); i != sources.end(); ++i) {
                (*i)->mark_for_remove ();
                delete *i;
        }
index 5b2da7dc8302a059e66c5a91d2275ebfe7e855d7..8504667daa7efb6183ca058dc890f0968b61419d 100644 (file)
@@ -24,6 +24,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 void
 Editor::hscrollbar_allocate (Gtk::Allocation &alloc)
index a8dce7d64bbabfae4f6c45b4b6036de4828ecf75..6b8691b09fe2d2f6b7ef50abd0d95d2a77a29e76 100644 (file)
@@ -44,6 +44,7 @@
 #include "public_editor.h"
 
 using namespace Gtk;
+using namespace PBD;
 
 /* <CMT Additions file="editor.cc"> */
 
index 00469281fc7f1b355d20d08613710e33703e5162..baa158cbf8374c6e73ceda214b1227ccbbcda0db 100644 (file)
@@ -36,6 +36,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 
 void
index df64b9ed43533cec5466f54c110ca8ecbb6edd49..a584561e428bc3b5f1fa33ed7cb87fecbe5beb3c 100644 (file)
@@ -41,6 +41,7 @@
 using namespace std;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 void
index 249b1d781a630cd8a8c06d953e1db9e290a4b006..6c2919f5dd705de357d94bdc956f7d8fd1459540 100644 (file)
@@ -47,7 +47,7 @@
 #include <ardour/types.h>
 #include <ardour/route.h>
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/playlist.h>
 #include <ardour/audioplaylist.h>
 #include <ardour/audioregion.h>
@@ -61,6 +61,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
 using namespace Editing;
@@ -195,7 +196,7 @@ Editor::set_mouse_mode (MouseMode m, bool force)
                */
 
                for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
-                       if ((*i)->selected()) {
+                       if ((*i)->get_selected()) {
                                (*i)->show_selection (selection->time);
                        }
                }
@@ -286,7 +287,7 @@ Editor::step_mouse_mode (bool next)
 void
 Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
 {
-       bool commit;
+       bool commit = false;
        bool c1; 
        bool c2;
 
@@ -3458,7 +3459,7 @@ void
 Editor::show_verbose_time_cursor (jack_nframes_t frame, double offset, double xpos, double ypos) 
 {
        char buf[128];
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
        BBT_Time bbt;
        float secs;
 
@@ -3502,7 +3503,7 @@ void
 Editor::show_verbose_duration_cursor (jack_nframes_t start, jack_nframes_t end, double offset, double xpos, double ypos) 
 {
        char buf[128];
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
        BBT_Time sbbt;
        BBT_Time ebbt;
        float secs;
index 4bcafac93d4e8c3ed45be0b6c79376598cfef9be..c6f5eeeb4819150def674e88a44e8d500b9ffb7f 100644 (file)
@@ -27,4 +27,5 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
index acf205d06f926e2b1c56dae7ac31e0ea5273a1d2..d3845dd26bb6b09d7cd889180be5e900cd400b06 100644 (file)
@@ -36,9 +36,7 @@
 #include <ardour/session.h>
 #include <ardour/audioplaylist.h>
 #include <ardour/audioregion.h>
-#include <ardour/diskstream.h>
-#include <ardour/filesource.h>
-#include <ardour/externalsource.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/utils.h>
 #include <ardour/location.h>
 #include <ardour/named_selection.h>
@@ -66,6 +64,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
 using namespace Editing;
@@ -122,9 +121,9 @@ Editor::set_meter_hold (int32_t cnt)
 void
 Editor::set_meter_falloff (int intval)
 {
-       float val;
+       float val = 0.0f; /* off */
        std::string str;
-       cerr << "set_meter_falloff () called: intval = " << intval << endl;
+
        Config->set_meter_falloff_off(false);
        Config->set_meter_falloff_slowest(false);
        Config->set_meter_falloff_slow(false);
index bbcfb09a2902f2121aada484b5a531827c46d78b..5cf099433b1588c2481ba4b6c4ff119ebfa5c30f 100644 (file)
@@ -26,6 +26,7 @@
 #include <pbd/basename.h>
 
 #include <ardour/audioregion.h>
+#include <ardour/audiosource.h>
 #include <ardour/session_region.h>
 
 #include <gtkmm2ext/stop_signal.h>
@@ -41,6 +42,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Glib;
 using namespace Editing;
index 79b67a544a8fe8422aade14f2ea8042112585c09..2e036f500189ac98e9a2ec2afd172b2733fb4d9b 100644 (file)
@@ -35,6 +35,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 void
index fa08050885f3ba0e29acf53502ffef83f659ea6a..47641655e7cee752d716f83e45160f16c780f1e4 100644 (file)
@@ -35,6 +35,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Editing;
 
@@ -798,7 +799,7 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
        jack_nframes_t pos;
        jack_nframes_t spacer;
        jack_nframes_t fr;
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
        gchar buf[16];
        gint nmarks = 0;
        gint n;
@@ -927,13 +928,13 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
                        (*marks)[n].position = pos;
 
                        // Increment subframes by one
-                       session->smpte_increment_subframes( smpte );
+                       SMPTE::increment_subframes( smpte );
                }
        } else if (show_seconds) {
                // Find smpte time of this sample (pos)
                session->sample_to_smpte(pos, smpte, true /* use_offset */, false /* use_subframes */ );
                // Go to next whole second down
-               session->smpte_seconds_floor( smpte );
+               SMPTE::seconds_floor( smpte );
 
                for (n = 0; n < nmarks; n++) {
                        session->smpte_to_sample(smpte, pos, true /* use_offset */, false /* use_subframes */ );
@@ -953,13 +954,13 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
         
                        }
                        (*marks)[n].label = g_strdup (buf);
-                       session->smpte_increment_seconds( smpte );
+                       SMPTE::increment_seconds( smpte );
                }
        } else if (show_minutes) {
                // Find smpte time of this sample (pos)
                session->sample_to_smpte(pos, smpte, true /* use_offset */, false /* use_subframes */ );
                // Go to next whole minute down
-               session->smpte_minutes_floor( smpte );
+               SMPTE::minutes_floor( smpte );
 
                for (n = 0; n < nmarks; n++) {
                        session->smpte_to_sample(smpte, pos, true /* use_offset */, false /* use_subframes */ );
@@ -977,13 +978,13 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
                        }
                        (*marks)[n].label = g_strdup (buf);
                        (*marks)[n].position = pos;
-                       session->smpte_increment_minutes( smpte );
+                       SMPTE::increment_minutes( smpte );
                }
        } else if (show_hours) {
                // Find smpte time of this sample (pos)
                session->sample_to_smpte(pos, smpte, true /* use_offset */, false /* use_subframes */ );
                // Go to next whole hour down
-               session->smpte_hours_floor( smpte );
+               SMPTE::hours_floor( smpte );
 
                for (n = 0; n < nmarks; n++) {
                        session->smpte_to_sample(smpte, pos, true /* use_offset */, false /* use_subframes */ );
@@ -998,13 +999,13 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
                        (*marks)[n].label = g_strdup (buf);
                        (*marks)[n].position = pos;
 
-                       session->smpte_increment_hours( smpte );
+                       SMPTE::increment_hours( smpte );
                }
        } else { // show_frames
                // Find smpte time of this sample (pos)
                session->sample_to_smpte(pos, smpte, true /* use_offset */, false /* use_subframes */ );
                // Go to next whole frame down
-               session->smpte_frames_floor( smpte );
+               SMPTE::frames_floor( smpte );
 
                for (n = 0; n < nmarks; n++) {
                        session->smpte_to_sample(smpte, pos, true /* use_offset */, false /* use_subframes */ );
@@ -1019,7 +1020,7 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
         
                        }
                        (*marks)[n].label = g_strdup (buf);
-                       session->smpte_increment( smpte );
+                       SMPTE::increment( smpte );
                }
        }
   
index 3b5d00d9eddf34d8bd8354f187378d166efec565..959da1ad2d740e4a335d60d7a5290d45d978b05e 100644 (file)
@@ -40,6 +40,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Gtkmm2ext;
 
index f4351fe51845b140563a67736995ed7ecbaf900b..5f998ada9fa5a0602c39cb874a790d9b8e5ffb60 100644 (file)
@@ -49,6 +49,7 @@
 using namespace std;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Gtkmm2ext;
 using namespace Editing;
index 9760c5116bb604ee2e0a429bb220a0dfa835563a..6ff467454d3d0647b913175648d95010dfe667a9 100644 (file)
 #include <ardour/audioplaylist.h>
 #include <ardour/audio_track.h>
 #include <ardour/audioregion.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
 
index 834127e042d21dd63aceb84813c351f16cc35819..bcf8cd85adebc19111a410e9d664b1b9262df5e6 100644 (file)
@@ -49,6 +49,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
 
index 3ff6ae783d4eb5eac3b83feaa3f3e713d7a91d64..e43eb20cd1963cd23032e91b77ea8a18e02f72b2 100644 (file)
@@ -32,6 +32,7 @@
 
 using namespace Gtk;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace std;
 
 ExportRangeMarkersDialog::ExportRangeMarkersDialog (PublicEditor& editor) 
index cb96774cdbbc81afa488ab0cfcc4bf2ee24d59d5..8f41f5def093092422a4418a11b2910ae6bb9cb4 100644 (file)
@@ -28,6 +28,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 GainAutomationTimeAxisView::GainAutomationTimeAxisView (Session& s, Route& r, PublicEditor& e, TimeAxisView& parent, ArdourCanvas::Canvas& canvas, const string & n, ARDOUR::Curve& c)
index 9d0228dba68023337e63f0676a33f2d52576e146..b7746c4b19773f416e7f6e6ca65eaec0311ac12a 100644 (file)
@@ -47,6 +47,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtkmm2ext;
 using namespace Gtk;
 using namespace sigc;
@@ -326,23 +327,27 @@ GainMeter::update_meters ()
        char buf[32];
        
        for (n = 0, i = meters.begin(); i != meters.end(); ++i, ++n) {
-                if ((*i).packed) {
-                        peak = _io.peak_input_power (n);
+               if ((*i).packed) {
+                       peak = _io.peak_input_power (n);
 
                        (*i).meter->set (log_meter (peak), peak);
-                       
-                        if (peak > max_peak) {
-                                max_peak = peak;
-                                /* set peak display */
-                                snprintf (buf, sizeof(buf), "%.1f", max_peak);
-                                peak_display_label.set_text (buf);
-
-                                if (max_peak >= 0.0f) {
-                                        peak_display.set_name ("MixerStripPeakDisplayPeak");
-                                }
-                        }
-                }
-        }
+                                               
+                       if (peak > max_peak) {
+               max_peak = peak;
+                /* set peak display */
+                               if (max_peak <= -200.0f) {
+                                       peak_display_label.set_text (_("-inf"));
+                               } else {
+                                       snprintf (buf, sizeof(buf), "%.1f", max_peak);
+                                       peak_display_label.set_text (buf);
+                               }
+
+                               if (max_peak >= 0.0f) {
+                                       peak_display.set_name ("MixerStripPeakDisplayPeak");
+                               }
+                       }
+               }
+       }
 }
 
 void
diff --git a/gtk2_ardour/glade_factory.cc b/gtk2_ardour/glade_factory.cc
deleted file mode 100644 (file)
index 6dbced3..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-    Copyright (C) 2005 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#include <iostream>
-
-#include "glade_factory.h"
-
-Glib::RefPtr<Gnome::Glade::Xml>
-GladeFactory::create(const std::string& full_path_to_file,
-                    const Glib::ustring& toplevel_widget)
-{
-       try {
-               return Gnome::Glade::Xml::create(full_path_to_file,
-                                                toplevel_widget,
-                                                PACKAGE );
-       } catch(const Gnome::Glade::XmlError& ex) {
-               std::cerr << ex.what() << std::endl;
-               throw ex;
-       }
-}
diff --git a/gtk2_ardour/glade_factory.h b/gtk2_ardour/glade_factory.h
deleted file mode 100644 (file)
index 2fff3bd..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-    Copyright (C) 2005 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-// -*- c++ -*-
-
-#ifndef GLADE_FACTORY_H
-#define GLADE_FACTORY_H
-
-#include <string>
-#include <libglademm/xml.h>
-
-typedef Glib::RefPtr<Gnome::Glade::Xml> GladeRef;
-
-/**
-   This is the base class for all glade 
-   factories so that the same domain is
-   used.
-*/
-class GladeFactory {
-       
-protected:
-       static GladeRef
-       create(const std::string& full_path,
-              const Glib::ustring& toplevel_widget = Glib::ustring());
-};
-
-
-#endif // GLADE_FACTORY_H
diff --git a/gtk2_ardour/glade_path.cc b/gtk2_ardour/glade_path.cc
deleted file mode 100644 (file)
index 29bca71..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-    Copyright (C) 2005 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#include <glibmm/fileutils.h>
-#include <glibmm/miscutils.h>
-
-#include <ardour/ardour.h>
-
-#include "i18n.h"
-#include "glade_path.h"
-
-#include <iostream>
-
-std::string
-GladePath::path(const std::string& glade_file)
-{
-    std::string full_path;
-   
-    full_path = ARDOUR::find_data_file(glade_file, "glade");
-    return full_path;
-}
diff --git a/gtk2_ardour/glade_path.h b/gtk2_ardour/glade_path.h
deleted file mode 100644 (file)
index a651b5f..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-    Copyright (C) 2005 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#ifndef GLADE_PATH_H
-#define GLADE_PATH_H
-
-#include <string>
-
-struct GladePath {
-
-       /**
-          @return Path to glade file.
-          
-          XXX subject to change upon discussion.
-
-          glade files are currently looked for in
-          three possible directories in this order.
-
-          In the directory defined in the environment
-          variable ARDOUR_GLADE_PATH
-
-          In the users .ardour/glade directory.
-          
-          In the system defined glade path.
-       */
-       static std::string
-       path(const std::string& glade_filename);
-
-};
-
-#endif // GLADE_PATH_H
-
index 4f08954a8d5bb5da4c9d1ad02a0a0510f4b781a1..905a96de7d47a5d5136042702d5b7866fab3ddb0 100644 (file)
@@ -52,6 +52,7 @@ using namespace std;
 using namespace ardourvis ;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 
 ImageFrameSocketHandler* ImageFrameSocketHandler::_instance = 0 ;
 
@@ -1091,7 +1092,7 @@ ImageFrameSocketHandler::handle_item_selected(const char* msg)
                                }
                                else
                                {
-                                       ifv->set_selected(true, this) ;
+                                       ifv->set_selected(true) ;
                                        ifta->get_view()->set_selected_imageframe_view(iftag, ifv) ;
 
                                        thePublicEditor.scroll_timeaxis_to_imageframe_item(ifv) ;
index 4ed36f55e724546b081e55b8b0ff93d0cb8bc6f3..ae288ec9ab28738828a9ebd4f61a0b0a8eef3fba 100644 (file)
@@ -47,6 +47,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
 
index e00c399e7f396da59968f8dcd09719e1a7b77206..a72508286373df338dac0cd22834cdae5f96db2c 100644 (file)
@@ -365,11 +365,11 @@ ImageFrameTimeAxisView::set_selected_imageframe_view(ImageFrameTimeAxisGroup* if
        
        if(selected_imageframe_view)
        {
-               selected_imageframe_view->set_selected(false, this) ;
+               selected_imageframe_view->set_selected(false) ;
        }
        
        selected_imageframe_view = ifv ;
-       selected_imageframe_view->set_selected(true, this) ;
+       selected_imageframe_view->set_selected(true) ;
 }
 
 /**
@@ -386,7 +386,7 @@ ImageFrameTimeAxisView::clear_selected_imageframe_item(bool clear_group)
        
        if(selected_imageframe_view)
        {
-               selected_imageframe_view->set_selected(false, this) ;
+               selected_imageframe_view->set_selected(false) ;
        }
        selected_imageframe_view = 0 ;
 }
index e8ff8784865927f09a33c105a5ab804b90ca60c5..ac17a7cc1a2bf8d13b1b0739c053289450d5406e 100644 (file)
@@ -172,16 +172,15 @@ delete imageframe;
  * @return true if the position change was a success, false otherwise
  */
 bool
-ImageFrameView::set_position(jack_nframes_t pos, void* src)
+ImageFrameView::set_position(jack_nframes_t pos, void* src, double* delta)
 {
        jack_nframes_t old_pos = frame_position ;
        
        // do the standard stuff
-       bool ret = TimeAxisViewItem::set_position(pos, src) ;
+       bool ret = TimeAxisViewItem::set_position(pos, src, delta) ;
 
        // everything went ok with the standard stuff?
-       if(ret)
-       {
+       if (ret) {
                /* move each of our associated markers with this ImageFrameView */
                for (MarkerViewList::iterator i = marker_view_list.begin(); i != marker_view_list.end(); ++i)
                {
index c59908258075e6fa223a1e6baa917eeb1f0396b4..5ae8aaded6665adf62004fba84c62c508b1f7f58 100644 (file)
@@ -91,7 +91,7 @@ class ImageFrameView : public TimeAxisViewItem
                 * @param src the identity of the object that initiated the change
                 * @return true if the position change was a success, false otherwise
                 */
-               virtual bool set_position(jack_nframes_t pos, void* src) ;
+               virtual bool set_position(jack_nframes_t pos, void* src, double* delta = 0) ;
                
                /**
                 * Sets the duration of this item
index b45966c5e3cdaca419db25a28d3bc3310f9e63ed..b0ecd05077994be991656b4713afc658cecbcb34 100644 (file)
@@ -31,7 +31,7 @@
 #include <ardour/port.h>
 #include <ardour/insert.h>
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 
 #include <gtkmm2ext/doi.h>
 #include <gtkmm2ext/gtk_ui.h>
@@ -49,6 +49,7 @@ using namespace Gtk;
 using namespace Glib;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtkmm2ext;
 
 IOSelectorWindow::IOSelectorWindow (Session& sess, IO& ior, bool input, bool can_cancel)
index 92dce01bb6a90fe57ab7c1ea8f402b46119862e5..17390b8b4db79020fb24d82c5e855a55eaa95d4d 100644 (file)
@@ -35,6 +35,8 @@
 
 #include "i18n.h"
 
+using namespace PBD;
+
 #define KBD_DEBUG 1
 bool debug_keyboard = false;
 
index 21d0fb5b15558ff06313be704558cd319f15282f..f0fe230b5720df95bbf84bd804e821d5ea5e83ac 100644 (file)
@@ -38,6 +38,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Gtkmm2ext;
 
index e9ac25a8f81b0f28e8f781dc6eff69473a43e67e..778355c858414b1793c509ef36df39cbbd84b7e0 100644 (file)
@@ -53,6 +53,7 @@
 using namespace Gtk;
 using namespace GTK_ARDOUR;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 
 TextReceiver text_receiver ("ardour");
@@ -102,12 +103,6 @@ handler (int sig)
        shutdown (1);
 }
 
-static void 
-handler2 (int sig, siginfo_t* ctxt, void* ignored)
-{
-       handler (sig);
-}      
-
 static void *
 signal_thread (void *arg)
 {
@@ -361,8 +356,17 @@ To create it from the command line, start ardour as \"ardour --new %1"), path)
        return true;
 }
 
-int
-main (int argc, char *argv[])
+#ifdef VST_SUPPORT
+/* this is called from the entry point of a wine-compiled
+   executable that is linked against gtk2_ardour built
+   as a shared library.
+*/
+extern "C" {
+int ardour_main (int argc, char *argv[])
+#else
+int main (int argc, char *argv[])
+#endif
+
 {
        ARDOUR::AudioEngine *engine;
        vector<Glib::ustring> null_file_list;
@@ -442,7 +446,7 @@ main (int argc, char *argv[])
        
        try { 
                engine = new ARDOUR::AudioEngine (jack_client_name);
-               ARDOUR::init (*engine, use_vst, try_hw_optimization, handler2);
+               ARDOUR::init (*engine, use_vst, try_hw_optimization);
                ui->set_engine (*engine);
        } catch (AudioEngine::NoBackendAvailable& err) {
                gui_jack_error ();
@@ -458,11 +462,13 @@ main (int argc, char *argv[])
                ui = 0;
        }
 
-  out:
        delete engine;
        ARDOUR::cleanup ();
        shutdown (0);
 
-       /* just another commit forcing change */
+       return 0;
 }
+#ifdef VST_SUPPORT
+} // end of extern C block
+#endif
 
index acb88257e06c54f266bb6f747aa0c54e8000895e..1c6e7af2c79e81817734e0324f770d582553c383 100644 (file)
@@ -42,6 +42,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
 
index 6b83a343226e88d944542a71f07a253bce918fae..65434d5e82fce79cbb92db6e5cbf173b7a6e4afe 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <ardour/session.h>
 #include <ardour/session_route.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/audio_track.h>
 
 #include "ardour_ui.h"
@@ -32,6 +32,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace sigc;
 
index 50562a68d0f34ab776eb4045feec32d84b425dce..ea3b6097206b1f2f9ff31a418b8bc9fe726aab6e 100644 (file)
@@ -40,6 +40,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Gtkmm2ext;
 
index 9bdc8c340aa025601d1026f72b7cea0b390ccc68..47d884be5e49d6a2bc72f75197fc24fee87e8e9d 100644 (file)
@@ -37,7 +37,7 @@
 #include <ardour/audioengine.h>
 #include <ardour/route.h>
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/panner.h>
 #include <ardour/send.h>
 #include <ardour/insert.h>
@@ -63,6 +63,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Gtkmm2ext;
 
@@ -125,7 +126,6 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, Route& rt, bool in_mixer)
        output_button.set_name ("MixerIOButton");
        output_label.set_name ("MixerIOButtonLabel");
 
-
        _route.meter_change.connect (mem_fun(*this, &MixerStrip::meter_changed));
                meter_point_button.add (meter_point_label);
                meter_point_button.set_name ("MixerStripMeterPreButton");
@@ -665,9 +665,9 @@ MixerStrip::select_stream_input ()
        MenuList& items = stream_menu->items();
        stream_menu->set_name ("ArdourContextMenu");
        
-       Session::DiskStreamList streams = _session.disk_streams();
+       Session::AudioDiskstreamList streams = _session.audio_disk_streams();
 
-       for (Session::DiskStreamList::iterator i = streams.begin(); i != streams.end(); ++i) {
+       for (Session::AudioDiskstreamList::iterator i = streams.begin(); i != streams.end(); ++i) {
 
                if (!(*i)->hidden()) {
 
@@ -685,7 +685,7 @@ MixerStrip::select_stream_input ()
 }
 
 void
-MixerStrip::stream_input_chosen (DiskStream *stream)
+MixerStrip::stream_input_chosen (AudioDiskstream *stream)
 {
        if (is_audio_track()) {
                audio_track()->set_diskstream (*stream, this);
index 65be3c00c1f1a96f26a3d187d8123282e575d84d..0cc8fed8e3bcdacc4ec61ec1afe642565be74fb2 100644 (file)
@@ -170,7 +170,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
        Gtk::Menu output_menu;
        void add_connection_to_output_menu (ARDOUR::Connection *);
        
-       void stream_input_chosen (ARDOUR::DiskStream*);
+       void stream_input_chosen (ARDOUR::AudioDiskstream*);
        void select_stream_input ();
        void connection_input_chosen (ARDOUR::Connection *);
        void connection_output_chosen (ARDOUR::Connection *);
index 1ded8625c6d7cad34ec4c3b58db81ea4c225f6ed..983903d6dd04da5e56ad802564ce46a122f13c32 100644 (file)
@@ -34,7 +34,7 @@
 #include <ardour/session.h>
 #include <ardour/audio_track.h>
 #include <ardour/session_route.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/plugin_manager.h>
 
 #include "mixer_ui.h"
@@ -49,6 +49,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Glib;
 using namespace Gtkmm2ext;
index 35320b3a48483ed720917ce0a830d94044afcefd..5108df60142677a433dbf75fdd17cd9e27244d4e 100644 (file)
@@ -45,7 +45,7 @@ namespace ARDOUR {
        class Route;
        class RouteGroup;
        class Session;
-       class DiskStream;
+       class AudioDiskstream;
        class AudioEngine;
 };
 
index 88944aacb7172b55b93d0d56b565e96a18545895..d1059cebe08f76b204cccf62f0b84cced5fa0f5d 100644 (file)
@@ -302,6 +302,11 @@ NewSessionDialog::NewSessionDialog()
        if (!path.empty()) {
                m_template->set_current_folder (path + X_("templates/"));
        }
+
+       const std::string sys_templates_dir = ARDOUR::get_system_data_path() + X_("templates");
+       if (Glib::file_test(sys_templates_dir, Glib::FILE_TEST_IS_DIR))
+               m_template->add_shortcut_folder(sys_templates_dir);
+       
        m_template->set_title(_("select template"));
        Gtk::FileFilter* session_filter = manage (new (Gtk::FileFilter));
        session_filter->add_pattern(X_("*.ardour"));
index 5ac4bf5a8df5c47e75fd324110c34f5b69b8c45c..d4c27157421e8e09af02a5516944bcddbecd1bc1 100644 (file)
@@ -43,6 +43,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Editing;
 using namespace Gtkmm2ext;
index 2ea5805098e7f3a359799fd8543a4b2a6ecfe879..69b812882411f25fc36780962bdeedad8c3561de 100644 (file)
@@ -83,7 +83,7 @@ GTK_ARDOUR::parse_opts (int argc, char *argv[])
                { "name", 1, 0, 'c' },
                { "novst", 0, 0, 'V' },
                { "new", 1, 0, 'N' },
-               { "use-hw-optimizations", 0, 0, 'o' },
+               { "no-hw-optimizations", 0, 0, 'O' },
                { "curvetest", 1, 0, 'C' },
                { "gtktheme", 0, 0, 'g' },
                { 0, 0, 0, 0 }
@@ -124,8 +124,8 @@ GTK_ARDOUR::parse_opts (int argc, char *argv[])
                        session_name = optarg;
                        break;
 
-               case 'o':
-                       try_hw_optimization = true;
+               case 'O':
+                       try_hw_optimization = false;
                        break;
 
                case 'V':
index 36e6c31245fb7108b9aabc11b11a004a4fda6604..b72eda78bd18bb3297ab51302e3df3daeb89f62c 100644 (file)
@@ -31,6 +31,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 PanAutomationTimeAxisView::PanAutomationTimeAxisView (Session& s, Route& r, PublicEditor& e, TimeAxisView& parent, Canvas& canvas, std::string n)
index c6b2bad6c952bcd25197b5840bd90c20deac5897..1fb94a1321130a292b9af83766052eedf3c6111b 100644 (file)
@@ -39,6 +39,7 @@ using namespace std;
 using namespace Gtk;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 
 Panner2d::Target::Target (float xa, float ya, const char *txt)
        : x (xa), y (ya), text (txt ? strdup (txt) : 0)
@@ -127,7 +128,7 @@ Panner2d::reset (uint32_t n_inputs)
 }
 
 void
-Panner2d::on_size_allocate (Gtk::Allocation alloc)
+Panner2d::on_size_allocate (Gtk::Allocation& alloc)
 {
        width = alloc.get_width();
        height = alloc.get_height();
index ff81ea398719b0c4c1155a4462c99a52d7c8daf3..1bf8879ba5d40e71d23c183db7a468689483875e 100644 (file)
@@ -78,7 +78,7 @@ class Panner2d : public Gtk::DrawingArea
        bool on_button_press_event (GdkEventButton *);
        bool on_button_release_event (GdkEventButton *);
        bool on_motion_notify_event (GdkEventMotion *);
-       void on_size_allocate (Gtk::Allocation alloc);
+       void on_size_allocate (Gtk::Allocation& alloc);
 
   private:
        struct Target {
index 850070fabf2d5cae8f85d506456789a6816ffd3e..63a19867a86e1d60e44478d7b6fc16e2cff86499 100644 (file)
@@ -41,6 +41,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtkmm2ext;
 using namespace Gtk;
 using namespace sigc;
index eb0e7e3203040cc7a23692383a7267b9181c65f6..f1a975d5dcf05897850565d0f8bf67860ea03617 100644 (file)
@@ -22,7 +22,7 @@
 #include <gtkmm/button.h>
 
 #include <ardour/session_playlist.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/playlist.h>
 #include <ardour/audio_track.h>
 #include <ardour/audioplaylist.h>
@@ -40,6 +40,7 @@ using namespace std;
 using namespace sigc;
 using namespace Gtk;
 using namespace ARDOUR;
+using namespace PBD;
 
 PlaylistSelector::PlaylistSelector ()
        : ArdourDialog ("playlist selector")
@@ -89,7 +90,7 @@ void
 PlaylistSelector::show_for (RouteUI* ruix)
 {
        vector<const char*> item;
-       DiskStream* this_ds;
+       AudioDiskstream* this_ds;
        string str;
 
        rui = ruix;
@@ -115,7 +116,7 @@ PlaylistSelector::show_for (RouteUI* ruix)
        
        for (DSPL_Map::iterator x = dspl_map.begin(); x != dspl_map.end(); ++x) {
 
-               DiskStream* ds = session->diskstream_by_id (x->first);
+               AudioDiskstream* ds = session->diskstream_by_id (x->first);
 
                if (ds == 0) {
                        continue;
index 56f5fab9c8675aa8d862fd2c1ca287b0eaf919f4..16796df160df608cc7b77c59a99acacdac82c293 100644 (file)
@@ -36,6 +36,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 PluginSelector::PluginSelector (PluginManager *mgr)
@@ -149,6 +150,9 @@ PluginSelector::PluginSelector (PluginManager *mgr)
        added_list.get_selection()->signal_changed().connect (mem_fun(*this, &PluginSelector::added_list_selection_changed));
 
        input_refiller ();
+#ifdef VST_SUPPORT
+       vst_refiller ();
+#endif
 }
 
 void
@@ -306,6 +310,9 @@ PluginSelector::btn_update_clicked()
 {
        manager->refresh ();
        input_refiller ();
+#ifdef VST_SUPPORT
+       vst_refiller ();
+#endif 
 }
 
 #ifdef VST_SUPPORT
index 66231adcc38db3ca7e814d8ed66da5de845711b3..749ab9d4ac76a8d372cc0c08da19b66c9c95e1b8 100644 (file)
@@ -56,6 +56,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtkmm2ext;
 using namespace Gtk;
 using namespace sigc;
index 958b7995c6edb5ae97936e98687286b86f44ab4e..e5800e8ece3ba2ea7514d4acb1471ec01d4f979f 100644 (file)
@@ -228,7 +228,7 @@ class VSTPluginUI : public PlugUIBase, public Gtk::VBox
        Gtk::HBox   preset_box;
        Gtk::VBox   vpacker;
        
-       gboolean configure_handler (GdkEventConfigure*, Gtk::Socket*);
+       bool configure_handler (GdkEventConfigure*, Gtk::Socket*);
        void save_plugin_setting ();
 };
 #endif
index eb90ed4a3fa4fe9464ead5f7c8f6bb590839a42d..a51f6108bcece6047ebd1434ed8e1edfe6a111d0 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gtk-ardour 0.347.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 18:09-0400\n"
 "PO-Revision-Date: 2003-05-11 17:36+0200\n"
 "Last-Translator: Karsten Petersen <kapet@kapet.de>\n"
 "Language-Team: Deutsch <de@li.org>\n"
@@ -17,202 +17,202 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: KBabel 0.9.6\n"
 
-#: about.cc:119
+#: about.cc:120
 msgid "Paul Davis"
 msgstr ""
 
-#: about.cc:120
+#: about.cc:121
 #, fuzzy
 msgid "Jesse Chappell"
 msgstr "bestmöglich"
 
-#: about.cc:121
+#: about.cc:122
 msgid "Taybin Rutkin"
 msgstr ""
 
-#: about.cc:122
+#: about.cc:123
 msgid "Marcus Andersson"
 msgstr ""
 
-#: about.cc:123
+#: about.cc:124
 msgid "Jeremy Hall"
 msgstr ""
 
-#: about.cc:124
+#: about.cc:125
 msgid "Steve Harris"
 msgstr ""
 
-#: about.cc:125
+#: about.cc:126
 msgid "Tim Mayberry"
 msgstr ""
 
-#: about.cc:126
+#: about.cc:127
 msgid "Mark Stewart"
 msgstr ""
 
-#: about.cc:127
+#: about.cc:128
 msgid "Sam Chessman"
 msgstr ""
 
-#: about.cc:128
+#: about.cc:129
 msgid "Jack O'Quin"
 msgstr ""
 
-#: about.cc:129
+#: about.cc:130
 msgid "Matt Krai"
 msgstr ""
 
-#: about.cc:130
+#: about.cc:131
 msgid "Ben Bell"
 msgstr ""
 
-#: about.cc:131
+#: about.cc:132
 msgid "Gerard van Dongen"
 msgstr ""
 
-#: about.cc:132
+#: about.cc:133
 msgid "Thomas Charbonnel"
 msgstr ""
 
-#: about.cc:133
+#: about.cc:134
 msgid "Nick Mainsbridge"
 msgstr ""
 
-#: about.cc:134
+#: about.cc:135
 msgid "Colin Law"
 msgstr ""
 
-#: about.cc:135
+#: about.cc:136
 msgid "Sampo Savolainen"
 msgstr ""
 
-#: about.cc:136
+#: about.cc:137
 msgid "Joshua Leach"
 msgstr ""
 
-#: about.cc:137
+#: about.cc:138
 msgid "Rob Holland"
 msgstr ""
 
-#: about.cc:138
+#: about.cc:139
 msgid "Per Sigmond"
 msgstr ""
 
-#: about.cc:139
+#: about.cc:140
 msgid "Doug Mclain"
 msgstr ""
 
-#: about.cc:140
+#: about.cc:141
 msgid "Petter Sundlöf"
 msgstr ""
 
-#: about.cc:145
+#: about.cc:146
 msgid ""
 "French:\n"
 "\tAlain Fréhel <alain.frehel@free.fr>\n"
 msgstr ""
 
-#: about.cc:146
+#: about.cc:147
 msgid ""
 "German:\n"
 "\tKarsten Petersen <kapet@kapet.de>\n"
 msgstr ""
 
-#: about.cc:147
+#: about.cc:148
 msgid ""
 "Italian:\n"
 "\tFilippo Pappalardo <filippo@email.it>\n"
 msgstr ""
 
-#: about.cc:148
+#: about.cc:149
 msgid ""
 "Portuguese:\n"
 "\tRui Nuno Capela <rncbc@rncbc.org>\n"
 msgstr ""
 
-#: about.cc:149
+#: about.cc:150
 msgid ""
 "Brazilian Portuguese:\n"
 "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
 "\tChris Ross <chris@tebibyte.org>\n"
 msgstr ""
 
-#: about.cc:151
+#: about.cc:152
 msgid ""
 "Spanish:\n"
 "\t Alex Krohn <alexkrohn@fastmail.fm>\n"
 msgstr ""
 
-#: about.cc:152
+#: about.cc:153
 msgid ""
 "Russian:\n"
 "\t Igor Blinov <pitstop@nm.ru>\n"
 msgstr ""
 
-#: about.cc:180
+#: about.cc:181
 msgid "Copyright (C) 1999-2005 Paul Davis\n"
 msgstr ""
 
-#: about.cc:181
+#: about.cc:182
 msgid ""
 "Ardour comes with ABSOLUTELY NO WARRANTY\n"
 "This is free software, and you are welcome to redistribute it\n"
 "under certain conditions; see the file COPYING for details.\n"
 msgstr ""
 
-#: about.cc:187
+#: about.cc:188
 msgid ""
 "%1\n"
 "(built with ardour/gtk %2.%3.%4 libardour: %5.%6.%7)"
 msgstr ""
 
-#: actions.cc:260
+#: actions.cc:261
 msgid "programmer error: %1 %2"
 msgstr ""
 
-#: add_route_dialog.cc:61
+#: add_route_dialog.cc:62
 #, fuzzy
 msgid "ardour: add track/bus"
 msgstr "Ardour: Editor"
 
 #. path = "1"
-#: add_route_dialog.cc:62 editor_route_list.cc:72
+#: add_route_dialog.cc:63 editor_route_list.cc:73
 msgid "Tracks"
 msgstr "Spuren"
 
 #. path = "0"
-#: add_route_dialog.cc:63 editor_route_list.cc:69
+#: add_route_dialog.cc:64 editor_route_list.cc:70
 msgid "Busses"
 msgstr ""
 
-#: add_route_dialog.cc:95 plugin_ui.cc:832
+#: add_route_dialog.cc:96 plugin_ui.cc:833
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: add_route_dialog.cc:113
+#: add_route_dialog.cc:114
 #, fuzzy
 msgid "Name (template)"
 msgstr "Name für Mixer-Voreinstellung"
 
-#: add_route_dialog.cc:119
+#: add_route_dialog.cc:120
 #, fuzzy
 msgid "Channel Configuration"
 msgstr "Importieren Abbrechen"
 
-#: add_route_dialog.cc:176 editor.cc:131 editor.cc:3660 time_axis_view.cc:551
+#: add_route_dialog.cc:177 editor.cc:134 editor.cc:3688 time_axis_view.cc:552
 msgid "Normal"
 msgstr ""
 
-#: add_route_dialog.cc:178
+#: add_route_dialog.cc:179
 #, fuzzy
 msgid "Tape"
 msgstr "Anfang"
 
-#: add_route_dialog.cc:195
+#: add_route_dialog.cc:196
 msgid "Mono"
 msgstr ""
 
-#: add_route_dialog.cc:197
+#: add_route_dialog.cc:198
 #, fuzzy
 msgid "Stereo"
 msgstr "Stop"
@@ -285,27 +285,11 @@ msgstr ""
 msgid "SOLO"
 msgstr ""
 
-#: ardour_ui.cc:207
-msgid ""
-"You cannot record-enable\n"
-"track %1\n"
-"because it has no input connections.\n"
-"You would be wasting space recording silence."
-msgstr ""
-
-#: ardour_ui.cc:236
-msgid "no vertical meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:243
-msgid "no horizontal meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:410
+#: ardour_ui.cc:375
 msgid "quit"
 msgstr "Verlassen"
 
-#: ardour_ui.cc:419
+#: ardour_ui.cc:384
 msgid ""
 "Ardour was unable to save your session.\n"
 "\n"
@@ -314,33 +298,33 @@ msgid ""
 "\"Just quit\" option."
 msgstr ""
 
-#: ardour_ui.cc:438
+#: ardour_ui.cc:403
 msgid "ardour: save session?"
 msgstr "Ardour: Sitzung speichern?"
 
-#: ardour_ui.cc:445
+#: ardour_ui.cc:410
 msgid "Don't %1"
 msgstr "Ohne %1"
 
-#: ardour_ui.cc:447
+#: ardour_ui.cc:412
 msgid "Just %1"
 msgstr "Nur %1"
 
-#: ardour_ui.cc:449
+#: ardour_ui.cc:414
 msgid "Save and %1"
 msgstr "Speichern und %1"
 
-#: ardour_ui.cc:461
+#: ardour_ui.cc:426
 #, fuzzy
 msgid "session"
 msgstr "Sitzung"
 
-#: ardour_ui.cc:463
+#: ardour_ui.cc:428
 #, fuzzy
 msgid "snapshot"
 msgstr "Schnappschuß"
 
-#: ardour_ui.cc:465
+#: ardour_ui.cc:430
 #, fuzzy
 msgid ""
 "The %1\"%2\"\n"
@@ -359,81 +343,81 @@ msgstr ""
 "\n"
 "Was wollen Sie machen?"
 
-#: ardour_ui.cc:479
+#: ardour_ui.cc:444
 msgid "Prompter"
 msgstr ""
 
-#: ardour_ui.cc:538
+#: ardour_ui.cc:503
 #, fuzzy, c-format
 msgid "disconnected"
 msgstr "Trennen"
 
-#: ardour_ui.cc:545
+#: ardour_ui.cc:510
 #, c-format
 msgid "SR: %.1f kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:549
+#: ardour_ui.cc:514
 #, c-format
 msgid "SR: %u kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:562
+#: ardour_ui.cc:527
 #, fuzzy, c-format
 msgid "DSP Load: %.1f%%"
 msgstr "Auslastung der CPU: %.1f%%"
 
-#: ardour_ui.cc:572
+#: ardour_ui.cc:537
 #, c-format
 msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
 msgstr ""
 
-#: ardour_ui.cc:599
+#: ardour_ui.cc:564
 msgid "space: 24hrs+"
 msgstr "Platz: >24 Stunden"
 
-#: ardour_ui.cc:629
+#: ardour_ui.cc:594
 #, c-format
 msgid "space: %02dh:%02dm:%02ds"
 msgstr "Platz: %02dh:%02dm:%02ds"
 
-#: ardour_ui.cc:668
+#: ardour_ui.cc:633
 msgid "programming error: impossible control method"
 msgstr ""
 
-#: ardour_ui.cc:776 new_session_dialog.cc:89
+#: ardour_ui.cc:741 new_session_dialog.cc:294
 #, fuzzy
 msgid "Recent Sessions"
 msgstr "Sitzung"
 
 #. ardour sessions are folders
-#: ardour_ui.cc:867
+#: ardour_ui.cc:834
 #, fuzzy
 msgid "open session"
 msgstr "Sitzung"
 
-#: ardour_ui.cc:873
+#: ardour_ui.cc:840
 #, fuzzy
 msgid "Ardour sessions"
 msgstr "Ardour: Neue Sitzung"
 
-#: ardour_ui.cc:906
+#: ardour_ui.cc:873
 msgid "Patience is a virtue.\n"
 msgstr "Geduld ist eine Tugend.\n"
 
-#: ardour_ui.cc:915
+#: ardour_ui.cc:882
 msgid "You cannot add a track without a session already loaded."
 msgstr "Sie können erst eine Spur hinzufügen, wenn eine Sitzung geladen wurde."
 
-#: ardour_ui.cc:922
+#: ardour_ui.cc:889
 msgid "could not create new audio track"
 msgstr "Konnte neue Spur nicht erstellen."
 
-#: ardour_ui.cc:926
+#: ardour_ui.cc:893
 msgid "could not create new audio bus"
 msgstr "Konnte neuen Audiokanal nicht erstellen."
 
-#: ardour_ui.cc:945
+#: ardour_ui.cc:912
 msgid ""
 "There are insufficient JACK ports available\n"
 "to create a new track or bus.\n"
@@ -441,14 +425,14 @@ msgid ""
 "restart JACK with more ports."
 msgstr ""
 
-#: ardour_ui.cc:1069
+#: ardour_ui.cc:1036
 msgid ""
 "Please create 1 or more track\n"
 "before trying to record.\n"
 "Check the Session menu."
 msgstr ""
 
-#: ardour_ui.cc:1298
+#: ardour_ui.cc:1265
 #, fuzzy
 msgid ""
 "JACK has either been shutdown or it\n"
@@ -461,59 +445,57 @@ msgstr ""
 "schnell genug war. Sie sollten die Sitzung\n"
 "speichern und JACK sowie Ardour neu starten."
 
-#: ardour_ui.cc:1315
+#: ardour_ui.cc:1282
 msgid "Unable to create all required ports"
 msgstr ""
 
-#: ardour_ui.cc:1323
+#: ardour_ui.cc:1290
 #, fuzzy
 msgid "Unable to start the session running"
 msgstr "An den Anfang der Sitzung springen"
 
-#: ardour_ui.cc:1459
+#: ardour_ui.cc:1426
 msgid "No Stream"
 msgstr "Kein Datenstrom"
 
-#: ardour_ui.cc:1486 ardour_ui.cc:1505
+#: ardour_ui.cc:1453 ardour_ui.cc:1472
 msgid "none"
 msgstr "keine"
 
-#: ardour_ui.cc:1495 ardour_ui.cc:1514 automation_time_axis.cc:183
-#: automation_time_axis.cc:212 automation_time_axis.cc:459 mixer_strip.cc:174
-#: mixer_strip.cc:186 mixer_strip.cc:881 plugin_ui.cc:391 plugin_ui.cc:634
+#: ardour_ui.cc:1462 ardour_ui.cc:1481
 msgid "off"
 msgstr "aus"
 
-#: ardour_ui.cc:1538
+#: ardour_ui.cc:1505
 #, fuzzy
 msgid "Name of New Snapshot"
 msgstr "Name für Schnappschuß"
 
-#: ardour_ui.cc:1684
+#: ardour_ui.cc:1651
 msgid "Name for mix template:"
 msgstr "Name für Mixer-Voreinstellung"
 
-#: ardour_ui.cc:1685
+#: ardour_ui.cc:1652
 #, fuzzy
 msgid "-template"
 msgstr "Voreinstellung"
 
-#: ardour_ui.cc:1836
+#: ardour_ui.cc:1809
 msgid ""
 "You do not have write access to this session.\n"
 "This prevents the session from being loaded."
 msgstr ""
 
-#: ardour_ui.cc:1849 ardour_ui.cc:1904
+#: ardour_ui.cc:1822 ardour_ui.cc:1877
 #, fuzzy
 msgid "Session \"%1 (snapshot %2)\" did not load successfully"
 msgstr "Sitzung \"%1\" konnte nicht geladen werden."
 
-#: ardour_ui.cc:1960
+#: ardour_ui.cc:1933
 msgid "No audio files were ready for cleanup"
 msgstr ""
 
-#: ardour_ui.cc:1964
+#: ardour_ui.cc:1937
 msgid ""
 "If this seems suprising, \n"
 "check for any existing snapshots.\n"
@@ -521,24 +503,24 @@ msgid ""
 "require some unused files to continue to exist."
 msgstr ""
 
-#: ardour_ui.cc:1973
+#: ardour_ui.cc:1946
 #, fuzzy
 msgid "ardour: cleanup"
 msgstr "Ardour: Uhr"
 
-#: ardour_ui.cc:2009 ardour_ui.cc:2015
+#: ardour_ui.cc:1982 ardour_ui.cc:1988
 msgid "files were"
 msgstr ""
 
-#: ardour_ui.cc:2011 ardour_ui.cc:2017
+#: ardour_ui.cc:1984 ardour_ui.cc:1990
 msgid "file was"
 msgstr ""
 
-#: ardour_ui.cc:2058
+#: ardour_ui.cc:2031
 msgid "Are you sure you want to cleanup?"
 msgstr ""
 
-#: ardour_ui.cc:2063
+#: ardour_ui.cc:2036
 msgid ""
 "Cleanup is a destructive operation.\n"
 "ALL undo/redo information will be lost if you cleanup.\n"
@@ -546,26 +528,26 @@ msgid ""
 "location."
 msgstr ""
 
-#: ardour_ui.cc:2069
+#: ardour_ui.cc:2042
 #, fuzzy
 msgid "Clean Up"
 msgstr "leeren"
 
-#: ardour_ui.cc:2072
+#: ardour_ui.cc:2045
 #, fuzzy
 msgid "CleanupDialog"
 msgstr "leeren"
 
-#: ardour_ui.cc:2073
+#: ardour_ui.cc:2046
 #, fuzzy
 msgid "ardour_cleanup"
 msgstr "Ardour: Uhr"
 
-#: ardour_ui.cc:2092
+#: ardour_ui.cc:2065
 msgid "cleaned files"
 msgstr ""
 
-#: ardour_ui.cc:2093
+#: ardour_ui.cc:2066
 msgid ""
 "The following %1 %2 not in use and \n"
 "have been moved to:\n"
@@ -576,23 +558,23 @@ msgid ""
 "%4 %5bytes of disk space.\n"
 msgstr ""
 
-#: ardour_ui.cc:2118
+#: ardour_ui.cc:2091
 #, fuzzy
 msgid "deleted file"
 msgstr "entfernen"
 
-#: ardour_ui.cc:2119
+#: ardour_ui.cc:2092
 msgid ""
 "The following %1 %2 deleted from\n"
 "%3,\n"
 "releasing %4 %5bytes of disk space"
 msgstr ""
 
-#: ardour_ui.cc:2242
+#: ardour_ui.cc:2215
 msgid "Recording was stopped because your system could not keep up."
 msgstr ""
 
-#: ardour_ui.cc:2265
+#: ardour_ui.cc:2238
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -601,7 +583,7 @@ msgid ""
 "quickly enough to keep up with recording.\n"
 msgstr ""
 
-#: ardour_ui.cc:2284
+#: ardour_ui.cc:2257
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -610,7 +592,7 @@ msgid ""
 "quickly enough to keep up with playback.\n"
 msgstr ""
 
-#: ardour_ui.cc:2310
+#: ardour_ui.cc:2283
 msgid ""
 "This session appears to have been in\n"
 "middle of recording when ardour or\n"
@@ -621,370 +603,370 @@ msgid ""
 "what you would like to do.\n"
 msgstr ""
 
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2293
 msgid "Recover from crash"
 msgstr ""
 
-#: ardour_ui.cc:2321
+#: ardour_ui.cc:2294
 msgid "Ignore crash data"
 msgstr ""
 
-#: ardour_ui.cc:2339
+#: ardour_ui.cc:2312
 msgid "Could not disconnect from JACK"
 msgstr ""
 
-#: ardour_ui.cc:2352
+#: ardour_ui.cc:2325
 msgid "Could not reconnect to JACK"
 msgstr ""
 
-#: ardour_ui2.cc:59
+#: ardour_ui2.cc:60
 msgid "UI: cannot setup editor"
 msgstr "Der Editor konnte nicht initialisiert werden."
 
-#: ardour_ui2.cc:64
+#: ardour_ui2.cc:65
 msgid "UI: cannot setup mixer"
 msgstr "Der Mixer konnte nicht initialisiert werden."
 
-#: ardour_ui2.cc:90
+#: ardour_ui2.cc:91
 msgid "MMC + Local"
 msgstr ""
 
-#: ardour_ui2.cc:91
+#: ardour_ui2.cc:92
 msgid "MMC"
 msgstr ""
 
-#: ardour_ui2.cc:92
+#: ardour_ui2.cc:93
 msgid "Local"
 msgstr ""
 
-#: ardour_ui2.cc:109
+#: ardour_ui2.cc:110
 msgid "MMC ID"
 msgstr ""
 
-#: ardour_ui2.cc:290
+#: ardour_ui2.cc:291
 msgid "Play from playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: ardour_ui2.cc:291
+#: ardour_ui2.cc:292
 msgid "Stop playback"
 msgstr "Wiedergabe anhalten"
 
-#: ardour_ui2.cc:292
+#: ardour_ui2.cc:293
 #, fuzzy
 msgid "Play range/selection"
 msgstr "Auswahl wiedergeben"
 
-#: ardour_ui2.cc:293
+#: ardour_ui2.cc:294
 msgid "Go to start of session"
 msgstr "An den Anfang der Sitzung springen"
 
-#: ardour_ui2.cc:294
+#: ardour_ui2.cc:295
 msgid "Go to end of session"
 msgstr "Ans Ende der Sitzung springen"
 
-#: ardour_ui2.cc:295
+#: ardour_ui2.cc:296
 #, fuzzy
 msgid "Play loop range"
 msgstr "Bereich"
 
-#: ardour_ui2.cc:296
+#: ardour_ui2.cc:297
 msgid "Return to last playback start when stopped"
 msgstr "Bei Stopp zum Wiedergabeanfang springen"
 
-#: ardour_ui2.cc:297
+#: ardour_ui2.cc:298
 msgid "Start playback after any locate"
 msgstr ""
 
-#: ardour_ui2.cc:298
+#: ardour_ui2.cc:299
 msgid "Be sensible about input monitoring"
 msgstr ""
 
-#: ardour_ui2.cc:299
+#: ardour_ui2.cc:300
 msgid "Start recording at auto-punch start"
 msgstr ""
 
-#: ardour_ui2.cc:300
+#: ardour_ui2.cc:301
 msgid "Stop recording at auto-punch end"
 msgstr ""
 
-#: ardour_ui2.cc:301
+#: ardour_ui2.cc:302
 msgid "Enable/Disable audio click"
 msgstr ""
 
-#: ardour_ui2.cc:302
+#: ardour_ui2.cc:303
 msgid "Positional sync source"
 msgstr ""
 
-#: ardour_ui2.cc:303
+#: ardour_ui2.cc:304
 msgid "Does Ardour control the time?"
 msgstr ""
 
-#: ardour_ui2.cc:304
+#: ardour_ui2.cc:305
 msgid "Shuttle speed control"
 msgstr ""
 
-#: ardour_ui2.cc:305
+#: ardour_ui2.cc:306
 #, c-format
 msgid "Select semitones or %%-age for speed display"
 msgstr ""
 
-#: ardour_ui2.cc:306
+#: ardour_ui2.cc:307
 msgid "Current transport speed"
 msgstr ""
 
-#: ardour_ui2.cc:329
+#: ardour_ui2.cc:330
 #, fuzzy
 msgid "Primary clock"
 msgstr "Ardour: Uhr"
 
-#: ardour_ui2.cc:330
+#: ardour_ui2.cc:331
 msgid "secondary clock"
 msgstr ""
 
 #. XXX: this should really be saved in instant.xml or something similar and restored from there
 #. Combo's are stupid - they steal space from the entry for the button
-#: ardour_ui2.cc:387 ardour_ui2.cc:823 ardour_ui2.cc:836 ardour_ui2.cc:899
-#: ardour_ui2.cc:901
+#: ardour_ui2.cc:388 ardour_ui2.cc:833 ardour_ui2.cc:846 ardour_ui2.cc:909
+#: ardour_ui2.cc:911
 msgid "sprung"
 msgstr ""
 
-#: ardour_ui2.cc:388 ardour_ui2.cc:825 ardour_ui2.cc:847
+#: ardour_ui2.cc:389 ardour_ui2.cc:835 ardour_ui2.cc:857
 msgid "wheel"
 msgstr ""
 
-#: ardour_ui2.cc:450
+#: ardour_ui2.cc:451
 msgid "ardour: clock"
 msgstr "Ardour: Uhr"
 
-#: ardour_ui2.cc:595
+#: ardour_ui2.cc:596
 msgid "Maximum speed"
 msgstr ""
 
-#: ardour_ui2.cc:813
+#: ardour_ui2.cc:823
 #, fuzzy
 msgid "st"
 msgstr "bestmöglich"
 
-#: ardour_ui2.cc:857 ardour_ui2.cc:880 ardour_ui2.cc:897
+#: ardour_ui2.cc:867 ardour_ui2.cc:890 ardour_ui2.cc:907
 msgid "stopped"
 msgstr ""
 
-#: ardour_ui_dialogs.cc:152 playlist_selector.cc:69
+#: ardour_ui_dialogs.cc:153 playlist_selector.cc:70
 #, fuzzy
 msgid "close"
 msgstr "Schließen"
 
-#: ardour_ui_dialogs.cc:359 ardour_ui_ed.cc:181
+#: ardour_ui_dialogs.cc:360 ardour_ui_ed.cc:184
 #, fuzzy
 msgid "Sound File Browser"
 msgstr "Ardour: Audio Bibliothek"
 
 #. menus + submenus that need action items
-#: ardour_ui_ed.cc:69
+#: ardour_ui_ed.cc:72
 msgid "Session"
 msgstr "Sitzung"
 
-#: ardour_ui_ed.cc:70 ardour_ui_ed.cc:127 editor.cc:1843 export_dialog.cc:350
+#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:130 editor.cc:1836 export_dialog.cc:350
 #: export_dialog.cc:1059 export_dialog.cc:1063
 msgid "Export"
 msgstr "Exportieren"
 
-#: ardour_ui_ed.cc:71
+#: ardour_ui_ed.cc:74
 #, fuzzy
 msgid "Cleanup"
 msgstr "leeren"
 
-#: ardour_ui_ed.cc:72 option_editor.cc:125
+#: ardour_ui_ed.cc:75 option_editor.cc:126
 msgid "Sync"
 msgstr ""
 
-#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:74
+#: ardour_ui_ed.cc:76 ardour_ui_ed.cc:77
 #, fuzzy
 msgid "Options"
 msgstr "Geschwindigkeitseditor"
 
-#: ardour_ui_ed.cc:75
+#: ardour_ui_ed.cc:78
 msgid "Help"
 msgstr ""
 
-#: ardour_ui_ed.cc:76
+#: ardour_ui_ed.cc:79
 msgid "KeyMouse Actions"
 msgstr ""
 
-#: ardour_ui_ed.cc:77
+#: ardour_ui_ed.cc:80
 #, fuzzy
 msgid "Audio File Format"
 msgstr "Ardour: Audio Bibliothek"
 
-#: ardour_ui_ed.cc:78
+#: ardour_ui_ed.cc:81
 #, fuzzy
 msgid "Header"
 msgstr "Verbergen"
 
-#: ardour_ui_ed.cc:79
+#: ardour_ui_ed.cc:82
 msgid "Data"
 msgstr ""
 
-#: ardour_ui_ed.cc:80
+#: ardour_ui_ed.cc:83
 msgid "Control Surfaces"
 msgstr ""
 
 #. the real actions
-#: ardour_ui_ed.cc:84 audio_time_axis.cc:1856 new_session_dialog.cc:342
+#: ardour_ui_ed.cc:87 audio_time_axis.cc:1854 new_session_dialog.cc:529
 #, fuzzy
 msgid "New"
 msgstr "Neu..."
 
-#: ardour_ui_ed.cc:86 new_session_dialog.cc:334
+#: ardour_ui_ed.cc:89 new_session_dialog.cc:517
 #, fuzzy
 msgid "Open"
 msgstr "Öffnen..."
 
-#: ardour_ui_ed.cc:87
+#: ardour_ui_ed.cc:90
 #, fuzzy
 msgid "Recent"
 msgstr "Zurücksetzen"
 
-#: ardour_ui_ed.cc:88 io_selector.cc:57 io_selector.cc:791
+#: ardour_ui_ed.cc:91 io_selector.cc:58 io_selector.cc:792
 msgid "Close"
 msgstr "Schließen"
 
-#: ardour_ui_ed.cc:91 route_params_ui.cc:512
+#: ardour_ui_ed.cc:94 route_params_ui.cc:514
 #, fuzzy
 msgid "Add Track/Bus"
 msgstr "MIDI Spur(en) hinzufügen"
 
-#: ardour_ui_ed.cc:102
+#: ardour_ui_ed.cc:105
 #, fuzzy
 msgid "Connect"
 msgstr "Verbindungen"
 
 #. </CMT Additions>
-#: ardour_ui_ed.cc:110
+#: ardour_ui_ed.cc:113
 msgid "Snapshot"
 msgstr "Schnappschuß"
 
-#: ardour_ui_ed.cc:113
+#: ardour_ui_ed.cc:116
 msgid "Save Template..."
 msgstr "Speichern als Voreinstellung..."
 
-#: ardour_ui_ed.cc:116
+#: ardour_ui_ed.cc:119
 msgid "Export session to audiofile..."
 msgstr "Export als Audio-Datei..."
 
-#: ardour_ui_ed.cc:119
+#: ardour_ui_ed.cc:122
 #, fuzzy
 msgid "Export selection to audiofile..."
 msgstr "Export als Audio-Datei..."
 
-#: ardour_ui_ed.cc:123
+#: ardour_ui_ed.cc:126
 #, fuzzy
 msgid "Export range markers to audiofile..."
 msgstr "Export als Audio-Datei..."
 
-#: ardour_ui_ed.cc:130
+#: ardour_ui_ed.cc:133
 msgid "Cleanup unused sources"
 msgstr ""
 
-#: ardour_ui_ed.cc:132
+#: ardour_ui_ed.cc:135
 msgid "Flush wastebasket"
 msgstr ""
 
-#: ardour_ui_ed.cc:138 ardour_ui_options.cc:381 ardour_ui_options.cc:390
-#: ardour_ui_options.cc:462
+#: ardour_ui_ed.cc:141 ardour_ui_options.cc:408 ardour_ui_options.cc:417
+#: ardour_ui_options.cc:489
 msgid "JACK"
 msgstr ""
 
-#: ardour_ui_ed.cc:139
+#: ardour_ui_ed.cc:142
 msgid "Latency"
 msgstr ""
 
-#: ardour_ui_ed.cc:141
+#: ardour_ui_ed.cc:144
 #, fuzzy
 msgid "Reconnect"
 msgstr "Verbindungen"
 
-#: ardour_ui_ed.cc:144 mixer_strip.cc:514 mixer_strip.cc:574
+#: ardour_ui_ed.cc:147 mixer_strip.cc:497 mixer_strip.cc:565
 msgid "Disconnect"
 msgstr "Trennen"
 
-#: ardour_ui_ed.cc:171
+#: ardour_ui_ed.cc:174
 msgid "Windows"
 msgstr "Fenster"
 
-#: ardour_ui_ed.cc:172
+#: ardour_ui_ed.cc:175
 msgid "start prefix"
 msgstr ""
 
-#: ardour_ui_ed.cc:173
+#: ardour_ui_ed.cc:176
 msgid "Quit"
 msgstr "Beenden"
 
 #. windows visibility actions
-#: ardour_ui_ed.cc:177
+#: ardour_ui_ed.cc:180
 msgid "Maximise Editor Space"
 msgstr ""
 
-#: ardour_ui_ed.cc:179
+#: ardour_ui_ed.cc:182
 #, fuzzy
 msgid "Show Editor"
 msgstr "Geschwindigkeitseditor"
 
-#: ardour_ui_ed.cc:180
+#: ardour_ui_ed.cc:183
 #, fuzzy
 msgid "Show Mixer"
 msgstr "Mixer"
 
-#: ardour_ui_ed.cc:182
+#: ardour_ui_ed.cc:185
 #, fuzzy
 msgid "Options Editor"
 msgstr "Geschwindigkeitseditor"
 
-#: ardour_ui_ed.cc:183
+#: ardour_ui_ed.cc:186
 msgid "Track/Bus Inspector"
 msgstr ""
 
-#: ardour_ui_ed.cc:185
+#: ardour_ui_ed.cc:188
 msgid "Connections"
 msgstr "Verbindungen"
 
-#: ardour_ui_ed.cc:187
+#: ardour_ui_ed.cc:190
 msgid "Locations"
 msgstr "Stellen"
 
-#: ardour_ui_ed.cc:189
+#: ardour_ui_ed.cc:192
 msgid "Big Clock"
 msgstr "Große Uhr"
 
-#: ardour_ui_ed.cc:191
+#: ardour_ui_ed.cc:194
 msgid "About"
 msgstr ""
 
-#: ardour_ui_ed.cc:192
+#: ardour_ui_ed.cc:195
 #, fuzzy
 msgid "Colors"
 msgstr "solo"
 
-#: ardour_ui_ed.cc:194
+#: ardour_ui_ed.cc:197
 #, fuzzy
 msgid "Add Audio Track"
 msgstr "MIDI Spur(en) hinzufügen"
 
-#: ardour_ui_ed.cc:196
+#: ardour_ui_ed.cc:199
 msgid "Add Audio Bus"
 msgstr ""
 
-#: ardour_ui_ed.cc:198
+#: ardour_ui_ed.cc:201
 msgid "Save"
 msgstr "Speichern"
 
-#: ardour_ui_ed.cc:200 editor_actions.cc:254
+#: ardour_ui_ed.cc:203 editor_actions.cc:255
 #, fuzzy
 msgid "Remove Last Capture"
 msgstr "Synchronisationspunkt entfernen"
 
 #. do-nothing action for the "transport" menu bar item
-#: ardour_ui_ed.cc:207
+#: ardour_ui_ed.cc:210
 #, fuzzy
 msgid "Transport"
 msgstr "dreieckig"
@@ -992,74 +974,74 @@ msgstr "dreieckig"
 #. these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
 #. menus and via button proxies.
 #.
-#: ardour_ui_ed.cc:213 sfdb_ui.cc:57
+#: ardour_ui_ed.cc:216 sfdb_ui.cc:57
 #, fuzzy
 msgid "Stop"
 msgstr "Stop"
 
-#: ardour_ui_ed.cc:216
+#: ardour_ui_ed.cc:219
 msgid "Roll"
 msgstr ""
 
-#: ardour_ui_ed.cc:220
+#: ardour_ui_ed.cc:223
 #, fuzzy
 msgid "Start/Stop"
 msgstr "Anfang:"
 
-#: ardour_ui_ed.cc:223
+#: ardour_ui_ed.cc:226
 msgid "Stop + Forget Capture"
 msgstr ""
 
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:229
 #, fuzzy
 msgid "Play Loop Range"
 msgstr "Bereich"
 
-#: ardour_ui_ed.cc:229
+#: ardour_ui_ed.cc:232
 #, fuzzy
 msgid "Play Selection"
 msgstr "Wiedergabe der ausgewählten Region"
 
-#: ardour_ui_ed.cc:233
+#: ardour_ui_ed.cc:236
 #, fuzzy
 msgid "Enable Record"
 msgstr "Wiederherstellen"
 
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:239
 #, fuzzy
 msgid "Rewind"
 msgstr "Suchen"
 
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:242
 msgid "Rewind (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:242
+#: ardour_ui_ed.cc:245
 msgid "Rewind (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:245
+#: ardour_ui_ed.cc:248
 msgid "Forward"
 msgstr ""
 
-#: ardour_ui_ed.cc:248
+#: ardour_ui_ed.cc:251
 msgid "Forward (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:251
+#: ardour_ui_ed.cc:254
 msgid "Forward (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:254
+#: ardour_ui_ed.cc:257
 msgid "Goto Zero"
 msgstr ""
 
-#: ardour_ui_ed.cc:257
+#: ardour_ui_ed.cc:260
 #, fuzzy
 msgid "Goto Start"
 msgstr "Anfang:"
 
-#: ardour_ui_ed.cc:260
+#: ardour_ui_ed.cc:263
 msgid "Goto End"
 msgstr ""
 
@@ -1067,310 +1049,310 @@ msgstr ""
 #. that proxies for these action to be more compact. It would be nice to find a way to override the action
 #. name appearance on the buttons.
 #.
-#: ardour_ui_ed.cc:269
+#: ardour_ui_ed.cc:272
 msgid ""
 "Punch\n"
 "in"
 msgstr ""
 
-#: ardour_ui_ed.cc:272
+#: ardour_ui_ed.cc:275
 msgid ""
 "Punch\n"
 "out"
 msgstr ""
 
-#: ardour_ui_ed.cc:275 option_editor.cc:128
+#: ardour_ui_ed.cc:278 option_editor.cc:129
 msgid "Click"
 msgstr ""
 
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:281
 #, fuzzy
 msgid ""
 "Auto\n"
 "input"
 msgstr "Port hinzufügen"
 
-#: ardour_ui_ed.cc:281
+#: ardour_ui_ed.cc:284
 msgid ""
 "Auto\n"
 "play"
 msgstr ""
 
-#: ardour_ui_ed.cc:284
+#: ardour_ui_ed.cc:287
 msgid ""
 "Auto\n"
 "return"
 msgstr ""
 
-#: ardour_ui_ed.cc:288
+#: ardour_ui_ed.cc:291
 msgid ""
 "Time\n"
 "master"
 msgstr ""
 
-#: ardour_ui_ed.cc:291
+#: ardour_ui_ed.cc:294
 msgid "Toggle Record Enable Track1"
 msgstr ""
 
-#: ardour_ui_ed.cc:293
+#: ardour_ui_ed.cc:296
 msgid "Toggle Record Enable Track2"
 msgstr ""
 
-#: ardour_ui_ed.cc:295
+#: ardour_ui_ed.cc:298
 msgid "Toggle Record Enable Track3"
 msgstr ""
 
-#: ardour_ui_ed.cc:297
+#: ardour_ui_ed.cc:300
 msgid "Toggle Record Enable Track4"
 msgstr ""
 
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:302
 msgid "Toggle Record Enable Track5"
 msgstr ""
 
-#: ardour_ui_ed.cc:301
+#: ardour_ui_ed.cc:304
 msgid "Toggle Record Enable Track6"
 msgstr ""
 
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:306
 msgid "Toggle Record Enable Track7"
 msgstr ""
 
-#: ardour_ui_ed.cc:305
+#: ardour_ui_ed.cc:308
 msgid "Toggle Record Enable Track8"
 msgstr ""
 
-#: ardour_ui_ed.cc:307
+#: ardour_ui_ed.cc:310
 msgid "Toggle Record Enable Track9"
 msgstr ""
 
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:312
 msgid "Toggle Record Enable Track10"
 msgstr ""
 
-#: ardour_ui_ed.cc:311
+#: ardour_ui_ed.cc:314
 msgid "Toggle Record Enable Track11"
 msgstr ""
 
-#: ardour_ui_ed.cc:313
+#: ardour_ui_ed.cc:316
 msgid "Toggle Record Enable Track12"
 msgstr ""
 
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:318
 msgid "Toggle Record Enable Track13"
 msgstr ""
 
-#: ardour_ui_ed.cc:317
+#: ardour_ui_ed.cc:320
 msgid "Toggle Record Enable Track14"
 msgstr ""
 
-#: ardour_ui_ed.cc:319
+#: ardour_ui_ed.cc:322
 msgid "Toggle Record Enable Track15"
 msgstr ""
 
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:324
 msgid "Toggle Record Enable Track16"
 msgstr ""
 
-#: ardour_ui_ed.cc:323
+#: ardour_ui_ed.cc:326
 msgid "Toggle Record Enable Track17"
 msgstr ""
 
-#: ardour_ui_ed.cc:325
+#: ardour_ui_ed.cc:328
 msgid "Toggle Record Enable Track18"
 msgstr ""
 
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:330
 msgid "Toggle Record Enable Track19"
 msgstr ""
 
-#: ardour_ui_ed.cc:329
+#: ardour_ui_ed.cc:332
 msgid "Toggle Record Enable Track20"
 msgstr ""
 
-#: ardour_ui_ed.cc:331
+#: ardour_ui_ed.cc:334
 msgid "Toggle Record Enable Track21"
 msgstr ""
 
-#: ardour_ui_ed.cc:333
+#: ardour_ui_ed.cc:336
 msgid "Toggle Record Enable Track22"
 msgstr ""
 
-#: ardour_ui_ed.cc:335
+#: ardour_ui_ed.cc:338
 msgid "Toggle Record Enable Track23"
 msgstr ""
 
-#: ardour_ui_ed.cc:337
+#: ardour_ui_ed.cc:340
 msgid "Toggle Record Enable Track24"
 msgstr ""
 
-#: ardour_ui_ed.cc:339
+#: ardour_ui_ed.cc:342
 msgid "Toggle Record Enable Track25"
 msgstr ""
 
-#: ardour_ui_ed.cc:341
+#: ardour_ui_ed.cc:344
 msgid "Toggle Record Enable Track26"
 msgstr ""
 
-#: ardour_ui_ed.cc:343
+#: ardour_ui_ed.cc:346
 msgid "Toggle Record Enable Track27"
 msgstr ""
 
-#: ardour_ui_ed.cc:345
+#: ardour_ui_ed.cc:348
 msgid "Toggle Record Enable Track28"
 msgstr ""
 
-#: ardour_ui_ed.cc:347
+#: ardour_ui_ed.cc:350
 msgid "Toggle Record Enable Track29"
 msgstr ""
 
-#: ardour_ui_ed.cc:349
+#: ardour_ui_ed.cc:352
 msgid "Toggle Record Enable Track30"
 msgstr ""
 
-#: ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:354
 msgid "Toggle Record Enable Track31"
 msgstr ""
 
-#: ardour_ui_ed.cc:353
+#: ardour_ui_ed.cc:356
 msgid "Toggle Record Enable Track32"
 msgstr ""
 
-#: ardour_ui_ed.cc:358
+#: ardour_ui_ed.cc:361
 #, fuzzy
 msgid "Percentage"
 msgstr "Zurücksetzen"
 
-#: ardour_ui_ed.cc:359
+#: ardour_ui_ed.cc:362
 #, fuzzy
 msgid "Semitones"
 msgstr "Sitzung"
 
-#: ardour_ui_ed.cc:363
+#: ardour_ui_ed.cc:366
 msgid "Send MTC"
 msgstr "MTC senden"
 
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:368
 msgid "Send MMC"
 msgstr "MMC senden"
 
-#: ardour_ui_ed.cc:367
+#: ardour_ui_ed.cc:370
 #, fuzzy
 msgid "Use MMC"
 msgstr "MMC senden"
 
-#: ardour_ui_ed.cc:369
+#: ardour_ui_ed.cc:372
 msgid "Send MIDI feedback"
 msgstr ""
 
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:374
 msgid "Use MIDI control"
 msgstr ""
 
-#: ardour_ui_ed.cc:374
-msgid "Connect newtrack inputs to hardware"
+#: ardour_ui_ed.cc:377
+msgid "Connect new track inputs to hardware"
 msgstr ""
 
-#: ardour_ui_ed.cc:392
+#: ardour_ui_ed.cc:396
 msgid "Connect new track outputs to hardware"
 msgstr ""
 
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:398
 msgid "Connect new track outputs to master"
 msgstr ""
 
-#: ardour_ui_ed.cc:396
+#: ardour_ui_ed.cc:400
 msgid "Manually connect new track outputs"
 msgstr ""
 
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:405
 msgid "Hardware monitoring"
 msgstr ""
 
-#: ardour_ui_ed.cc:402
+#: ardour_ui_ed.cc:406
 msgid "Software monitoring"
 msgstr ""
 
-#: ardour_ui_ed.cc:403
+#: ardour_ui_ed.cc:407
 msgid "External monitoring"
 msgstr ""
 
 #. Configuration object options (i.e. not session specific)
-#: ardour_ui_ed.cc:407
+#: ardour_ui_ed.cc:411
 msgid "Stop plugins with transport"
 msgstr ""
 
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:412
 #, fuzzy
 msgid "Verify remove last capture"
 msgstr "Synchronisationspunkt entfernen"
 
-#: ardour_ui_ed.cc:409
+#: ardour_ui_ed.cc:413
 msgid "Stop recording on xrun"
 msgstr ""
 
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:414
 #, fuzzy
 msgid "Stop transport at session end"
 msgstr "Ans Ende der Sitzung springen"
 
-#: ardour_ui_ed.cc:411
+#: ardour_ui_ed.cc:415
 msgid "-12dB gain reduce ffwd/rewind"
 msgstr ""
 
-#: ardour_ui_ed.cc:412
+#: ardour_ui_ed.cc:416
 msgid "Rec-enable stays engaged at stop"
 msgstr ""
 
 #. session options
-#: ardour_ui_ed.cc:416
+#: ardour_ui_ed.cc:420
 #, fuzzy
 msgid "Do not run plugins while recording"
 msgstr "Wellenform zeigen"
 
-#: ardour_ui_ed.cc:419
+#: ardour_ui_ed.cc:423
 msgid "Latched solo"
 msgstr ""
 
-#: ardour_ui_ed.cc:424
+#: ardour_ui_ed.cc:428
 #, fuzzy
 msgid "Solo in-place"
 msgstr "solo"
 
-#: ardour_ui_ed.cc:426
+#: ardour_ui_ed.cc:430
 msgid "Solo via bus"
 msgstr ""
 
-#: ardour_ui_ed.cc:429
+#: ardour_ui_ed.cc:433
 msgid "Automatically create crossfades"
 msgstr ""
 
-#: ardour_ui_ed.cc:431
+#: ardour_ui_ed.cc:435
 msgid "Unmute new full crossfades"
 msgstr ""
 
-#: ardour_ui_options.cc:379 ardour_ui_options.cc:389 ardour_ui_options.cc:456
+#: ardour_ui_options.cc:406 ardour_ui_options.cc:416 ardour_ui_options.cc:483
 #, fuzzy
 msgid "Internal"
 msgstr "mittelmäßig"
 
-#: ardour_ui_options.cc:380 ardour_ui_options.cc:459
+#: ardour_ui_options.cc:407 ardour_ui_options.cc:486
 msgid "MTC"
 msgstr ""
 
-#: audio_clock.cc:1719 editor.cc:185
+#: audio_clock.cc:1742 editor.cc:188
 msgid "SMPTE"
 msgstr ""
 
-#: audio_clock.cc:1720 editor.cc:184 editor_rulers.cc:359
+#: audio_clock.cc:1743 editor.cc:187 editor_rulers.cc:360
 msgid "Bars:Beats"
 msgstr ""
 
-#: audio_clock.cc:1721
+#: audio_clock.cc:1744
 msgid "Minutes:Seconds"
 msgstr "Minuten:Sekunden"
 
-#: audio_clock.cc:1722
+#: audio_clock.cc:1745
 msgid "Audio Frames"
 msgstr ""
 
@@ -1378,306 +1360,322 @@ msgstr ""
 #. Slowest = 6.6dB/sec falloff at update rate of 40ms
 #. Slow    = 6.8dB/sec falloff at update rate of 40ms
 #.
-#: audio_clock.cc:1723 editor_actions.cc:374 editor_actions.cc:382
+#: audio_clock.cc:1746 editor_actions.cc:375 editor_actions.cc:383
+#: gain_meter.cc:172 panner_ui.cc:89 plugin_ui.cc:392 plugin_ui.cc:635
 msgid "Off"
 msgstr "Aus"
 
-#: audio_clock.cc:1725
+#: audio_clock.cc:1748
 msgid "Mode"
 msgstr "Modus"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:458
+#: audio_time_axis.cc:91
 msgid "m"
 msgstr ""
 
-#: audio_time_axis.cc:90 mixer_strip.cc:459
+#: audio_time_axis.cc:91
 msgid "s"
 msgstr ""
 
-#: audio_time_axis.cc:90
+#: audio_time_axis.cc:91
 msgid "r"
 msgstr ""
 
-#: audio_time_axis.cc:94
+#: audio_time_axis.cc:95
 msgid "g"
 msgstr ""
 
 #. group
-#: audio_time_axis.cc:95
+#: audio_time_axis.cc:96
 msgid "p"
 msgstr ""
 
-#: audio_time_axis.cc:96 automation_time_axis.cc:31 visual_time_axis.cc:73
+#: audio_time_axis.cc:97 automation_time_axis.cc:32 visual_time_axis.cc:74
 msgid "h"
 msgstr ""
 
 #. height
-#: audio_time_axis.cc:97
+#: audio_time_axis.cc:98
 msgid "a"
 msgstr ""
 
-#: audio_time_axis.cc:98 visual_time_axis.cc:72
+#: audio_time_axis.cc:99 visual_time_axis.cc:73
 msgid "v"
 msgstr ""
 
-#: audio_time_axis.cc:173
+#: audio_time_axis.cc:168 mixer_strip.cc:86
 #, fuzzy
 msgid "Record"
 msgstr "Wiederherstellen"
 
-#: audio_time_axis.cc:174 editor_actions.cc:36
+#: audio_time_axis.cc:169 editor_actions.cc:37 mixer_strip.cc:86
 #, fuzzy
 msgid "Solo"
 msgstr "solo"
 
-#: audio_time_axis.cc:175 editor.cc:1767 editor.cc:1866 panner_ui.cc:385
+#: audio_time_axis.cc:170 editor.cc:1760 editor.cc:1859 mixer_strip.cc:86
+#: panner_ui.cc:427
 #, fuzzy
 msgid "Mute"
 msgstr "mute"
 
-#: audio_time_axis.cc:176
+#: audio_time_axis.cc:171
 #, fuzzy
 msgid "Edit Group"
 msgstr "Mix Gruppen"
 
-#: audio_time_axis.cc:177 visual_time_axis.cc:91
+#: audio_time_axis.cc:172 visual_time_axis.cc:92
 #, fuzzy
 msgid "Display Height"
 msgstr "Anzeige"
 
-#: audio_time_axis.cc:178
+#: audio_time_axis.cc:173
 #, fuzzy
 msgid "Playlist"
 msgstr "Wiedergabe"
 
-#: audio_time_axis.cc:179 audio_time_axis.cc:743
+#: audio_time_axis.cc:174 audio_time_axis.cc:741
 #, fuzzy
 msgid "Automation"
 msgstr "Stellen"
 
-#: audio_time_axis.cc:180 visual_time_axis.cc:92
+#: audio_time_axis.cc:175 visual_time_axis.cc:93
 msgid "Visual options"
 msgstr ""
 
-#: audio_time_axis.cc:181 visual_time_axis.cc:93
+#: audio_time_axis.cc:176 visual_time_axis.cc:94
 msgid "Hide this track"
 msgstr ""
 
-#: audio_time_axis.cc:337
+#: audio_time_axis.cc:333 mixer_strip.cc:927
 #, fuzzy
 msgid "No group"
 msgstr "keine Gruppe"
 
-#: audio_time_axis.cc:704 automation_time_axis.cc:448
-#: imageframe_time_axis.cc:256 marker_time_axis.cc:210
+#: audio_time_axis.cc:702 automation_time_axis.cc:450
+#: imageframe_time_axis.cc:255 marker_time_axis.cc:211
 #, fuzzy
 msgid "Height"
 msgstr "Rechts"
 
-#: audio_time_axis.cc:705 color_manager.cc:40 imageframe_time_axis.cc:257
-#: marker_time_axis.cc:211
+#: audio_time_axis.cc:703 color_manager.cc:41 imageframe_time_axis.cc:256
+#: marker_time_axis.cc:212
 #, fuzzy
 msgid "Color"
 msgstr "solo"
 
-#: audio_time_axis.cc:709
+#: audio_time_axis.cc:707
 msgid "Hide all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:710
+#: audio_time_axis.cc:708
 msgid "Show all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:714 mixer_strip.cc:1236
+#: audio_time_axis.cc:712 mixer_strip.cc:1011
 #, fuzzy
 msgid "Remote Control ID"
 msgstr "Synchronisationspunkt entfernen"
 
-#: audio_time_axis.cc:720
+#: audio_time_axis.cc:718
 #, fuzzy
-msgid "show all automation"
+msgid "Show all automation"
 msgstr "Stellen"
 
-#: audio_time_axis.cc:723
+#: audio_time_axis.cc:721
 #, fuzzy
-msgid "show existing automation"
+msgid "Show existing automation"
 msgstr "Stellen"
 
-#: audio_time_axis.cc:726
+#: audio_time_axis.cc:724
 #, fuzzy
-msgid "hide all automation"
+msgid "Hide all automation"
 msgstr "Stellen"
 
-#: audio_time_axis.cc:731 audio_time_axis.cc:1169 editor.cc:215
-msgid "gain"
-msgstr ""
+#: audio_time_axis.cc:729
+#, fuzzy
+msgid "Fader"
+msgstr "Verbergen"
 
-#: audio_time_axis.cc:736 audio_time_axis.cc:1209
-msgid "pan"
+#: audio_time_axis.cc:734
+msgid "Pan"
 msgstr ""
 
-#: audio_time_axis.cc:741
+#: audio_time_axis.cc:739
 msgid "Plugins"
 msgstr ""
 
-#: audio_time_axis.cc:749
+#: audio_time_axis.cc:747
 #, fuzzy
 msgid "Show waveforms"
 msgstr "Wellenform zeigen"
 
-#: audio_time_axis.cc:757
+#: audio_time_axis.cc:755
 msgid "Traditional"
 msgstr ""
 
-#: audio_time_axis.cc:760
+#: audio_time_axis.cc:758
 msgid "Rectified"
 msgstr ""
 
-#: audio_time_axis.cc:763
+#: audio_time_axis.cc:761
 #, fuzzy
 msgid "Waveform"
 msgstr "Wellenform zeigen"
 
-#: audio_time_axis.cc:773
-msgid "align with existing material"
+#: audio_time_axis.cc:771
+msgid "Align with existing material"
 msgstr ""
 
-#: audio_time_axis.cc:778
-msgid "align with capture time"
+#: audio_time_axis.cc:776
+msgid "Align with capture time"
 msgstr ""
 
-#: audio_time_axis.cc:784
+#: audio_time_axis.cc:782
 msgid "Alignment"
 msgstr ""
 
-#: audio_time_axis.cc:790 editor.cc:523 editor_actions.cc:59
-#: mixer_strip.cc:1225
+#: audio_time_axis.cc:788 editor.cc:527 editor_actions.cc:60
+#: mixer_strip.cc:1000 mixer_ui.cc:111
 msgid "Active"
 msgstr "Aktiv"
 
-#: audio_time_axis.cc:795 editor.cc:1929 editor_actions.cc:319
-#: editor_markers.cc:507 imageframe_time_axis.cc:260 location_ui.cc:56
-#: marker_time_axis.cc:214 mixer_strip.cc:1239
+#: audio_time_axis.cc:793 editor.cc:1922 editor_actions.cc:320
+#: editor_markers.cc:508 imageframe_time_axis.cc:259 location_ui.cc:57
+#: marker_time_axis.cc:215 mixer_strip.cc:1014
 msgid "Remove"
 msgstr "Entfernen"
 
-#: audio_time_axis.cc:835
+#: audio_time_axis.cc:833
 #, fuzzy
 msgid "Name for playlist"
 msgstr "Name für Schnappschuß"
 
-#: audio_time_axis.cc:837 audio_time_axis.cc:1853 editor_markers.cc:826
-#: editor_mouse.cc:4609 imageframe_time_axis.cc:249 marker_time_axis.cc:207
-#: meter_bridge_strip.cc:223 mixer_strip.cc:1223 redirect_box.cc:749
-#: redirect_box.cc:1063 route_ui.cc:732 visual_time_axis.cc:325
+#: audio_time_axis.cc:835 audio_time_axis.cc:1851 editor_markers.cc:827
+#: editor_mouse.cc:4673 imageframe_time_axis.cc:248 marker_time_axis.cc:208
+#: meter_bridge_strip.cc:224 mixer_strip.cc:998 redirect_box.cc:751
+#: redirect_box.cc:1065 route_ui.cc:739 visual_time_axis.cc:326
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: audio_time_axis.cc:870 audio_time_axis.cc:910
+#: audio_time_axis.cc:868 audio_time_axis.cc:908
 #, fuzzy
 msgid "Name for Playlist"
 msgstr "Name für Schnappschuß"
 
-#: audio_time_axis.cc:1128 visual_time_axis.cc:382
+#: audio_time_axis.cc:1126 visual_time_axis.cc:383
 msgid "a track already exists with that name"
 msgstr ""
 
-#: audio_time_axis.cc:1412 editor.cc:1490 selection.cc:622
+#: audio_time_axis.cc:1167 editor.cc:218
+msgid "gain"
+msgstr ""
+
+#: audio_time_axis.cc:1207
+msgid "pan"
+msgstr ""
+
+#: audio_time_axis.cc:1410 editor.cc:1483 selection.cc:634
 msgid "programming error: "
 msgstr ""
 
-#: audio_time_axis.cc:1850
+#: audio_time_axis.cc:1848
 msgid "Current: %1"
 msgstr ""
 
-#: audio_time_axis.cc:1857
+#: audio_time_axis.cc:1855
 #, fuzzy
 msgid "New Copy"
 msgstr "Kopieren"
 
-#: audio_time_axis.cc:1859
+#: audio_time_axis.cc:1857
 msgid "Clear Current"
 msgstr ""
 
-#: audio_time_axis.cc:1861 editor.cc:2031 editor.cc:2107
+#: audio_time_axis.cc:1859 editor.cc:2024 editor.cc:2100
 msgid "Select"
 msgstr "Auswahl"
 
-#: automation_line.cc:883
+#: automation_line.cc:884
 #, fuzzy
 msgid "automation event move"
 msgstr "Stellen"
 
-#: automation_line.cc:885
+#: automation_line.cc:886
 #, fuzzy
 msgid "automation range drag"
 msgstr "Stellen"
 
-#: automation_line.cc:1014 region_gain_line.cc:61
+#: automation_line.cc:1015 region_gain_line.cc:62
 #, fuzzy
 msgid "remove control point"
 msgstr "Synchronisationspunkt entfernen"
 
-#: automation_time_axis.cc:32 editor_ops.cc:2813
+#: automation_time_axis.cc:33 editor_ops.cc:2885
 msgid "clear"
 msgstr "leeren"
 
-#: automation_time_axis.cc:74
+#: automation_time_axis.cc:75
 msgid "track height"
 msgstr ""
 
-#: automation_time_axis.cc:75
+#: automation_time_axis.cc:76
 #, fuzzy
 msgid "automation state"
 msgstr "Stellen"
 
-#: automation_time_axis.cc:76
+#: automation_time_axis.cc:77
 #, fuzzy
 msgid "clear track"
 msgstr "Verbindungen löschen"
 
-#: automation_time_axis.cc:77
+#: automation_time_axis.cc:78
 #, fuzzy
 msgid "hide track"
 msgstr "Stille einfügen"
 
-#: automation_time_axis.cc:185 automation_time_axis.cc:223
-#: automation_time_axis.cc:463 mixer_strip.cc:176 mixer_strip.cc:188
-#: plugin_ui.cc:394 plugin_ui.cc:636 region_editor.cc:53
-msgid "play"
+#: automation_time_axis.cc:184 automation_time_axis.cc:213
+#: automation_time_axis.cc:461
+msgid "Manual"
 msgstr ""
 
-#: automation_time_axis.cc:187 automation_time_axis.cc:234
-#: automation_time_axis.cc:467 mixer_strip.cc:178 mixer_strip.cc:190
-#: plugin_ui.cc:397 plugin_ui.cc:638
-msgid "write"
+#: automation_time_axis.cc:186 automation_time_axis.cc:224
+#: automation_time_axis.cc:465 editor.cc:2001 editor.cc:2082 gain_meter.cc:174
+#: panner_ui.cc:91 plugin_ui.cc:395 plugin_ui.cc:637 sfdb_ui.cc:56
+msgid "Play"
+msgstr "Wiedergabe"
+
+#: automation_time_axis.cc:188 automation_time_axis.cc:235
+#: automation_time_axis.cc:469 gain_meter.cc:176 panner_ui.cc:93
+#: plugin_ui.cc:398 plugin_ui.cc:639
+msgid "Write"
 msgstr ""
 
-#: automation_time_axis.cc:189 automation_time_axis.cc:245
-#: automation_time_axis.cc:471 mixer_strip.cc:180 mixer_strip.cc:192
-#: mixer_strip.cc:887 plugin_ui.cc:400 plugin_ui.cc:640
-msgid "touch"
+#: automation_time_axis.cc:190 automation_time_axis.cc:246
+#: automation_time_axis.cc:473 gain_meter.cc:178 panner_ui.cc:95
+#: plugin_ui.cc:401 plugin_ui.cc:641
+msgid "Touch"
 msgstr ""
 
-#: automation_time_axis.cc:256 option_editor.cc:182 option_editor.cc:188
-#: plugin_ui.cc:403
+#: automation_time_axis.cc:257 option_editor.cc:183 option_editor.cc:189
+#: plugin_ui.cc:404
 msgid "???"
 msgstr ""
 
-#: automation_time_axis.cc:270
+#: automation_time_axis.cc:271
 #, fuzzy
 msgid "clear automation"
 msgstr "Verbindungen löschen"
 
-#: automation_time_axis.cc:450 editor_actions.cc:317
+#: automation_time_axis.cc:452 editor_actions.cc:318
 msgid "Hide"
 msgstr "Verbergen"
 
-#: automation_time_axis.cc:452 crossfade_edit.cc:76 redirect_box.cc:1055
+#: automation_time_axis.cc:454 crossfade_edit.cc:78 redirect_box.cc:1057
 msgid "Clear"
 msgstr "leeren"
 
-#: automation_time_axis.cc:475
+#: automation_time_axis.cc:477
 #, fuzzy
 msgid "State"
 msgstr "Anfang"
@@ -1822,1596 +1820,1583 @@ msgstr ""
 msgid "color of fill"
 msgstr ""
 
-#: color_manager.cc:39
+#: color_manager.cc:40
 #, fuzzy
 msgid "Object"
 msgstr "Objekt"
 
-#: color_manager.cc:77
+#: color_manager.cc:78
 msgid "cannot open color definition file %1: %2"
 msgstr ""
 
-#: crossfade_edit.cc:73
+#: crossfade_edit.cc:75
 #, fuzzy
 msgid "ardour: x-fade edit"
 msgstr "Ardour: Editor"
 
-#: crossfade_edit.cc:77 panner_ui.cc:401
+#: crossfade_edit.cc:79 panner_ui.cc:443
 #, fuzzy
 msgid "Reset"
 msgstr "bestmöglich"
 
-#: crossfade_edit.cc:78
+#: crossfade_edit.cc:80
 msgid "Fade"
 msgstr ""
 
-#: crossfade_edit.cc:79
+#: crossfade_edit.cc:81
 msgid "Out (dry)"
 msgstr ""
 
-#: crossfade_edit.cc:80
+#: crossfade_edit.cc:82
 #, fuzzy
 msgid "Out"
 msgstr "Ausgänge"
 
-#: crossfade_edit.cc:81
+#: crossfade_edit.cc:83
 msgid "In (dry)"
 msgstr ""
 
-#: crossfade_edit.cc:82
+#: crossfade_edit.cc:84
 msgid "In"
 msgstr ""
 
-#: crossfade_edit.cc:84
+#: crossfade_edit.cc:86
 msgid "With Pre-roll"
 msgstr ""
 
-#: crossfade_edit.cc:85
+#: crossfade_edit.cc:87
 msgid "With Post-roll"
 msgstr ""
 
-#: crossfade_edit.cc:93
+#: crossfade_edit.cc:95
 msgid "Fade In"
 msgstr ""
 
-#: crossfade_edit.cc:94
+#: crossfade_edit.cc:96
 msgid "Fade Out"
 msgstr ""
 
-#: crossfade_edit.cc:170 editor.cc:1842 editor_actions.cc:315
-#: option_editor.cc:129
+#: crossfade_edit.cc:172 editor.cc:1835 editor_actions.cc:316
+#: option_editor.cc:130
 msgid "Audition"
 msgstr ""
 
-#: editor.cc:101 editor.cc:3588
+#: editor.cc:104 editor.cc:3616
 msgid "Slide"
 msgstr ""
 
-#: editor.cc:102 editor.cc:3586
+#: editor.cc:105 editor.cc:3614
 msgid "Splice"
 msgstr ""
 
-#: editor.cc:107 editor.cc:3643 export_dialog.cc:78 export_dialog.cc:92
-#: export_dialog.cc:893 export_dialog.cc:1225
+#. note that this menu list starts at zero, not 1, because zero
+#. is a valid, if useless, ID.
+#.
+#. leave some breathing room
+#: editor.cc:110 editor.cc:3671 export_dialog.cc:78 export_dialog.cc:92
+#: export_dialog.cc:893 export_dialog.cc:1225 route_ui.cc:437
 msgid "None"
 msgstr "Nichts"
 
-#: editor.cc:108 editor.cc:3631
+#: editor.cc:111 editor.cc:3659
 msgid "CD Frames"
 msgstr ""
 
-#: editor.cc:109 editor.cc:3633
+#: editor.cc:112 editor.cc:3661
 msgid "SMPTE Frames"
 msgstr ""
 
-#: editor.cc:110 editor.cc:3635
+#: editor.cc:113 editor.cc:3663
 msgid "SMPTE Seconds"
 msgstr ""
 
-#: editor.cc:111 editor.cc:3637
+#: editor.cc:114 editor.cc:3665
 msgid "SMPTE Minutes"
 msgstr ""
 
-#: editor.cc:112 editor.cc:3639
+#: editor.cc:115 editor.cc:3667
 #, fuzzy
 msgid "Seconds"
 msgstr "Minuten:Sekunden"
 
-#: editor.cc:113 editor.cc:3641
+#: editor.cc:116 editor.cc:3669
 #, fuzzy
 msgid "Minutes"
 msgstr "mute"
 
-#: editor.cc:114 editor.cc:3613
+#: editor.cc:117 editor.cc:3641
 msgid "Beats/32"
 msgstr ""
 
-#: editor.cc:115 editor.cc:3611
+#: editor.cc:118 editor.cc:3639
 msgid "Beats/16"
 msgstr ""
 
-#: editor.cc:116 editor.cc:3609
+#: editor.cc:119 editor.cc:3637
 msgid "Beats/8"
 msgstr ""
 
-#: editor.cc:117 editor.cc:3607
+#: editor.cc:120 editor.cc:3635
 msgid "Beats/4"
 msgstr ""
 
-#: editor.cc:118 editor.cc:3605
+#: editor.cc:121 editor.cc:3633
 msgid "Beats/3"
 msgstr ""
 
-#: editor.cc:119 editor.cc:3615
+#: editor.cc:122 editor.cc:3643
 msgid "Beats"
 msgstr ""
 
-#: editor.cc:120 editor.cc:3617
+#: editor.cc:123 editor.cc:3645
 msgid "Bars"
 msgstr ""
 
-#: editor.cc:121 editor.cc:3619
+#: editor.cc:124 editor.cc:3647
 msgid "Marks"
 msgstr ""
 
-#: editor.cc:122 editor.cc:141 editor.cc:3621 editor.cc:3687
+#: editor.cc:125 editor.cc:144 editor.cc:3649 editor.cc:3715
 msgid "Edit Cursor"
 msgstr ""
 
-#: editor.cc:123 editor.cc:3623
+#: editor.cc:126 editor.cc:3651
 #, fuzzy
 msgid "Region starts"
 msgstr "Regionen"
 
-#: editor.cc:124 editor.cc:3625
+#: editor.cc:127 editor.cc:3653
 #, fuzzy
 msgid "Region ends"
 msgstr "Regionen"
 
-#: editor.cc:125 editor.cc:3629
+#: editor.cc:128 editor.cc:3657
 #, fuzzy
 msgid "Region syncs"
 msgstr "Regionen"
 
-#: editor.cc:126 editor.cc:3627
+#: editor.cc:129 editor.cc:3655
 #, fuzzy
 msgid "Region bounds"
 msgstr "Regionen"
 
-#: editor.cc:132 editor.cc:3662
+#: editor.cc:135 editor.cc:3690
 #, fuzzy
 msgid "Magnetic"
 msgstr "generisch"
 
-#: editor.cc:137 editor.cc:3679 export_dialog.cc:140 export_dialog.cc:156
+#: editor.cc:140 editor.cc:3707 export_dialog.cc:140 export_dialog.cc:156
 #: export_dialog.cc:1068 export_dialog.cc:1072
 msgid "Left"
 msgstr "Links"
 
-#: editor.cc:138 editor.cc:3681 export_dialog.cc:141 export_dialog.cc:157
+#: editor.cc:141 editor.cc:3709 export_dialog.cc:141 export_dialog.cc:157
 msgid "Right"
 msgstr "Rechts"
 
-#: editor.cc:139 editor.cc:3683
+#: editor.cc:142 editor.cc:3711
 msgid "Center"
 msgstr "Mitte"
 
-#: editor.cc:140 editor.cc:3685
+#: editor.cc:143 editor.cc:3713
 msgid "Playhead"
 msgstr ""
 
 #. time display buttons
-#: editor.cc:183
+#: editor.cc:186
 msgid "Mins:Secs"
 msgstr "Min:Sek"
 
-#: editor.cc:186 editor_rulers.cc:353
+#: editor.cc:189 editor_rulers.cc:354
 msgid "Frames"
 msgstr ""
 
-#: editor.cc:187 editor_rulers.cc:373
+#: editor.cc:190 editor_rulers.cc:374
 msgid "Tempo"
 msgstr ""
 
-#: editor.cc:188 editor_rulers.cc:367
+#: editor.cc:191 editor_rulers.cc:368
 msgid "Meter"
 msgstr ""
 
-#: editor.cc:189 editor_rulers.cc:379
+#: editor.cc:192 editor_rulers.cc:380
 #, fuzzy
 msgid "Location Markers"
 msgstr "Stellen"
 
-#: editor.cc:190 editor_rulers.cc:385
+#: editor.cc:193 editor_rulers.cc:386
 msgid "Range Markers"
 msgstr ""
 
-#: editor.cc:191 editor_rulers.cc:391
+#: editor.cc:194 editor_rulers.cc:392
 msgid "Loop/Punch Ranges"
 msgstr ""
 
-#: editor.cc:213
+#: editor.cc:216
 msgid "range"
 msgstr "Bereich"
 
-#: editor.cc:214
+#: editor.cc:217
 msgid "object"
 msgstr "Objekt"
 
-#: editor.cc:216
+#: editor.cc:219
 msgid "zoom"
 msgstr ""
 
-#: editor.cc:217
+#: editor.cc:220
 msgid "timefx"
 msgstr ""
 
-#: editor.cc:218
+#: editor.cc:221
 msgid "listen"
 msgstr ""
 
-#: editor.cc:220
+#: editor.cc:223
 msgid "mode"
 msgstr "Modus"
 
-#: editor.cc:221
+#: editor.cc:224
 msgid "automation"
 msgstr ""
 
-#: editor.cc:223
+#: editor.cc:226
 msgid "Edit Mode"
 msgstr "Bearbeitungs Modus"
 
-#: editor.cc:224 editor_actions.cc:283
+#: editor.cc:227 editor_actions.cc:284
 msgid "Snap To"
 msgstr ""
 
-#: editor.cc:225
+#: editor.cc:228
 #, fuzzy
 msgid "Snap Mode"
 msgstr "Modus"
 
-#: editor.cc:226
+#: editor.cc:229
 #, fuzzy
 msgid "Zoom Focus"
 msgstr "Verkleinern"
 
 #. </CMT Additions>
 #. nudge
-#: editor.cc:234 editor.cc:1907 editor.cc:2073 editor.cc:2129
+#: editor.cc:237 editor.cc:1900 editor.cc:2066 editor.cc:2122
 msgid "Nudge"
 msgstr ""
 
-#: editor.cc:466
+#: editor.cc:470
 msgid "Zoom in"
 msgstr "Vergrößern"
 
-#: editor.cc:467
+#: editor.cc:471
 msgid "Zoom out"
 msgstr "Verkleinern"
 
-#: editor.cc:470
+#: editor.cc:474
 #, fuzzy
 msgid "Zoom to session"
 msgstr "Vergrößern auf Auswahl"
 
-#: editor.cc:485
+#: editor.cc:489
 #, fuzzy
 msgid "Zoom Span"
 msgstr "Vergrößern"
 
-#: editor.cc:498 editor.cc:524 editor_actions.cc:61 mixer_ui.cc:85
+#: editor.cc:502 editor.cc:528 editor_actions.cc:62 mixer_ui.cc:86
+#: mixer_ui.cc:112
 msgid "Visible"
 msgstr ""
 
-#: editor.cc:499 editor.cc:522
+#: editor.cc:503 editor.cc:526
 #, fuzzy
 msgid "Name"
 msgstr "Umbenennen"
 
-#: editor.cc:595 editor.cc:661
+#: editor.cc:602 editor.cc:669
 #, fuzzy
 msgid "Regions"
 msgstr "Regionen"
 
-#: editor.cc:634 editor.cc:673
+#: editor.cc:642 editor.cc:681
 msgid "Chunks"
 msgstr "Stücke"
 
-#: editor.cc:664
+#: editor.cc:672
 #, fuzzy
 msgid "Tracks/Busses"
 msgstr "MIDI Spur(en) hinzufügen"
 
-#: editor.cc:667
+#: editor.cc:675
 msgid "Snapshots"
 msgstr "Schnapschüsse"
 
-#: editor.cc:670
+#: editor.cc:678
 msgid "Edit Groups"
 msgstr ""
 
-#: editor.cc:719
+#: editor.cc:727
 msgid "Nudge region/selection forwards"
 msgstr ""
 
-#: editor.cc:720
+#: editor.cc:728
 msgid "Nudge region/selection backwards"
 msgstr ""
 
-#: editor.cc:727 editor_mixer.cc:298
+#: editor.cc:735 editor_mixer.cc:299
 msgid "ardour: editor"
 msgstr "Ardour: Editor"
 
-#: editor.cc:728
+#: editor.cc:736
 #, fuzzy
 msgid "ardour_editor"
 msgstr "Ardour: Editor"
 
-#: editor.cc:1190
+#: editor.cc:1183
 msgid "ardour: editor: "
 msgstr "Ardour: Editor: "
 
 #. force name
-#: editor.cc:1275 editor.cc:1284 editor_markers.cc:869
+#: editor.cc:1268 editor.cc:1277 editor_markers.cc:870
 msgid "Loop"
 msgstr "Schleife"
 
 #. force name
-#: editor.cc:1289 editor.cc:1298 editor_markers.cc:895
+#: editor.cc:1282 editor.cc:1291 editor_markers.cc:896
 msgid "Punch"
 msgstr ""
 
-#: editor.cc:1446 editor_mouse.cc:1721
+#: editor.cc:1439 editor_mouse.cc:1742
 msgid "programming error: fade in canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor.cc:1458 editor.cc:1475 redirect_box.cc:1071
+#: editor.cc:1451 editor.cc:1468 redirect_box.cc:1073
 #, fuzzy
 msgid "Deactivate"
 msgstr "Alles deaktivieren"
 
 #. activation
-#: editor.cc:1460 editor.cc:1477 redirect_box.cc:1069
+#: editor.cc:1453 editor.cc:1470 redirect_box.cc:1071
 #, fuzzy
 msgid "Activate"
 msgstr "Aktiv"
 
-#: editor.cc:1465 editor.cc:1482
+#: editor.cc:1458 editor.cc:1475
 msgid "Linear"
 msgstr ""
 
-#: editor.cc:1466 editor.cc:1483 editor_actions.cc:375
+#: editor.cc:1459 editor.cc:1476 editor_actions.cc:376
 #, fuzzy
 msgid "Slowest"
 msgstr "Alle zeigen"
 
-#: editor.cc:1467 editor.cc:1484 editor_actions.cc:376
+#: editor.cc:1460 editor.cc:1477 editor_actions.cc:377
 #, fuzzy
 msgid "Slow"
 msgstr "solo"
 
-#: editor.cc:1468 editor.cc:1485 editor_actions.cc:378
+#: editor.cc:1461 editor.cc:1478 editor_actions.cc:379
 #, fuzzy
 msgid "Fast"
 msgstr "Einfügen"
 
-#: editor.cc:1469 editor.cc:1486 editor_actions.cc:380
+#: editor.cc:1462 editor.cc:1479 editor_actions.cc:381
 #, fuzzy
 msgid "Fastest"
 msgstr "schnellstmöglich"
 
-#: editor.cc:1596 editor.cc:1604
+#: editor.cc:1589 editor.cc:1597
 msgid "Freeze"
 msgstr ""
 
-#: editor.cc:1600
+#: editor.cc:1593
 msgid "Unfreeze"
 msgstr ""
 
-#: editor.cc:1769 editor.cc:1864
+#: editor.cc:1762 editor.cc:1857
 #, fuzzy
 msgid "Unmute"
 msgstr "mute"
 
 #. non-operative menu items for menu bar
 #. show editors
-#: editor.cc:1773 editor.cc:2053 editor.cc:2755 editor_actions.cc:26
-#: editor_markers.cc:506 mixer_strip.cc:512 mixer_strip.cc:572
-#: redirect_box.cc:1077
+#: editor.cc:1766 editor.cc:2046 editor.cc:2748 editor_actions.cc:27
+#: editor_markers.cc:507 mixer_strip.cc:495 mixer_strip.cc:563
+#: redirect_box.cc:1079
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: editor.cc:1778
+#: editor.cc:1771
 msgid "Convert to short"
 msgstr ""
 
-#: editor.cc:1780
+#: editor.cc:1773
 msgid "Convert to full"
 msgstr ""
 
-#: editor.cc:1791
+#: editor.cc:1784
 #, fuzzy
 msgid "Crossfade"
 msgstr "Ardour: Editor"
 
-#: editor.cc:1834
+#: editor.cc:1827
 msgid "Popup region editor"
 msgstr "Regionen Editor öffnen"
 
-#: editor.cc:1835
+#: editor.cc:1828
 #, fuzzy
 msgid "Raise to top layer"
 msgstr "Region ganz nach oben"
 
-#: editor.cc:1836
+#: editor.cc:1829
 #, fuzzy
 msgid "Lower to bottom layer"
 msgstr "Region ganz nach unten"
 
-#: editor.cc:1838
+#: editor.cc:1831
 msgid "Define sync point"
 msgstr "Synchronisationspunkt definieren"
 
-#: editor.cc:1839
+#: editor.cc:1832
 msgid "Remove sync point"
 msgstr "Synchronisationspunkt entfernen"
 
-#: editor.cc:1844
+#: editor.cc:1837
 #, fuzzy
 msgid "Bounce"
 msgstr "Bereich"
 
-#: editor.cc:1847
+#: editor.cc:1840
 #, fuzzy
 msgid "Analyze region"
 msgstr "Wiedergabe der Region"
 
-#: editor.cc:1859
+#: editor.cc:1852
 #, fuzzy
 msgid "Lock"
 msgstr "OK"
 
-#: editor.cc:1860
+#: editor.cc:1853
 #, fuzzy
 msgid "Unlock"
 msgstr "Rückgängig"
 
-#: editor.cc:1870
+#: editor.cc:1863
 #, fuzzy
 msgid "Original position"
 msgstr "Regionen"
 
-#: editor.cc:1876
+#: editor.cc:1869
 msgid "Toggle envelope visibility"
 msgstr ""
 
-#: editor.cc:1877
+#: editor.cc:1870
 msgid "Toggle envelope active"
 msgstr ""
 
-#: editor.cc:1881
+#: editor.cc:1874
 #, fuzzy
 msgid "DeNormalize"
 msgstr "Ardour: Region"
 
-#: editor.cc:1883
+#: editor.cc:1876
 #, fuzzy
 msgid "Normalize"
 msgstr "Ardour: Region"
 
-#: editor.cc:1886
+#: editor.cc:1879
 #, fuzzy
 msgid "Reverse"
 msgstr "Entfernen"
 
 #. range related stuff
-#: editor.cc:1892
+#: editor.cc:1885
 #, fuzzy
 msgid "Add Range Markers"
 msgstr "Ardour: Region umbenennen"
 
-#: editor.cc:1893
+#: editor.cc:1886
 #, fuzzy
 msgid "Set Range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor.cc:1902
+#: editor.cc:1895
 msgid "Nudge fwd"
 msgstr ""
 
-#: editor.cc:1903
+#: editor.cc:1896
 msgid "Nudge bwd"
 msgstr ""
 
-#: editor.cc:1904
+#: editor.cc:1897
 msgid "Nudge fwd by capture offset"
 msgstr ""
 
-#: editor.cc:1905
+#: editor.cc:1898
 msgid "Nudge bwd by capture offset"
 msgstr ""
 
-#: editor.cc:1914
+#: editor.cc:1907
 msgid "Start to edit cursor"
 msgstr ""
 
-#: editor.cc:1915
+#: editor.cc:1908
 msgid "Edit cursor to end"
 msgstr ""
 
-#: editor.cc:1917
+#: editor.cc:1910 gain_meter.cc:181 gain_meter.cc:813 panner_ui.cc:98
+#: panner_ui.cc:803
 msgid "Trim"
 msgstr ""
 
-#: editor.cc:1920
+#: editor.cc:1913
 msgid "Split"
 msgstr "Teilen"
 
-#: editor.cc:1923
+#: editor.cc:1916
 #, fuzzy
 msgid "Make mono regions"
 msgstr "Name für Region:"
 
-#: editor.cc:1926
+#: editor.cc:1919
 msgid "Duplicate"
 msgstr "Duplizieren"
 
-#: editor.cc:1927
+#: editor.cc:1920
 #, fuzzy
 msgid "Fill Track"
 msgstr "Spur"
 
-#: editor.cc:1931
+#: editor.cc:1924
 msgid "Destroy"
 msgstr ""
 
-#: editor.cc:1961
+#: editor.cc:1954
 #, fuzzy
 msgid "Play range"
 msgstr "Bereich"
 
-#: editor.cc:1962
+#: editor.cc:1955
 #, fuzzy
 msgid "Loop range"
 msgstr "Bereich"
 
-#: editor.cc:1966
+#: editor.cc:1959
 #, fuzzy
 msgid "Analyze range"
 msgstr "Bereich"
 
-#: editor.cc:1970
+#: editor.cc:1963
 #, fuzzy
 msgid "Separate range to track"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor.cc:1971
+#: editor.cc:1964
 #, fuzzy
 msgid "Separate range to region list"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor.cc:1974
+#: editor.cc:1967
 #, fuzzy
 msgid "Select all in range"
 msgstr "Auswahl"
 
-#: editor.cc:1976 editor.cc:2021
+#: editor.cc:1969 editor.cc:2014
 #, fuzzy
 msgid "Set range to loop range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor.cc:1977 editor.cc:2022
+#: editor.cc:1970 editor.cc:2015
 #, fuzzy
 msgid "Set range to punch range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor.cc:1979
+#: editor.cc:1972
 #, fuzzy
 msgid "Crop region to range"
 msgstr "Regionen Editor öffnen"
 
-#: editor.cc:1980
+#: editor.cc:1973
 #, fuzzy
 msgid "Fill range with region"
 msgstr "Region erstellen"
 
-#: editor.cc:1981
+#: editor.cc:1974
 #, fuzzy
 msgid "Duplicate range"
 msgstr "Duplizieren"
 
-#: editor.cc:1982
+#: editor.cc:1975
 #, fuzzy
 msgid "Create chunk from range"
 msgstr "Auswahl zu Abschnitt machen"
 
-#: editor.cc:1984
+#: editor.cc:1977
 #, fuzzy
 msgid "Bounce range"
 msgstr "Bereich"
 
-#: editor.cc:1985
+#: editor.cc:1978
 #, fuzzy
 msgid "Export range"
 msgstr "Name für Region:"
 
-#: editor.cc:1987
+#: editor.cc:1980
 #, fuzzy
 msgid "Range"
 msgstr "Bereich"
 
-#: editor.cc:2002 editor.cc:2087
+#: editor.cc:1995 editor.cc:2080
 #, fuzzy
 msgid "Play from edit cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor.cc:2003 editor.cc:2088
+#: editor.cc:1996 editor.cc:2081
 msgid "Play from start"
 msgstr "Wiedergabe ab Anfang"
 
-#: editor.cc:2004
+#: editor.cc:1997
 #, fuzzy
 msgid "Play region"
 msgstr "Wiedergabe der Region"
 
-#: editor.cc:2006
+#: editor.cc:1999
 #, fuzzy
 msgid "Loop Region"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor.cc:2008 editor.cc:2089 sfdb_ui.cc:56
-msgid "Play"
-msgstr "Wiedergabe"
-
-#: editor.cc:2016 editor.cc:2097
+#: editor.cc:2009 editor.cc:2090
 #, fuzzy
 msgid "Select All in track"
 msgstr "Auswahl"
 
-#: editor.cc:2017 editor.cc:2098 redirect_box.cc:1065
+#: editor.cc:2010 editor.cc:2091 redirect_box.cc:1067
 #, fuzzy
 msgid "Select All"
 msgstr "Auswahl"
 
-#: editor.cc:2018 editor.cc:2099
+#: editor.cc:2011 editor.cc:2092
 #, fuzzy
 msgid "Invert selection in track"
 msgstr "Stille einfügen"
 
-#: editor.cc:2019 editor.cc:2100
+#: editor.cc:2012 editor.cc:2093
 #, fuzzy
 msgid "Invert selection"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor.cc:2024 editor.cc:2102
+#: editor.cc:2017 editor.cc:2095
 #, fuzzy
 msgid "Select all after edit cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor.cc:2025 editor.cc:2103
+#: editor.cc:2018 editor.cc:2096
 #, fuzzy
 msgid "Select all before edit cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor.cc:2026 editor.cc:2104
+#: editor.cc:2019 editor.cc:2097
 #, fuzzy
 msgid "Select all after playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor.cc:2027 editor.cc:2105
+#: editor.cc:2020 editor.cc:2098
 #, fuzzy
 msgid "Select all before playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor.cc:2028
+#: editor.cc:2021
 #, fuzzy
 msgid "Select all between cursors"
 msgstr "Wiedergabe ab Cursor"
 
 #. standard editing stuff
-#: editor.cc:2039 editor.cc:2115 editor.cc:3455 editor_actions.cc:213
-#: redirect_box.cc:1058
+#: editor.cc:2032 editor.cc:2108 editor.cc:3483 editor_actions.cc:214
+#: redirect_box.cc:1060
 msgid "Cut"
 msgstr "Ausschneiden"
 
-#: editor.cc:2040 editor.cc:2116 editor.cc:3457 editor_actions.cc:218
-#: redirect_box.cc:1060
+#: editor.cc:2033 editor.cc:2109 editor.cc:3485 editor_actions.cc:219
+#: redirect_box.cc:1062
 msgid "Copy"
 msgstr "Kopieren"
 
-#: editor.cc:2041
+#: editor.cc:2034
 #, fuzzy
 msgid "Paste at edit cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor.cc:2042
+#: editor.cc:2035
 msgid "Paste at mouse"
 msgstr ""
 
-#: editor.cc:2046 editor.cc:3462
+#: editor.cc:2039 editor.cc:3490
 msgid "Align"
 msgstr ""
 
-#: editor.cc:2047 editor.cc:3464
+#: editor.cc:2040 editor.cc:3492
 msgid "Align Relative"
 msgstr ""
 
-#: editor.cc:2051
+#: editor.cc:2044
 msgid "Insert chunk"
 msgstr "Abschnitt einfügen"
 
-#: editor.cc:2058
+#: editor.cc:2051
 #, fuzzy
 msgid "Insert Selected Region"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor.cc:2059
+#: editor.cc:2052
 msgid "Insert Existing Audio"
 msgstr ""
 
-#: editor.cc:2068 editor.cc:2124
+#: editor.cc:2061 editor.cc:2117
 msgid "Nudge entire track fwd"
 msgstr ""
 
-#: editor.cc:2069 editor.cc:2125
+#: editor.cc:2062 editor.cc:2118
 msgid "Nudge track after edit cursor fwd"
 msgstr ""
 
-#: editor.cc:2070 editor.cc:2126
+#: editor.cc:2063 editor.cc:2119
 msgid "Nudge entire track bwd"
 msgstr ""
 
-#: editor.cc:2071 editor.cc:2127
+#: editor.cc:2064 editor.cc:2120
 msgid "Nudge track after edit cursor bwd"
 msgstr ""
 
-#: editor.cc:2117 editor.cc:3459 editor_actions.cc:220 redirect_box.cc:1062
+#: editor.cc:2110 editor.cc:3487 editor_actions.cc:221 redirect_box.cc:1064
 msgid "Paste"
 msgstr "Einfügen"
 
-#: editor.cc:2637
+#: editor.cc:2630
 msgid "select/move objects"
 msgstr ""
 
-#: editor.cc:2638
+#: editor.cc:2631
 #, fuzzy
 msgid "select/move ranges"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor.cc:2639
+#: editor.cc:2632
 msgid "draw gain automation"
 msgstr ""
 
-#: editor.cc:2640
+#: editor.cc:2633
 #, fuzzy
 msgid "select zoom range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor.cc:2641
+#: editor.cc:2634
 msgid "stretch/shrink regions"
 msgstr ""
 
-#: editor.cc:2642
+#: editor.cc:2635
 #, fuzzy
 msgid "listen to specific regions"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor.cc:2753
+#: editor.cc:2746
 msgid "Start:"
 msgstr "Anfang:"
 
-#: editor.cc:2754
+#: editor.cc:2747
 msgid "End:"
 msgstr "Ende:"
 
-#: editor.cc:3097
-#, fuzzy
-msgid "set selected trackview"
-msgstr "Stille einfügen"
-
-#: editor.cc:3137
-#, fuzzy
-msgid "set selected control point"
-msgstr "Synchronisationspunkt entfernen"
-
-#: editor.cc:3246
-#, fuzzy
-msgid "set selected regionview"
-msgstr "Auswahl zu Schleife machen"
-
-#: editor.cc:3334 editor.cc:3374
+#: editor.cc:3362 editor.cc:3402
 #, fuzzy
 msgid "set selected regions"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor.cc:3430 editor_actions.cc:203
+#: editor.cc:3458 editor_actions.cc:204
 msgid "Undo"
 msgstr "Rückgängig"
 
-#: editor.cc:3432
+#: editor.cc:3460
 msgid "Undo (%1)"
 msgstr "Rückgängig (%1)"
 
-#: editor.cc:3442 editor_actions.cc:205
+#: editor.cc:3470 editor_actions.cc:206
 msgid "Redo"
 msgstr "Wiederherstellen"
 
-#: editor.cc:3444
+#: editor.cc:3472
 msgid "Redo (%1)"
 msgstr "Wiederherstellen (%1)"
 
-#: editor.cc:3478
+#: editor.cc:3506
 msgid "... as new track"
 msgstr ""
 
-#: editor.cc:3479
+#: editor.cc:3507
 #, fuzzy
 msgid "... as new region"
 msgstr "Ardour: Region"
 
-#: editor.cc:3481
+#: editor.cc:3509
 #, fuzzy
 msgid "Import audio (copy)"
 msgstr "Audio Importieren"
 
-#: editor.cc:3484
+#: editor.cc:3512
 #, fuzzy
 msgid "Remove last capture"
 msgstr "Synchronisationspunkt entfernen"
 
-#: editor.cc:3508
+#: editor.cc:3536
 msgid "Duplicate how many times?"
 msgstr "Wie häufig duplizieren?"
 
-#: editor.cc:3994
+#: editor.cc:4022
 msgid ""
 "Playlist %1 is currently unused.\n"
 "If left alone, no audio files used by it will be cleaned.\n"
 "If deleted, audio files used by it alone by will cleaned."
 msgstr ""
 
-#: editor.cc:4002
+#: editor.cc:4030
 #, fuzzy
 msgid "Delete playlist"
 msgstr "Name für Schnappschuß"
 
-#: editor.cc:4003
+#: editor.cc:4031
 #, fuzzy
 msgid "Keep playlist"
 msgstr "Name für Schnappschuß"
 
-#: editor.cc:4004 editor_audio_import.cc:237 editor_ops.cc:1976
-#: editor_timefx.cc:52 export_dialog.cc:971 io_selector.cc:58
-#: io_selector.cc:792 redirect_box.cc:901 tempo_dialog.cc:19
-#: tempo_dialog.cc:36 tempo_dialog.cc:152 tempo_dialog.cc:170
+#: editor.cc:4032 editor_audio_import.cc:236 editor_ops.cc:2048
+#: editor_timefx.cc:71 export_dialog.cc:971 io_selector.cc:59
+#: io_selector.cc:793 redirect_box.cc:903 tempo_dialog.cc:20
+#: tempo_dialog.cc:37 tempo_dialog.cc:202 tempo_dialog.cc:220
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: editor.cc:4171
+#: editor.cc:4199
 #, fuzzy
 msgid "new playlists"
 msgstr "Name für Schnappschuß"
 
-#: editor.cc:4179
+#: editor.cc:4207
 #, fuzzy
 msgid "copy playlists"
 msgstr "Name für Schnappschuß"
 
-#: editor.cc:4187
+#: editor.cc:4215
 #, fuzzy
 msgid "clear playlists"
 msgstr "Name für Schnappschuß"
 
-#: editor_actions.cc:27
+#: editor_actions.cc:28
 #, fuzzy
 msgid "Select regions"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_actions.cc:28
+#: editor_actions.cc:29
 #, fuzzy
 msgid "Select range operations"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_actions.cc:29
+#: editor_actions.cc:30
 #, fuzzy
 msgid "Move edit cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_actions.cc:30
+#: editor_actions.cc:31
 #, fuzzy
 msgid "Region operations"
 msgstr "Regionen"
 
-#: editor_actions.cc:31
+#: editor_actions.cc:32
 msgid "Tools"
 msgstr ""
 
-#: editor_actions.cc:32
+#: editor_actions.cc:33
 msgid "View"
 msgstr ""
 
-#: editor_actions.cc:33
+#: editor_actions.cc:34
 #, fuzzy
 msgid "ZoomFocus"
 msgstr "Verkleinern"
 
-#: editor_actions.cc:34
+#: editor_actions.cc:35
 msgid "Meter hold"
 msgstr ""
 
-#: editor_actions.cc:35
+#: editor_actions.cc:36
 msgid "Meter falloff"
 msgstr ""
 
-#: editor_actions.cc:37
+#: editor_actions.cc:38
 #, fuzzy
 msgid "Crossfades"
 msgstr "Ardour: Editor"
 
-#: editor_actions.cc:38
+#: editor_actions.cc:39
 msgid "Monitoring"
 msgstr ""
 
-#: editor_actions.cc:39
+#: editor_actions.cc:40
 #, fuzzy
 msgid "Autoconnect"
 msgstr "Verbindungen"
 
-#: editor_actions.cc:40
+#: editor_actions.cc:41
 #, fuzzy
 msgid "Layering"
 msgstr "Schicht"
 
-#: editor_actions.cc:41
+#: editor_actions.cc:42
 #, fuzzy
 msgid "Metering"
 msgstr "Schicht"
 
-#: editor_actions.cc:42
+#: editor_actions.cc:43
 msgid "Fall off rate"
 msgstr ""
 
-#: editor_actions.cc:43
+#: editor_actions.cc:44
 msgid "Hold Time"
 msgstr ""
 
-#: editor_actions.cc:44
+#: editor_actions.cc:45
 msgid "Add Existing Audio"
 msgstr ""
 
 #. add named actions for the editor
-#: editor_actions.cc:49
+#: editor_actions.cc:50
 #, fuzzy
 msgid "Show Editor Mixer"
 msgstr "Ardour: Mixer"
 
-#: editor_actions.cc:54
+#: editor_actions.cc:55
 #, fuzzy
 msgid "Span Entire Overlap"
 msgstr "Region eine Ebene nach oben"
 
-#: editor_actions.cc:56 editor_actions.cc:383
+#: editor_actions.cc:57 editor_actions.cc:384
 #, fuzzy
 msgid "Short"
 msgstr "Anschluß"
 
-#: editor_actions.cc:63
+#: editor_actions.cc:64
 msgid "Created Automatically"
 msgstr ""
 
-#: editor_actions.cc:66
+#: editor_actions.cc:67
 msgid "Playhead to Next Region Start"
 msgstr ""
 
-#: editor_actions.cc:68
+#: editor_actions.cc:69
 msgid "Playhead to Next Region End"
 msgstr ""
 
-#: editor_actions.cc:70
+#: editor_actions.cc:71
 msgid "Playhead to Next Region Sync"
 msgstr ""
 
-#: editor_actions.cc:73
+#: editor_actions.cc:74
 msgid "Playhead to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:75
+#: editor_actions.cc:76
 msgid "Playhead to Previous Region End"
 msgstr ""
 
-#: editor_actions.cc:77
+#: editor_actions.cc:78
 msgid "Playhead to Previous Region Sync"
 msgstr ""
 
-#: editor_actions.cc:80
+#: editor_actions.cc:81
 msgid "Edit Cursor to Next Region Start"
 msgstr ""
 
-#: editor_actions.cc:82
+#: editor_actions.cc:83
 msgid "Edit Cursor to Next Region End"
 msgstr ""
 
-#: editor_actions.cc:84
+#: editor_actions.cc:85
 msgid "Edit Cursor to Next Region Sync"
 msgstr ""
 
-#: editor_actions.cc:87
+#: editor_actions.cc:88
 msgid "Edit Cursor to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:89
+#: editor_actions.cc:90
 msgid "Edit Cursor to Previous Region End"
 msgstr ""
 
-#: editor_actions.cc:91
+#: editor_actions.cc:92
 msgid "Edit Cursor to Previous Region Sync"
 msgstr ""
 
-#: editor_actions.cc:94
+#: editor_actions.cc:95
 msgid "Playhead to Range Start"
 msgstr ""
 
-#: editor_actions.cc:96
+#: editor_actions.cc:97
 #, fuzzy
 msgid "Playhead to Range End"
 msgstr "Bereich"
 
-#: editor_actions.cc:99
+#: editor_actions.cc:100
 msgid "Edit Cursor to Range Start"
 msgstr ""
 
-#: editor_actions.cc:101
+#: editor_actions.cc:102
 msgid "Edit Cursor to Range End"
 msgstr ""
 
-#: editor_actions.cc:104 editor_ops.cc:1300
+#: editor_actions.cc:105 editor_ops.cc:1363
 #, fuzzy
 msgid "select all"
 msgstr "Auswahl"
 
-#: editor_actions.cc:106
+#: editor_actions.cc:107
 #, fuzzy
 msgid "Select All After Edit Cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_actions.cc:108
+#: editor_actions.cc:109
 msgid "Select All Before Edit Cursor"
 msgstr ""
 
-#: editor_actions.cc:111
+#: editor_actions.cc:112
 #, fuzzy
 msgid "Select All After Playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor_actions.cc:113
+#: editor_actions.cc:114
 #, fuzzy
 msgid "Select All Before Playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor_actions.cc:115
+#: editor_actions.cc:116
 #, fuzzy
 msgid "Select All Between Cursors"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_actions.cc:118
+#: editor_actions.cc:119
 #, fuzzy
 msgid "Select All in Punch Range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor_actions.cc:120
+#: editor_actions.cc:121
 #, fuzzy
 msgid "Select All in Loop Range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor_actions.cc:123
+#: editor_actions.cc:124
 msgid "Jump Forward to Mark"
 msgstr ""
 
-#: editor_actions.cc:125
+#: editor_actions.cc:126
 msgid "Jump Backward to Mark"
 msgstr ""
 
-#: editor_actions.cc:127
+#: editor_actions.cc:128
 #, fuzzy
 msgid "Add Location from Playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor_actions.cc:130
+#: editor_actions.cc:131
 msgid "Nudge Forward"
 msgstr ""
 
-#: editor_actions.cc:132
+#: editor_actions.cc:133
 msgid "Nudge Next Forward"
 msgstr ""
 
-#: editor_actions.cc:134
+#: editor_actions.cc:135
 #, fuzzy
 msgid "Nudge Backward"
 msgstr "Stille einfügen"
 
-#: editor_actions.cc:136
+#: editor_actions.cc:137
 #, fuzzy
 msgid "Nudge Next Backward"
 msgstr "Stille einfügen"
 
-#: editor_actions.cc:139
+#: editor_actions.cc:140
 #, fuzzy
 msgid "Zoom Out"
 msgstr "Verkleinern"
 
-#: editor_actions.cc:141
+#: editor_actions.cc:142
 #, fuzzy
 msgid "Zoom In"
 msgstr "Vergrößern"
 
-#: editor_actions.cc:143
+#: editor_actions.cc:144
 #, fuzzy
 msgid "Zoom to Session"
 msgstr "Vergrößern auf Auswahl"
 
-#: editor_actions.cc:146
+#: editor_actions.cc:147
 #, fuzzy
 msgid "Scroll Tracks Up"
 msgstr "Spur"
 
-#: editor_actions.cc:148
+#: editor_actions.cc:149
 msgid "Scroll Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:150
+#: editor_actions.cc:151
 #, fuzzy
 msgid "Step Tracks Up"
 msgstr "Stille einfügen"
 
-#: editor_actions.cc:152
+#: editor_actions.cc:153
 msgid "Step Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:155
+#: editor_actions.cc:156
 msgid "Scroll Backward"
 msgstr ""
 
-#: editor_actions.cc:157
+#: editor_actions.cc:158
 msgid "Scroll Forward"
 msgstr ""
 
-#: editor_actions.cc:159
+#: editor_actions.cc:160
 msgid "goto"
 msgstr ""
 
-#: editor_actions.cc:161
+#: editor_actions.cc:162
 #, fuzzy
 msgid "Center Playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor_actions.cc:163
+#: editor_actions.cc:164
 #, fuzzy
 msgid "Center Edit Cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_actions.cc:165
+#: editor_actions.cc:166
 msgid "Playhead Forward"
 msgstr ""
 
-#: editor_actions.cc:167
+#: editor_actions.cc:168
 msgid "Playhead Backward"
 msgstr ""
 
-#: editor_actions.cc:169
+#: editor_actions.cc:170
 msgid "Playhead to Edit"
 msgstr ""
 
-#: editor_actions.cc:171
+#: editor_actions.cc:172
 #, fuzzy
 msgid "Edit to Playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor_actions.cc:174
+#: editor_actions.cc:175
 #, fuzzy
 msgid "Align Regions Start"
 msgstr "Regionen"
 
-#: editor_actions.cc:176
+#: editor_actions.cc:177
 #, fuzzy
 msgid "Align Regions Start Relative"
 msgstr "nach Anfang der Region in der Datei"
 
-#: editor_actions.cc:178
+#: editor_actions.cc:179
 #, fuzzy
 msgid "Align Regions End"
 msgstr "Ardour: Region"
 
-#: editor_actions.cc:180
+#: editor_actions.cc:181
 msgid "Align Regions End Relative"
 msgstr ""
 
-#: editor_actions.cc:183
+#: editor_actions.cc:184
 #, fuzzy
 msgid "Align Regions Sync"
 msgstr "Ardour: Region"
 
-#: editor_actions.cc:185
+#: editor_actions.cc:186
 msgid "Align Regions Sync Relative"
 msgstr ""
 
-#: editor_actions.cc:188
+#: editor_actions.cc:189
 msgid "Audition at Mouse"
 msgstr ""
 
-#: editor_actions.cc:190
+#: editor_actions.cc:191
 msgid "Brush at Mouse"
 msgstr ""
 
-#: editor_actions.cc:192
+#: editor_actions.cc:193
 #, fuzzy
 msgid "Set Edit Cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_actions.cc:194
+#: editor_actions.cc:195
 #, fuzzy
 msgid "Mute/Unmute Region"
 msgstr "Region erstellen"
 
-#: editor_actions.cc:196
+#: editor_actions.cc:197
 #, fuzzy
 msgid "Set Playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor_actions.cc:198
+#: editor_actions.cc:199
 #, fuzzy
 msgid "Split Region"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_actions.cc:200
+#: editor_actions.cc:201
 #, fuzzy
 msgid "Set Region Sync Position"
 msgstr "nach Zeitstempel der Region"
 
-#: editor_actions.cc:208
+#: editor_actions.cc:209
 #, fuzzy
 msgid "Export Session"
 msgstr "Name für Region:"
 
-#: editor_actions.cc:210
+#: editor_actions.cc:211
 #, fuzzy
 msgid "Export Range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
 #. Note: for now, editor-delete does the exact same thing as editor-cut
-#: editor_actions.cc:216
+#: editor_actions.cc:217
 #, fuzzy
 msgid "Delete"
 msgstr "entfernen"
 
-#: editor_actions.cc:222
+#: editor_actions.cc:223
 #, fuzzy
 msgid "Duplicate Region"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_actions.cc:224
+#: editor_actions.cc:225
 #, fuzzy
 msgid "Duplicate Range"
 msgstr "Duplizieren"
 
-#: editor_actions.cc:226
+#: editor_actions.cc:227
 msgid "Insert Region"
 msgstr ""
 
-#: editor_actions.cc:228
+#: editor_actions.cc:229
 #, fuzzy
 msgid "Reverse Region"
 msgstr "Name für Region:"
 
-#: editor_actions.cc:230
+#: editor_actions.cc:231
 #, fuzzy
 msgid "Normalize Region"
 msgstr "Ardour: Region"
 
-#: editor_actions.cc:232
+#: editor_actions.cc:233
 #, fuzzy
 msgid "crop"
 msgstr "Kopieren"
 
-#: editor_actions.cc:234
+#: editor_actions.cc:235
 #, fuzzy
 msgid "Insert Chunk"
 msgstr "Abschnitt einfügen"
 
-#: editor_actions.cc:237
+#: editor_actions.cc:238
 #, fuzzy
 msgid "Split at edit cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_actions.cc:240
+#: editor_actions.cc:241
 #, fuzzy
 msgid "Start Range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor_actions.cc:242
+#: editor_actions.cc:243
 msgid "Finish Range"
 msgstr ""
 
-#: editor_actions.cc:244
+#: editor_actions.cc:245
 msgid "Finish add Range"
 msgstr ""
 
-#: editor_actions.cc:247
+#: editor_actions.cc:248
 msgid "Extend Range to End of Region"
 msgstr ""
 
-#: editor_actions.cc:249
+#: editor_actions.cc:250
 #, fuzzy
 msgid "Extend Range to Start of Region"
 msgstr "An den Anfang der Sitzung springen"
 
-#: editor_actions.cc:252
+#: editor_actions.cc:253
 #, fuzzy
 msgid "Follow Playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor_actions.cc:260
+#: editor_actions.cc:261
 #, fuzzy
 msgid "Zoom Focus Left"
 msgstr "Verkleinern"
 
-#: editor_actions.cc:262
+#: editor_actions.cc:263
 #, fuzzy
 msgid "Zoom Focus Right"
 msgstr "Verkleinern"
 
-#: editor_actions.cc:264
+#: editor_actions.cc:265
 #, fuzzy
 msgid "Zoom Focus Center"
 msgstr "Verkleinern"
 
-#: editor_actions.cc:266
+#: editor_actions.cc:267
 #, fuzzy
 msgid "Zoom Focus Playhead"
 msgstr "Verkleinern"
 
-#: editor_actions.cc:268
+#: editor_actions.cc:269
 #, fuzzy
 msgid "Zoom Focus Edit"
 msgstr "Verkleinern"
 
-#: editor_actions.cc:274
+#: editor_actions.cc:275
 msgid "Object Tool"
 msgstr ""
 
-#: editor_actions.cc:275
+#: editor_actions.cc:276
 #, fuzzy
 msgid "Range Tool"
 msgstr "Bereich"
 
-#: editor_actions.cc:276
+#: editor_actions.cc:277
 msgid "Gain Tool"
 msgstr ""
 
-#: editor_actions.cc:277
+#: editor_actions.cc:278
 #, fuzzy
 msgid "Zoom Tool"
 msgstr "Verkleinern"
 
-#: editor_actions.cc:278
+#: editor_actions.cc:279
 msgid "Timefx Tool"
 msgstr ""
 
-#: editor_actions.cc:285
+#: editor_actions.cc:286
 #, fuzzy
 msgid "Snap to frame"
 msgstr "Modus"
 
-#: editor_actions.cc:286
+#: editor_actions.cc:287
 #, fuzzy
 msgid "Snap to cd frame"
 msgstr "Modus"
 
-#: editor_actions.cc:287
+#: editor_actions.cc:288
 msgid "Snap to SMPTE frame"
 msgstr ""
 
-#: editor_actions.cc:288
+#: editor_actions.cc:289
 msgid "Snap to SMPTE seconds"
 msgstr ""
 
-#: editor_actions.cc:289
+#: editor_actions.cc:290
 msgid "Snap to SMPTE minutes"
 msgstr ""
 
-#: editor_actions.cc:290
+#: editor_actions.cc:291
 #, fuzzy
 msgid "Snap to seconds"
 msgstr "Minuten:Sekunden"
 
-#: editor_actions.cc:291
+#: editor_actions.cc:292
 msgid "Snap to minutes"
 msgstr ""
 
-#: editor_actions.cc:292
+#: editor_actions.cc:293
 msgid "Snap to thirtyseconds"
 msgstr ""
 
-#: editor_actions.cc:293
+#: editor_actions.cc:294
 msgid "Snap to asixteenthbeat"
 msgstr ""
 
-#: editor_actions.cc:294
+#: editor_actions.cc:295
 msgid "Snap to eighths"
 msgstr ""
 
-#: editor_actions.cc:295
+#: editor_actions.cc:296
 msgid "Snap to quarters"
 msgstr ""
 
-#: editor_actions.cc:296
+#: editor_actions.cc:297
 #, fuzzy
 msgid "Snap to thirds"
 msgstr "Modus"
 
-#: editor_actions.cc:297
+#: editor_actions.cc:298
 #, fuzzy
 msgid "Snap to beat"
 msgstr "Modus"
 
-#: editor_actions.cc:298
+#: editor_actions.cc:299
 #, fuzzy
 msgid "Snap to bar"
 msgstr "Modus"
 
-#: editor_actions.cc:299
+#: editor_actions.cc:300
 #, fuzzy
 msgid "Snap to mark"
 msgstr "Ardour: Region umbenennen"
 
-#: editor_actions.cc:300
+#: editor_actions.cc:301
 #, fuzzy
 msgid "Snap to edit cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_actions.cc:301
+#: editor_actions.cc:302
 #, fuzzy
 msgid "Snap to region start"
 msgstr "Regionen"
 
-#: editor_actions.cc:302
+#: editor_actions.cc:303
 #, fuzzy
 msgid "Snap to region end"
 msgstr "Regionen"
 
-#: editor_actions.cc:303
+#: editor_actions.cc:304
 #, fuzzy
 msgid "Snap to region sync"
 msgstr "Regionen"
 
-#: editor_actions.cc:304
+#: editor_actions.cc:305
 #, fuzzy
 msgid "Snap to region boundary"
 msgstr "Regionen"
 
 #. the region list popup menu
-#: editor_actions.cc:313
+#: editor_actions.cc:314
 #, fuzzy
 msgid "Sort"
 msgstr "Anschluß"
 
-#: editor_actions.cc:321
+#: editor_actions.cc:322
 msgid "Show all"
 msgstr "Alle zeigen"
 
-#: editor_actions.cc:322
+#: editor_actions.cc:323
 #, fuzzy
 msgid "Show automatic regions"
 msgstr "Stellen"
 
-#: editor_actions.cc:324
+#: editor_actions.cc:325
 msgid "Ascending"
 msgstr "aufsteigend"
 
-#: editor_actions.cc:326
+#: editor_actions.cc:327
 msgid "Descending"
 msgstr "absteigend"
 
-#: editor_actions.cc:329
+#: editor_actions.cc:330
 msgid "By Region Name"
 msgstr "nach Name der Region"
 
-#: editor_actions.cc:331
+#: editor_actions.cc:332
 msgid "By Region Length"
 msgstr "nach Länge der Region"
 
-#: editor_actions.cc:333
+#: editor_actions.cc:334
 #, fuzzy
 msgid "By Region Position"
 msgstr "nach Zeitstempel der Region"
 
-#: editor_actions.cc:335
+#: editor_actions.cc:336
 msgid "By Region Timestamp"
 msgstr "nach Zeitstempel der Region"
 
-#: editor_actions.cc:337
+#: editor_actions.cc:338
 msgid "By Region Start in File"
 msgstr "nach Anfang der Region in der Datei"
 
-#: editor_actions.cc:339
+#: editor_actions.cc:340
 msgid "By Region End in File"
 msgstr "nach Ende der Region in der Datei"
 
-#: editor_actions.cc:341
+#: editor_actions.cc:342
 msgid "By Source File Name"
 msgstr "nach Namen der Quelldatei"
 
-#: editor_actions.cc:343
+#: editor_actions.cc:344
 msgid "By Source File Length"
 msgstr "nach Länge der Quelldatei"
 
-#: editor_actions.cc:345
+#: editor_actions.cc:346
 msgid "By Source File Creation Date"
 msgstr "nach Erstellungsdatum der Quelldatei"
 
-#: editor_actions.cc:347
+#: editor_actions.cc:348
 msgid "By Source Filesystem"
 msgstr "nach Dateisystem der Quelle"
 
 #. the next two are duplicate items with different names for use in two different contexts
-#: editor_actions.cc:353
+#: editor_actions.cc:354
 #, fuzzy
 msgid "Add External Audio"
 msgstr "Ardour: Region"
 
-#: editor_actions.cc:355
+#: editor_actions.cc:356
 #, fuzzy
 msgid "as Region(s)"
 msgstr "Ardour: Region"
 
-#: editor_actions.cc:357
+#: editor_actions.cc:358
 #, fuzzy
 msgid "as Tracks"
 msgstr "Spuren"
 
-#: editor_actions.cc:359
+#: editor_actions.cc:360
 #, fuzzy
 msgid "to Tracks"
 msgstr "Spuren"
 
-#: editor_actions.cc:362
+#: editor_actions.cc:363
 #, fuzzy
 msgid "Show Waveforms"
 msgstr "Wellenform zeigen"
 
-#: editor_actions.cc:363
+#: editor_actions.cc:364
 #, fuzzy
 msgid "Show Waveforms While Recording"
 msgstr "Wellenform zeigen"
 
-#: editor_actions.cc:364
+#: editor_actions.cc:365
 msgid "Show Measures"
 msgstr ""
 
-#: editor_actions.cc:377 editor_actions.cc:384
+#: editor_actions.cc:378 editor_actions.cc:385
 msgid "Medium"
 msgstr ""
 
-#: editor_actions.cc:379
+#: editor_actions.cc:380
 #, fuzzy
 msgid "Faster"
 msgstr "Einfügen"
 
-#: editor_actions.cc:385
+#: editor_actions.cc:386
 msgid "Long"
 msgstr ""
 
-#: editor_actions.cc:389
+#: editor_actions.cc:390
 #, fuzzy
 msgid "Later is Higher"
 msgstr "Region eine Ebene nach unten"
 
-#: editor_actions.cc:390
+#: editor_actions.cc:391
 #, fuzzy
 msgid "Most Recently Moved/Added is Higher"
 msgstr "Region eine Ebene nach unten"
 
-#: editor_actions.cc:391
+#: editor_actions.cc:392
 #, fuzzy
 msgid "Most Recently Added is Higher"
 msgstr "Region eine Ebene nach unten"
@@ -3427,113 +3412,100 @@ msgstr ""
 msgid "Add existing audio to session"
 msgstr "Stellen"
 
-#: editor_audio_import.cc:143
+#: editor_audio_import.cc:142
 #, fuzzy
 msgid "ardour: importing %1"
 msgstr "Ardour: Exportieren"
 
-#: editor_audio_import.cc:147
+#: editor_audio_import.cc:146
 msgid "Cancel Import"
 msgstr "Importieren Abbrechen"
 
-#: editor_audio_import.cc:225
+#: editor_audio_import.cc:224
 msgid "Editor: cannot open file \"%1\", (%2)"
 msgstr ""
 
-#: editor_audio_import.cc:233
+#: editor_audio_import.cc:232
 #, fuzzy
 msgid "Cancel entire import"
 msgstr "Importieren Abbrechen"
 
-#: editor_audio_import.cc:234
+#: editor_audio_import.cc:233
 #, fuzzy
 msgid "Don't embed it"
 msgstr "Ohne %1"
 
-#: editor_audio_import.cc:235
+#: editor_audio_import.cc:234
 msgid "Embed all without questions"
 msgstr ""
 
-#: editor_audio_import.cc:240
+#: editor_audio_import.cc:239
 msgid "Embed it anyway"
 msgstr ""
 
-#: editor_audio_import.cc:243
+#: editor_audio_import.cc:242
 msgid ""
 "%1\n"
 "This audiofile's sample rate doesn't match the session sample rate!"
 msgstr ""
 
-#: editor_audio_import.cc:276
+#: editor_audio_import.cc:275
 msgid "could not open %1"
 msgstr "Konnte \"%s\" nicht öffnen."
 
-#: editor_audio_import.cc:321
+#: editor_audio_import.cc:320
 #, fuzzy
 msgid "insert sndfile"
 msgstr "Stille einfügen"
 
 #. stuff for the verbose canvas cursor
-#: editor_canvas.cc:117
+#: editor_canvas.cc:118
 msgid "VerboseCanvasCursor"
 msgstr ""
 
-#: editor_canvas.cc:285
-#, fuzzy
-msgid "Start a new session\n"
-msgstr "Bitte mittels des \"Sitzung\"-Menüs\n"
-
-#: editor_canvas.cc:285
-msgid "via Session menu"
-msgstr "eine Sitzung laden oder eine neue erstellen!"
-
-#: editor_canvas.cc:288
-msgid "FirstActionMessage"
-msgstr ""
-
-#: editor_edit_groups.cc:52 mixer_ui.cc:732
+#: editor_edit_groups.cc:53 mixer_ui.cc:736
 #, fuzzy
 msgid "Activate All"
 msgstr "Aktiv"
 
-#: editor_edit_groups.cc:53 mixer_ui.cc:733
+#: editor_edit_groups.cc:54 mixer_ui.cc:737
 #, fuzzy
 msgid "Disable All"
 msgstr "Trennen"
 
-#: editor_edit_groups.cc:55 mixer_ui.cc:735
+#: editor_edit_groups.cc:56 mixer_ui.cc:739
 #, fuzzy
 msgid "Add group"
 msgstr "keine Gruppe"
 
-#: editor_edit_groups.cc:225 mixer_ui.cc:964
+#: editor_edit_groups.cc:229 mixer_ui.cc:970
 #, fuzzy
 msgid "unnamed"
 msgstr "Umbenennen"
 
-#: editor_edit_groups.cc:252 mixer_ui.cc:830
+#: editor_edit_groups.cc:258 mixer_ui.cc:834
 msgid "-all-"
 msgstr "-alle-"
 
-#: editor_export_audio.cc:64
+#: editor_export_audio.cc:65
 msgid ""
 "There is no selection to export.\n"
 "\n"
 "Select a selection using the range mouse mode"
 msgstr ""
 
-#: editor_export_audio.cc:109
+#: editor_export_audio.cc:110
 msgid ""
 "There are no ranges to export.\n"
 "\n"
 "Create 1 or more ranges by dragging the mouse in the range bar"
 msgstr ""
 
-#: editor_imageframe.cc:624 editor_imageframe.cc:654
+#: editor_imageframe.cc:625 editor_imageframe.cc:655
 msgid "programming error: no ImageFrameView selected"
 msgstr ""
 
-#: editor_imageframe.cc:847 editor_imageframe.cc:869
+#: editor_imageframe.cc:848 editor_imageframe.cc:870
 msgid "programming error: no MarkerView selected"
 msgstr ""
 
@@ -3542,142 +3514,142 @@ msgstr ""
 msgid "mute region"
 msgstr "Name für Region:"
 
-#: editor_keys.cc:45
+#: editor_keys.cc:46
 #, fuzzy
 msgid "keyboard selection"
 msgstr "Auswahl zu Abschnitt machen"
 
-#: editor_markers.cc:291 editor_ops.cc:1227 editor_ops.cc:1240
-#: editor_ops.cc:1258 location_ui.cc:773
+#: editor_markers.cc:292 editor_ops.cc:1290 editor_ops.cc:1303
+#: editor_ops.cc:1321 location_ui.cc:774
 msgid "add marker"
 msgstr ""
 
-#: editor_markers.cc:306 editor_markers.cc:379 editor_markers.cc:551
-#: editor_markers.cc:569 editor_markers.cc:588 editor_markers.cc:607
-#: editor_markers.cc:637 editor_markers.cc:665 editor_markers.cc:693
-#: editor_markers.cc:731 editor_markers.cc:758 editor_markers.cc:781
-#: editor_markers.cc:800 editor_mouse.cc:1994 editor_mouse.cc:4237
+#: editor_markers.cc:307 editor_markers.cc:380 editor_markers.cc:552
+#: editor_markers.cc:570 editor_markers.cc:589 editor_markers.cc:608
+#: editor_markers.cc:638 editor_markers.cc:666 editor_markers.cc:694
+#: editor_markers.cc:732 editor_markers.cc:759 editor_markers.cc:782
+#: editor_markers.cc:801 editor_mouse.cc:2015 editor_mouse.cc:4275
 msgid "programming error: marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_markers.cc:330 location_ui.cc:655
+#: editor_markers.cc:331 location_ui.cc:656
 msgid "remove marker"
 msgstr ""
 
-#: editor_markers.cc:457
+#: editor_markers.cc:458
 #, fuzzy
 msgid "Locate to Mark"
 msgstr "Stellen"
 
-#: editor_markers.cc:458
+#: editor_markers.cc:459
 #, fuzzy
 msgid "Play from Mark"
 msgstr "Wiedergabe ab Anfang"
 
-#: editor_markers.cc:459
+#: editor_markers.cc:460
 #, fuzzy
 msgid "Set Mark from Playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor_markers.cc:463
+#: editor_markers.cc:464
 #, fuzzy
 msgid "Rename Mark"
 msgstr "Umbenennen"
 
-#: editor_markers.cc:464
+#: editor_markers.cc:465
 #, fuzzy
 msgid "Hide Mark"
 msgstr "Stille einfügen"
 
-#: editor_markers.cc:465
+#: editor_markers.cc:466
 #, fuzzy
 msgid "Remove Mark"
 msgstr "Feld entfernen"
 
-#: editor_markers.cc:478 editor_markers.cc:534
+#: editor_markers.cc:479 editor_markers.cc:535
 #, fuzzy
 msgid "Locate to Range Mark"
 msgstr "Stellen"
 
-#: editor_markers.cc:479 editor_markers.cc:535
+#: editor_markers.cc:480 editor_markers.cc:536
 #, fuzzy
 msgid "Play from Range Mark"
 msgstr "Bereich"
 
-#: editor_markers.cc:480
+#: editor_markers.cc:481
 #, fuzzy
 msgid "Loop Range"
 msgstr "Bereich"
 
-#: editor_markers.cc:481 editor_markers.cc:536
+#: editor_markers.cc:482 editor_markers.cc:537
 #, fuzzy
 msgid "Set Range Mark from Playhead"
 msgstr "Wiedergabe ab Playhead"
 
-#: editor_markers.cc:482 editor_markers.cc:537
+#: editor_markers.cc:483 editor_markers.cc:538
 #, fuzzy
 msgid "Set Range from Range Selection"
 msgstr "Auswahl wiedergeben"
 
-#: editor_markers.cc:486
+#: editor_markers.cc:487
 #, fuzzy
 msgid "Rename Range"
 msgstr "Umbenennen"
 
-#: editor_markers.cc:487 editor_markers.cc:539
+#: editor_markers.cc:488 editor_markers.cc:540
 #, fuzzy
 msgid "Hide Range"
 msgstr "Bereich"
 
-#: editor_markers.cc:488
+#: editor_markers.cc:489
 #, fuzzy
 msgid "Remove Range"
 msgstr "Feld entfernen"
 
-#: editor_markers.cc:492 editor_markers.cc:541
+#: editor_markers.cc:493 editor_markers.cc:542
 msgid "Separate Regions in Range"
 msgstr ""
 
-#: editor_markers.cc:493 editor_markers.cc:542
+#: editor_markers.cc:494 editor_markers.cc:543
 #, fuzzy
 msgid "Select All in Range"
 msgstr "Auswahl"
 
-#: editor_markers.cc:519
+#: editor_markers.cc:520
 #, fuzzy
 msgid "Set Loop Range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor_markers.cc:520
+#: editor_markers.cc:521
 msgid "Set Punch Range"
 msgstr ""
 
-#: editor_markers.cc:814
+#: editor_markers.cc:815
 #, fuzzy
 msgid "New Name:"
 msgstr "Neuer Name: "
 
-#: editor_markers.cc:817
+#: editor_markers.cc:818
 #, fuzzy
 msgid "ardour: rename mark"
 msgstr "Ardour: Region umbenennen"
 
-#: editor_markers.cc:819
+#: editor_markers.cc:820
 #, fuzzy
 msgid "ardour: rename range"
 msgstr "Ardour: Region umbenennen"
 
-#: editor_markers.cc:839
+#: editor_markers.cc:840
 #, fuzzy
 msgid "rename marker"
 msgstr "Feld entfernen"
 
-#: editor_markers.cc:864
+#: editor_markers.cc:865
 #, fuzzy
 msgid "set loop range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor_markers.cc:890
+#: editor_markers.cc:891
 #, fuzzy
 msgid "set punch range"
 msgstr "Ausgewählten Bereich wiedergeben"
@@ -3686,421 +3658,427 @@ msgstr "Ausgewählten Bereich wiedergeben"
 msgid "Editor::event_frame() used on unhandled event type %1"
 msgstr ""
 
-#: editor_mouse.cc:1589
+#: editor_mouse.cc:313
+#, fuzzy
+msgid "select on click"
+msgstr "Auswahl"
+
+#: editor_mouse.cc:1590
 msgid "programming error: start_grab called without drag item"
 msgstr ""
 
-#: editor_mouse.cc:1793
+#: editor_mouse.cc:1814
 msgid "change fade in length"
 msgstr ""
 
-#: editor_mouse.cc:1811
+#: editor_mouse.cc:1832
 msgid "programming error: fade out canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:1885
+#: editor_mouse.cc:1906
 #, fuzzy
 msgid "change fade out length"
 msgstr "Ardour: Editor"
 
-#: editor_mouse.cc:1904
+#: editor_mouse.cc:1925
 msgid "programming error: cursor canvas item has no cursor data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2119
+#: editor_mouse.cc:2142
 #, fuzzy
 msgid "move marker"
 msgstr "Feld entfernen"
 
-#: editor_mouse.cc:2142 editor_mouse.cc:2173 editor_tempodisplay.cc:461
+#: editor_mouse.cc:2165 editor_mouse.cc:2196 editor_tempodisplay.cc:459
 msgid ""
 "programming error: meter marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2241
+#: editor_mouse.cc:2264
 #, fuzzy
 msgid "copy meter mark"
 msgstr "Ardour: Region umbenennen"
 
-#: editor_mouse.cc:2251
+#: editor_mouse.cc:2274
 msgid "move meter mark"
 msgstr ""
 
-#: editor_mouse.cc:2266 editor_mouse.cc:2299 editor_tempodisplay.cc:327
-#: editor_tempodisplay.cc:411 editor_tempodisplay.cc:430
+#: editor_mouse.cc:2289 editor_mouse.cc:2322 editor_tempodisplay.cc:331
+#: editor_tempodisplay.cc:409 editor_tempodisplay.cc:428
 msgid ""
 "programming error: tempo marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2271 editor_mouse.cc:2304 editor_tempodisplay.cc:332
-#: editor_tempodisplay.cc:416
+#: editor_mouse.cc:2294 editor_mouse.cc:2327 editor_tempodisplay.cc:336
+#: editor_tempodisplay.cc:414
 msgid "programming error: marker for tempo is not a tempo marker!"
 msgstr ""
 
-#: editor_mouse.cc:2371
+#: editor_mouse.cc:2394
 #, fuzzy
 msgid "copy tempo mark"
 msgstr "Ardour: Region umbenennen"
 
-#: editor_mouse.cc:2381
+#: editor_mouse.cc:2404
 msgid "move tempo mark"
 msgstr ""
 
-#: editor_mouse.cc:2395 editor_mouse.cc:2414 editor_mouse.cc:2427
+#: editor_mouse.cc:2418 editor_mouse.cc:2437 editor_mouse.cc:2450
 msgid ""
 "programming error: control point canvas item has no control point object "
 "pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2525
+#: editor_mouse.cc:2555
 msgid "programming error: line canvas item has no line pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2634
+#: editor_mouse.cc:2664
 #, fuzzy
 msgid "move region(s)"
 msgstr "Name für Region:"
 
-#. this is committed in the grab finished callback.
-#: editor_mouse.cc:2646
-msgid "Drag region copy"
-msgstr ""
-
-#: editor_mouse.cc:2758
+#: editor_mouse.cc:2727
 #, fuzzy
 msgid "Drag region brush"
 msgstr "Ardour: Region"
 
+#. don't copy again
+#. this is committed in the grab finished callback.
+#: editor_mouse.cc:2751
+msgid "Drag region copy"
+msgstr ""
+
 #. A selection grab currently creates two undo/redo operations, one for
 #. creating the new region and another for moving it.
 #.
-#: editor_mouse.cc:3574
+#: editor_mouse.cc:3609
 #, fuzzy
 msgid "selection grab"
 msgstr "Auswahl"
 
-#: editor_mouse.cc:3615
+#: editor_mouse.cc:3650
 #, fuzzy
 msgid "cancel selection"
 msgstr "Auswahl wiedergeben"
 
-#: editor_mouse.cc:3722
+#: editor_mouse.cc:3760
 #, fuzzy
 msgid "range selection"
 msgstr "Auswahl wiedergeben"
 
-#: editor_mouse.cc:3738
+#: editor_mouse.cc:3776
 #, fuzzy
 msgid "trim selection start"
 msgstr "Auswahl zu Abschnitt machen"
 
-#: editor_mouse.cc:3754
+#: editor_mouse.cc:3792
 #, fuzzy
 msgid "trim selection end"
 msgstr "Auswahl zu Abschnitt machen"
 
-#: editor_mouse.cc:3771
+#: editor_mouse.cc:3809
 #, fuzzy
 msgid "move selection"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_mouse.cc:4157
+#: editor_mouse.cc:4195
 msgid "Start point trim"
 msgstr ""
 
-#: editor_mouse.cc:4185
+#: editor_mouse.cc:4223
 msgid "End point trim"
 msgstr ""
 
-#: editor_mouse.cc:4224
+#: editor_mouse.cc:4262
 #, fuzzy
 msgid "trimmed region"
 msgstr "Ardour: Region"
 
-#: editor_mouse.cc:4363
+#: editor_mouse.cc:4400
 #, fuzzy
 msgid "new range marker"
 msgstr "Ardour: Region umbenennen"
 
-#: editor_mouse.cc:4578
+#: editor_mouse.cc:4642
 #, fuzzy
 msgid "select regions"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_mouse.cc:4607
+#: editor_mouse.cc:4671
 msgid "Name for region:"
 msgstr "Name für Region:"
 
-#: editor_mouse.cc:4671
+#: editor_mouse.cc:4735
 #, fuzzy
 msgid "timestretch"
 msgstr "Ardour: Mixer"
 
-#: editor_ops.cc:132
+#: editor_ops.cc:195
 #, fuzzy
 msgid "split"
 msgstr "Teilen"
 
-#: editor_ops.cc:168
+#: editor_ops.cc:231
 #, fuzzy
 msgid "remove region"
 msgstr "Name für Region:"
 
-#: editor_ops.cc:187
+#: editor_ops.cc:250
 msgid ""
 " This is destructive, will possibly delete audio files\n"
 "It cannot be undone\n"
 "Do you really want to destroy %1 ?"
 msgstr ""
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "these regions"
 msgstr "Name für Region:"
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "this region"
 msgstr "Name für Region:"
 
-#: editor_ops.cc:193 editor_ops.cc:3229 route_ui.cc:700
-#: visual_time_axis.cc:277
+#: editor_ops.cc:256 editor_ops.cc:3318 route_ui.cc:707
+#: visual_time_axis.cc:278
 msgid "No, do nothing."
 msgstr "Nein, nichts machen."
 
-#: editor_ops.cc:196
+#: editor_ops.cc:259
 #, fuzzy
 msgid "Yes, destroy them."
 msgstr "Ja, entfernen."
 
-#: editor_ops.cc:198 editor_ops.cc:3230
+#: editor_ops.cc:261 editor_ops.cc:3319
 #, fuzzy
 msgid "Yes, destroy it."
 msgstr "Ja, entfernen."
 
-#: editor_ops.cc:289 editor_ops.cc:317
+#: editor_ops.cc:352 editor_ops.cc:380
 #, fuzzy
 msgid "extend selection"
 msgstr "Auswahl zu Abschnitt machen"
 
-#: editor_ops.cc:333 editor_ops.cc:367 editor_ops.cc:411 editor_ops.cc:437
+#: editor_ops.cc:396 editor_ops.cc:430 editor_ops.cc:474 editor_ops.cc:500
 msgid "nudge forward"
 msgstr ""
 
-#: editor_ops.cc:501
+#: editor_ops.cc:564
 msgid "build_region_boundary_cache called with snap_type = %1"
 msgstr ""
 
-#: editor_ops.cc:1354
+#: editor_ops.cc:1420
 #, fuzzy
 msgid "select all within"
 msgstr "Auswahl"
 
-#: editor_ops.cc:1380
+#: editor_ops.cc:1452
 #, fuzzy
 msgid "set selection from region"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor_ops.cc:1413
+#: editor_ops.cc:1485
 #, fuzzy
 msgid "set selection from range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor_ops.cc:1443
+#: editor_ops.cc:1515
 #, fuzzy
 msgid "select all from range"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor_ops.cc:1465
+#: editor_ops.cc:1537
 #, fuzzy
 msgid "select all from punch"
 msgstr "Auswahl"
 
-#: editor_ops.cc:1487
+#: editor_ops.cc:1559
 #, fuzzy
 msgid "select all from loop"
 msgstr "Auswahl"
 
-#: editor_ops.cc:1501
+#: editor_ops.cc:1573
 #, fuzzy
 msgid "select all after cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_ops.cc:1506
+#: editor_ops.cc:1578
 #, fuzzy
 msgid "select all before cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_ops.cc:1536
+#: editor_ops.cc:1608
 #, fuzzy
 msgid "select all between cursors"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_ops.cc:1667
+#: editor_ops.cc:1739
 msgid "clear markers"
 msgstr ""
 
-#: editor_ops.cc:1679
+#: editor_ops.cc:1751
 #, fuzzy
 msgid "clear ranges"
 msgstr "Verbindungen löschen"
 
-#: editor_ops.cc:1698
+#: editor_ops.cc:1770
 #, fuzzy
 msgid "clear locations"
 msgstr "Verbindungen löschen"
 
-#: editor_ops.cc:1748
+#: editor_ops.cc:1820
 #, fuzzy
 msgid "insert dragged region"
 msgstr "Ardour: Region"
 
-#: editor_ops.cc:1784
+#: editor_ops.cc:1856
 #, fuzzy
 msgid "insert region"
 msgstr "Name für Region:"
 
-#: editor_ops.cc:1975 io_selector.cc:57 io_selector.cc:791
+#: editor_ops.cc:2047 io_selector.cc:58 io_selector.cc:792
 msgid "OK"
 msgstr ""
 
-#: editor_ops.cc:1982
+#: editor_ops.cc:2054
 msgid "ardour: rename region"
 msgstr "Ardour: Region umbenennen"
 
-#: editor_ops.cc:2205 editor_ops.cc:2254
+#: editor_ops.cc:2277 editor_ops.cc:2326
 #, fuzzy
 msgid "separate"
 msgstr "Ausgewählten Bereich wiedergeben"
 
-#: editor_ops.cc:2316
+#: editor_ops.cc:2388
 #, fuzzy
 msgid "trim to selection"
 msgstr "Auswahl zu Abschnitt machen"
 
-#: editor_ops.cc:2356
+#: editor_ops.cc:2428
 msgid "region fill"
 msgstr ""
 
-#: editor_ops.cc:2415
+#: editor_ops.cc:2487
 #, fuzzy
 msgid "fill selection"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_ops.cc:2436
+#: editor_ops.cc:2508
 msgid "Programming error. that region doesn't cover that position"
 msgstr ""
 
-#: editor_ops.cc:2439
+#: editor_ops.cc:2511
 #, fuzzy
 msgid "set region sync position"
 msgstr "Regionen"
 
-#: editor_ops.cc:2454
+#: editor_ops.cc:2526
 msgid "Place the edit cursor at the desired sync point"
 msgstr ""
 "Positionieren sie den Arbeits-Cursor am gewünschten Synchronisationspunkt"
 
-#: editor_ops.cc:2459
+#: editor_ops.cc:2531
 #, fuzzy
 msgid "set sync from edit cursor"
 msgstr "Wiedergabe ab Cursor"
 
-#: editor_ops.cc:2471
+#: editor_ops.cc:2543
 #, fuzzy
 msgid "remove sync"
 msgstr "Synchronisationspunkt entfernen"
 
-#: editor_ops.cc:2485
+#: editor_ops.cc:2557
 #, fuzzy
 msgid "naturalize"
 msgstr "Ardour: Region"
 
-#: editor_ops.cc:2549
+#: editor_ops.cc:2621
 msgid "align selection (relative)"
 msgstr ""
 
-#: editor_ops.cc:2577
+#: editor_ops.cc:2649
 #, fuzzy
 msgid "align selection"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_ops.cc:2589
+#: editor_ops.cc:2661
 #, fuzzy
 msgid "align region"
 msgstr "Ardour: Region"
 
-#: editor_ops.cc:2636 editor_ops.cc:2661
+#: editor_ops.cc:2708 editor_ops.cc:2733
 msgid "trim to edit"
 msgstr ""
 
-#: editor_ops.cc:2712
+#: editor_ops.cc:2784
 #, fuzzy
 msgid "ardour: freeze"
 msgstr "Ardour: "
 
-#: editor_ops.cc:2717
+#: editor_ops.cc:2789
 #, fuzzy
 msgid "Cancel Freeze"
 msgstr "Abbrechen"
 
-#: editor_ops.cc:2754
+#: editor_ops.cc:2826
 #, fuzzy
 msgid "bounce range"
 msgstr "Bereich"
 
-#: editor_ops.cc:2807
+#: editor_ops.cc:2879
 #, fuzzy
 msgid "cut"
 msgstr "Ausschneiden"
 
-#: editor_ops.cc:2810
+#: editor_ops.cc:2882
 #, fuzzy
 msgid "copy"
 msgstr "Kopieren"
 
-#: editor_ops.cc:2823
+#: editor_ops.cc:2895
 #, fuzzy
 msgid " objects"
 msgstr "Objekt"
 
-#: editor_ops.cc:2849
+#: editor_ops.cc:2921
 #, fuzzy
 msgid " range"
 msgstr "Bereich"
 
-#: editor_ops.cc:3006
+#: editor_ops.cc:3078
 #, fuzzy
 msgid "paste"
 msgstr "Einfügen"
 
-#: editor_ops.cc:3044
+#: editor_ops.cc:3116
 #, fuzzy
 msgid "paste chunk"
 msgstr "Abschnitt erzeugen:"
 
 #. clear (below) will clear the argument list
-#: editor_ops.cc:3085
+#: editor_ops.cc:3157
 #, fuzzy
 msgid "duplicate region"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_ops.cc:3130
+#: editor_ops.cc:3202
 #, fuzzy
 msgid "duplicate selection"
 msgstr "Auswahl zu Schleife machen"
 
-#: editor_ops.cc:3170
+#: editor_ops.cc:3259
 #, fuzzy
 msgid "clear playlist"
 msgstr "Name für Schnappschuß"
 
-#: editor_ops.cc:3199
+#: editor_ops.cc:3288
 #, fuzzy
 msgid "nudge track"
 msgstr "Stille einfügen"
 
-#: editor_ops.cc:3226
+#: editor_ops.cc:3315
 #, fuzzy
 msgid ""
 "Do you really want to destroy the last capture?\n"
@@ -4109,172 +4087,169 @@ msgstr ""
 "Wollen Sie wirklich die Spur \"%1\" löschen?\n"
 "(Kann nicht rückgängig gemacht werden!)"
 
-#: editor_ops.cc:3254
+#: editor_ops.cc:3343
 #, fuzzy
 msgid "normalize"
 msgstr "Ardour: Region"
 
-#: editor_ops.cc:3301
+#: editor_ops.cc:3390
 #, fuzzy
 msgid "reverse regions"
 msgstr "Name für Region:"
 
-#: editor_region_list.cc:93 editor_region_list.cc:98 editor_region_list.cc:101
-#: location_ui.cc:55
+#: editor_region_list.cc:98 editor_region_list.cc:103
+#: editor_region_list.cc:106 location_ui.cc:56
 #, fuzzy
 msgid "Hidden"
 msgstr "Verbergen"
 
 #. added a new fresh one at the end
-#: editor_route_list.cc:101 editor_route_list.cc:102 editor_route_list.cc:246
+#: editor_route_list.cc:102 editor_route_list.cc:103 editor_route_list.cc:247
 msgid "editor"
 msgstr ""
 
-#: editor_route_list.cc:309 mixer_ui.cc:695
+#: editor_route_list.cc:310 mixer_ui.cc:699
 msgid "Show All"
 msgstr "Alles zeigen"
 
-#: editor_route_list.cc:310 mixer_ui.cc:696
+#: editor_route_list.cc:311 mixer_ui.cc:700
 msgid "Hide All"
 msgstr "Alle verstecken"
 
-#: editor_route_list.cc:311 mixer_ui.cc:697
+#: editor_route_list.cc:312 mixer_ui.cc:701
 #, fuzzy
 msgid "Show All Audio Tracks"
 msgstr "Auswahl"
 
-#: editor_route_list.cc:312 mixer_ui.cc:698
+#: editor_route_list.cc:313 mixer_ui.cc:702
 #, fuzzy
 msgid "Hide All Audio Tracks"
 msgstr "Auswahl"
 
-#: editor_route_list.cc:313 mixer_ui.cc:699
+#: editor_route_list.cc:314 mixer_ui.cc:703
 msgid "Show All Audio Busses"
 msgstr ""
 
-#: editor_route_list.cc:314 mixer_ui.cc:700
+#: editor_route_list.cc:315 mixer_ui.cc:704
 msgid "Hide All Audio Busses"
 msgstr ""
 
-#: editor_rulers.cc:311
+#: editor_rulers.cc:312
 #, fuzzy
 msgid "New location marker"
 msgstr "Stellen"
 
-#: editor_rulers.cc:312
+#: editor_rulers.cc:313
 #, fuzzy
 msgid "Clear all locations"
 msgstr "Verbindungen löschen"
 
 #. ruler_items.push_back (MenuElem (_("New Range")));
-#: editor_rulers.cc:317
+#: editor_rulers.cc:318
 #, fuzzy
 msgid "Clear all ranges"
 msgstr "Verbindungen löschen"
 
-#: editor_rulers.cc:326
+#: editor_rulers.cc:327
 msgid "New Tempo"
 msgstr ""
 
-#: editor_rulers.cc:327
+#: editor_rulers.cc:328
 #, fuzzy
 msgid "Clear tempo"
 msgstr "leeren"
 
-#: editor_rulers.cc:332
+#: editor_rulers.cc:333
 msgid "New Meter"
 msgstr ""
 
-#: editor_rulers.cc:333
+#: editor_rulers.cc:334
 #, fuzzy
 msgid "Clear meter"
 msgstr "leeren"
 
-#: editor_rulers.cc:341
+#: editor_rulers.cc:342
 #, fuzzy
 msgid "Min:Secs"
 msgstr "Min:Sek"
 
-#: editor_selection_list.cc:110
+#: editor_selection_list.cc:108
 #, fuzzy
 msgid "Name for Chunk:"
 msgstr "Name für Abschnitt:"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 #, fuzzy
 msgid "Create Chunk"
 msgstr "Abschnitt erzeugen:"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 msgid "Forget it"
 msgstr "Abbrechen"
 
-#: editor_tempodisplay.cc:249 editor_tempodisplay.cc:289
+#: editor_tempodisplay.cc:253 editor_tempodisplay.cc:293
 #, fuzzy
 msgid "add"
 msgstr "Hinzufügen"
 
-#: editor_tempodisplay.cc:271
+#: editor_tempodisplay.cc:275
 #, fuzzy
 msgid "add tempo mark"
 msgstr "Ardour: Region umbenennen"
 
-#: editor_tempodisplay.cc:311
+#: editor_tempodisplay.cc:315
 #, fuzzy
 msgid "add meter mark"
 msgstr "Ardour: Region umbenennen"
 
-#: editor_tempodisplay.cc:344 editor_tempodisplay.cc:375
+#: editor_tempodisplay.cc:348 editor_tempodisplay.cc:376
 #, fuzzy
 msgid "done"
 msgstr "keine"
 
-#: editor_tempodisplay.cc:365 editor_tempodisplay.cc:396
+#: editor_tempodisplay.cc:366 editor_tempodisplay.cc:394
 msgid "replace tempo mark"
 msgstr ""
 
-#: editor_tempodisplay.cc:435 editor_tempodisplay.cc:466
+#: editor_tempodisplay.cc:433 editor_tempodisplay.cc:464
 msgid "programming error: marker for meter is not a meter marker!"
 msgstr ""
 
-#: editor_tempodisplay.cc:445 editor_tempodisplay.cc:478
+#: editor_tempodisplay.cc:443 editor_tempodisplay.cc:476
 #, fuzzy
 msgid "remove tempo mark"
 msgstr "Ja, entfernen."
 
-#: editor_timefx.cc:50
+#: editor_timefx.cc:51
 msgid "Quick but Ugly"
 msgstr ""
 
-#: editor_timefx.cc:51
+#: editor_timefx.cc:52
 msgid "Skip Anti-aliasing"
 msgstr ""
 
-#: editor_timefx.cc:53
-msgid "Stretch/Shrink it"
-msgstr ""
-
-#: editor_timefx.cc:57
+#: editor_timefx.cc:56
 #, fuzzy
 msgid "ardour: timestretch"
 msgstr "Ardour: Mixer"
 
-#: editor_timefx.cc:58
+#: editor_timefx.cc:57
 msgid "TimeStretchDialog"
 msgstr ""
 
-#: editor_timefx.cc:80 editor_timefx.cc:81 editor_timefx.cc:82
-#: editor_timefx.cc:83
+#: editor_timefx.cc:70
+msgid "Stretch/Shrink it"
+msgstr ""
+
+#: editor_timefx.cc:73 editor_timefx.cc:74
 msgid "TimeStretchButton"
 msgstr ""
 
-#: editor_timefx.cc:84
+#: editor_timefx.cc:75
 msgid "TimeStretchProgress"
 msgstr ""
 
-#. GTK2FIX
-#. current_timestretch->close ();
-#: editor_timefx.cc:153
+#: editor_timefx.cc:139
 msgid "timestretch cannot be started - thread creation error"
 msgstr ""
 
@@ -4408,7 +4383,7 @@ msgstr ""
 msgid "Export to File"
 msgstr "Export nach CD"
 
-#: export_dialog.cc:113 option_editor.cc:82 option_editor.cc:83
+#: export_dialog.cc:113 option_editor.cc:83 option_editor.cc:84
 msgid "Browse"
 msgstr ""
 
@@ -4425,7 +4400,8 @@ msgstr "Ardour: Exportieren"
 msgid "ardour_export"
 msgstr "Ardour: Exportieren"
 
-#: export_dialog.cc:139 export_dialog.cc:155
+#: export_dialog.cc:139 export_dialog.cc:155 mixer_strip.cc:124
+#: mixer_strip.cc:767
 #, fuzzy
 msgid "Output"
 msgstr "Ausgänge"
@@ -4462,140 +4438,72 @@ msgstr ""
 msgid "File already exists, do you want to overwrite it?"
 msgstr ""
 
-#: export_dialog.cc:1159 export_range_markers_dialog.cc:154
+#: export_dialog.cc:1159 export_range_markers_dialog.cc:153
 msgid "Cannot write file in: "
 msgstr ""
 
 #. warning dialog
-#: export_range_markers_dialog.cc:136
+#: export_range_markers_dialog.cc:135
 msgid "Please enter a valid target directory."
 msgstr ""
 
-#: export_range_markers_dialog.cc:144
+#: export_range_markers_dialog.cc:143
 msgid ""
 "Please select an existing target directory. Files\n"
 "are not allowed!"
 msgstr ""
 
-#: gain_automation_time_axis.cc:61
+#: gain_automation_time_axis.cc:62
 #, fuzzy
 msgid "add gain automation event"
 msgstr "Stellen"
 
-#: gain_meter.cc:66
+#: gain_meter.cc:67
 msgid "cannot find images for fader slider"
 msgstr ""
 
-#: gain_meter.cc:73
+#: gain_meter.cc:74
 msgid "cannot find images for fader rail"
 msgstr ""
 
-#: gain_meter.cc:88
-msgid "dbFS"
-msgstr ""
-
-#: gain_meter.cc:89 gain_meter.cc:143 gain_meter.cc:704
-msgid "pre"
+#: gain_meter.cc:130 gain_meter.cc:339 gain_meter.cc:494 gain_meter.cc:539
+msgid "-inf"
 msgstr ""
 
-#: gain_meter.cc:139 gain_meter.cc:700
+#: gain_meter.cc:140
 #, fuzzy
-msgid "input"
-msgstr "%1 Eingang"
+msgid "Fader automation mode"
+msgstr "Stellen"
 
-#: gain_meter.cc:147 gain_meter.cc:708
+#: gain_meter.cc:141
 #, fuzzy
-msgid "post"
-msgstr "Anschluß"
-
-#. TRANSLATORS: this string should be longest of the strings
-#. used to describe meter points. In english, its "input".
-#.
-#: gain_meter.cc:155
-msgid "tupni"
-msgstr ""
+msgid "Fader automation type"
+msgstr "Stellen"
 
-#: gain_meter.cc:174 gain_meter.cc:458 gain_meter.cc:480 gain_meter.cc:525
-msgid "-inf"
+#. XXX it might different in different languages
+#: gain_meter.cc:182 gain_meter.cc:817 panner_ui.cc:99 panner_ui.cc:807
+msgid "Abs"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:1
-#, fuzzy
-msgid "<b>Advanced</b>"
-msgstr "Feld hinzufügen..."
-
-#: glade/new_session_dialog.glade.h:2
-msgid "<b>Input</b>"
+#: gain_meter.cc:472
+msgid "-Inf"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:3
+#: gain_meter.cc:781 mixer_strip.cc:770 panner_ui.cc:771
 #, fuzzy
-msgid "<b>Output</b>"
-msgstr "Ausgänge"
-
-#: glade/new_session_dialog.glade.h:4
-#, fuzzy
-msgid "Automatically connect inputs"
-msgstr "Verfügbare Verbindungen"
-
-#: glade/new_session_dialog.glade.h:5
-#, fuzzy
-msgid "Automatically connect outputs"
-msgstr "Verfügbare Verbindungen"
-
-#: glade/new_session_dialog.glade.h:6
-#, fuzzy
-msgid "Channel Count"
-msgstr "Importieren Abbrechen"
-
-#: glade/new_session_dialog.glade.h:7
-msgid "Connect to Master Bus"
-msgstr ""
-
-#: glade/new_session_dialog.glade.h:8
-msgid "Connect to physical outputs"
-msgstr ""
+msgid "O"
+msgstr "ODER"
 
-#: glade/new_session_dialog.glade.h:9
-msgid "Create Control Bus"
+#: gain_meter.cc:784 panner_ui.cc:774
+msgid "P"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:10
-msgid "Create Master Bus"
+#: gain_meter.cc:787 panner_ui.cc:777
+msgid "T"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:11
-#, fuzzy
-msgid "New Session"
-msgstr "Sitzung"
-
-#: glade/new_session_dialog.glade.h:12
-#, fuzzy
-msgid "Open Recent Session"
-msgstr "Sitzung"
-
-#: glade/new_session_dialog.glade.h:13
-#, fuzzy
-msgid "Open Session"
-msgstr "Sitzung"
-
-#: glade/new_session_dialog.glade.h:14
-#, fuzzy
-msgid "Port limit"
-msgstr "Abbrechen"
-
-#: glade/new_session_dialog.glade.h:15
-#, fuzzy
-msgid "Select a File"
-msgstr "Auswahl"
-
-#: glade/new_session_dialog.glade.h:16
-#, fuzzy
-msgid "Select a Session"
-msgstr "Auswahl zu Schleife machen"
-
-#: glade/new_session_dialog.glade.h:17
-msgid "Track/Bus connection options"
+#: gain_meter.cc:790 panner_ui.cc:780
+msgid "W"
 msgstr ""
 
 #: gtk-custom-ruler.c:126
@@ -4643,251 +4551,251 @@ msgid "Draw current ruler position"
 msgstr ""
 
 #. end-of-file, other end closed or shutdown?
-#: imageframe_socket_handler.cc:126
+#: imageframe_socket_handler.cc:127
 msgid "Image Compositor Socket has been shutdown/closed"
 msgstr ""
 
-#: imageframe_time_axis.cc:287
+#: imageframe_time_axis.cc:286
 #, fuzzy
 msgid "0.5 seconds"
 msgstr "Minuten:Sekunden"
 
-#: imageframe_time_axis.cc:288 marker_time_axis.cc:241
+#: imageframe_time_axis.cc:287 marker_time_axis.cc:242
 #, fuzzy
 msgid "1 seconds"
 msgstr "Minuten:Sekunden"
 
-#: imageframe_time_axis.cc:289 marker_time_axis.cc:242
+#: imageframe_time_axis.cc:288 marker_time_axis.cc:243
 #, fuzzy
 msgid "1.5 seconds"
 msgstr "Minuten:Sekunden"
 
-#: imageframe_time_axis.cc:290 marker_time_axis.cc:243
+#: imageframe_time_axis.cc:289 marker_time_axis.cc:244
 #, fuzzy
 msgid "2 seconds"
 msgstr "Minuten:Sekunden"
 
-#: imageframe_time_axis.cc:291 marker_time_axis.cc:244
+#: imageframe_time_axis.cc:290 marker_time_axis.cc:245
 #, fuzzy
 msgid "2.5 seconds"
 msgstr "Minuten:Sekunden"
 
-#: imageframe_time_axis.cc:292 marker_time_axis.cc:245
+#: imageframe_time_axis.cc:291 marker_time_axis.cc:246
 #, fuzzy
 msgid "3 seconds"
 msgstr "Minuten:Sekunden"
 
 #. duration_items.push_back(SeparatorElem()) ;
 #. duration_items.push_back(MenuElem (_("custom"), mem_fun(*this, &ImageFrameTimeAxis::set_marker_duration_custom))) ;
-#: imageframe_time_axis.cc:297 marker_time_axis.cc:250
+#: imageframe_time_axis.cc:296 marker_time_axis.cc:251
 #, fuzzy
 msgid "Duration (sec)"
 msgstr "Ardour: Region"
 
-#: imageframe_time_axis.cc:302
+#: imageframe_time_axis.cc:301
 #, fuzzy
 msgid "Remove Frame"
 msgstr "Feld entfernen"
 
-#: imageframe_time_axis.cc:305
+#: imageframe_time_axis.cc:304
 msgid "Image Frame"
 msgstr ""
 
-#: imageframe_time_axis.cc:306 marker_time_axis.cc:256
+#: imageframe_time_axis.cc:305 marker_time_axis.cc:257
 #, fuzzy
 msgid "Rename Track"
 msgstr "Umbenennen"
 
-#: io_selector.cc:59 io_selector.cc:793
+#: io_selector.cc:60 io_selector.cc:794
 #, fuzzy
 msgid "Rescan"
 msgstr "Auffrischen"
 
-#: io_selector.cc:67
+#: io_selector.cc:68
 msgid "%1 input"
 msgstr "%1 Eingang"
 
-#: io_selector.cc:69
+#: io_selector.cc:70
 msgid "%1 output"
 msgstr "%1 Ausgang"
 
-#: io_selector.cc:141 route_params_ui.cc:106
+#: io_selector.cc:142 route_params_ui.cc:107
 #, fuzzy
 msgid "Inputs"
 msgstr "Eingänge"
 
-#: io_selector.cc:141 route_params_ui.cc:107
+#: io_selector.cc:142 route_params_ui.cc:108
 #, fuzzy
 msgid "Outputs"
 msgstr "Ausgänge"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Input"
 msgstr "Port hinzufügen"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Output"
 msgstr "%1 Ausgang"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Input"
 msgstr "Synchronisationspunkt entfernen"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Output"
 msgstr "Ausgänge"
 
-#: io_selector.cc:144
+#: io_selector.cc:145
 #, fuzzy
 msgid "Disconnect All"
 msgstr "Trennen"
 
-#: io_selector.cc:158
+#: io_selector.cc:159
 msgid "Available connections"
 msgstr "Verfügbare Verbindungen"
 
-#: io_selector.cc:554 io_selector.cc:573
+#: io_selector.cc:555 io_selector.cc:574
 msgid "There are no more JACK ports available."
 msgstr ""
 
-#: io_selector.cc:648 io_selector.cc:675 io_selector.cc:728
+#: io_selector.cc:649 io_selector.cc:676 io_selector.cc:729
 msgid "port"
 msgstr "Anschluß"
 
-#: io_selector.cc:797
+#: io_selector.cc:798
 msgid "ardour: "
 msgstr "Ardour: "
 
-#: keyboard.cc:297
+#: keyboard.cc:299
 msgid "KeyboardTarget: keyname \"%1\" is unknown."
 msgstr ""
 
-#: keyboard.cc:523
+#: keyboard.cc:525
 msgid ""
 "Your system is completely broken - NumLock uses \"%1\"as its modifier. This "
 "is madness - see the man page for xmodmap to find out how to fix this."
 msgstr ""
 
-#: keyboard.cc:531
+#: keyboard.cc:533
 msgid ""
 "Your system generates \"%1\" when the NumLock key is pressed. This can cause "
 "problems when editing so Ardour will use %2 to mean Meta rather than %1"
 msgstr ""
 
-#: keyboard.cc:592
+#: keyboard.cc:594
 msgid "You have %1 keys bound to \"mod1\""
 msgstr ""
 
-#: keyboard.cc:607
+#: keyboard.cc:609
 msgid "You have %1 keys bound to \"mod2\""
 msgstr ""
 
-#: keyboard.cc:622
+#: keyboard.cc:624
 msgid "You have %1 keys bound to \"mod3\""
 msgstr ""
 
-#: keyboard.cc:637
+#: keyboard.cc:639
 msgid "You have %1 keys bound to \"mod4\""
 msgstr ""
 
-#: keyboard.cc:652
+#: keyboard.cc:654
 msgid "You have %1 keys bound to \"mod5\""
 msgstr ""
 
-#: location_ui.cc:47 location_ui.cc:50
+#: location_ui.cc:48 location_ui.cc:51
 #, fuzzy
 msgid "Set"
 msgstr "Auswahl"
 
-#: location_ui.cc:48 location_ui.cc:51
+#: location_ui.cc:49 location_ui.cc:52
 msgid "Go"
 msgstr ""
 
-#: location_ui.cc:54
+#: location_ui.cc:55
 msgid "CD"
 msgstr "CD"
 
-#: location_ui.cc:57
+#: location_ui.cc:58
 msgid "SCMS"
 msgstr ""
 
-#: location_ui.cc:58
+#: location_ui.cc:59
 msgid "Pre-Emphasis"
 msgstr ""
 
-#: location_ui.cc:569
+#: location_ui.cc:570
 #, fuzzy
 msgid "Add New Location"
 msgstr "Stellen"
 
-#: location_ui.cc:570
+#: location_ui.cc:571
 msgid "Add New Range"
 msgstr ""
 
-#: location_ui.cc:574
+#: location_ui.cc:575
 msgid "ardour: locations"
 msgstr ""
 
-#: location_ui.cc:575
+#: location_ui.cc:576
 #, fuzzy
 msgid "ardour_locations"
 msgstr "Ardour: Verbindungen"
 
-#: location_ui.cc:603
+#: location_ui.cc:604
 #, fuzzy
 msgid "Location (CD Index) Markers"
 msgstr "Stellen"
 
-#: location_ui.cc:623
+#: location_ui.cc:624
 msgid "Range (CD Track) Markers"
 msgstr ""
 
-#: location_ui.cc:789
+#: location_ui.cc:790
 #, fuzzy
 msgid "add range marker"
 msgstr "Ardour: Region umbenennen"
 
-#: main.cc:71
+#: main.cc:72
 msgid "ardour is killing itself for a clean exit\n"
 msgstr ""
 
-#: main.cc:80
+#: main.cc:81
 msgid "stopping user interface\n"
 msgstr ""
 
 #. XXX its doubtful that snprintf() is async-safe
-#: main.cc:99
+#: main.cc:100
 #, c-format
 msgid "%d(%d): received signal %d\n"
 msgstr ""
 
-#: main.cc:185
+#: main.cc:186
 msgid "cannot become new process group leader (%1)"
 msgstr ""
 
-#: main.cc:212
+#: main.cc:213
 msgid "cannot setup signal handling for %1"
 msgstr ""
 
-#: main.cc:223
+#: main.cc:224
 msgid "cannot set default signal mask (%1)"
 msgstr ""
 
-#: main.cc:253
+#: main.cc:254
 msgid ""
 "Without a UI style file, ardour will look strange.\n"
 " Please set ARDOUR2_UI_RC to point to a valid UI style file"
 msgstr ""
 
-#: main.cc:273
+#: main.cc:276
 msgid "Ardour could not connect to JACK."
 msgstr ""
 
-#: main.cc:277
+#: main.cc:280
 msgid ""
 "There are several possible reasons:\n"
 "\n"
@@ -4898,388 +4806,464 @@ msgid ""
 "Please consider the possibilities, and perhaps (re)start JACK."
 msgstr ""
 
-#: main.cc:324
+#: main.cc:310
+msgid "could not load command line session \"%1\""
+msgstr ""
+
+#. it wasn't new, but we require a new session
+#: main.cc:330
+msgid ""
+"\n"
+"\n"
+"A session named \"%1\" already exists.\n"
+"To avoid this message, start ardour as \"ardour %1"
+msgstr ""
+
+#: main.cc:341
+msgid ""
+"\n"
+"\n"
+"No session named \"%1\" exists.\n"
+"To create it from the command line, start ardour as \"ardour --new %1"
+msgstr ""
+
+#: main.cc:405
 msgid "Ardour/GTK "
 msgstr ""
 
-#: main.cc:326
+#: main.cc:407
 msgid ""
 "\n"
 "   (built using "
 msgstr ""
 
-#: main.cc:330
+#: main.cc:411
 msgid " with libardour "
 msgstr ""
 
-#: main.cc:335
+#: main.cc:416
 msgid " and GCC version "
 msgstr ""
 
-#: main.cc:345
-msgid "Copyright (C) 1999-2005 Paul Davis"
+#: main.cc:426
+msgid "Copyright (C) 1999-2006 Paul Davis"
 msgstr ""
 
-#: main.cc:346
+#: main.cc:427
 msgid ""
 "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker"
 msgstr ""
 
-#: main.cc:348
+#: main.cc:429
 msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
 msgstr "Achtung: Es gibt zu Ardour KEINERLEI Gewährleistung!"
 
-#: main.cc:349
+#: main.cc:430
 msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 msgstr ""
 
-#: main.cc:350
+#: main.cc:431
 msgid "This is free software, and you are welcome to redistribute it "
 msgstr "Dies ist freie Software und Sie dürfen sie gerne weiterverbreiten,"
 
-#: main.cc:351
+#: main.cc:432
 #, fuzzy
 msgid "under certain conditions; see the source for copying conditions."
 msgstr "solange Sie sich an die Spielregeln aus der Datei COPYING halten."
 
-#: main.cc:360
+#: main.cc:441
 msgid "could not create ARDOUR GUI"
 msgstr ""
 
-#: main.cc:378
+#: main.cc:459
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr ""
 
-#: main.cc:381
+#: main.cc:462
 msgid "could not initialize Ardour."
 msgstr ""
 
-#: main.cc:392
-msgid "could not load command line session \"%1\""
-msgstr ""
-
-#. it wasn't new, but we require a new session
-#: main.cc:412
-msgid ""
-"\n"
-"\n"
-"A session named \"%1\" already exists.\n"
-"To avoid this message, start ardour as \"ardour %1"
-msgstr ""
-
-#: main.cc:423
-msgid ""
-"\n"
-"\n"
-"No session named \"%1\" exists.\n"
-"To create it from the command line, start ardour as \"ardour --new %1"
-msgstr ""
-
 #: marker.cc:244
 #, fuzzy
 msgid "MarkerText"
 msgstr "Schicht"
 
-#: marker_time_axis.cc:253
+#: marker_time_axis.cc:254
 #, fuzzy
 msgid "Remove Marker"
 msgstr "Feld entfernen"
 
-#: marker_time_axis.cc:255
+#: marker_time_axis.cc:256
 #, fuzzy
 msgid "Marker"
 msgstr "Schicht"
 
-#: meter_bridge.cc:77
+#: meter_bridge.cc:78
 msgid "ardour: meter bridge"
 msgstr ""
 
-#: meter_bridge.cc:78
+#: meter_bridge.cc:79
 msgid "ardour_meter_bridge"
 msgstr ""
 
-#: meter_bridge_strip.cc:79 meter_bridge_strip.cc:93
+#: meter_bridge_strip.cc:80 meter_bridge_strip.cc:94
 #, c-format
 msgid "# of %u-sample overs"
 msgstr ""
 
-#: meter_bridge_strip.cc:221
+#: meter_bridge_strip.cc:222
 #, fuzzy
 msgid "New Name for Meter:"
 msgstr "Name für Mixer-Voreinstellung"
 
-#: mixer_strip.cc:85 mixer_strip.cc:437 region_editor.cc:46
-msgid "mute"
-msgstr "mute"
-
-#: mixer_strip.cc:85 mixer_strip.cc:438
-msgid "solo"
-msgstr "solo"
-
-#: mixer_strip.cc:85 mixer_strip.cc:436
-msgid "RECORD"
-msgstr "AUFNAHME"
+#: mixer_strip.cc:95 mixer_strip.cc:140 mixer_strip.cc:1227
+msgid "pre"
+msgstr ""
 
-#: mixer_strip.cc:96 mixer_strip.cc:441 mixer_strip.cc:1064
+#: mixer_strip.cc:96 mixer_strip.cc:822
 msgid "Comments"
 msgstr ""
 
-#: mixer_strip.cc:120 mixer_strip.cc:752
-msgid "INPUT"
-msgstr "EINGANG"
-
-#: mixer_strip.cc:125 mixer_strip.cc:773
-msgid "OUTPUT"
-msgstr "AUSGANG"
-
-#: mixer_strip.cc:140
+#: mixer_strip.cc:119
 #, fuzzy
-msgid "Pan automation mode"
-msgstr "Stellen"
+msgid "Input"
+msgstr "Eingänge"
 
-#: mixer_strip.cc:141
+#: mixer_strip.cc:136 mixer_strip.cc:1223
 #, fuzzy
-msgid "Gain automation mode"
-msgstr "Stellen"
+msgid "input"
+msgstr "%1 Eingang"
 
-#: mixer_strip.cc:143
+#: mixer_strip.cc:144 mixer_strip.cc:1231
 #, fuzzy
-msgid "Pan automation type"
-msgstr "Stellen"
+msgid "post"
+msgstr "Anschluß"
 
-#: mixer_strip.cc:144
-#, fuzzy
-msgid "Gain automation type"
-msgstr "Stellen"
+#. TRANSLATORS: this string should be longest of the strings
+#. used to describe meter points. In english, its "input".
+#.
+#: mixer_strip.cc:152
+msgid "tupni"
+msgstr ""
 
-#: mixer_strip.cc:183 mixer_strip.cc:195 mixer_strip.cc:913
-#, fuzzy
-msgid "trim"
-msgstr "Streifen"
+#: mixer_strip.cc:207
+msgid "Varispeed"
+msgstr ""
 
-#. XXX it might different in different languages
-#: mixer_strip.cc:184 mixer_strip.cc:196 mixer_strip.cc:917
-msgid "abs"
+#: mixer_strip.cc:233 mixer_strip.cc:836
+msgid "Click to Add/Edit Comments"
 msgstr ""
 
-#: mixer_strip.cc:203
-#, fuzzy
-msgid "gain automation mode"
-msgstr "Stellen"
+#: mixer_strip.cc:374
+msgid "unknown strip width \"%1\" in XML GUI information"
+msgstr ""
 
-#: mixer_strip.cc:204
+#: mixer_strip.cc:417
 #, fuzzy
-msgid "pan automation mode"
-msgstr "Stellen"
+msgid "record"
+msgstr "Wiederherstellen"
 
-#: mixer_strip.cc:205
-#, fuzzy
-msgid "gain automation state"
-msgstr "Stellen"
+#: mixer_strip.cc:418 region_editor.cc:47
+msgid "mute"
+msgstr "mute"
 
-#: mixer_strip.cc:206
-#, fuzzy
-msgid "pan automation state"
-msgstr "Stellen"
+#: mixer_strip.cc:419
+msgid "solo"
+msgstr "solo"
 
-#: mixer_strip.cc:223
-msgid "varispeed"
+#: mixer_strip.cc:422
+msgid "comments"
 msgstr ""
 
-#: mixer_strip.cc:245 mixer_strip.cc:1078
-msgid "Click to Add/Edit Comments"
+#: mixer_strip.cc:424
+msgid "*comments*"
 msgstr ""
 
-#: mixer_strip.cc:393
-msgid "unknown strip width \"%1\" in XML GUI information"
-msgstr ""
+#: mixer_strip.cc:438
+#, fuzzy
+msgid "Rec"
+msgstr "Auffrischen"
 
-#: mixer_strip.cc:443 mixer_strip.cc:1062
-msgid "*Comments*"
+#: mixer_strip.cc:439
+msgid "M"
 msgstr ""
 
-#: mixer_strip.cc:457
-msgid "REC"
+#: mixer_strip.cc:440
+msgid "S"
 msgstr ""
 
-#: mixer_strip.cc:462 mixer_strip.cc:1072
+#: mixer_strip.cc:443 mixer_strip.cc:830
 #, fuzzy
 msgid "Cmt"
 msgstr "Ausschneiden"
 
-#: mixer_strip.cc:464 mixer_strip.cc:1070
+#: mixer_strip.cc:445 mixer_strip.cc:828
 msgid "*Cmt*"
 msgstr ""
 
-#: mixer_strip.cc:503 mixer_strip.cc:562 redirect_box.cc:1004
+#: mixer_strip.cc:483 mixer_strip.cc:549 redirect_box.cc:1006
 msgid "Not connected to JACK - no I/O changes are possible"
 msgstr ""
 
-#: mixer_strip.cc:569
+#: mixer_strip.cc:560
 msgid "Track"
 msgstr "Spur"
 
-#: mixer_strip.cc:593 mixer_strip.cc:609
+#: mixer_strip.cc:588 mixer_strip.cc:604
 msgid "could not register new ports required for that connection"
 msgstr ""
 
-#: mixer_strip.cc:755
-msgid "IN"
-msgstr ""
-
-#: mixer_strip.cc:776
-msgid "OUT"
-msgstr ""
+#: mixer_strip.cc:747
+#, fuzzy
+msgid " Input"
+msgstr "Eingänge"
 
-#: mixer_strip.cc:884
-msgid "aplay"
+#: mixer_strip.cc:750
+msgid "I"
 msgstr ""
 
-#: mixer_strip.cc:890
-msgid "awrite"
+#: mixer_strip.cc:820
+msgid "*Comments*"
 msgstr ""
 
-#: mixer_strip.cc:1095
+#: mixer_strip.cc:859
 #, fuzzy
 msgid ": comment editor"
 msgstr "Der Editor konnte nicht initialisiert werden."
 
-#: mixer_strip.cc:1157 mixer_strip.cc:1178
-msgid "no group"
-msgstr "keine Gruppe"
+#: mixer_strip.cc:953
+msgid "Grp"
+msgstr ""
 
-#: mixer_strip.cc:1181
+#: mixer_strip.cc:956
 msgid "~G"
 msgstr ""
 
-#: mixer_strip.cc:1229
+#: mixer_strip.cc:1004
 #, fuzzy
 msgid "Invert Polarity"
 msgstr "Polarität"
 
-#: mixer_ui.cc:84
+#: mixer_ui.cc:85
 msgid "Strips"
 msgstr "Streifen"
 
-#: mixer_ui.cc:108
-msgid "groupname"
-msgstr ""
-
-#: mixer_ui.cc:109 region_editor.cc:48 region_editor.cc:191
-#: region_editor.cc:225
-msgid "active"
-msgstr ""
-
-#: mixer_ui.cc:110 region_editor.cc:49
-msgid "visible"
-msgstr ""
+#: mixer_ui.cc:110
+#, fuzzy
+msgid "Group"
+msgstr "Mix Gruppen"
 
-#: mixer_ui.cc:207 mixer_ui.cc:366
+#: mixer_ui.cc:211 mixer_ui.cc:370
 msgid "ardour: mixer"
 msgstr "Ardour: Mixer"
 
-#: mixer_ui.cc:208
+#: mixer_ui.cc:212
 #, fuzzy
 msgid "ardour_mixer"
 msgstr "Ardour: Mixer"
 
-#: mixer_ui.cc:342
+#: mixer_ui.cc:346
 msgid "ardour: mixer: "
 msgstr "Ardour: Mixer: "
 
-#: mixer_ui.cc:569
+#: mixer_ui.cc:573
 msgid "signal"
 msgstr "Signal"
 
-#: mixer_ui.cc:719
+#: mixer_ui.cc:723
 msgid "track display list item for renamed strip not found!"
 msgstr ""
 
-#: option_editor.cc:75
+#: new_session_dialog.cc:39
+#, fuzzy
+msgid "New Session Name :"
+msgstr "Name der Sitzung"
+
+#: new_session_dialog.cc:41
+msgid "Create Session Directory In :"
+msgstr ""
+
+#: new_session_dialog.cc:43
+#, fuzzy
+msgid "Use Session Template :"
+msgstr "Name der Sitzung"
+
+#: new_session_dialog.cc:45
+#, fuzzy
+msgid "Channel Count"
+msgstr "Importieren Abbrechen"
+
+#: new_session_dialog.cc:46
+msgid "Create Monitor Bus"
+msgstr ""
+
+#: new_session_dialog.cc:53
+msgid "Create Master Bus"
+msgstr ""
+
+#: new_session_dialog.cc:55
+#, fuzzy
+msgid "Automatically Connect Inputs"
+msgstr "Verfügbare Verbindungen"
+
+#: new_session_dialog.cc:56 new_session_dialog.cc:67
+#, fuzzy
+msgid "Port Limit"
+msgstr "Abbrechen"
+
+#: new_session_dialog.cc:64
+#, fuzzy
+msgid "<b>Track/Bus Inputs</b>"
+msgstr "Ausgänge"
+
+#: new_session_dialog.cc:66
+#, fuzzy
+msgid "Automatically Connect Outputs"
+msgstr "Verfügbare Verbindungen"
+
+#: new_session_dialog.cc:75
+msgid "Connect to Master Bus"
+msgstr ""
+
+#: new_session_dialog.cc:76
+msgid "Connect to Physical Outputs"
+msgstr ""
+
+#: new_session_dialog.cc:80
+#, fuzzy
+msgid "<b>Track/Bus Outputs</b>"
+msgstr "Ausgänge"
+
+#: new_session_dialog.cc:83
+#, fuzzy
+msgid "Advanced Options"
+msgstr "Geschwindigkeitseditor"
+
+#: new_session_dialog.cc:91
+#, fuzzy
+msgid "Open Recent Session"
+msgstr "Sitzung"
+
+#: new_session_dialog.cc:127
+#, fuzzy
+msgid "Open Session File :"
+msgstr "Sitzung"
+
+#: new_session_dialog.cc:274
+#, fuzzy
+msgid "New Session"
+msgstr "Sitzung"
+
+#: new_session_dialog.cc:276
+#, fuzzy
+msgid "Open Session"
+msgstr "Sitzung"
+
+#: new_session_dialog.cc:281
+#, fuzzy
+msgid "ardour: session control"
+msgstr "Ardour: Neue Sitzung"
+
+#: new_session_dialog.cc:310
+#, fuzzy
+msgid "select template"
+msgstr "Voreinstellung"
+
+#: new_session_dialog.cc:316
+#, fuzzy
+msgid "select session file"
+msgstr "Auswahl zu Schleife machen"
+
+#: new_session_dialog.cc:325
+#, fuzzy
+msgid "select directory"
+msgstr "Auswahl zu Schleife machen"
+
+#: option_editor.cc:76
 msgid "SMPTE offset is negative"
 msgstr ""
 
-#: option_editor.cc:101
+#: option_editor.cc:102
 #, fuzzy
 msgid "ardour: options editor"
 msgstr "Ardour: Einstellungen"
 
-#: option_editor.cc:102
+#: option_editor.cc:103
 #, fuzzy
 msgid "ardour_option_editor"
 msgstr "Ardour: Einstellungen"
 
-#: option_editor.cc:126
+#: option_editor.cc:127
 msgid "Paths/Files"
 msgstr "Pfade- und Dateinamen"
 
-#: option_editor.cc:127
+#: option_editor.cc:128
 msgid "Kbd/Mouse"
 msgstr ""
 
-#: option_editor.cc:130
+#: option_editor.cc:131
 msgid "Layers & Fades"
 msgstr ""
 
-#: option_editor.cc:134
+#: option_editor.cc:135
 msgid "MIDI"
 msgstr ""
 
-#: option_editor.cc:176
+#: option_editor.cc:177
 msgid "24 FPS"
 msgstr ""
 
-#: option_editor.cc:178
+#: option_editor.cc:179
 msgid "25 FPS"
 msgstr ""
 
-#: option_editor.cc:180
+#: option_editor.cc:181
 msgid "30 FPS"
 msgstr ""
 
-#: option_editor.cc:186
+#: option_editor.cc:187
 msgid "30 FPS drop"
 msgstr ""
 
-#: option_editor.cc:243
+#: option_editor.cc:244
 msgid "session RAID path"
 msgstr ""
 
-#: option_editor.cc:248
+#: option_editor.cc:249
 #, fuzzy
 msgid "Soundfile Search Paths"
 msgstr "Ardour: Audio Bibliothek"
 
-#: option_editor.cc:253
+#: option_editor.cc:254
 #, fuzzy
 msgid "Paths"
 msgstr "Pfade- und Dateinamen"
 
-#: option_editor.cc:267 option_editor.cc:273 option_editor.cc:724
-#: option_editor.cc:751
+#: option_editor.cc:268 option_editor.cc:274 option_editor.cc:723
+#: option_editor.cc:750
 #, fuzzy
 msgid "internal"
 msgstr "mittelmäßig"
 
-#: option_editor.cc:286
+#: option_editor.cc:287
 msgid "Short crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:298
+#: option_editor.cc:299
 msgid "Destructive crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:366
+#: option_editor.cc:367
 msgid "SMPTE Frames/second"
 msgstr ""
 
-#: option_editor.cc:367
+#: option_editor.cc:368
 msgid "SMPTE Offset"
 msgstr ""
 
-#: option_editor.cc:461 option_editor.cc:468 option_editor.cc:471
-#: option_editor.cc:617
+#: option_editor.cc:462 option_editor.cc:469 option_editor.cc:472
+#: option_editor.cc:618
 #, fuzzy
 msgid "online"
 msgstr "Verbindungen"
@@ -5287,11 +5271,11 @@ msgstr "Verbindungen"
 #. remember, we have to handle the i18n case where the relative
 #. lengths of the strings in language N is different than in english.
 #.
-#: option_editor.cc:468 option_editor.cc:469 option_editor.cc:614
+#: option_editor.cc:469 option_editor.cc:470 option_editor.cc:615
 msgid "offline"
 msgstr ""
 
-#: option_editor.cc:669
+#: option_editor.cc:670
 msgid "Choose Click"
 msgstr ""
 
@@ -5299,15 +5283,15 @@ msgstr ""
 msgid "Choose Click Emphasis"
 msgstr ""
 
-#: option_editor.cc:804
+#: option_editor.cc:803
 msgid "Click audio file"
 msgstr ""
 
-#: option_editor.cc:810
+#: option_editor.cc:809
 msgid "Click emphasis audiofile"
 msgstr ""
 
-#: option_editor.cc:847
+#: option_editor.cc:846
 msgid ""
 "The auditioner is a dedicated mixer strip used\n"
 "for listening to specific regions outside the context\n"
@@ -5315,37 +5299,37 @@ msgid ""
 "other mixer strip."
 msgstr ""
 
-#: option_editor.cc:920
+#: option_editor.cc:919
 #, fuzzy
 msgid "Edit using"
 msgstr "Mix Gruppen"
 
-#: option_editor.cc:927 option_editor.cc:954
+#: option_editor.cc:926 option_editor.cc:953
 msgid "+ button"
 msgstr ""
 
-#: option_editor.cc:947
+#: option_editor.cc:946
 #, fuzzy
 msgid "Delete using"
 msgstr "Messungen"
 
-#: option_editor.cc:974
+#: option_editor.cc:973
 msgid "Ignore snap using"
 msgstr ""
 
-#: opts.cc:47
+#: opts.cc:46
 msgid "Usage: "
 msgstr "Aufruf:"
 
-#: opts.cc:48
+#: opts.cc:47
 msgid "  -v, --version                    Show version information\n"
 msgstr "  -v, --version                    Versionsinformation ausgeben\n"
 
-#: opts.cc:49
+#: opts.cc:48
 msgid "  -h, --help                       Print this message\n"
 msgstr "  -h, --help                       Diese Hinweise\n"
 
-#: opts.cc:50
+#: opts.cc:49
 msgid ""
 "  -b, --bindings                   Print all possible keyboard binding "
 "names\n"
@@ -5353,212 +5337,227 @@ msgstr ""
 "  -b, --bindings                   Alle möglichen Tastenzuweisungsnamen "
 "ausgeben\n"
 
-#: opts.cc:51
+#: opts.cc:50
 #, fuzzy
 msgid "  -n, --show-splash                Show splash screen\n"
 msgstr "  -h, --help                       Diese Hinweise\n"
 
-#: opts.cc:52
+#: opts.cc:51
 #, fuzzy
 msgid ""
 "  -c, --name  name                 Use a specific jack client name, default "
 "is ardour\n"
 msgstr "  -U, --ui-rcfile=FILENAME         Dateiname für UI Einstellungen\n"
 
-#: opts.cc:53
+#: opts.cc:52
 #, fuzzy
 msgid ""
 "  -N, --new session-name           Create a new session from the command "
 "line\n"
 msgstr "  [session-name]                   Name der zu ladenden Sitzung\n"
 
-#: opts.cc:54
+#: opts.cc:53
 msgid ""
 "  -o, --use-hw-optimizations        Try to use h/w specific optimizations\n"
 msgstr ""
 
-#: opts.cc:56
+#: opts.cc:55
 #, fuzzy
 msgid "  -V, --novst                      Do not use VST support\n"
 msgstr "  -h, --help                       Diese Hinweise\n"
 
-#: opts.cc:58
+#: opts.cc:57
 msgid "  [session-name]                   Name of session to load\n"
 msgstr "  [session-name]                   Name der zu ladenden Sitzung\n"
 
-#: opts.cc:59
+#: opts.cc:58
 msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
 msgstr ""
 
-#: opts.cc:60
+#: opts.cc:59
 #, fuzzy
 msgid "  -g, --gtktheme                   Allow GTK to load a theme\n"
 msgstr "  -h, --help                       Diese Hinweise\n"
 
-#: pan_automation_time_axis.cc:59
+#: pan_automation_time_axis.cc:60
 msgid "You can't graphically edit panning of more than stream"
 msgstr ""
 
-#: pan_automation_time_axis.cc:79
+#: pan_automation_time_axis.cc:80
 #, fuzzy
 msgid "add pan automation event"
 msgstr "Stellen"
 
-#: panner2d.cc:588 panner_ui.cc:393 plugin_ui.cc:833
+#: panner2d.cc:589 panner_ui.cc:435 plugin_ui.cc:834
 msgid "Bypass"
 msgstr ""
 
-#: panner_ui.cc:57 panner_ui.cc:187
+#: panner_ui.cc:58 panner_ui.cc:225
 #, fuzzy
 msgid "link"
 msgstr "leer"
 
+#: panner_ui.cc:69
+#, fuzzy
+msgid "Pan automation mode"
+msgstr "Stellen"
+
 #: panner_ui.cc:70
+#, fuzzy
+msgid "Pan automation type"
+msgstr "Stellen"
+
+#: panner_ui.cc:81
 msgid "panning link control"
 msgstr ""
 
-#: panner_ui.cc:72
+#: panner_ui.cc:83
 msgid "panning link direction"
 msgstr ""
 
-#: panner_ui.cc:197
+#: panner_ui.cc:235
 msgid "L"
 msgstr ""
 
-#: panner_ui.cc:296
+#: panner_ui.cc:335
+#, c-format
+msgid "panner for channel %lu"
+msgstr ""
+
+#: panner_ui.cc:337
 #, c-format
 msgid "panner for channel %u"
 msgstr ""
 
-#: panner_ui.cc:403
+#: panner_ui.cc:445
 #, fuzzy
 msgid "Reset all"
 msgstr "bestmöglich"
 
-#: playlist_selector.cc:51
+#: playlist_selector.cc:52
 #, fuzzy
 msgid "ardour: playlists"
 msgstr "Ardour: Plugins"
 
-#: playlist_selector.cc:58
+#: playlist_selector.cc:59
 msgid "Playlists grouped by track"
 msgstr ""
 
-#: playlist_selector.cc:97
+#: playlist_selector.cc:98
 #, fuzzy
 msgid "ardour: playlist for "
 msgstr "Ardour: Editor: "
 
-#: playlist_selector.cc:113
+#: playlist_selector.cc:114
 #, fuzzy
 msgid "Other tracks"
 msgstr "Stille einfügen"
 
-#: playlist_selector.cc:129
+#: playlist_selector.cc:130
 msgid "unassigned"
 msgstr ""
 
-#: plugin_selector.cc:42
+#: plugin_selector.cc:43
 msgid "ardour: plugins"
 msgstr "Ardour: Plugins"
 
-#: plugin_selector.cc:55
+#: plugin_selector.cc:56
 #, fuzzy
 msgid "Available LADSPA Plugins"
 msgstr "Verfügbare LADSPA Plugins"
 
-#: plugin_selector.cc:56
+#: plugin_selector.cc:57
 msgid "Type"
 msgstr "Typ"
 
-#: plugin_selector.cc:57 plugin_selector.cc:80
+#: plugin_selector.cc:58 plugin_selector.cc:81
 msgid "# Inputs"
 msgstr "Eingänge"
 
-#: plugin_selector.cc:58 plugin_selector.cc:81
+#: plugin_selector.cc:59 plugin_selector.cc:82
 msgid "# Outputs"
 msgstr "Ausgänge"
 
-#: plugin_selector.cc:67
+#: plugin_selector.cc:68
 msgid "Plugins to be Connected to Insert"
 msgstr ""
 
-#: plugin_selector.cc:79
+#: plugin_selector.cc:80
 #, fuzzy
 msgid "Available plugins"
 msgstr "Verfügbare LADSPA Plugins"
 
-#: plugin_selector.cc:97
+#: plugin_selector.cc:98
 msgid "Add a plugin to the effect list"
 msgstr "Plugin zur Effektliste hinzufügen"
 
-#: plugin_selector.cc:99
+#: plugin_selector.cc:102
 msgid "Remove a plugin from the effect list"
 msgstr "Plugin aus der Effektliste entfernen"
 
-#: plugin_selector.cc:101
+#: plugin_selector.cc:104
 msgid "Update available plugins"
 msgstr "Verfügbare Plugins auffrischen"
 
-#: plugin_selector.cc:123
+#: plugin_selector.cc:126
 msgid "LADSPA"
 msgstr ""
 
-#: plugin_selector.cc:126
+#: plugin_selector.cc:129
 msgid "VST"
 msgstr ""
 
-#: plugin_ui.cc:83
+#: plugin_ui.cc:84
 msgid ""
 "unknown type of editor-supplying plugin (note: no VST support in this "
 "version of ardour)"
 msgstr ""
 
-#: plugin_ui.cc:138
+#: plugin_ui.cc:139
 msgid "<span size=\"large\">Presets</span>"
 msgstr ""
 
-#: plugin_ui.cc:229
+#: plugin_ui.cc:230
 #, fuzzy
 msgid "Controls"
 msgstr "Verbindungen"
 
-#: plugin_ui.cc:266
+#: plugin_ui.cc:267
 msgid "Plugin Editor: could not build control element for port %1"
 msgstr ""
 
-#: plugin_ui.cc:357
+#: plugin_ui.cc:358
 #, fuzzy
-msgid "automation control"
+msgid "Automation control"
 msgstr "Stellen"
 
-#: plugin_ui.cc:853
+#: plugin_ui.cc:854
 msgid "Plugin preset %1 not found"
 msgstr ""
 
-#: plugin_ui.cc:863
+#: plugin_ui.cc:864
 #, fuzzy
 msgid "Name of New Preset:"
 msgstr "Name für neue Verbindung:"
 
-#: redirect_automation_line.cc:53
+#: redirect_automation_line.cc:54
 msgid "redirect automation created for non-plugin"
 msgstr ""
 
-#: redirect_automation_time_axis.cc:93
+#: redirect_automation_time_axis.cc:94
 #, fuzzy
 msgid "add automation event to "
 msgstr "Stellen"
 
-#: redirect_box.cc:222
+#: redirect_box.cc:223
 msgid "New send"
 msgstr ""
 
-#: redirect_box.cc:223
+#: redirect_box.cc:224
 msgid "Show send controls"
 msgstr ""
 
-#: redirect_box.cc:377
+#: redirect_box.cc:383
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5569,7 +5568,7 @@ msgid ""
 "part of the signal."
 msgstr ""
 
-#: redirect_box.cc:389
+#: redirect_box.cc:395
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5581,7 +5580,7 @@ msgid ""
 "support this type of configuration."
 msgstr ""
 
-#: redirect_box.cc:402
+#: redirect_box.cc:408
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "\n"
@@ -5594,34 +5593,34 @@ msgid ""
 "Ardour does not understand what to do in such situations.\n"
 msgstr ""
 
-#: redirect_box.cc:493
+#: redirect_box.cc:495
 msgid "Pre-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:496
+#: redirect_box.cc:498
 msgid "Post-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:642
+#: redirect_box.cc:644
 msgid ""
 "You cannot reorder this set of redirects\n"
 "in that way because the inputs and\n"
 "outputs do not work correctly."
 msgstr ""
 
-#: redirect_box.cc:747
+#: redirect_box.cc:749
 #, fuzzy
 msgid "rename redirect"
 msgstr "Ardour: Region umbenennen"
 
-#: redirect_box.cc:824 redirect_box.cc:872
+#: redirect_box.cc:826 redirect_box.cc:874
 msgid ""
 "Copying the set of redirects on the clipboard failed,\n"
 "probably because the I/O configuration of the plugins\n"
 "could not match the configuration of this track."
 msgstr ""
 
-#: redirect_box.cc:894
+#: redirect_box.cc:896
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this track?\n"
@@ -5630,7 +5629,7 @@ msgstr ""
 "Wollen Sie wirklich die Spur \"%1\" löschen?\n"
 "(Kann nicht rückgängig gemacht werden!)"
 
-#: redirect_box.cc:897
+#: redirect_box.cc:899
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this bus?\n"
@@ -5639,248 +5638,260 @@ msgstr ""
 "Wollen Sie wirklich die Spur \"%1\" löschen?\n"
 "(Kann nicht rückgängig gemacht werden!)"
 
-#: redirect_box.cc:902
+#: redirect_box.cc:904
 #, fuzzy
 msgid "Yes, remove them all"
 msgstr "Ja, entfernen."
 
-#: redirect_box.cc:938
+#: redirect_box.cc:940
 #, fuzzy
 msgid "ardour: %1"
 msgstr "Ardour: "
 
-#: redirect_box.cc:980
+#: redirect_box.cc:982
 #, fuzzy
 msgid "ardour: %1: %2 (by %3)"
 msgstr "Ardour: "
 
 #. new stuff
-#: redirect_box.cc:1052
+#: redirect_box.cc:1054
 msgid "New Plugin ..."
 msgstr ""
 
-#: redirect_box.cc:1053
+#: redirect_box.cc:1055
 #, fuzzy
 msgid "New Insert"
 msgstr "Neuer Eingang"
 
-#: redirect_box.cc:1054
+#: redirect_box.cc:1056
 msgid "New Send ..."
 msgstr ""
 
-#: redirect_box.cc:1066
+#: redirect_box.cc:1068
 #, fuzzy
 msgid "Deselect All"
 msgstr "Auswahl"
 
-#: redirect_box.cc:1073
+#: redirect_box.cc:1075
 #, fuzzy
 msgid "Activate all"
 msgstr "Aktiv"
 
-#: redirect_box.cc:1074
+#: redirect_box.cc:1076
 #, fuzzy
 msgid "Deactivate all"
 msgstr "Alles deaktivieren"
 
-#: region_editor.cc:44
+#: region_editor.cc:45
 msgid "NAME:"
 msgstr ""
 
-#: region_editor.cc:45
+#: region_editor.cc:46
 msgid "lock"
 msgstr ""
 
-#: region_editor.cc:47
+#: region_editor.cc:48
 msgid "opaque"
 msgstr ""
 
-#: region_editor.cc:52
+#: region_editor.cc:49 region_editor.cc:192 region_editor.cc:226
+msgid "active"
+msgstr ""
+
+#: region_editor.cc:50
+msgid "visible"
+msgstr ""
+
+#: region_editor.cc:53
 msgid "Layer"
 msgstr "Schicht"
 
-#: region_editor.cc:60
+#: region_editor.cc:54
+msgid "play"
+msgstr ""
+
+#: region_editor.cc:61
 msgid "ENVELOPE"
 msgstr ""
 
-#: region_editor.cc:106
+#: region_editor.cc:107
 #, fuzzy
 msgid "mute this region"
 msgstr "Name für Region:"
 
-#: region_editor.cc:107
+#: region_editor.cc:108
 msgid "regions underneath this one cannot be heard"
 msgstr ""
 
-#: region_editor.cc:108
+#: region_editor.cc:109
 msgid "prevent any changes to this region"
 msgstr ""
 
-#: region_editor.cc:109
+#: region_editor.cc:110
 msgid "use the gain envelope during playback"
 msgstr ""
 
-#: region_editor.cc:110
+#: region_editor.cc:111
 msgid "show the gain envelope"
 msgstr ""
 
-#: region_editor.cc:111
+#: region_editor.cc:112
 msgid "use fade in curve during playback"
 msgstr ""
 
-#: region_editor.cc:112
+#: region_editor.cc:113
 msgid "use fade out curve during playback"
 msgstr ""
 
-#: region_editor.cc:113
+#: region_editor.cc:114
 msgid "audition this region"
 msgstr ""
 
-#: region_editor.cc:146
+#: region_editor.cc:147
 msgid "START:"
 msgstr ""
 
-#: region_editor.cc:148
+#: region_editor.cc:149
 msgid "END:"
 msgstr ""
 
-#: region_editor.cc:150
+#: region_editor.cc:151
 msgid "LENGTH:"
 msgstr ""
 
-#: region_editor.cc:190
+#: region_editor.cc:191
 msgid "FADE IN"
 msgstr ""
 
-#: region_editor.cc:192 region_editor.cc:226
+#: region_editor.cc:193 region_editor.cc:227
 msgid "msecs"
 msgstr ""
 
-#: region_editor.cc:224
+#: region_editor.cc:225
 msgid "FADE OUT"
 msgstr ""
 
-#: region_editor.cc:264
+#: region_editor.cc:265
 msgid "ardour: region "
 msgstr "Ardour: Region"
 
-#: region_editor.cc:401
+#: region_editor.cc:402
 msgid "fade in edit"
 msgstr ""
 
-#: region_editor.cc:413
+#: region_editor.cc:414
 #, fuzzy
 msgid "fade out edit"
 msgstr "Ardour: Editor"
 
-#: regionview.cc:1140
+#: regionview.cc:1146
 #, fuzzy
 msgid "add gain control point"
 msgstr "Synchronisationspunkt entfernen"
 
-#: route_params_ui.cc:88
+#: route_params_ui.cc:89
 msgid "Tracks/Buses"
 msgstr ""
 
-#: route_params_ui.cc:108
+#: route_params_ui.cc:109
 msgid "Pre-fader Redirects"
 msgstr ""
 
-#: route_params_ui.cc:109
+#: route_params_ui.cc:110
 msgid "Post-fader Redirects"
 msgstr ""
 
-#: route_params_ui.cc:141
+#: route_params_ui.cc:144
 #, fuzzy
 msgid "ardour: track/bus inspector"
 msgstr "Ardour: Editor"
 
-#: route_params_ui.cc:142
+#: route_params_ui.cc:145
 #, fuzzy
 msgid "ardour_route_parameters"
 msgstr "Ardour: Route"
 
-#: route_params_ui.cc:199
+#: route_params_ui.cc:202
 msgid "route display list item for renamed route not found!"
 msgstr ""
 
-#: route_params_ui.cc:451
+#: route_params_ui.cc:453
 msgid "NO TRACK"
 msgstr ""
 
-#: route_params_ui.cc:693
+#: route_params_ui.cc:695
 #, fuzzy
 msgid "ardour: track/bus inspector: "
 msgstr "Ardour: Editor"
 
-#: route_params_ui.cc:697
+#: route_params_ui.cc:699
 msgid "No Route Selected"
 msgstr "Keine Route ausgewählt"
 
-#: route_params_ui.cc:698
+#: route_params_ui.cc:700
 #, fuzzy
 msgid "ardour: track/bus/inspector: no route selected"
 msgstr "Ardour: Route: keine Route ausgewählt"
 
 #. ctrl-shift-click applies change to all routes
-#: route_ui.cc:133
+#: route_ui.cc:134
 #, fuzzy
 msgid "mute change"
 msgstr "Bereich"
 
 #. ctrl-shift-click applies change to all routes
 #. ctrl-alt-click: exclusively solo this track, not a toggle */
-#: route_ui.cc:208 route_ui.cc:218
+#: route_ui.cc:209 route_ui.cc:219
 #, fuzzy
 msgid "solo change"
 msgstr "Bereich"
 
-#: route_ui.cc:281
+#: route_ui.cc:282
 msgid "rec-enable change"
 msgstr ""
 
-#: route_ui.cc:472
+#: route_ui.cc:479
 #, fuzzy
 msgid "Solo-safe"
 msgstr "solo"
 
-#: route_ui.cc:480 route_ui.cc:523
+#: route_ui.cc:487 route_ui.cc:530
 msgid "MIDI Bind"
 msgstr ""
 
-#: route_ui.cc:494
+#: route_ui.cc:501
 msgid "Pre Fader"
 msgstr ""
 
-#: route_ui.cc:501
+#: route_ui.cc:508
 msgid "Post Fader"
 msgstr ""
 
-#: route_ui.cc:508
+#: route_ui.cc:515
 msgid "Control Outs"
 msgstr ""
 
-#: route_ui.cc:515
+#: route_ui.cc:522
 msgid "Main Outs"
 msgstr ""
 
-#: route_ui.cc:552
+#: route_ui.cc:559
 msgid "mix group solo  change"
 msgstr ""
 
-#: route_ui.cc:586
+#: route_ui.cc:593
 msgid "mix group mute change"
 msgstr ""
 
-#: route_ui.cc:602
+#: route_ui.cc:609
 msgid "mix group rec-enable change"
 msgstr ""
 
-#: route_ui.cc:619 visual_time_axis.cc:236
+#: route_ui.cc:626 visual_time_axis.cc:237
 msgid "ardour: color selection"
 msgstr "Ardour: Farbe auswählen"
 
-#: route_ui.cc:695
+#: route_ui.cc:702
 #, fuzzy
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
@@ -5891,17 +5902,17 @@ msgstr ""
 "Wollen Sie wirklich die Spur \"%1\" löschen?\n"
 "(Kann nicht rückgängig gemacht werden!)"
 
-#: route_ui.cc:697
+#: route_ui.cc:704
 msgid ""
 "Do you really want to remove bus \"%1\" ?\n"
 "(cannot be undone)"
 msgstr ""
 
-#: route_ui.cc:701 visual_time_axis.cc:278
+#: route_ui.cc:708 visual_time_axis.cc:279
 msgid "Yes, remove it."
 msgstr "Ja, entfernen."
 
-#: route_ui.cc:730
+#: route_ui.cc:737
 #, fuzzy
 msgid "New Name: "
 msgstr "Neuer Name: "
@@ -5959,150 +5970,151 @@ msgstr ""
 msgid "Name for Field"
 msgstr "Name für Region:"
 
-#: sfdb_ui.cc:333
+#: sfdb_ui.cc:335
 msgid "Split Channels"
 msgstr ""
 
-#: sfdb_ui.cc:340
+#: sfdb_ui.cc:342
 msgid "Create a region for each channel"
 msgstr ""
 
-#: sfdb_ui.cc:342
+#: sfdb_ui.cc:344
 msgid "Embed"
 msgstr ""
 
-#: sfdb_ui.cc:344
+#: sfdb_ui.cc:346
 msgid "Link to an external file"
 msgstr ""
 
-#: sfdb_ui.cc:346
+#: sfdb_ui.cc:348
 msgid "Import"
 msgstr "Importieren"
 
-#: sfdb_ui.cc:348
+#: sfdb_ui.cc:350
 msgid "Copy a file to the session folder"
 msgstr ""
 
-#: sfdb_ui.cc:412
+#: sfdb_ui.cc:414
 msgid "programming error: %1"
 msgstr ""
 
-#: tempo_dialog.cc:17 tempo_dialog.cc:34
+#: tempo_dialog.cc:18 tempo_dialog.cc:35
 msgid "Beats per minute"
 msgstr ""
 
-#: tempo_dialog.cc:20 tempo_dialog.cc:37 tempo_dialog.cc:153
-#: tempo_dialog.cc:171
+#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:203
+#: tempo_dialog.cc:221
 msgid "Bar"
 msgstr ""
 
-#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:154
-#: tempo_dialog.cc:172
+#: tempo_dialog.cc:22 tempo_dialog.cc:39 tempo_dialog.cc:204
+#: tempo_dialog.cc:222
 msgid "Beat"
 msgstr ""
 
-#: tempo_dialog.cc:23 tempo_dialog.cc:40 tempo_dialog.cc:155
-#: tempo_dialog.cc:173
+#: tempo_dialog.cc:24 tempo_dialog.cc:41 tempo_dialog.cc:205
+#: tempo_dialog.cc:223
 #, fuzzy
 msgid "Location"
 msgstr "Stellen"
 
-#: tempo_dialog.cc:149 tempo_dialog.cc:167
+#: tempo_dialog.cc:199 tempo_dialog.cc:217
 msgid "Meter denominator"
 msgstr ""
 
-#: tempo_dialog.cc:150 tempo_dialog.cc:168
+#: tempo_dialog.cc:200 tempo_dialog.cc:218
 msgid "Beats per bar"
 msgstr ""
 
-#: tempo_dialog.cc:186 tempo_dialog.cc:197
+#: tempo_dialog.cc:236 tempo_dialog.cc:247
 msgid "whole (1)"
 msgstr ""
 
-#: tempo_dialog.cc:187 tempo_dialog.cc:199
+#: tempo_dialog.cc:237 tempo_dialog.cc:249
 msgid "second (2)"
 msgstr ""
 
-#: tempo_dialog.cc:188 tempo_dialog.cc:201
+#: tempo_dialog.cc:238 tempo_dialog.cc:251
 msgid "third (3)"
 msgstr ""
 
-#: tempo_dialog.cc:189 tempo_dialog.cc:203 tempo_dialog.cc:211
+#: tempo_dialog.cc:239 tempo_dialog.cc:253 tempo_dialog.cc:261
 msgid "quarter (4)"
 msgstr ""
 
-#: tempo_dialog.cc:190 tempo_dialog.cc:205
+#: tempo_dialog.cc:240 tempo_dialog.cc:255
 msgid "eighth (8)"
 msgstr ""
 
-#: tempo_dialog.cc:191 tempo_dialog.cc:207
+#: tempo_dialog.cc:241 tempo_dialog.cc:257
 msgid "sixteenth (16)"
 msgstr ""
 
-#: tempo_dialog.cc:192 tempo_dialog.cc:209
+#: tempo_dialog.cc:242 tempo_dialog.cc:259
 msgid "thirty-second (32)"
 msgstr ""
 
-#: tempo_dialog.cc:321
+#: tempo_dialog.cc:420
 msgid "garbaged note type entry (%1)"
 msgstr ""
 
-#: tempo_dialog.cc:331
+#: tempo_dialog.cc:430
 msgid "incomprehensible note type entry (%1)"
 msgstr ""
 
-#: time_axis_view.cc:111
+#: time_axis_view.cc:112
 msgid "gTortnam"
 msgstr ""
 
-#: time_axis_view.cc:548
+#: time_axis_view.cc:549
 msgid "Largest"
 msgstr ""
 
-#: time_axis_view.cc:549
+#: time_axis_view.cc:550
 #, fuzzy
 msgid "Large"
 msgstr "Schicht"
 
-#: time_axis_view.cc:550
+#: time_axis_view.cc:551
 #, fuzzy
 msgid "Larger"
 msgstr "Schicht"
 
-#: time_axis_view.cc:552
+#: time_axis_view.cc:553
 msgid "Smaller"
 msgstr ""
 
-#: time_axis_view.cc:553
+#: time_axis_view.cc:554
 #, fuzzy
 msgid "Small"
 msgstr "Alle zeigen"
 
-#: time_axis_view.cc:869
+#: time_axis_view.cc:870
 msgid "unknown track height name \"%1\" in XML GUI information"
 msgstr ""
 
-#: time_axis_view_item.cc:71
+#. first constructed item sets up font info
+#: time_axis_view_item.cc:79
 msgid "TimeAxisViewItemName"
 msgstr ""
 
-#: time_axis_view_item.cc:271
+#: time_axis_view_item.cc:298
 msgid "new duration %1 frames is out of bounds for %2"
 msgstr ""
 
-#: time_selection.cc:40
+#: time_selection.cc:41
 msgid "programming error: request for non-existent audio range (%1)!"
 msgstr ""
 
-#: utils.cc:106 utils.cc:149
+#: utils.cc:107 utils.cc:150
 msgid "bad XPM header %1"
 msgstr ""
 
-#: utils.cc:331
+#: utils.cc:332
 msgid "missing RGBA style for \"%1\""
 msgstr ""
 
-#: visual_time_axis.cc:275
+#: visual_time_axis.cc:276
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
 "(cannot be undone)"
@@ -6110,14 +6122,77 @@ msgstr ""
 "Wollen Sie wirklich die Spur \"%1\" löschen?\n"
 "(Kann nicht rückgängig gemacht werden!)"
 
-#: visual_time_axis.cc:324
+#: visual_time_axis.cc:325
 msgid "new name: "
 msgstr "Neuer Name: "
 
-#: visual_time_axis.cc:335
+#: visual_time_axis.cc:336
 msgid "A track already exists with that name"
 msgstr ""
 
+#, fuzzy
+#~ msgid "set selected trackview"
+#~ msgstr "Stille einfügen"
+
+#, fuzzy
+#~ msgid "set selected control point"
+#~ msgstr "Synchronisationspunkt entfernen"
+
+#, fuzzy
+#~ msgid "set selected regionview"
+#~ msgstr "Auswahl zu Schleife machen"
+
+#, fuzzy
+#~ msgid "Start a new session\n"
+#~ msgstr "Bitte mittels des \"Sitzung\"-Menüs\n"
+
+#~ msgid "via Session menu"
+#~ msgstr "eine Sitzung laden oder eine neue erstellen!"
+
+#, fuzzy
+#~ msgid "<b>Advanced</b>"
+#~ msgstr "Feld hinzufügen..."
+
+#, fuzzy
+#~ msgid "Select a File"
+#~ msgstr "Auswahl"
+
+#~ msgid "RECORD"
+#~ msgstr "AUFNAHME"
+
+#~ msgid "INPUT"
+#~ msgstr "EINGANG"
+
+#~ msgid "OUTPUT"
+#~ msgstr "AUSGANG"
+
+#, fuzzy
+#~ msgid "Gain automation mode"
+#~ msgstr "Stellen"
+
+#, fuzzy
+#~ msgid "Gain automation type"
+#~ msgstr "Stellen"
+
+#, fuzzy
+#~ msgid "trim"
+#~ msgstr "Streifen"
+
+#, fuzzy
+#~ msgid "gain automation mode"
+#~ msgstr "Stellen"
+
+#, fuzzy
+#~ msgid "gain automation state"
+#~ msgstr "Stellen"
+
+#, fuzzy
+#~ msgid "pan automation state"
+#~ msgstr "Stellen"
+
+#~ msgid "no group"
+#~ msgstr "keine Gruppe"
+
 #, fuzzy
 #~ msgid "normal"
 #~ msgstr "Ardour: Region"
@@ -6304,9 +6379,6 @@ msgstr ""
 #~ msgid "AND"
 #~ msgstr "UND"
 
-#~ msgid "OR"
-#~ msgstr "ODER"
-
 #~ msgid "Results"
 #~ msgstr "Ergebnisse"
 
@@ -6316,16 +6388,9 @@ msgstr ""
 #~ msgid "Ardour: Search Results"
 #~ msgstr "Ardour: Suchergebnisse"
 
-#~ msgid "Mix Groups"
-#~ msgstr "Mix Gruppen"
-
 #~ msgid "Name for new mix group"
 #~ msgstr "Name für neue Mix Gruppe"
 
-#, fuzzy
-#~ msgid "Session name:"
-#~ msgstr "Name der Sitzung"
-
 #, fuzzy
 #~ msgid "Create"
 #~ msgstr "Abschnitt erzeugen:"
@@ -6338,17 +6403,9 @@ msgstr ""
 #~ msgid "new session setup"
 #~ msgstr "Name der Sitzung"
 
-#, fuzzy
-#~ msgid "Session template"
-#~ msgstr "Name der Sitzung"
-
 #~ msgid "blank"
 #~ msgstr "leer"
 
-#, fuzzy
-#~ msgid "No template"
-#~ msgstr "Voreinstellung"
-
 #, fuzzy
 #~ msgid "Slave to MTC"
 #~ msgstr "MTC senden"
index 1e017f97401a0fa004aa04a76fa5ffab6e3b5da0..e737aa7ca0b1796770e29201f58ef5977d1ae4f8 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: 0.99beta23\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 18:09-0400\n"
 "PO-Revision-Date: 2005-01-11\n"
 "Last-Translator: Muadibas <EMAIL@ADDRESS>\n"
 "Language-Team: Hellenic(Greek) <LL@li.org>\n"
@@ -15,144 +15,144 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: about.cc:119
+#: about.cc:120
 msgid "Paul Davis"
 msgstr ""
 
-#: about.cc:120
+#: about.cc:121
 #, fuzzy
 msgid "Jesse Chappell"
 msgstr "Επιλογή όλων"
 
-#: about.cc:121
+#: about.cc:122
 msgid "Taybin Rutkin"
 msgstr ""
 
-#: about.cc:122
+#: about.cc:123
 msgid "Marcus Andersson"
 msgstr ""
 
-#: about.cc:123
+#: about.cc:124
 msgid "Jeremy Hall"
 msgstr ""
 
-#: about.cc:124
+#: about.cc:125
 msgid "Steve Harris"
 msgstr ""
 
-#: about.cc:125
+#: about.cc:126
 msgid "Tim Mayberry"
 msgstr ""
 
-#: about.cc:126
+#: about.cc:127
 msgid "Mark Stewart"
 msgstr ""
 
-#: about.cc:127
+#: about.cc:128
 msgid "Sam Chessman"
 msgstr ""
 
-#: about.cc:128
+#: about.cc:129
 msgid "Jack O'Quin"
 msgstr ""
 
-#: about.cc:129
+#: about.cc:130
 msgid "Matt Krai"
 msgstr ""
 
-#: about.cc:130
+#: about.cc:131
 msgid "Ben Bell"
 msgstr ""
 
-#: about.cc:131
+#: about.cc:132
 msgid "Gerard van Dongen"
 msgstr ""
 
-#: about.cc:132
+#: about.cc:133
 msgid "Thomas Charbonnel"
 msgstr ""
 
-#: about.cc:133
+#: about.cc:134
 msgid "Nick Mainsbridge"
 msgstr ""
 
-#: about.cc:134
+#: about.cc:135
 msgid "Colin Law"
 msgstr ""
 
-#: about.cc:135
+#: about.cc:136
 msgid "Sampo Savolainen"
 msgstr ""
 
-#: about.cc:136
+#: about.cc:137
 msgid "Joshua Leach"
 msgstr ""
 
-#: about.cc:137
+#: about.cc:138
 msgid "Rob Holland"
 msgstr ""
 
-#: about.cc:138
+#: about.cc:139
 msgid "Per Sigmond"
 msgstr ""
 
-#: about.cc:139
+#: about.cc:140
 msgid "Doug Mclain"
 msgstr ""
 
-#: about.cc:140
+#: about.cc:141
 msgid "Petter Sundlöf"
 msgstr ""
 
-#: about.cc:145
+#: about.cc:146
 msgid ""
 "French:\n"
 "\tAlain Fréhel <alain.frehel@free.fr>\n"
 msgstr ""
 
-#: about.cc:146
+#: about.cc:147
 msgid ""
 "German:\n"
 "\tKarsten Petersen <kapet@kapet.de>\n"
 msgstr ""
 
-#: about.cc:147
+#: about.cc:148
 msgid ""
 "Italian:\n"
 "\tFilippo Pappalardo <filippo@email.it>\n"
 msgstr ""
 
-#: about.cc:148
+#: about.cc:149
 msgid ""
 "Portuguese:\n"
 "\tRui Nuno Capela <rncbc@rncbc.org>\n"
 msgstr ""
 
-#: about.cc:149
+#: about.cc:150
 msgid ""
 "Brazilian Portuguese:\n"
 "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
 "\tChris Ross <chris@tebibyte.org>\n"
 msgstr ""
 
-#: about.cc:151
+#: about.cc:152
 msgid ""
 "Spanish:\n"
 "\t Alex Krohn <alexkrohn@fastmail.fm>\n"
 msgstr ""
 
-#: about.cc:152
+#: about.cc:153
 msgid ""
 "Russian:\n"
 "\t Igor Blinov <pitstop@nm.ru>\n"
 msgstr ""
 
-#: about.cc:180
+#: about.cc:181
 #, fuzzy
 msgid "Copyright (C) 1999-2005 Paul Davis\n"
 msgstr "Πνευματικα Δικαιώματα 1999-2004 Paul Davis"
 
-#: about.cc:181
+#: about.cc:182
 #, fuzzy
 msgid ""
 "Ardour comes with ABSOLUTELY NO WARRANTY\n"
@@ -164,7 +164,7 @@ msgstr ""
 "Το παρόν ειναι δωρεάν λογισμικό, είστε ευπρόσδεκτοι να το επαναδιανείμετε \n"
 "υπό ειδικούς όρους; διαβάστε το αρχείο COPYING για λεπτομέρειες.\n"
 
-#: about.cc:187
+#: about.cc:188
 #, fuzzy
 msgid ""
 "%1\n"
@@ -173,53 +173,53 @@ msgstr ""
 "Ardour: %1\n"
 "(Κτισμένο με ardour/gtk %2 libardour: %3.%4.%5)"
 
-#: actions.cc:260
+#: actions.cc:261
 #, fuzzy
 msgid "programmer error: %1 %2"
 msgstr "σφάλμα προγραμματισμού: "
 
-#: add_route_dialog.cc:61
+#: add_route_dialog.cc:62
 msgid "ardour: add track/bus"
 msgstr "ardour: Εισαγωγή καναλιού/διαύλου"
 
 #. path = "1"
-#: add_route_dialog.cc:62 editor_route_list.cc:72
+#: add_route_dialog.cc:63 editor_route_list.cc:73
 msgid "Tracks"
 msgstr "Κανάλια"
 
 #. path = "0"
-#: add_route_dialog.cc:63 editor_route_list.cc:69
+#: add_route_dialog.cc:64 editor_route_list.cc:70
 msgid "Busses"
 msgstr "Δίαυλοι"
 
-#: add_route_dialog.cc:95 plugin_ui.cc:832
+#: add_route_dialog.cc:96 plugin_ui.cc:833
 msgid "Add"
 msgstr "Πρόσθεση"
 
-#: add_route_dialog.cc:113
+#: add_route_dialog.cc:114
 msgid "Name (template)"
 msgstr "Όνομα (προσχέδιο)"
 
-#: add_route_dialog.cc:119
+#: add_route_dialog.cc:120
 #, fuzzy
 msgid "Channel Configuration"
 msgstr "Διάταξη"
 
-#: add_route_dialog.cc:176 editor.cc:131 editor.cc:3660 time_axis_view.cc:551
+#: add_route_dialog.cc:177 editor.cc:134 editor.cc:3688 time_axis_view.cc:552
 msgid "Normal"
 msgstr "Κανονικό"
 
-#: add_route_dialog.cc:178
+#: add_route_dialog.cc:179
 #, fuzzy
 msgid "Tape"
 msgstr "Αρχή:"
 
-#: add_route_dialog.cc:195
+#: add_route_dialog.cc:196
 #, fuzzy
 msgid "Mono"
 msgstr "mono"
 
-#: add_route_dialog.cc:197
+#: add_route_dialog.cc:198
 #, fuzzy
 msgid "Stereo"
 msgstr "stereo"
@@ -305,27 +305,11 @@ msgstr "ΑΚΡΟΑΣΗ"
 msgid "SOLO"
 msgstr "ΣΟΛΟ"
 
-#: ardour_ui.cc:207
-msgid ""
-"You cannot record-enable\n"
-"track %1\n"
-"because it has no input connections.\n"
-"You would be wasting space recording silence."
-msgstr ""
-
-#: ardour_ui.cc:236
-msgid "no vertical meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:243
-msgid "no horizontal meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:410
+#: ardour_ui.cc:375
 msgid "quit"
 msgstr "Έξοδος"
 
-#: ardour_ui.cc:419
+#: ardour_ui.cc:384
 msgid ""
 "Ardour was unable to save your session.\n"
 "\n"
@@ -334,33 +318,33 @@ msgid ""
 "\"Just quit\" option."
 msgstr ""
 
-#: ardour_ui.cc:438
+#: ardour_ui.cc:403
 msgid "ardour: save session?"
 msgstr "ardour: αποθήκευση συνεδρίας;"
 
-#: ardour_ui.cc:445
+#: ardour_ui.cc:410
 msgid "Don't %1"
 msgstr "Μη %1"
 
-#: ardour_ui.cc:447
+#: ardour_ui.cc:412
 msgid "Just %1"
 msgstr "Απλά %1"
 
-#: ardour_ui.cc:449
+#: ardour_ui.cc:414
 msgid "Save and %1"
 msgstr "Αποθήκευση και %1"
 
-#: ardour_ui.cc:461
+#: ardour_ui.cc:426
 #, fuzzy
 msgid "session"
 msgstr "Συνεδρία"
 
-#: ardour_ui.cc:463
+#: ardour_ui.cc:428
 #, fuzzy
 msgid "snapshot"
 msgstr "Στιγμιότυπο"
 
-#: ardour_ui.cc:465
+#: ardour_ui.cc:430
 #, fuzzy
 msgid ""
 "The %1\"%2\"\n"
@@ -379,80 +363,80 @@ msgstr ""
 "\n"
 "τί θέλετε να κάνετε;"
 
-#: ardour_ui.cc:479
+#: ardour_ui.cc:444
 msgid "Prompter"
 msgstr "Υποβολέας"
 
-#: ardour_ui.cc:538
+#: ardour_ui.cc:503
 #, fuzzy, c-format
 msgid "disconnected"
 msgstr "Αποσύνδεση"
 
-#: ardour_ui.cc:545
+#: ardour_ui.cc:510
 #, fuzzy, c-format
 msgid "SR: %.1f kHz / %4.1f msecs"
 msgstr "SR: %.1f kHz"
 
-#: ardour_ui.cc:549
+#: ardour_ui.cc:514
 #, c-format
 msgid "SR: %u kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:562
+#: ardour_ui.cc:527
 #, c-format
 msgid "DSP Load: %.1f%%"
 msgstr "Φορτίο DSP: %.1f%%"
 
-#: ardour_ui.cc:572
+#: ardour_ui.cc:537
 #, fuzzy, c-format
 msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
 msgstr "Buffers p:%5.0f%% c:%5.0f%%"
 
-#: ardour_ui.cc:599
+#: ardour_ui.cc:564
 msgid "space: 24hrs+"
 msgstr "χώρος : 24hrs+"
 
-#: ardour_ui.cc:629
+#: ardour_ui.cc:594
 #, c-format
 msgid "space: %02dh:%02dm:%02ds"
 msgstr "χώρος: %02dh:%02dm:%02ds"
 
-#: ardour_ui.cc:668
+#: ardour_ui.cc:633
 msgid "programming error: impossible control method"
 msgstr "Σφάλμα προγραμματισμού: Μη-πιθανή μέθοδος ελέγχου"
 
-#: ardour_ui.cc:776 new_session_dialog.cc:89
+#: ardour_ui.cc:741 new_session_dialog.cc:294
 #, fuzzy
 msgid "Recent Sessions"
 msgstr "Άνοιγμα συνεδρίας"
 
 #. ardour sessions are folders
-#: ardour_ui.cc:867
+#: ardour_ui.cc:834
 msgid "open session"
 msgstr "Άνοιγμα συνεδρίας"
 
-#: ardour_ui.cc:873
+#: ardour_ui.cc:840
 #, fuzzy
 msgid "Ardour sessions"
 msgstr "ardour_νέα_συνεδρία"
 
-#: ardour_ui.cc:906
+#: ardour_ui.cc:873
 msgid "Patience is a virtue.\n"
 msgstr "Η Υπομονή ειναι Χρυσός.\n"
 
-#: ardour_ui.cc:915
+#: ardour_ui.cc:882
 msgid "You cannot add a track without a session already loaded."
 msgstr "Δεν γίνεται να προστεθεί κανάλι χωρίς ήδη φορτωμένη συνεδρία."
 
-#: ardour_ui.cc:922
+#: ardour_ui.cc:889
 msgid "could not create new audio track"
 msgstr "Δεν γίνεται να δημιουργηθεί νέο ηχητικό κανάλι"
 
-#: ardour_ui.cc:926
+#: ardour_ui.cc:893
 msgid "could not create new audio bus"
 msgstr "Δεν γίνεται να δημιουργηθεί νέος ηχητικός δίαυλος"
 
-#: ardour_ui.cc:945
+#: ardour_ui.cc:912
 msgid ""
 "There are insufficient JACK ports available\n"
 "to create a new track or bus.\n"
@@ -460,14 +444,14 @@ msgid ""
 "restart JACK with more ports."
 msgstr ""
 
-#: ardour_ui.cc:1069
+#: ardour_ui.cc:1036
 msgid ""
 "Please create 1 or more track\n"
 "before trying to record.\n"
 "Check the Session menu."
 msgstr ""
 
-#: ardour_ui.cc:1298
+#: ardour_ui.cc:1265
 #, fuzzy
 msgid ""
 "JACK has either been shutdown or it\n"
@@ -480,57 +464,55 @@ msgstr ""
 "δεν ήταν αρκετά γρήγορο. Καλύτερα να αποθηκεύσετε τη\n"
 "συνεδρία και να επανακινήσετε και τον JACK και το Ardour."
 
-#: ardour_ui.cc:1315
+#: ardour_ui.cc:1282
 msgid "Unable to create all required ports"
 msgstr ""
 
-#: ardour_ui.cc:1323
+#: ardour_ui.cc:1290
 #, fuzzy
 msgid "Unable to start the session running"
 msgstr "Αρχή της συνεδρίας"
 
-#: ardour_ui.cc:1459
+#: ardour_ui.cc:1426
 msgid "No Stream"
 msgstr "Δεν υπάρχει ροή(No stream)"
 
-#: ardour_ui.cc:1486 ardour_ui.cc:1505
+#: ardour_ui.cc:1453 ardour_ui.cc:1472
 msgid "none"
 msgstr "Κανένα"
 
-#: ardour_ui.cc:1495 ardour_ui.cc:1514 automation_time_axis.cc:183
-#: automation_time_axis.cc:212 automation_time_axis.cc:459 mixer_strip.cc:174
-#: mixer_strip.cc:186 mixer_strip.cc:881 plugin_ui.cc:391 plugin_ui.cc:634
+#: ardour_ui.cc:1462 ardour_ui.cc:1481
 msgid "off"
 msgstr "εκτός"
 
-#: ardour_ui.cc:1538
+#: ardour_ui.cc:1505
 #, fuzzy
 msgid "Name of New Snapshot"
 msgstr "Όνομα για στιγμιότυπο"
 
-#: ardour_ui.cc:1684
+#: ardour_ui.cc:1651
 msgid "Name for mix template:"
 msgstr "Όνομα για προσχεδίο μίξεως:"
 
-#: ardour_ui.cc:1685
+#: ardour_ui.cc:1652
 msgid "-template"
 msgstr "-προσχέδιο"
 
-#: ardour_ui.cc:1836
+#: ardour_ui.cc:1809
 msgid ""
 "You do not have write access to this session.\n"
 "This prevents the session from being loaded."
 msgstr ""
 
-#: ardour_ui.cc:1849 ardour_ui.cc:1904
+#: ardour_ui.cc:1822 ardour_ui.cc:1877
 msgid "Session \"%1 (snapshot %2)\" did not load successfully"
 msgstr "Η Συνεδρία \"%1 (στιγμιότυπο %2)\" δεν φορτώθηκε επιτυχώς"
 
-#: ardour_ui.cc:1960
+#: ardour_ui.cc:1933
 msgid "No audio files were ready for cleanup"
 msgstr ""
 
-#: ardour_ui.cc:1964
+#: ardour_ui.cc:1937
 msgid ""
 "If this seems suprising, \n"
 "check for any existing snapshots.\n"
@@ -538,25 +520,25 @@ msgid ""
 "require some unused files to continue to exist."
 msgstr ""
 
-#: ardour_ui.cc:1973
+#: ardour_ui.cc:1946
 msgid "ardour: cleanup"
 msgstr "ardour: εκκαθάριση"
 
-#: ardour_ui.cc:2009 ardour_ui.cc:2015
+#: ardour_ui.cc:1982 ardour_ui.cc:1988
 #, fuzzy
 msgid "files were"
 msgstr "αρχεία"
 
-#: ardour_ui.cc:2011 ardour_ui.cc:2017
+#: ardour_ui.cc:1984 ardour_ui.cc:1990
 #, fuzzy
 msgid "file was"
 msgstr "αρχεία"
 
-#: ardour_ui.cc:2058
+#: ardour_ui.cc:2031
 msgid "Are you sure you want to cleanup?"
 msgstr ""
 
-#: ardour_ui.cc:2063
+#: ardour_ui.cc:2036
 msgid ""
 "Cleanup is a destructive operation.\n"
 "ALL undo/redo information will be lost if you cleanup.\n"
@@ -564,26 +546,26 @@ msgid ""
 "location."
 msgstr ""
 
-#: ardour_ui.cc:2069
+#: ardour_ui.cc:2042
 #, fuzzy
 msgid "Clean Up"
 msgstr "Εκκαθάριση"
 
-#: ardour_ui.cc:2072
+#: ardour_ui.cc:2045
 #, fuzzy
 msgid "CleanupDialog"
 msgstr "Εκκαθάριση"
 
-#: ardour_ui.cc:2073
+#: ardour_ui.cc:2046
 #, fuzzy
 msgid "ardour_cleanup"
 msgstr "ardour: εκκαθάριση"
 
-#: ardour_ui.cc:2092
+#: ardour_ui.cc:2065
 msgid "cleaned files"
 msgstr "καθαρισμένα αρχεία"
 
-#: ardour_ui.cc:2093
+#: ardour_ui.cc:2066
 #, fuzzy
 msgid ""
 "The following %1 %2 not in use and \n"
@@ -599,11 +581,11 @@ msgstr ""
 "θα ελευθερωθούν %3 %4bytes\n"
 "χώρου στο δίσκο"
 
-#: ardour_ui.cc:2118
+#: ardour_ui.cc:2091
 msgid "deleted file"
 msgstr "διαγραμμένα αρχεία"
 
-#: ardour_ui.cc:2119
+#: ardour_ui.cc:2092
 #, fuzzy
 msgid ""
 "The following %1 %2 deleted from\n"
@@ -612,11 +594,11 @@ msgid ""
 msgstr ""
 "Τα ακόλουθα %1 file%2 διεγράφησαν, ελευθερώνοντας %3 %4bytes χώρου στο δίσκο"
 
-#: ardour_ui.cc:2242
+#: ardour_ui.cc:2215
 msgid "Recording was stopped because your system could not keep up."
 msgstr "η Εγγραφή διεκόπη διότι το σύστημά δεν μπορούσε να ανταπεξέλθει."
 
-#: ardour_ui.cc:2265
+#: ardour_ui.cc:2238
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -625,7 +607,7 @@ msgid ""
 "quickly enough to keep up with recording.\n"
 msgstr ""
 
-#: ardour_ui.cc:2284
+#: ardour_ui.cc:2257
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -634,7 +616,7 @@ msgid ""
 "quickly enough to keep up with playback.\n"
 msgstr ""
 
-#: ardour_ui.cc:2310
+#: ardour_ui.cc:2283
 msgid ""
 "This session appears to have been in\n"
 "middle of recording when ardour or\n"
@@ -645,366 +627,366 @@ msgid ""
 "what you would like to do.\n"
 msgstr ""
 
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2293
 msgid "Recover from crash"
 msgstr ""
 
-#: ardour_ui.cc:2321
+#: ardour_ui.cc:2294
 msgid "Ignore crash data"
 msgstr ""
 
-#: ardour_ui.cc:2339
+#: ardour_ui.cc:2312
 #, fuzzy
 msgid "Could not disconnect from JACK"
 msgstr "Δεν γινόταν να συνδεθώ στον JACK server σαν  \"%1\""
 
-#: ardour_ui.cc:2352
+#: ardour_ui.cc:2325
 #, fuzzy
 msgid "Could not reconnect to JACK"
 msgstr "Δεν γινόταν να συνδεθώ στον JACK server σαν  \"%1\""
 
-#: ardour_ui2.cc:59
+#: ardour_ui2.cc:60
 msgid "UI: cannot setup editor"
 msgstr "UI: Ο 'editor' δεν μπορεί να εγερθεί"
 
-#: ardour_ui2.cc:64
+#: ardour_ui2.cc:65
 msgid "UI: cannot setup mixer"
 msgstr "UI: ο μίκτης δεν μπορεί να εγερθεί"
 
-#: ardour_ui2.cc:90
+#: ardour_ui2.cc:91
 msgid "MMC + Local"
 msgstr "MMC + Τοπικό"
 
-#: ardour_ui2.cc:91
+#: ardour_ui2.cc:92
 msgid "MMC"
 msgstr "MMC"
 
-#: ardour_ui2.cc:92
+#: ardour_ui2.cc:93
 msgid "Local"
 msgstr "Τοπικό"
 
-#: ardour_ui2.cc:109
+#: ardour_ui2.cc:110
 msgid "MMC ID"
 msgstr "MMC ID"
 
-#: ardour_ui2.cc:290
+#: ardour_ui2.cc:291
 msgid "Play from playhead"
 msgstr "Αναπαρ/γή από τον Αναπαραγωγέα"
 
-#: ardour_ui2.cc:291
+#: ardour_ui2.cc:292
 msgid "Stop playback"
 msgstr "Διακοπή Αναπαρ/γής"
 
-#: ardour_ui2.cc:292
+#: ardour_ui2.cc:293
 msgid "Play range/selection"
 msgstr "Αναπαρ/γή διαστήματος/επιλογής"
 
-#: ardour_ui2.cc:293
+#: ardour_ui2.cc:294
 msgid "Go to start of session"
 msgstr "Αρχή της συνεδρίας"
 
-#: ardour_ui2.cc:294
+#: ardour_ui2.cc:295
 msgid "Go to end of session"
 msgstr "Τέλος του συνεδρίας"
 
-#: ardour_ui2.cc:295
+#: ardour_ui2.cc:296
 msgid "Play loop range"
 msgstr "Επαναληπτική αναπαρ/γή διαστήματος"
 
-#: ardour_ui2.cc:296
+#: ardour_ui2.cc:297
 msgid "Return to last playback start when stopped"
 msgstr "Επιστροφή στην τελευταία θεση μετα απο παύση"
 
-#: ardour_ui2.cc:297
+#: ardour_ui2.cc:298
 msgid "Start playback after any locate"
 msgstr "Αρχή αναπαρ/γής μετά από κάθε τοποθέτηση"
 
-#: ardour_ui2.cc:298
+#: ardour_ui2.cc:299
 msgid "Be sensible about input monitoring"
 msgstr "Προσοχή στο input monitoring"
 
-#: ardour_ui2.cc:299
+#: ardour_ui2.cc:300
 msgid "Start recording at auto-punch start"
 msgstr "Έναρξη εγγραφής στην αρχή αυτο-εναπόθεσης"
 
-#: ardour_ui2.cc:300
+#: ardour_ui2.cc:301
 msgid "Stop recording at auto-punch end"
 msgstr "Λήξη εγγραφής στο τέλος αυτο-εναπόθεσης"
 
-#: ardour_ui2.cc:301
+#: ardour_ui2.cc:302
 msgid "Enable/Disable audio click"
 msgstr "Άρση/Παύση μετρονόμου"
 
-#: ardour_ui2.cc:302
+#: ardour_ui2.cc:303
 #, fuzzy
 msgid "Positional sync source"
 msgstr "Τοποθεσιακό Sync"
 
-#: ardour_ui2.cc:303
+#: ardour_ui2.cc:304
 msgid "Does Ardour control the time?"
 msgstr ""
 
-#: ardour_ui2.cc:304
+#: ardour_ui2.cc:305
 msgid "Shuttle speed control"
 msgstr "Έλεγχος ταχύτητας Shuttle"
 
-#: ardour_ui2.cc:305
+#: ardour_ui2.cc:306
 #, fuzzy, c-format
 msgid "Select semitones or %%-age for speed display"
 msgstr "Επιλογή ημιτονίων ή %- για απεικόνιση ταχύτητος"
 
-#: ardour_ui2.cc:306
+#: ardour_ui2.cc:307
 msgid "Current transport speed"
 msgstr "Τρέχουσα ταχύτητα μεταφοράς"
 
-#: ardour_ui2.cc:329
+#: ardour_ui2.cc:330
 msgid "Primary clock"
 msgstr "Πρωτεύον ωρολόγιον"
 
-#: ardour_ui2.cc:330
+#: ardour_ui2.cc:331
 msgid "secondary clock"
 msgstr "Δευτερέυον ωρολόγιον"
 
 #. XXX: this should really be saved in instant.xml or something similar and restored from there
 #. Combo's are stupid - they steal space from the entry for the button
-#: ardour_ui2.cc:387 ardour_ui2.cc:823 ardour_ui2.cc:836 ardour_ui2.cc:899
-#: ardour_ui2.cc:901
+#: ardour_ui2.cc:388 ardour_ui2.cc:833 ardour_ui2.cc:846 ardour_ui2.cc:909
+#: ardour_ui2.cc:911
 msgid "sprung"
 msgstr "έλασμα"
 
-#: ardour_ui2.cc:388 ardour_ui2.cc:825 ardour_ui2.cc:847
+#: ardour_ui2.cc:389 ardour_ui2.cc:835 ardour_ui2.cc:857
 msgid "wheel"
 msgstr "τροχός"
 
-#: ardour_ui2.cc:450
+#: ardour_ui2.cc:451
 msgid "ardour: clock"
 msgstr "ardour: Ωρολόγιον"
 
-#: ardour_ui2.cc:595
+#: ardour_ui2.cc:596
 #, fuzzy
 msgid "Maximum speed"
 msgstr "μεταβλητή ταχύτητα"
 
-#: ardour_ui2.cc:813
+#: ardour_ui2.cc:823
 msgid "st"
 msgstr "st"
 
-#: ardour_ui2.cc:857 ardour_ui2.cc:880 ardour_ui2.cc:897
+#: ardour_ui2.cc:867 ardour_ui2.cc:890 ardour_ui2.cc:907
 msgid "stopped"
 msgstr "παύση"
 
-#: ardour_ui_dialogs.cc:152 playlist_selector.cc:69
+#: ardour_ui_dialogs.cc:153 playlist_selector.cc:70
 #, fuzzy
 msgid "close"
 msgstr "Κλείσιμο"
 
-#: ardour_ui_dialogs.cc:359 ardour_ui_ed.cc:181
+#: ardour_ui_dialogs.cc:360 ardour_ui_ed.cc:184
 #, fuzzy
 msgid "Sound File Browser"
 msgstr "Βιβλιοθήκη Soundfiles"
 
 #. menus + submenus that need action items
-#: ardour_ui_ed.cc:69
+#: ardour_ui_ed.cc:72
 msgid "Session"
 msgstr "Συνεδρία"
 
-#: ardour_ui_ed.cc:70 ardour_ui_ed.cc:127 editor.cc:1843 export_dialog.cc:350
+#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:130 editor.cc:1836 export_dialog.cc:350
 #: export_dialog.cc:1059 export_dialog.cc:1063
 msgid "Export"
 msgstr "Εξαγωγή"
 
-#: ardour_ui_ed.cc:71
+#: ardour_ui_ed.cc:74
 msgid "Cleanup"
 msgstr "Εκκαθάριση"
 
-#: ardour_ui_ed.cc:72 option_editor.cc:125
+#: ardour_ui_ed.cc:75 option_editor.cc:126
 msgid "Sync"
 msgstr "Sync"
 
-#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:74
+#: ardour_ui_ed.cc:76 ardour_ui_ed.cc:77
 #, fuzzy
 msgid "Options"
 msgstr "Επεξ/στης Ρυθμίσεων"
 
-#: ardour_ui_ed.cc:75
+#: ardour_ui_ed.cc:78
 msgid "Help"
 msgstr ""
 
-#: ardour_ui_ed.cc:76
+#: ardour_ui_ed.cc:79
 msgid "KeyMouse Actions"
 msgstr ""
 
-#: ardour_ui_ed.cc:77
+#: ardour_ui_ed.cc:80
 #, fuzzy
 msgid "Audio File Format"
 msgstr "Ηχητικά frames"
 
-#: ardour_ui_ed.cc:78
+#: ardour_ui_ed.cc:81
 #, fuzzy
 msgid "Header"
 msgstr "Προ Fader"
 
-#: ardour_ui_ed.cc:79
+#: ardour_ui_ed.cc:82
 msgid "Data"
 msgstr ""
 
-#: ardour_ui_ed.cc:80
+#: ardour_ui_ed.cc:83
 #, fuzzy
 msgid "Control Surfaces"
 msgstr "Control Outs"
 
 #. the real actions
-#: ardour_ui_ed.cc:84 audio_time_axis.cc:1856 new_session_dialog.cc:342
+#: ardour_ui_ed.cc:87 audio_time_axis.cc:1854 new_session_dialog.cc:529
 msgid "New"
 msgstr "Νέο"
 
-#: ardour_ui_ed.cc:86 new_session_dialog.cc:334
+#: ardour_ui_ed.cc:89 new_session_dialog.cc:517
 msgid "Open"
 msgstr "Άνοιγμα"
 
-#: ardour_ui_ed.cc:87
+#: ardour_ui_ed.cc:90
 msgid "Recent"
 msgstr "Πρόσφατο"
 
-#: ardour_ui_ed.cc:88 io_selector.cc:57 io_selector.cc:791
+#: ardour_ui_ed.cc:91 io_selector.cc:58 io_selector.cc:792
 msgid "Close"
 msgstr "Κλείσιμο"
 
-#: ardour_ui_ed.cc:91 route_params_ui.cc:512
+#: ardour_ui_ed.cc:94 route_params_ui.cc:514
 msgid "Add Track/Bus"
 msgstr "Πρόσθεση καναλιού/διαύλου"
 
-#: ardour_ui_ed.cc:102
+#: ardour_ui_ed.cc:105
 msgid "Connect"
 msgstr "Σύνδεση"
 
 #. </CMT Additions>
-#: ardour_ui_ed.cc:110
+#: ardour_ui_ed.cc:113
 msgid "Snapshot"
 msgstr "Στιγμιότυπο"
 
-#: ardour_ui_ed.cc:113
+#: ardour_ui_ed.cc:116
 msgid "Save Template..."
 msgstr "Αποθήκευση προσχεδίου..."
 
-#: ardour_ui_ed.cc:116
+#: ardour_ui_ed.cc:119
 msgid "Export session to audiofile..."
 msgstr "Εξαγωγή συνεδρίας σε αρχείο..."
 
-#: ardour_ui_ed.cc:119
+#: ardour_ui_ed.cc:122
 #, fuzzy
 msgid "Export selection to audiofile..."
 msgstr "Εξαγωγή συνεδρίας σε αρχείο..."
 
-#: ardour_ui_ed.cc:123
+#: ardour_ui_ed.cc:126
 #, fuzzy
 msgid "Export range markers to audiofile..."
 msgstr "Εξαγωγή διαστήματος σε αρχείο..."
 
-#: ardour_ui_ed.cc:130
+#: ardour_ui_ed.cc:133
 msgid "Cleanup unused sources"
 msgstr "Εκκαθάριση αχρήστων πηγών"
 
-#: ardour_ui_ed.cc:132
+#: ardour_ui_ed.cc:135
 msgid "Flush wastebasket"
 msgstr "Άδειασμα κάδου"
 
-#: ardour_ui_ed.cc:138 ardour_ui_options.cc:381 ardour_ui_options.cc:390
-#: ardour_ui_options.cc:462
+#: ardour_ui_ed.cc:141 ardour_ui_options.cc:408 ardour_ui_options.cc:417
+#: ardour_ui_options.cc:489
 msgid "JACK"
 msgstr ""
 
-#: ardour_ui_ed.cc:139
+#: ardour_ui_ed.cc:142
 msgid "Latency"
 msgstr ""
 
-#: ardour_ui_ed.cc:141
+#: ardour_ui_ed.cc:144
 #, fuzzy
 msgid "Reconnect"
 msgstr "Σύνδεση"
 
-#: ardour_ui_ed.cc:144 mixer_strip.cc:514 mixer_strip.cc:574
+#: ardour_ui_ed.cc:147 mixer_strip.cc:497 mixer_strip.cc:565
 msgid "Disconnect"
 msgstr "Αποσύνδεση"
 
-#: ardour_ui_ed.cc:171
+#: ardour_ui_ed.cc:174
 msgid "Windows"
 msgstr "Παράθυρα"
 
-#: ardour_ui_ed.cc:172
+#: ardour_ui_ed.cc:175
 msgid "start prefix"
 msgstr ""
 
-#: ardour_ui_ed.cc:173
+#: ardour_ui_ed.cc:176
 msgid "Quit"
 msgstr "Έξοδος"
 
 #. windows visibility actions
-#: ardour_ui_ed.cc:177
+#: ardour_ui_ed.cc:180
 msgid "Maximise Editor Space"
 msgstr ""
 
-#: ardour_ui_ed.cc:179
+#: ardour_ui_ed.cc:182
 #, fuzzy
 msgid "Show Editor"
 msgstr "Επεξεργαστής"
 
-#: ardour_ui_ed.cc:180
+#: ardour_ui_ed.cc:183
 #, fuzzy
 msgid "Show Mixer"
 msgstr "Μίκτης"
 
-#: ardour_ui_ed.cc:182
+#: ardour_ui_ed.cc:185
 msgid "Options Editor"
 msgstr "Επεξ/στης Ρυθμίσεων"
 
-#: ardour_ui_ed.cc:183
+#: ardour_ui_ed.cc:186
 #, fuzzy
 msgid "Track/Bus Inspector"
 msgstr "κανάλια/δίαυλοι"
 
-#: ardour_ui_ed.cc:185
+#: ardour_ui_ed.cc:188
 msgid "Connections"
 msgstr "Συνδέσεις"
 
-#: ardour_ui_ed.cc:187
+#: ardour_ui_ed.cc:190
 msgid "Locations"
 msgstr "Τοποθεσίες"
 
-#: ardour_ui_ed.cc:189
+#: ardour_ui_ed.cc:192
 msgid "Big Clock"
 msgstr "Μεγάλο ωρολόγιον"
 
-#: ardour_ui_ed.cc:191
+#: ardour_ui_ed.cc:194
 msgid "About"
 msgstr "Πληροφορίες"
 
-#: ardour_ui_ed.cc:192
+#: ardour_ui_ed.cc:195
 #, fuzzy
 msgid "Colors"
 msgstr "Χρώμα"
 
-#: ardour_ui_ed.cc:194
+#: ardour_ui_ed.cc:197
 #, fuzzy
 msgid "Add Audio Track"
 msgstr "Πρόσθεση καναλιού/διαύλου"
 
-#: ardour_ui_ed.cc:196
+#: ardour_ui_ed.cc:199
 #, fuzzy
 msgid "Add Audio Bus"
 msgstr "Απόκρυψη όλων των Ηχοδιαύλων"
 
-#: ardour_ui_ed.cc:198
+#: ardour_ui_ed.cc:201
 msgid "Save"
 msgstr "Αποθήκευση"
 
-#: ardour_ui_ed.cc:200 editor_actions.cc:254
+#: ardour_ui_ed.cc:203 editor_actions.cc:255
 #, fuzzy
 msgid "Remove Last Capture"
 msgstr "Απαλοιφή τελευταίας λήψης"
 
 #. do-nothing action for the "transport" menu bar item
-#: ardour_ui_ed.cc:207
+#: ardour_ui_ed.cc:210
 #, fuzzy
 msgid "Transport"
 msgstr "Μεταφραστές"
@@ -1012,74 +994,74 @@ msgstr "Μεταφραστές"
 #. these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
 #. menus and via button proxies.
 #.
-#: ardour_ui_ed.cc:213 sfdb_ui.cc:57
+#: ardour_ui_ed.cc:216 sfdb_ui.cc:57
 msgid "Stop"
 msgstr "Παύση"
 
-#: ardour_ui_ed.cc:216
+#: ardour_ui_ed.cc:219
 msgid "Roll"
 msgstr ""
 
-#: ardour_ui_ed.cc:220
+#: ardour_ui_ed.cc:223
 #, fuzzy
 msgid "Start/Stop"
 msgstr "Αρχή:"
 
-#: ardour_ui_ed.cc:223
+#: ardour_ui_ed.cc:226
 msgid "Stop + Forget Capture"
 msgstr ""
 
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:229
 #, fuzzy
 msgid "Play Loop Range"
 msgstr "Επαναληπτική αναπαρ/γή διαστήματος"
 
-#: ardour_ui_ed.cc:229
+#: ardour_ui_ed.cc:232
 #, fuzzy
 msgid "Play Selection"
 msgstr "Αναπαρ/γή επιλεγμένης Περιοχής"
 
-#: ardour_ui_ed.cc:233
+#: ardour_ui_ed.cc:236
 #, fuzzy
 msgid "Enable Record"
 msgstr "Εγγραφή"
 
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:239
 #, fuzzy
 msgid "Rewind"
 msgstr "Περιοχή"
 
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:242
 msgid "Rewind (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:242
+#: ardour_ui_ed.cc:245
 msgid "Rewind (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:245
+#: ardour_ui_ed.cc:248
 #, fuzzy
 msgid "Forward"
 msgstr "νύξη εμπρός"
 
-#: ardour_ui_ed.cc:248
+#: ardour_ui_ed.cc:251
 msgid "Forward (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:251
+#: ardour_ui_ed.cc:254
 msgid "Forward (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:254
+#: ardour_ui_ed.cc:257
 msgid "Goto Zero"
 msgstr ""
 
-#: ardour_ui_ed.cc:257
+#: ardour_ui_ed.cc:260
 #, fuzzy
 msgid "Goto Start"
 msgstr "Αρχή:"
 
-#: ardour_ui_ed.cc:260
+#: ardour_ui_ed.cc:263
 msgid "Goto End"
 msgstr ""
 
@@ -1087,7 +1069,7 @@ msgstr ""
 #. that proxies for these action to be more compact. It would be nice to find a way to override the action
 #. name appearance on the buttons.
 #.
-#: ardour_ui_ed.cc:269
+#: ardour_ui_ed.cc:272
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1096,7 +1078,7 @@ msgstr ""
 "punch\n"
 "in"
 
-#: ardour_ui_ed.cc:272
+#: ardour_ui_ed.cc:275
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1105,11 +1087,11 @@ msgstr ""
 "punch\n"
 "out"
 
-#: ardour_ui_ed.cc:275 option_editor.cc:128
+#: ardour_ui_ed.cc:278 option_editor.cc:129
 msgid "Click"
 msgstr "Μετρονόμος"
 
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:281
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1118,7 +1100,7 @@ msgstr ""
 "αυτόματο\n"
 "input"
 
-#: ardour_ui_ed.cc:281
+#: ardour_ui_ed.cc:284
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1127,7 +1109,7 @@ msgstr ""
 "αυτόματη\n"
 "αναπαρ/γή"
 
-#: ardour_ui_ed.cc:284
+#: ardour_ui_ed.cc:287
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1136,283 +1118,283 @@ msgstr ""
 "αυτόματη\n"
 "επιστροφή"
 
-#: ardour_ui_ed.cc:288
+#: ardour_ui_ed.cc:291
 #, fuzzy
 msgid ""
 "Time\n"
 "master"
 msgstr "JACK master χρόνου"
 
-#: ardour_ui_ed.cc:291
+#: ardour_ui_ed.cc:294
 msgid "Toggle Record Enable Track1"
 msgstr ""
 
-#: ardour_ui_ed.cc:293
+#: ardour_ui_ed.cc:296
 msgid "Toggle Record Enable Track2"
 msgstr ""
 
-#: ardour_ui_ed.cc:295
+#: ardour_ui_ed.cc:298
 msgid "Toggle Record Enable Track3"
 msgstr ""
 
-#: ardour_ui_ed.cc:297
+#: ardour_ui_ed.cc:300
 msgid "Toggle Record Enable Track4"
 msgstr ""
 
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:302
 msgid "Toggle Record Enable Track5"
 msgstr ""
 
-#: ardour_ui_ed.cc:301
+#: ardour_ui_ed.cc:304
 msgid "Toggle Record Enable Track6"
 msgstr ""
 
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:306
 msgid "Toggle Record Enable Track7"
 msgstr ""
 
-#: ardour_ui_ed.cc:305
+#: ardour_ui_ed.cc:308
 msgid "Toggle Record Enable Track8"
 msgstr ""
 
-#: ardour_ui_ed.cc:307
+#: ardour_ui_ed.cc:310
 msgid "Toggle Record Enable Track9"
 msgstr ""
 
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:312
 msgid "Toggle Record Enable Track10"
 msgstr ""
 
-#: ardour_ui_ed.cc:311
+#: ardour_ui_ed.cc:314
 msgid "Toggle Record Enable Track11"
 msgstr ""
 
-#: ardour_ui_ed.cc:313
+#: ardour_ui_ed.cc:316
 msgid "Toggle Record Enable Track12"
 msgstr ""
 
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:318
 msgid "Toggle Record Enable Track13"
 msgstr ""
 
-#: ardour_ui_ed.cc:317
+#: ardour_ui_ed.cc:320
 msgid "Toggle Record Enable Track14"
 msgstr ""
 
-#: ardour_ui_ed.cc:319
+#: ardour_ui_ed.cc:322
 msgid "Toggle Record Enable Track15"
 msgstr ""
 
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:324
 msgid "Toggle Record Enable Track16"
 msgstr ""
 
-#: ardour_ui_ed.cc:323
+#: ardour_ui_ed.cc:326
 msgid "Toggle Record Enable Track17"
 msgstr ""
 
-#: ardour_ui_ed.cc:325
+#: ardour_ui_ed.cc:328
 msgid "Toggle Record Enable Track18"
 msgstr ""
 
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:330
 msgid "Toggle Record Enable Track19"
 msgstr ""
 
-#: ardour_ui_ed.cc:329
+#: ardour_ui_ed.cc:332
 msgid "Toggle Record Enable Track20"
 msgstr ""
 
-#: ardour_ui_ed.cc:331
+#: ardour_ui_ed.cc:334
 msgid "Toggle Record Enable Track21"
 msgstr ""
 
-#: ardour_ui_ed.cc:333
+#: ardour_ui_ed.cc:336
 msgid "Toggle Record Enable Track22"
 msgstr ""
 
-#: ardour_ui_ed.cc:335
+#: ardour_ui_ed.cc:338
 msgid "Toggle Record Enable Track23"
 msgstr ""
 
-#: ardour_ui_ed.cc:337
+#: ardour_ui_ed.cc:340
 msgid "Toggle Record Enable Track24"
 msgstr ""
 
-#: ardour_ui_ed.cc:339
+#: ardour_ui_ed.cc:342
 msgid "Toggle Record Enable Track25"
 msgstr ""
 
-#: ardour_ui_ed.cc:341
+#: ardour_ui_ed.cc:344
 msgid "Toggle Record Enable Track26"
 msgstr ""
 
-#: ardour_ui_ed.cc:343
+#: ardour_ui_ed.cc:346
 msgid "Toggle Record Enable Track27"
 msgstr ""
 
-#: ardour_ui_ed.cc:345
+#: ardour_ui_ed.cc:348
 msgid "Toggle Record Enable Track28"
 msgstr ""
 
-#: ardour_ui_ed.cc:347
+#: ardour_ui_ed.cc:350
 msgid "Toggle Record Enable Track29"
 msgstr ""
 
-#: ardour_ui_ed.cc:349
+#: ardour_ui_ed.cc:352
 msgid "Toggle Record Enable Track30"
 msgstr ""
 
-#: ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:354
 msgid "Toggle Record Enable Track31"
 msgstr ""
 
-#: ardour_ui_ed.cc:353
+#: ardour_ui_ed.cc:356
 msgid "Toggle Record Enable Track32"
 msgstr ""
 
-#: ardour_ui_ed.cc:358
+#: ardour_ui_ed.cc:361
 msgid "Percentage"
 msgstr "Ποσοστό"
 
-#: ardour_ui_ed.cc:359
+#: ardour_ui_ed.cc:362
 msgid "Semitones"
 msgstr "Ημιτόνια"
 
-#: ardour_ui_ed.cc:363
+#: ardour_ui_ed.cc:366
 msgid "Send MTC"
 msgstr "Αποστολή MTC"
 
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:368
 msgid "Send MMC"
 msgstr "Αποστολή MMC"
 
-#: ardour_ui_ed.cc:367
+#: ardour_ui_ed.cc:370
 #, fuzzy
 msgid "Use MMC"
 msgstr "Αποστολή MMC"
 
-#: ardour_ui_ed.cc:369
+#: ardour_ui_ed.cc:372
 msgid "Send MIDI feedback"
 msgstr ""
 
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:374
 #, fuzzy
 msgid "Use MIDI control"
 msgstr "Εξωτερικός Έλεγχος MIDI"
 
-#: ardour_ui_ed.cc:374
+#: ardour_ui_ed.cc:377
 #, fuzzy
-msgid "Connect newtrack inputs to hardware"
+msgid "Connect new track inputs to hardware"
 msgstr "Αυτο-σύνδεση νέων καναλιών"
 
-#: ardour_ui_ed.cc:392
+#: ardour_ui_ed.cc:396
 #, fuzzy
 msgid "Connect new track outputs to hardware"
 msgstr "Αυτο-σύνδεση νέων καναλιών"
 
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:398
 #, fuzzy
 msgid "Connect new track outputs to master"
 msgstr "αυτόματη σύνδεση outputs καναλιών σε master outs"
 
-#: ardour_ui_ed.cc:396
+#: ardour_ui_ed.cc:400
 #, fuzzy
 msgid "Manually connect new track outputs"
 msgstr "χειροκίνητη σύνδεση των outputs των καναλιών"
 
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:405
 #, fuzzy
 msgid "Hardware monitoring"
 msgstr "Χρήση Hardware Monitoring"
 
-#: ardour_ui_ed.cc:402
+#: ardour_ui_ed.cc:406
 #, fuzzy
 msgid "Software monitoring"
 msgstr "Χρήση Software Monitoring"
 
-#: ardour_ui_ed.cc:403
+#: ardour_ui_ed.cc:407
 #, fuzzy
 msgid "External monitoring"
 msgstr "Εξωτερικός Έλεγχος MIDI"
 
 #. Configuration object options (i.e. not session specific)
-#: ardour_ui_ed.cc:407
+#: ardour_ui_ed.cc:411
 msgid "Stop plugins with transport"
 msgstr "Λήξη των plugins με την παύση"
 
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:412
 #, fuzzy
 msgid "Verify remove last capture"
 msgstr "Απαλοιφή τελευταίας λήψης"
 
-#: ardour_ui_ed.cc:409
+#: ardour_ui_ed.cc:413
 msgid "Stop recording on xrun"
 msgstr "Παύση εγγραφής στα xrun"
 
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:414
 #, fuzzy
 msgid "Stop transport at session end"
 msgstr "Στάση αναπαραγωγέα στο τέλος της συνεδρίας"
 
-#: ardour_ui_ed.cc:411
+#: ardour_ui_ed.cc:415
 msgid "-12dB gain reduce ffwd/rewind"
 msgstr ""
 
-#: ardour_ui_ed.cc:412
+#: ardour_ui_ed.cc:416
 msgid "Rec-enable stays engaged at stop"
 msgstr ""
 
 #. session options
-#: ardour_ui_ed.cc:416
+#: ardour_ui_ed.cc:420
 #, fuzzy
 msgid "Do not run plugins while recording"
 msgstr "Λειτουργία plugins κατα την εγγραφή"
 
-#: ardour_ui_ed.cc:419
+#: ardour_ui_ed.cc:423
 msgid "Latched solo"
 msgstr "Προσκολλημένο σόλο"
 
-#: ardour_ui_ed.cc:424
+#: ardour_ui_ed.cc:428
 #, fuzzy
 msgid "Solo in-place"
 msgstr "Σόλο"
 
-#: ardour_ui_ed.cc:426
+#: ardour_ui_ed.cc:430
 msgid "Solo via bus"
 msgstr "Solo μέσω διαύλου"
 
-#: ardour_ui_ed.cc:429
+#: ardour_ui_ed.cc:433
 #, fuzzy
 msgid "Automatically create crossfades"
 msgstr "Αυτόματο crossfade στα overlap"
 
-#: ardour_ui_ed.cc:431
+#: ardour_ui_ed.cc:435
 msgid "Unmute new full crossfades"
 msgstr ""
 
-#: ardour_ui_options.cc:379 ardour_ui_options.cc:389 ardour_ui_options.cc:456
+#: ardour_ui_options.cc:406 ardour_ui_options.cc:416 ardour_ui_options.cc:483
 msgid "Internal"
 msgstr "Εσωτερικό"
 
-#: ardour_ui_options.cc:380 ardour_ui_options.cc:459
+#: ardour_ui_options.cc:407 ardour_ui_options.cc:486
 #, fuzzy
 msgid "MTC"
 msgstr "MMC"
 
-#: audio_clock.cc:1719 editor.cc:185
+#: audio_clock.cc:1742 editor.cc:188
 msgid "SMPTE"
 msgstr "SMPTE"
 
-#: audio_clock.cc:1720 editor.cc:184 editor_rulers.cc:359
+#: audio_clock.cc:1743 editor.cc:187 editor_rulers.cc:360
 msgid "Bars:Beats"
 msgstr "Μπάρες:Κτύποι"
 
-#: audio_clock.cc:1721
+#: audio_clock.cc:1744
 msgid "Minutes:Seconds"
 msgstr "Λεπτά:Δεύτερα"
 
-#: audio_clock.cc:1722
+#: audio_clock.cc:1745
 msgid "Audio Frames"
 msgstr "Ηχητικά frames"
 
@@ -1420,288 +1402,310 @@ msgstr "Ηχητικά frames"
 #. Slowest = 6.6dB/sec falloff at update rate of 40ms
 #. Slow    = 6.8dB/sec falloff at update rate of 40ms
 #.
-#: audio_clock.cc:1723 editor_actions.cc:374 editor_actions.cc:382
+#: audio_clock.cc:1746 editor_actions.cc:375 editor_actions.cc:383
+#: gain_meter.cc:172 panner_ui.cc:89 plugin_ui.cc:392 plugin_ui.cc:635
 msgid "Off"
 msgstr "Εκτός"
 
-#: audio_clock.cc:1725
+#: audio_clock.cc:1748
 msgid "Mode"
 msgstr "Λειτουργία"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:458
+#: audio_time_axis.cc:91
 msgid "m"
 msgstr "m"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:459
+#: audio_time_axis.cc:91
 msgid "s"
 msgstr "s"
 
-#: audio_time_axis.cc:90
+#: audio_time_axis.cc:91
 msgid "r"
 msgstr "r"
 
-#: audio_time_axis.cc:94
+#: audio_time_axis.cc:95
 msgid "g"
 msgstr "g"
 
 #. group
-#: audio_time_axis.cc:95
+#: audio_time_axis.cc:96
 msgid "p"
 msgstr "p"
 
-#: audio_time_axis.cc:96 automation_time_axis.cc:31 visual_time_axis.cc:73
+#: audio_time_axis.cc:97 automation_time_axis.cc:32 visual_time_axis.cc:74
 msgid "h"
 msgstr "h"
 
 #. height
-#: audio_time_axis.cc:97
+#: audio_time_axis.cc:98
 msgid "a"
 msgstr "a"
 
-#: audio_time_axis.cc:98 visual_time_axis.cc:72
+#: audio_time_axis.cc:99 visual_time_axis.cc:73
 msgid "v"
 msgstr "v"
 
-#: audio_time_axis.cc:173
+#: audio_time_axis.cc:168 mixer_strip.cc:86
 msgid "Record"
 msgstr "Εγγραφή"
 
-#: audio_time_axis.cc:174 editor_actions.cc:36
+#: audio_time_axis.cc:169 editor_actions.cc:37 mixer_strip.cc:86
 msgid "Solo"
 msgstr "Σόλο"
 
-#: audio_time_axis.cc:175 editor.cc:1767 editor.cc:1866 panner_ui.cc:385
+#: audio_time_axis.cc:170 editor.cc:1760 editor.cc:1859 mixer_strip.cc:86
+#: panner_ui.cc:427
 msgid "Mute"
 msgstr "Σιγή"
 
-#: audio_time_axis.cc:176
+#: audio_time_axis.cc:171
 msgid "Edit Group"
 msgstr "Διαμόρφωση Ομάδας"
 
-#: audio_time_axis.cc:177 visual_time_axis.cc:91
+#: audio_time_axis.cc:172 visual_time_axis.cc:92
 msgid "Display Height"
 msgstr "Απεικόνιση ύψους"
 
-#: audio_time_axis.cc:178
+#: audio_time_axis.cc:173
 msgid "Playlist"
 msgstr "Playlist"
 
-#: audio_time_axis.cc:179 audio_time_axis.cc:743
+#: audio_time_axis.cc:174 audio_time_axis.cc:741
 msgid "Automation"
 msgstr "Αυτοματισμός"
 
-#: audio_time_axis.cc:180 visual_time_axis.cc:92
+#: audio_time_axis.cc:175 visual_time_axis.cc:93
 msgid "Visual options"
 msgstr "Επιλογές Εμφανίσεως"
 
-#: audio_time_axis.cc:181 visual_time_axis.cc:93
+#: audio_time_axis.cc:176 visual_time_axis.cc:94
 msgid "Hide this track"
 msgstr "Απόκρυψη παρόντος καναλιού"
 
-#: audio_time_axis.cc:337
+#: audio_time_axis.cc:333 mixer_strip.cc:927
 msgid "No group"
 msgstr "Χωρίς ομάδα"
 
-#: audio_time_axis.cc:704 automation_time_axis.cc:448
-#: imageframe_time_axis.cc:256 marker_time_axis.cc:210
+#: audio_time_axis.cc:702 automation_time_axis.cc:450
+#: imageframe_time_axis.cc:255 marker_time_axis.cc:211
 msgid "Height"
 msgstr "Ύψος"
 
-#: audio_time_axis.cc:705 color_manager.cc:40 imageframe_time_axis.cc:257
-#: marker_time_axis.cc:211
+#: audio_time_axis.cc:703 color_manager.cc:41 imageframe_time_axis.cc:256
+#: marker_time_axis.cc:212
 msgid "Color"
 msgstr "Χρώμα"
 
-#: audio_time_axis.cc:709
+#: audio_time_axis.cc:707
 msgid "Hide all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:710
+#: audio_time_axis.cc:708
 msgid "Show all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:714 mixer_strip.cc:1236
+#: audio_time_axis.cc:712 mixer_strip.cc:1011
 #, fuzzy
 msgid "Remote Control ID"
 msgstr "απαλοιφή σημείου ελέγχου"
 
-#: audio_time_axis.cc:720
-msgid "show all automation"
+#: audio_time_axis.cc:718
+#, fuzzy
+msgid "Show all automation"
 msgstr "Ανάδειξη όλων των αυτοματισμών"
 
-#: audio_time_axis.cc:723
-msgid "show existing automation"
+#: audio_time_axis.cc:721
+#, fuzzy
+msgid "Show existing automation"
 msgstr "Ανάδειξη υπαρχόντων αυτοματισμών"
 
-#: audio_time_axis.cc:726
-msgid "hide all automation"
+#: audio_time_axis.cc:724
+#, fuzzy
+msgid "Hide all automation"
 msgstr "Κρύψιμο όλων των αυτοματισμών"
 
-#: audio_time_axis.cc:731 audio_time_axis.cc:1169 editor.cc:215
-msgid "gain"
-msgstr "gain"
+#: audio_time_axis.cc:729
+#, fuzzy
+msgid "Fader"
+msgstr "Fades"
 
-#: audio_time_axis.cc:736 audio_time_axis.cc:1209
-msgid "pan"
+#: audio_time_axis.cc:734
+#, fuzzy
+msgid "Pan"
 msgstr "pan"
 
-#: audio_time_axis.cc:741
+#: audio_time_axis.cc:739
 msgid "Plugins"
 msgstr "Plugins"
 
-#: audio_time_axis.cc:749
+#: audio_time_axis.cc:747
 msgid "Show waveforms"
 msgstr "Ανάδειξη κυματομορφών"
 
-#: audio_time_axis.cc:757
+#: audio_time_axis.cc:755
 msgid "Traditional"
 msgstr "Παραδοσιακή"
 
-#: audio_time_axis.cc:760
+#: audio_time_axis.cc:758
 msgid "Rectified"
 msgstr "Ανορθωμένή"
 
-#: audio_time_axis.cc:763
+#: audio_time_axis.cc:761
 msgid "Waveform"
 msgstr "Κυματομορφή"
 
-#: audio_time_axis.cc:773
+#: audio_time_axis.cc:771
 #, fuzzy
-msgid "align with existing material"
+msgid "Align with existing material"
 msgstr "Υπάρχον υλικό"
 
-#: audio_time_axis.cc:778
+#: audio_time_axis.cc:776
 #, fuzzy
-msgid "align with capture time"
+msgid "Align with capture time"
 msgstr "Χρόνος Λήψεως"
 
-#: audio_time_axis.cc:784
+#: audio_time_axis.cc:782
 #, fuzzy
 msgid "Alignment"
 msgstr "Ευθυγράμμιση"
 
-#: audio_time_axis.cc:790 editor.cc:523 editor_actions.cc:59
-#: mixer_strip.cc:1225
+#: audio_time_axis.cc:788 editor.cc:527 editor_actions.cc:60
+#: mixer_strip.cc:1000 mixer_ui.cc:111
 msgid "Active"
 msgstr "Ενεργό"
 
-#: audio_time_axis.cc:795 editor.cc:1929 editor_actions.cc:319
-#: editor_markers.cc:507 imageframe_time_axis.cc:260 location_ui.cc:56
-#: marker_time_axis.cc:214 mixer_strip.cc:1239
+#: audio_time_axis.cc:793 editor.cc:1922 editor_actions.cc:320
+#: editor_markers.cc:508 imageframe_time_axis.cc:259 location_ui.cc:57
+#: marker_time_axis.cc:215 mixer_strip.cc:1014
 msgid "Remove"
 msgstr "Απαλοιφή"
 
-#: audio_time_axis.cc:835
+#: audio_time_axis.cc:833
 msgid "Name for playlist"
 msgstr "Όνομα για playlist"
 
-#: audio_time_axis.cc:837 audio_time_axis.cc:1853 editor_markers.cc:826
-#: editor_mouse.cc:4609 imageframe_time_axis.cc:249 marker_time_axis.cc:207
-#: meter_bridge_strip.cc:223 mixer_strip.cc:1223 redirect_box.cc:749
-#: redirect_box.cc:1063 route_ui.cc:732 visual_time_axis.cc:325
+#: audio_time_axis.cc:835 audio_time_axis.cc:1851 editor_markers.cc:827
+#: editor_mouse.cc:4673 imageframe_time_axis.cc:248 marker_time_axis.cc:208
+#: meter_bridge_strip.cc:224 mixer_strip.cc:998 redirect_box.cc:751
+#: redirect_box.cc:1065 route_ui.cc:739 visual_time_axis.cc:326
 msgid "Rename"
 msgstr "Μετονομασία"
 
-#: audio_time_axis.cc:870 audio_time_axis.cc:910
+#: audio_time_axis.cc:868 audio_time_axis.cc:908
 #, fuzzy
 msgid "Name for Playlist"
 msgstr "Όνομα για playlist"
 
-#: audio_time_axis.cc:1128 visual_time_axis.cc:382
+#: audio_time_axis.cc:1126 visual_time_axis.cc:383
 msgid "a track already exists with that name"
 msgstr "Κανάλι με αυτό το όνομα ήδη υπάρχει"
 
-#: audio_time_axis.cc:1412 editor.cc:1490 selection.cc:622
+#: audio_time_axis.cc:1167 editor.cc:218
+msgid "gain"
+msgstr "gain"
+
+#: audio_time_axis.cc:1207
+msgid "pan"
+msgstr "pan"
+
+#: audio_time_axis.cc:1410 editor.cc:1483 selection.cc:634
 msgid "programming error: "
 msgstr "σφάλμα προγραμματισμού: "
 
-#: audio_time_axis.cc:1850
+#: audio_time_axis.cc:1848
 msgid "Current: %1"
 msgstr "Τρέχον: %1"
 
-#: audio_time_axis.cc:1857
+#: audio_time_axis.cc:1855
 msgid "New Copy"
 msgstr "Νέο αντίγραφο"
 
-#: audio_time_axis.cc:1859
+#: audio_time_axis.cc:1857
 msgid "Clear Current"
 msgstr "Εκκαθάριση τρέχοντος"
 
-#: audio_time_axis.cc:1861 editor.cc:2031 editor.cc:2107
+#: audio_time_axis.cc:1859 editor.cc:2024 editor.cc:2100
 msgid "Select"
 msgstr "Επιλογή"
 
-#: automation_line.cc:883
+#: automation_line.cc:884
 msgid "automation event move"
 msgstr "μετακίνηση συμβάντος αυτοματισμού"
 
-#: automation_line.cc:885
+#: automation_line.cc:886
 msgid "automation range drag"
 msgstr "έλξη διαστήματος αυτοματισμού"
 
-#: automation_line.cc:1014 region_gain_line.cc:61
+#: automation_line.cc:1015 region_gain_line.cc:62
 msgid "remove control point"
 msgstr "απαλοιφή σημείου ελέγχου"
 
-#: automation_time_axis.cc:32 editor_ops.cc:2813
+#: automation_time_axis.cc:33 editor_ops.cc:2885
 msgid "clear"
 msgstr "εκκαθάριση"
 
-#: automation_time_axis.cc:74
+#: automation_time_axis.cc:75
 msgid "track height"
 msgstr ""
 
-#: automation_time_axis.cc:75
+#: automation_time_axis.cc:76
 #, fuzzy
 msgid "automation state"
 msgstr "Κατάσταση αυτοματισμού pan"
 
-#: automation_time_axis.cc:76
+#: automation_time_axis.cc:77
 #, fuzzy
 msgid "clear track"
 msgstr "διαγραφή διαστημάτων"
 
-#: automation_time_axis.cc:77
+#: automation_time_axis.cc:78
 #, fuzzy
 msgid "hide track"
 msgstr "νύξη καναλιού"
 
-#: automation_time_axis.cc:185 automation_time_axis.cc:223
-#: automation_time_axis.cc:463 mixer_strip.cc:176 mixer_strip.cc:188
-#: plugin_ui.cc:394 plugin_ui.cc:636 region_editor.cc:53
-msgid "play"
-msgstr "αναπαραγωγή"
+#: automation_time_axis.cc:184 automation_time_axis.cc:213
+#: automation_time_axis.cc:461
+msgid "Manual"
+msgstr ""
+
+#: automation_time_axis.cc:186 automation_time_axis.cc:224
+#: automation_time_axis.cc:465 editor.cc:2001 editor.cc:2082 gain_meter.cc:174
+#: panner_ui.cc:91 plugin_ui.cc:395 plugin_ui.cc:637 sfdb_ui.cc:56
+msgid "Play"
+msgstr "Αναπαρ/γή"
 
-#: automation_time_axis.cc:187 automation_time_axis.cc:234
-#: automation_time_axis.cc:467 mixer_strip.cc:178 mixer_strip.cc:190
-#: plugin_ui.cc:397 plugin_ui.cc:638
-msgid "write"
+#: automation_time_axis.cc:188 automation_time_axis.cc:235
+#: automation_time_axis.cc:469 gain_meter.cc:176 panner_ui.cc:93
+#: plugin_ui.cc:398 plugin_ui.cc:639
+#, fuzzy
+msgid "Write"
 msgstr "εγγραφή"
 
-#: automation_time_axis.cc:189 automation_time_axis.cc:245
-#: automation_time_axis.cc:471 mixer_strip.cc:180 mixer_strip.cc:192
-#: mixer_strip.cc:887 plugin_ui.cc:400 plugin_ui.cc:640
-msgid "touch"
+#: automation_time_axis.cc:190 automation_time_axis.cc:246
+#: automation_time_axis.cc:473 gain_meter.cc:178 panner_ui.cc:95
+#: plugin_ui.cc:401 plugin_ui.cc:641
+#, fuzzy
+msgid "Touch"
 msgstr "άγγιγμα"
 
-#: automation_time_axis.cc:256 option_editor.cc:182 option_editor.cc:188
-#: plugin_ui.cc:403
+#: automation_time_axis.cc:257 option_editor.cc:183 option_editor.cc:189
+#: plugin_ui.cc:404
 msgid "???"
 msgstr "???"
 
-#: automation_time_axis.cc:270
+#: automation_time_axis.cc:271
 msgid "clear automation"
 msgstr "εκκαθάριση αυτοματισμού"
 
-#: automation_time_axis.cc:450 editor_actions.cc:317
+#: automation_time_axis.cc:452 editor_actions.cc:318
 msgid "Hide"
 msgstr "Κρύψιμο"
 
-#: automation_time_axis.cc:452 crossfade_edit.cc:76 redirect_box.cc:1055
+#: automation_time_axis.cc:454 crossfade_edit.cc:78 redirect_box.cc:1057
 msgid "Clear"
 msgstr "Εκκαθάριση"
 
-#: automation_time_axis.cc:475
+#: automation_time_axis.cc:477
 #, fuzzy
 msgid "State"
 msgstr "Αρχή:"
@@ -1849,822 +1853,811 @@ msgstr ""
 msgid "color of fill"
 msgstr ""
 
-#: color_manager.cc:39
+#: color_manager.cc:40
 #, fuzzy
 msgid "Object"
 msgstr "αντικείμενο"
 
-#: color_manager.cc:77
+#: color_manager.cc:78
 #, fuzzy
 msgid "cannot open color definition file %1: %2"
 msgstr "Η εισαγωγική εικόνα δεν ανοίγει\"%1\""
 
-#: crossfade_edit.cc:73
+#: crossfade_edit.cc:75
 msgid "ardour: x-fade edit"
 msgstr "ardour: επεξεργασία x-fade"
 
-#: crossfade_edit.cc:77 panner_ui.cc:401
+#: crossfade_edit.cc:79 panner_ui.cc:443
 #, fuzzy
 msgid "Reset"
 msgstr "reset"
 
-#: crossfade_edit.cc:78
+#: crossfade_edit.cc:80
 #, fuzzy
 msgid "Fade"
 msgstr "Fades"
 
-#: crossfade_edit.cc:79
+#: crossfade_edit.cc:81
 #, fuzzy
 msgid "Out (dry)"
 msgstr "out (dry)"
 
-#: crossfade_edit.cc:80
+#: crossfade_edit.cc:82
 #, fuzzy
 msgid "Out"
 msgstr "Έξοδοι"
 
-#: crossfade_edit.cc:81
+#: crossfade_edit.cc:83
 #, fuzzy
 msgid "In (dry)"
 msgstr "in (dry)"
 
-#: crossfade_edit.cc:82
+#: crossfade_edit.cc:84
 msgid "In"
 msgstr ""
 
-#: crossfade_edit.cc:84
+#: crossfade_edit.cc:86
 #, fuzzy
 msgid "With Pre-roll"
 msgstr "με pre-roll"
 
-#: crossfade_edit.cc:85
+#: crossfade_edit.cc:87
 #, fuzzy
 msgid "With Post-roll"
 msgstr "με post-roll"
 
-#: crossfade_edit.cc:93
+#: crossfade_edit.cc:95
 msgid "Fade In"
 msgstr "Fade In"
 
-#: crossfade_edit.cc:94
+#: crossfade_edit.cc:96
 msgid "Fade Out"
 msgstr "Fade Out"
 
-#: crossfade_edit.cc:170 editor.cc:1842 editor_actions.cc:315
-#: option_editor.cc:129
+#: crossfade_edit.cc:172 editor.cc:1835 editor_actions.cc:316
+#: option_editor.cc:130
 msgid "Audition"
 msgstr "Ακρόαση"
 
-#: editor.cc:101 editor.cc:3588
+#: editor.cc:104 editor.cc:3616
 msgid "Slide"
 msgstr "Ολίσθηση"
 
-#: editor.cc:102 editor.cc:3586
+#: editor.cc:105 editor.cc:3614
 msgid "Splice"
 msgstr "Splice"
 
-#: editor.cc:107 editor.cc:3643 export_dialog.cc:78 export_dialog.cc:92
-#: export_dialog.cc:893 export_dialog.cc:1225
+#. note that this menu list starts at zero, not 1, because zero
+#. is a valid, if useless, ID.
+#.
+#. leave some breathing room
+#: editor.cc:110 editor.cc:3671 export_dialog.cc:78 export_dialog.cc:92
+#: export_dialog.cc:893 export_dialog.cc:1225 route_ui.cc:437
 msgid "None"
 msgstr "Ουδέν"
 
-#: editor.cc:108 editor.cc:3631
+#: editor.cc:111 editor.cc:3659
 #, fuzzy
 msgid "CD Frames"
 msgstr "Frames"
 
-#: editor.cc:109 editor.cc:3633
+#: editor.cc:112 editor.cc:3661
 msgid "SMPTE Frames"
 msgstr "SMPTE Frames"
 
-#: editor.cc:110 editor.cc:3635
+#: editor.cc:113 editor.cc:3663
 msgid "SMPTE Seconds"
 msgstr "SMPTE Δευτερόλεπτα"
 
-#: editor.cc:111 editor.cc:3637
+#: editor.cc:114 editor.cc:3665
 msgid "SMPTE Minutes"
 msgstr "SMPTE Λεπτά"
 
-#: editor.cc:112 editor.cc:3639
+#: editor.cc:115 editor.cc:3667
 msgid "Seconds"
 msgstr "Δευτερόλεπτα"
 
-#: editor.cc:113 editor.cc:3641
+#: editor.cc:116 editor.cc:3669
 msgid "Minutes"
 msgstr "Λεπτά"
 
-#: editor.cc:114 editor.cc:3613
+#: editor.cc:117 editor.cc:3641
 msgid "Beats/32"
 msgstr "Κτύποι/32"
 
-#: editor.cc:115 editor.cc:3611
+#: editor.cc:118 editor.cc:3639
 msgid "Beats/16"
 msgstr "Κτύποι/16"
 
-#: editor.cc:116 editor.cc:3609
+#: editor.cc:119 editor.cc:3637
 msgid "Beats/8"
 msgstr "Κτύποι/8"
 
-#: editor.cc:117 editor.cc:3607
+#: editor.cc:120 editor.cc:3635
 msgid "Beats/4"
 msgstr "Κτύποι/4"
 
-#: editor.cc:118 editor.cc:3605
+#: editor.cc:121 editor.cc:3633
 msgid "Beats/3"
 msgstr "Κτύποι/3"
 
-#: editor.cc:119 editor.cc:3615
+#: editor.cc:122 editor.cc:3643
 msgid "Beats"
 msgstr "Κτύποι"
 
-#: editor.cc:120 editor.cc:3617
+#: editor.cc:123 editor.cc:3645
 msgid "Bars"
 msgstr "Μπάρες"
 
-#: editor.cc:121 editor.cc:3619
+#: editor.cc:124 editor.cc:3647
 msgid "Marks"
 msgstr "Στίγματα"
 
-#: editor.cc:122 editor.cc:141 editor.cc:3621 editor.cc:3687
+#: editor.cc:125 editor.cc:144 editor.cc:3649 editor.cc:3715
 msgid "Edit Cursor"
 msgstr "Κέρσορας επεξεργασίας"
 
-#: editor.cc:123 editor.cc:3623
+#: editor.cc:126 editor.cc:3651
 msgid "Region starts"
 msgstr "Αρχές Περιοχών"
 
-#: editor.cc:124 editor.cc:3625
+#: editor.cc:127 editor.cc:3653
 msgid "Region ends"
 msgstr "Τέλη Περιοχών"
 
-#: editor.cc:125 editor.cc:3629
+#: editor.cc:128 editor.cc:3657
 msgid "Region syncs"
 msgstr "Συγχρονισμός Περιοχών"
 
-#: editor.cc:126 editor.cc:3627
+#: editor.cc:129 editor.cc:3655
 msgid "Region bounds"
 msgstr "Όρια περιοχών"
 
-#: editor.cc:132 editor.cc:3662
+#: editor.cc:135 editor.cc:3690
 msgid "Magnetic"
 msgstr "Μαγνητικό"
 
-#: editor.cc:137 editor.cc:3679 export_dialog.cc:140 export_dialog.cc:156
+#: editor.cc:140 editor.cc:3707 export_dialog.cc:140 export_dialog.cc:156
 #: export_dialog.cc:1068 export_dialog.cc:1072
 msgid "Left"
 msgstr "Αριστερό"
 
-#: editor.cc:138 editor.cc:3681 export_dialog.cc:141 export_dialog.cc:157
+#: editor.cc:141 editor.cc:3709 export_dialog.cc:141 export_dialog.cc:157
 msgid "Right"
 msgstr "Δεξιό"
 
-#: editor.cc:139 editor.cc:3683
+#: editor.cc:142 editor.cc:3711
 msgid "Center"
 msgstr "Κέντρο"
 
-#: editor.cc:140 editor.cc:3685
+#: editor.cc:143 editor.cc:3713
 msgid "Playhead"
 msgstr "Αναπαραγωγέας"
 
 #. time display buttons
-#: editor.cc:183
+#: editor.cc:186
 msgid "Mins:Secs"
 msgstr "Λεπτά:Δέυτερα"
 
-#: editor.cc:186 editor_rulers.cc:353
+#: editor.cc:189 editor_rulers.cc:354
 msgid "Frames"
 msgstr "Frames"
 
-#: editor.cc:187 editor_rulers.cc:373
+#: editor.cc:190 editor_rulers.cc:374
 msgid "Tempo"
 msgstr "Χρόνος"
 
-#: editor.cc:188 editor_rulers.cc:367
+#: editor.cc:191 editor_rulers.cc:368
 msgid "Meter"
 msgstr "Μετρητής"
 
-#: editor.cc:189 editor_rulers.cc:379
+#: editor.cc:192 editor_rulers.cc:380
 msgid "Location Markers"
 msgstr "Στίγματα Τοποθεσίας"
 
-#: editor.cc:190 editor_rulers.cc:385
+#: editor.cc:193 editor_rulers.cc:386
 msgid "Range Markers"
 msgstr "Στίγματα διαστημάτων"
 
-#: editor.cc:191 editor_rulers.cc:391
+#: editor.cc:194 editor_rulers.cc:392
 msgid "Loop/Punch Ranges"
 msgstr "Διαστήματα Loop/Punch"
 
-#: editor.cc:213
+#: editor.cc:216
 msgid "range"
 msgstr "διάστημα"
 
-#: editor.cc:214
+#: editor.cc:217
 msgid "object"
 msgstr "αντικείμενο"
 
-#: editor.cc:216
+#: editor.cc:219
 msgid "zoom"
 msgstr "zoom"
 
-#: editor.cc:217
+#: editor.cc:220
 msgid "timefx"
 msgstr "timefx"
 
-#: editor.cc:218
+#: editor.cc:221
 #, fuzzy
 msgid "listen"
 msgstr "link"
 
-#: editor.cc:220
+#: editor.cc:223
 msgid "mode"
 msgstr "λειτουργία"
 
-#: editor.cc:221
+#: editor.cc:224
 msgid "automation"
 msgstr "αυτοματισμός"
 
-#: editor.cc:223
+#: editor.cc:226
 msgid "Edit Mode"
 msgstr "Λειτουργία Επεξ/σίας"
 
-#: editor.cc:224 editor_actions.cc:283
+#: editor.cc:227 editor_actions.cc:284
 msgid "Snap To"
 msgstr "Έλξη σε"
 
-#: editor.cc:225
+#: editor.cc:228
 msgid "Snap Mode"
 msgstr "Λειτουργία Έλξεως"
 
-#: editor.cc:226
+#: editor.cc:229
 msgid "Zoom Focus"
 msgstr "Εστίαση Zoom"
 
 #. </CMT Additions>
 #. nudge
-#: editor.cc:234 editor.cc:1907 editor.cc:2073 editor.cc:2129
+#: editor.cc:237 editor.cc:1900 editor.cc:2066 editor.cc:2122
 msgid "Nudge"
 msgstr "Νύξη"
 
-#: editor.cc:466
+#: editor.cc:470
 msgid "Zoom in"
 msgstr "Zoom in"
 
-#: editor.cc:467
+#: editor.cc:471
 msgid "Zoom out"
 msgstr "Zoom out"
 
-#: editor.cc:470
+#: editor.cc:474
 msgid "Zoom to session"
 msgstr "Zoom στη συνεδρία"
 
-#: editor.cc:485
+#: editor.cc:489
 msgid "Zoom Span"
 msgstr "Εύρος Zoom"
 
-#: editor.cc:498 editor.cc:524 editor_actions.cc:61 mixer_ui.cc:85
+#: editor.cc:502 editor.cc:528 editor_actions.cc:62 mixer_ui.cc:86
+#: mixer_ui.cc:112
 #, fuzzy
 msgid "Visible"
 msgstr "ορατό"
 
-#: editor.cc:499 editor.cc:522
+#: editor.cc:503 editor.cc:526
 #, fuzzy
 msgid "Name"
 msgstr "Frames"
 
-#: editor.cc:595 editor.cc:661
+#: editor.cc:602 editor.cc:669
 #, fuzzy
 msgid "Regions"
 msgstr "Περιοχή"
 
-#: editor.cc:634 editor.cc:673
+#: editor.cc:642 editor.cc:681
 msgid "Chunks"
 msgstr "Κομμάτια"
 
-#: editor.cc:664
+#: editor.cc:672
 #, fuzzy
 msgid "Tracks/Busses"
 msgstr "κανάλια/δίαυλοι"
 
-#: editor.cc:667
+#: editor.cc:675
 msgid "Snapshots"
 msgstr ""
 
-#: editor.cc:670
+#: editor.cc:678
 msgid "Edit Groups"
 msgstr "Πρόσθεση Ομάδων"
 
-#: editor.cc:719
+#: editor.cc:727
 msgid "Nudge region/selection forwards"
 msgstr "Νύξη περιοχής/επιλογής εμπρός"
 
-#: editor.cc:720
+#: editor.cc:728
 msgid "Nudge region/selection backwards"
 msgstr "Νύξη περιοχής/επιλογής πίσω"
 
-#: editor.cc:727 editor_mixer.cc:298
+#: editor.cc:735 editor_mixer.cc:299
 msgid "ardour: editor"
 msgstr "ardour: επεξεργαστής"
 
-#: editor.cc:728
+#: editor.cc:736
 msgid "ardour_editor"
 msgstr "ardour_επεξεργαστής"
 
-#: editor.cc:1190
+#: editor.cc:1183
 msgid "ardour: editor: "
 msgstr "ardour: επεξεργαστής: "
 
 #. force name
-#: editor.cc:1275 editor.cc:1284 editor_markers.cc:869
+#: editor.cc:1268 editor.cc:1277 editor_markers.cc:870
 msgid "Loop"
 msgstr "Loop"
 
 #. force name
-#: editor.cc:1289 editor.cc:1298 editor_markers.cc:895
+#: editor.cc:1282 editor.cc:1291 editor_markers.cc:896
 msgid "Punch"
 msgstr "Punch"
 
-#: editor.cc:1446 editor_mouse.cc:1721
+#: editor.cc:1439 editor_mouse.cc:1742
 msgid "programming error: fade in canvas item has no regionview data pointer!"
 msgstr ""
 "Σφάλμα προγραμματισμού: το αντικείμενο 'fade in canvas' δεν διαθέτει δείκτη "
 "δεδομένων οπτικής περιοχών!"
 
-#: editor.cc:1458 editor.cc:1475 redirect_box.cc:1071
+#: editor.cc:1451 editor.cc:1468 redirect_box.cc:1073
 msgid "Deactivate"
 msgstr "Απενεργοποίηση"
 
 #. activation
-#: editor.cc:1460 editor.cc:1477 redirect_box.cc:1069
+#: editor.cc:1453 editor.cc:1470 redirect_box.cc:1071
 msgid "Activate"
 msgstr "Ενεργοποίηση"
 
-#: editor.cc:1465 editor.cc:1482
+#: editor.cc:1458 editor.cc:1475
 msgid "Linear"
 msgstr "Γραμμικό"
 
-#: editor.cc:1466 editor.cc:1483 editor_actions.cc:375
+#: editor.cc:1459 editor.cc:1476 editor_actions.cc:376
 msgid "Slowest"
 msgstr "Αργότατο"
 
-#: editor.cc:1467 editor.cc:1484 editor_actions.cc:376
+#: editor.cc:1460 editor.cc:1477 editor_actions.cc:377
 msgid "Slow"
 msgstr "Αργό"
 
-#: editor.cc:1468 editor.cc:1485 editor_actions.cc:378
+#: editor.cc:1461 editor.cc:1478 editor_actions.cc:379
 msgid "Fast"
 msgstr "Ταχύ"
 
-#: editor.cc:1469 editor.cc:1486 editor_actions.cc:380
+#: editor.cc:1462 editor.cc:1479 editor_actions.cc:381
 msgid "Fastest"
 msgstr "Ταχύτατο"
 
-#: editor.cc:1596 editor.cc:1604
+#: editor.cc:1589 editor.cc:1597
 msgid "Freeze"
 msgstr "Πάγωμα"
 
-#: editor.cc:1600
+#: editor.cc:1593
 msgid "Unfreeze"
 msgstr "Ξεπάγωμα"
 
-#: editor.cc:1769 editor.cc:1864
+#: editor.cc:1762 editor.cc:1857
 #, fuzzy
 msgid "Unmute"
 msgstr "σιγή"
 
 #. non-operative menu items for menu bar
 #. show editors
-#: editor.cc:1773 editor.cc:2053 editor.cc:2755 editor_actions.cc:26
-#: editor_markers.cc:506 mixer_strip.cc:512 mixer_strip.cc:572
-#: redirect_box.cc:1077
+#: editor.cc:1766 editor.cc:2046 editor.cc:2748 editor_actions.cc:27
+#: editor_markers.cc:507 mixer_strip.cc:495 mixer_strip.cc:563
+#: redirect_box.cc:1079
 msgid "Edit"
 msgstr "Επεξεργασία"
 
-#: editor.cc:1778
+#: editor.cc:1771
 msgid "Convert to short"
 msgstr ""
 
-#: editor.cc:1780
+#: editor.cc:1773
 msgid "Convert to full"
 msgstr ""
 
-#: editor.cc:1791
+#: editor.cc:1784
 #, fuzzy
 msgid "Crossfade"
 msgstr "Crossfade"
 
-#: editor.cc:1834
+#: editor.cc:1827
 msgid "Popup region editor"
 msgstr "Εμφάνιση του ρυθμιστή περιοχής"
 
-#: editor.cc:1835
+#: editor.cc:1828
 #, fuzzy
 msgid "Raise to top layer"
 msgstr "Ανόρθωση περιοχής στο ανώτατο στρώμα"
 
-#: editor.cc:1836
+#: editor.cc:1829
 #, fuzzy
 msgid "Lower to bottom layer"
 msgstr "Υποβίβαση περιοχής στο κατώτατο στρώμα"
 
-#: editor.cc:1838
+#: editor.cc:1831
 msgid "Define sync point"
 msgstr "Προσδιορισμός σημείου συγχρονισμού"
 
-#: editor.cc:1839
+#: editor.cc:1832
 msgid "Remove sync point"
 msgstr "Απαλοιφή σημείου συγχρονισμού"
 
-#: editor.cc:1844
+#: editor.cc:1837
 #, fuzzy
 msgid "Bounce"
 msgstr "Αναπήδηση διαστήματος"
 
-#: editor.cc:1847
+#: editor.cc:1840
 #, fuzzy
 msgid "Analyze region"
 msgstr "Αναπαρ/γή Περιοχής"
 
-#: editor.cc:1859
+#: editor.cc:1852
 msgid "Lock"
 msgstr "Κλείδωμα"
 
-#: editor.cc:1860
+#: editor.cc:1853
 msgid "Unlock"
 msgstr "Ξεκλείδωμα"
 
-#: editor.cc:1870
+#: editor.cc:1863
 msgid "Original position"
 msgstr "Πρωταρχική θέση"
 
-#: editor.cc:1876
+#: editor.cc:1869
 msgid "Toggle envelope visibility"
 msgstr ""
 
-#: editor.cc:1877
+#: editor.cc:1870
 #, fuzzy
 msgid "Toggle envelope active"
 msgstr "Διακόπτης Ενεργού"
 
-#: editor.cc:1881
+#: editor.cc:1874
 #, fuzzy
 msgid "DeNormalize"
 msgstr "Εξομάλυνση"
 
-#: editor.cc:1883
+#: editor.cc:1876
 msgid "Normalize"
 msgstr "Εξομάλυνση"
 
-#: editor.cc:1886
+#: editor.cc:1879
 msgid "Reverse"
 msgstr "Αντιστροφή"
 
 #. range related stuff
-#: editor.cc:1892
+#: editor.cc:1885
 #, fuzzy
 msgid "Add Range Markers"
 msgstr "Στίγματα διαστημάτων"
 
-#: editor.cc:1893
+#: editor.cc:1886
 #, fuzzy
 msgid "Set Range"
 msgstr "Ξεχωριστό διάστημα"
 
-#: editor.cc:1902
+#: editor.cc:1895
 #, fuzzy
 msgid "Nudge fwd"
 msgstr "νύξη εμπρός"
 
-#: editor.cc:1903
+#: editor.cc:1896
 #, fuzzy
 msgid "Nudge bwd"
 msgstr "Νύξη"
 
-#: editor.cc:1904
+#: editor.cc:1897
 msgid "Nudge fwd by capture offset"
 msgstr ""
 
-#: editor.cc:1905
+#: editor.cc:1898
 msgid "Nudge bwd by capture offset"
 msgstr ""
 
-#: editor.cc:1914
+#: editor.cc:1907
 msgid "Start to edit cursor"
 msgstr "Από αρχή μέχρι  κέρσορα επεξεργασίας"
 
-#: editor.cc:1915
+#: editor.cc:1908
 msgid "Edit cursor to end"
 msgstr "Από κέρσορα επεξεργασίας μέχρι τέλους"
 
-#: editor.cc:1917
+#: editor.cc:1910 gain_meter.cc:181 gain_meter.cc:813 panner_ui.cc:98
+#: panner_ui.cc:803
 msgid "Trim"
 msgstr "Ισοστάθμιση"
 
-#: editor.cc:1920
+#: editor.cc:1913
 msgid "Split"
 msgstr "Διαχωρισμός"
 
-#: editor.cc:1923
+#: editor.cc:1916
 msgid "Make mono regions"
 msgstr "Δημιουργία mono περιοχών"
 
-#: editor.cc:1926
+#: editor.cc:1919
 msgid "Duplicate"
 msgstr "Αντιγραφή"
 
-#: editor.cc:1927
+#: editor.cc:1920
 msgid "Fill Track"
 msgstr "Γόμωση καναλιού"
 
-#: editor.cc:1931
+#: editor.cc:1924
 msgid "Destroy"
 msgstr "Καταστροφή"
 
-#: editor.cc:1961
+#: editor.cc:1954
 msgid "Play range"
 msgstr "Αναπαρ/γή διαστήματος"
 
-#: editor.cc:1962
+#: editor.cc:1955
 msgid "Loop range"
 msgstr "Loop διαστήματος"
 
-#: editor.cc:1966
+#: editor.cc:1959
 #, fuzzy
 msgid "Analyze range"
 msgstr "Αναπαρ/γή διαστήματος"
 
-#: editor.cc:1970
+#: editor.cc:1963
 #, fuzzy
 msgid "Separate range to track"
 msgstr "Ξεχωριστό διάστημα"
 
-#: editor.cc:1971
+#: editor.cc:1964
 #, fuzzy
 msgid "Separate range to region list"
 msgstr "θέση επιλεγμένης οπτικής περιοχής"
 
-#: editor.cc:1974
+#: editor.cc:1967
 #, fuzzy
 msgid "Select all in range"
 msgstr "Επιλογή όλων στο  κανάλι"
 
-#: editor.cc:1976 editor.cc:2021
+#: editor.cc:1969 editor.cc:2014
 #, fuzzy
 msgid "Set range to loop range"
 msgstr "Επιλογή διαστήματος loop"
 
-#: editor.cc:1977 editor.cc:2022
+#: editor.cc:1970 editor.cc:2015
 #, fuzzy
 msgid "Set range to punch range"
 msgstr "Επιλογή διαστήματος punch"
 
-#: editor.cc:1979
+#: editor.cc:1972
 #, fuzzy
 msgid "Crop region to range"
 msgstr "Κοπή Περιοχής στο διάστημα"
 
-#: editor.cc:1980
+#: editor.cc:1973
 #, fuzzy
 msgid "Fill range with region"
 msgstr "Γέμισμα διαστήματος  μ/Περιοχή"
 
-#: editor.cc:1981
+#: editor.cc:1974
 #, fuzzy
 msgid "Duplicate range"
 msgstr "Αντιγραφή"
 
-#: editor.cc:1982
+#: editor.cc:1975
 msgid "Create chunk from range"
 msgstr "Δημιουργία κομματιού από διάστημα"
 
-#: editor.cc:1984
+#: editor.cc:1977
 msgid "Bounce range"
 msgstr "Αναπήδηση διαστήματος"
 
-#: editor.cc:1985
+#: editor.cc:1978
 #, fuzzy
 msgid "Export range"
 msgstr "Εξαγωγή περιοχής"
 
-#: editor.cc:1987
+#: editor.cc:1980
 msgid "Range"
 msgstr "Διάστημα"
 
-#: editor.cc:2002 editor.cc:2087
+#: editor.cc:1995 editor.cc:2080
 msgid "Play from edit cursor"
 msgstr "Αναπαρ/γή από Κέρσορα Επεξεργασίας"
 
-#: editor.cc:2003 editor.cc:2088
+#: editor.cc:1996 editor.cc:2081
 msgid "Play from start"
 msgstr "Αναπαρ/γή από αρχή"
 
-#: editor.cc:2004
+#: editor.cc:1997
 #, fuzzy
 msgid "Play region"
 msgstr "Αναπαρ/γή Περιοχής"
 
-#: editor.cc:2006
+#: editor.cc:1999
 msgid "Loop Region"
 msgstr "Loop Περιοχής"
 
-#: editor.cc:2008 editor.cc:2089 sfdb_ui.cc:56
-msgid "Play"
-msgstr "Αναπαρ/γή"
-
-#: editor.cc:2016 editor.cc:2097
+#: editor.cc:2009 editor.cc:2090
 msgid "Select All in track"
 msgstr "Επιλογή όλων στο  κανάλι"
 
-#: editor.cc:2017 editor.cc:2098 redirect_box.cc:1065
+#: editor.cc:2010 editor.cc:2091 redirect_box.cc:1067
 msgid "Select All"
 msgstr "Επιλογή όλων"
 
-#: editor.cc:2018 editor.cc:2099
+#: editor.cc:2011 editor.cc:2092
 #, fuzzy
 msgid "Invert selection in track"
 msgstr "Αντιστροφή στο κανάλι"
 
-#: editor.cc:2019 editor.cc:2100
+#: editor.cc:2012 editor.cc:2093
 #, fuzzy
 msgid "Invert selection"
 msgstr "μετακίνηση επιλογής"
 
-#: editor.cc:2024 editor.cc:2102
+#: editor.cc:2017 editor.cc:2095
 #, fuzzy
 msgid "Select all after edit cursor"
 msgstr "Από αρχή μέχρι  κέρσορα επεξεργασίας"
 
-#: editor.cc:2025 editor.cc:2103
+#: editor.cc:2018 editor.cc:2096
 #, fuzzy
 msgid "Select all before edit cursor"
 msgstr "Από αρχή μέχρι  κέρσορα επεξεργασίας"
 
-#: editor.cc:2026 editor.cc:2104
+#: editor.cc:2019 editor.cc:2097
 #, fuzzy
 msgid "Select all after playhead"
 msgstr "Θέση από αναπαραγωγέα"
 
-#: editor.cc:2027 editor.cc:2105
+#: editor.cc:2020 editor.cc:2098
 #, fuzzy
 msgid "Select all before playhead"
 msgstr "Θέση από αναπαραγωγέα"
 
-#: editor.cc:2028
+#: editor.cc:2021
 #, fuzzy
 msgid "Select all between cursors"
 msgstr "Από αρχή μέχρι  κέρσορα επεξεργασίας"
 
 #. standard editing stuff
-#: editor.cc:2039 editor.cc:2115 editor.cc:3455 editor_actions.cc:213
-#: redirect_box.cc:1058
+#: editor.cc:2032 editor.cc:2108 editor.cc:3483 editor_actions.cc:214
+#: redirect_box.cc:1060
 msgid "Cut"
 msgstr "Κοπή"
 
-#: editor.cc:2040 editor.cc:2116 editor.cc:3457 editor_actions.cc:218
-#: redirect_box.cc:1060
+#: editor.cc:2033 editor.cc:2109 editor.cc:3485 editor_actions.cc:219
+#: redirect_box.cc:1062
 msgid "Copy"
 msgstr "Αντιγραφή"
 
-#: editor.cc:2041
+#: editor.cc:2034
 #, fuzzy
 msgid "Paste at edit cursor"
 msgstr "Από αρχή μέχρι  κέρσορα επεξεργασίας"
 
-#: editor.cc:2042
+#: editor.cc:2035
 #, fuzzy
 msgid "Paste at mouse"
 msgstr "χρήση των master outs"
 
-#: editor.cc:2046 editor.cc:3462
+#: editor.cc:2039 editor.cc:3490
 msgid "Align"
 msgstr "Ευθυγράμμιση"
 
-#: editor.cc:2047 editor.cc:3464
+#: editor.cc:2040 editor.cc:3492
 msgid "Align Relative"
 msgstr "Ευθυγράμμιση σχετικών"
 
-#: editor.cc:2051
+#: editor.cc:2044
 msgid "Insert chunk"
 msgstr "Προσθήκη κομματιού"
 
-#: editor.cc:2058
+#: editor.cc:2051
 #, fuzzy
 msgid "Insert Selected Region"
 msgstr "θέση επιλεγμένης οπτικής περιοχής"
 
-#: editor.cc:2059
+#: editor.cc:2052
 msgid "Insert Existing Audio"
 msgstr ""
 
-#: editor.cc:2068 editor.cc:2124
+#: editor.cc:2061 editor.cc:2117
 msgid "Nudge entire track fwd"
 msgstr "Νύξη ολόκληρου καναλιού εμπρός"
 
-#: editor.cc:2069 editor.cc:2125
+#: editor.cc:2062 editor.cc:2118
 msgid "Nudge track after edit cursor fwd"
 msgstr "Νύξη καναλιού μετά του κέρσορα επεξεργασίας εμπρός"
 
-#: editor.cc:2070 editor.cc:2126
+#: editor.cc:2063 editor.cc:2119
 msgid "Nudge entire track bwd"
 msgstr "Νύξη ολοκλήρου καναλιού πίσω"
 
-#: editor.cc:2071 editor.cc:2127
+#: editor.cc:2064 editor.cc:2120
 msgid "Nudge track after edit cursor bwd"
 msgstr "Νύξη κανάλι μετά του κέρσορα επεξεργασίας  πίσω"
 
-#: editor.cc:2117 editor.cc:3459 editor_actions.cc:220 redirect_box.cc:1062
+#: editor.cc:2110 editor.cc:3487 editor_actions.cc:221 redirect_box.cc:1064
 msgid "Paste"
 msgstr "Επικόλληση"
 
-#: editor.cc:2637
+#: editor.cc:2630
 msgid "select/move objects"
 msgstr "επιλογή/μετακίνηση αντικειμένων"
 
-#: editor.cc:2638
+#: editor.cc:2631
 msgid "select/move ranges"
 msgstr "επιλογή/μετακίνηση διαστημάτων"
 
-#: editor.cc:2639
+#: editor.cc:2632
 msgid "draw gain automation"
 msgstr "σχεδιασμός αυτοματισμού του gain"
 
-#: editor.cc:2640
+#: editor.cc:2633
 msgid "select zoom range"
 msgstr "επιλογή διαστήματος zoom"
 
-#: editor.cc:2641
+#: editor.cc:2634
 msgid "stretch/shrink regions"
 msgstr "μεγέθυνση/σμίκρυνση περιοχών"
 
-#: editor.cc:2642
+#: editor.cc:2635
 #, fuzzy
 msgid "listen to specific regions"
 msgstr "θέση επιλεγμένης οπτικής περιοχής"
 
-#: editor.cc:2753
+#: editor.cc:2746
 msgid "Start:"
 msgstr "Αρχή:"
 
-#: editor.cc:2754
+#: editor.cc:2747
 msgid "End:"
 msgstr "Τέλος:"
 
-#: editor.cc:3097
-msgid "set selected trackview"
-msgstr "θέση επιλεγμένης οπτικής καναλιού"
-
-#: editor.cc:3137
-#, fuzzy
-msgid "set selected control point"
-msgstr "απαλοιφή σημείου ελέγχου"
-
-#: editor.cc:3246
-msgid "set selected regionview"
-msgstr "θέση επιλεγμένης οπτικής περιοχής"
-
-#: editor.cc:3334 editor.cc:3374
+#: editor.cc:3362 editor.cc:3402
 #, fuzzy
 msgid "set selected regions"
 msgstr "θέση επιλεγμένης οπτικής περιοχής"
 
-#: editor.cc:3430 editor_actions.cc:203
+#: editor.cc:3458 editor_actions.cc:204
 msgid "Undo"
 msgstr "Undo"
 
-#: editor.cc:3432
+#: editor.cc:3460
 msgid "Undo (%1)"
 msgstr "Undo (%1)"
 
-#: editor.cc:3442 editor_actions.cc:205
+#: editor.cc:3470 editor_actions.cc:206
 msgid "Redo"
 msgstr "Redo"
 
-#: editor.cc:3444
+#: editor.cc:3472
 msgid "Redo (%1)"
 msgstr "Redo (%1)"
 
-#: editor.cc:3478
+#: editor.cc:3506
 msgid "... as new track"
 msgstr ""
 
-#: editor.cc:3479
+#: editor.cc:3507
 #, fuzzy
 msgid "... as new region"
 msgstr "ευθυγράμμιση περιοχής"
 
-#: editor.cc:3481
+#: editor.cc:3509
 msgid "Import audio (copy)"
 msgstr "Εισαγωγή ήχου (αντίγραφο)"
 
-#: editor.cc:3484
+#: editor.cc:3512
 msgid "Remove last capture"
 msgstr "Απαλοιφή τελευταίας λήψης"
 
-#: editor.cc:3508
+#: editor.cc:3536
 msgid "Duplicate how many times?"
 msgstr "Αντιγραφή πόσες φορές?"
 
-#: editor.cc:3994
+#: editor.cc:4022
 msgid ""
 "Playlist %1 is currently unused.\n"
 "If left alone, no audio files used by it will be cleaned.\n"
@@ -2676,767 +2669,767 @@ msgstr ""
 "Εάν διαγραφεί, τα ηχητικά αρχεία που χρησιμοποιούνται μόνο απ'αυτήν θα "
 "διαγραφούν."
 
-#: editor.cc:4002
+#: editor.cc:4030
 msgid "Delete playlist"
 msgstr "Διαγραφή λίστας αναπαρ/γής"
 
-#: editor.cc:4003
+#: editor.cc:4031
 msgid "Keep playlist"
 msgstr "Διατήρηση λίστας αναπαρ/γής"
 
-#: editor.cc:4004 editor_audio_import.cc:237 editor_ops.cc:1976
-#: editor_timefx.cc:52 export_dialog.cc:971 io_selector.cc:58
-#: io_selector.cc:792 redirect_box.cc:901 tempo_dialog.cc:19
-#: tempo_dialog.cc:36 tempo_dialog.cc:152 tempo_dialog.cc:170
+#: editor.cc:4032 editor_audio_import.cc:236 editor_ops.cc:2048
+#: editor_timefx.cc:71 export_dialog.cc:971 io_selector.cc:59
+#: io_selector.cc:793 redirect_box.cc:903 tempo_dialog.cc:20
+#: tempo_dialog.cc:37 tempo_dialog.cc:202 tempo_dialog.cc:220
 msgid "Cancel"
 msgstr "Ακύρωση"
 
-#: editor.cc:4171
+#: editor.cc:4199
 #, fuzzy
 msgid "new playlists"
 msgstr "Διατήρηση λίστας αναπαρ/γής"
 
-#: editor.cc:4179
+#: editor.cc:4207
 #, fuzzy
 msgid "copy playlists"
 msgstr "Διατήρηση λίστας αναπαρ/γής"
 
-#: editor.cc:4187
+#: editor.cc:4215
 #, fuzzy
 msgid "clear playlists"
 msgstr "εκκαθάριση playlist"
 
-#: editor_actions.cc:27
+#: editor_actions.cc:28
 #, fuzzy
 msgid "Select regions"
 msgstr "επιλογή περιοχών"
 
-#: editor_actions.cc:28
+#: editor_actions.cc:29
 #, fuzzy
 msgid "Select range operations"
 msgstr "επιλογή περιοχών"
 
-#: editor_actions.cc:29
+#: editor_actions.cc:30
 #, fuzzy
 msgid "Move edit cursor"
 msgstr "Από αρχή μέχρι  κέρσορα επεξεργασίας"
 
-#: editor_actions.cc:30
+#: editor_actions.cc:31
 #, fuzzy
 msgid "Region operations"
 msgstr "Περιοχές/δημιουργία"
 
-#: editor_actions.cc:31
+#: editor_actions.cc:32
 msgid "Tools"
 msgstr ""
 
-#: editor_actions.cc:32
+#: editor_actions.cc:33
 msgid "View"
 msgstr ""
 
-#: editor_actions.cc:33
+#: editor_actions.cc:34
 #, fuzzy
 msgid "ZoomFocus"
 msgstr "Εστίαση Zoom"
 
-#: editor_actions.cc:34
+#: editor_actions.cc:35
 #, fuzzy
 msgid "Meter hold"
 msgstr "Μετρητής"
 
-#: editor_actions.cc:35
+#: editor_actions.cc:36
 msgid "Meter falloff"
 msgstr ""
 
-#: editor_actions.cc:37
+#: editor_actions.cc:38
 #, fuzzy
 msgid "Crossfades"
 msgstr "Crossfade"
 
-#: editor_actions.cc:38
+#: editor_actions.cc:39
 #, fuzzy
 msgid "Monitoring"
 msgstr "Χρήση Hardware Monitoring"
 
-#: editor_actions.cc:39
+#: editor_actions.cc:40
 #, fuzzy
 msgid "Autoconnect"
 msgstr "Σύνδεση"
 
-#: editor_actions.cc:40
+#: editor_actions.cc:41
 #, fuzzy
 msgid "Layering"
 msgstr "Στρώμα"
 
-#: editor_actions.cc:41
+#: editor_actions.cc:42
 #, fuzzy
 msgid "Metering"
 msgstr "Μετρητής"
 
-#: editor_actions.cc:42
+#: editor_actions.cc:43
 msgid "Fall off rate"
 msgstr ""
 
-#: editor_actions.cc:43
+#: editor_actions.cc:44
 msgid "Hold Time"
 msgstr ""
 
-#: editor_actions.cc:44
+#: editor_actions.cc:45
 msgid "Add Existing Audio"
 msgstr ""
 
 #. add named actions for the editor
-#: editor_actions.cc:49
+#: editor_actions.cc:50
 #, fuzzy
 msgid "Show Editor Mixer"
 msgstr "Ανάδειξη όλων των ΔιαδρόμωνΜίξεως των καναλιών"
 
-#: editor_actions.cc:54
+#: editor_actions.cc:55
 #, fuzzy
 msgid "Span Entire Overlap"
 msgstr "Ανόρθωση περιοχής κατά ένα στρώμα"
 
-#: editor_actions.cc:56 editor_actions.cc:383
+#: editor_actions.cc:57 editor_actions.cc:384
 #, fuzzy
 msgid "Short"
 msgstr "θύρα"
 
-#: editor_actions.cc:63
+#: editor_actions.cc:64
 msgid "Created Automatically"
 msgstr ""
 
-#: editor_actions.cc:66
+#: editor_actions.cc:67
 msgid "Playhead to Next Region Start"
 msgstr ""
 
-#: editor_actions.cc:68
+#: editor_actions.cc:69
 msgid "Playhead to Next Region End"
 msgstr ""
 
-#: editor_actions.cc:70
+#: editor_actions.cc:71
 msgid "Playhead to Next Region Sync"
 msgstr ""
 
-#: editor_actions.cc:73
+#: editor_actions.cc:74
 msgid "Playhead to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:75
+#: editor_actions.cc:76
 msgid "Playhead to Previous Region End"
 msgstr ""
 
-#: editor_actions.cc:77
+#: editor_actions.cc:78
 msgid "Playhead to Previous Region Sync"
 msgstr ""
 
-#: editor_actions.cc:80
+#: editor_actions.cc:81
 #, fuzzy
 msgid "Edit Cursor to Next Region Start"
 msgstr "Από κέρσορα επεξεργασίας μέχρι τέλους"
 
-#: editor_actions.cc:82
+#: editor_actions.cc:83
 #, fuzzy
 msgid "Edit Cursor to Next Region End"
 msgstr "Από κέρσορα επεξεργασίας μέχρι τέλους"
 
-#: editor_actions.cc:84
+#: editor_actions.cc:85
 #, fuzzy
 msgid "Edit Cursor to Next Region Sync"
 msgstr "Από κέρσορα επεξεργασίας μέχρι τέλους"
 
-#: editor_actions.cc:87
+#: editor_actions.cc:88
 msgid "Edit Cursor to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:89
+#: editor_actions.cc:90
 #, fuzzy
 msgid "Edit Cursor to Previous Region End"
 msgstr "Από κέρσορα επεξεργασίας μέχρι τέλους"
 
-#: editor_actions.cc:91
+#: editor_actions.cc:92
 #, fuzzy
 msgid "Edit Cursor to Previous Region Sync"
 msgstr "Από κέρσορα επεξεργασίας μέχρι τέλους"
 
-#: editor_actions.cc:94
+#: editor_actions.cc:95
 msgid "Playhead to Range Start"
 msgstr ""
 
-#: editor_actions.cc:96
+#: editor_actions.cc:97
 #, fuzzy
 msgid "Playhead to Range End"
 msgstr "Επαναληπτική αναπαρ/γή διαστήματος"
 
-#: editor_actions.cc:99
+#: editor_actions.cc:100
 #, fuzzy
 msgid "Edit Cursor to Range Start"
 msgstr "Από κέρσορα επεξεργασίας μέχρι τέλους"
 
-#: editor_actions.cc:101
+#: editor_actions.cc:102
 #, fuzzy
 msgid "Edit Cursor to Range End"
 msgstr "Από κέρσορα επεξεργασίας μέχρι τέλους"
 
-#: editor_actions.cc:104 editor_ops.cc:1300
+#: editor_actions.cc:105 editor_ops.cc:1363
 #, fuzzy
 msgid "select all"
 msgstr "Επιλογή όλων"
 
-#: editor_actions.cc:106
+#: editor_actions.cc:107
 #, fuzzy
 msgid "Select All After Edit Cursor"
 msgstr "Θέση συγχρονισμού(sync) απο κέρσορα επεξερ/σίας"
 
-#: editor_actions.cc:108
+#: editor_actions.cc:109
 msgid "Select All Before Edit Cursor"
 msgstr ""
 
-#: editor_actions.cc:111
+#: editor_actions.cc:112
 #, fuzzy
 msgid "Select All After Playhead"
 msgstr "Θέση από αναπαραγωγέα"
 
-#: editor_actions.cc:113
+#: editor_actions.cc:114
 #, fuzzy
 msgid "Select All Before Playhead"
 msgstr "Θέση από αναπαραγωγέα"
 
-#: editor_actions.cc:115
+#: editor_actions.cc:116
 #, fuzzy
 msgid "Select All Between Cursors"
 msgstr "Θέση συγχρονισμού(sync) απο κέρσορα επεξερ/σίας"
 
-#: editor_actions.cc:118
+#: editor_actions.cc:119
 #, fuzzy
 msgid "Select All in Punch Range"
 msgstr "Θέση Punch Διαστήματος"
 
-#: editor_actions.cc:120
+#: editor_actions.cc:121
 #, fuzzy
 msgid "Select All in Loop Range"
 msgstr "Επιλογή διαστήματος loop"
 
-#: editor_actions.cc:123
+#: editor_actions.cc:124
 msgid "Jump Forward to Mark"
 msgstr ""
 
-#: editor_actions.cc:125
+#: editor_actions.cc:126
 msgid "Jump Backward to Mark"
 msgstr ""
 
-#: editor_actions.cc:127
+#: editor_actions.cc:128
 #, fuzzy
 msgid "Add Location from Playhead"
 msgstr "Θέση από αναπαραγωγέα"
 
-#: editor_actions.cc:130
+#: editor_actions.cc:131
 #, fuzzy
 msgid "Nudge Forward"
 msgstr "νύξη εμπρός"
 
-#: editor_actions.cc:132
+#: editor_actions.cc:133
 #, fuzzy
 msgid "Nudge Next Forward"
 msgstr "νύξη εμπρός"
 
-#: editor_actions.cc:134
+#: editor_actions.cc:135
 #, fuzzy
 msgid "Nudge Backward"
 msgstr "Νύξη"
 
-#: editor_actions.cc:136
+#: editor_actions.cc:137
 #, fuzzy
 msgid "Nudge Next Backward"
 msgstr "Νύξη ολόκληρου καναλιού εμπρός"
 
-#: editor_actions.cc:139
+#: editor_actions.cc:140
 #, fuzzy
 msgid "Zoom Out"
 msgstr "Zoom out"
 
-#: editor_actions.cc:141
+#: editor_actions.cc:142
 #, fuzzy
 msgid "Zoom In"
 msgstr "Zoom in"
 
-#: editor_actions.cc:143
+#: editor_actions.cc:144
 #, fuzzy
 msgid "Zoom to Session"
 msgstr "Zoom στη συνεδρία"
 
-#: editor_actions.cc:146
+#: editor_actions.cc:147
 #, fuzzy
 msgid "Scroll Tracks Up"
 msgstr "Γόμωση καναλιού"
 
-#: editor_actions.cc:148
+#: editor_actions.cc:149
 msgid "Scroll Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:150
+#: editor_actions.cc:151
 #, fuzzy
 msgid "Step Tracks Up"
 msgstr "νύξη καναλιού"
 
-#: editor_actions.cc:152
+#: editor_actions.cc:153
 msgid "Step Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:155
+#: editor_actions.cc:156
 msgid "Scroll Backward"
 msgstr ""
 
-#: editor_actions.cc:157
+#: editor_actions.cc:158
 msgid "Scroll Forward"
 msgstr ""
 
-#: editor_actions.cc:159
+#: editor_actions.cc:160
 msgid "goto"
 msgstr ""
 
-#: editor_actions.cc:161
+#: editor_actions.cc:162
 #, fuzzy
 msgid "Center Playhead"
 msgstr "Αναπαραγωγέας"
 
-#: editor_actions.cc:163
+#: editor_actions.cc:164
 #, fuzzy
 msgid "Center Edit Cursor"
 msgstr "Κέρσορας επεξεργασίας"
 
-#: editor_actions.cc:165
+#: editor_actions.cc:166
 #, fuzzy
 msgid "Playhead Forward"
 msgstr "Αναπαραγωγέας"
 
-#: editor_actions.cc:167
+#: editor_actions.cc:168
 #, fuzzy
 msgid "Playhead Backward"
 msgstr "Αναπαραγωγέας"
 
-#: editor_actions.cc:169
+#: editor_actions.cc:170
 #, fuzzy
 msgid "Playhead to Edit"
 msgstr "Αναπαραγωγέας"
 
-#: editor_actions.cc:171
+#: editor_actions.cc:172
 #, fuzzy
 msgid "Edit to Playhead"
 msgstr "Θέση από αναπαραγωγέα"
 
-#: editor_actions.cc:174
+#: editor_actions.cc:175
 #, fuzzy
 msgid "Align Regions Start"
 msgstr "Αρχές Περιοχών"
 
-#: editor_actions.cc:176
+#: editor_actions.cc:177
 #, fuzzy
 msgid "Align Regions Start Relative"
 msgstr "ευθυγράμμιση επιλογής (σχετική)"
 
-#: editor_actions.cc:178
+#: editor_actions.cc:179
 #, fuzzy
 msgid "Align Regions End"
 msgstr "ευθυγράμμιση περιοχής"
 
-#: editor_actions.cc:180
+#: editor_actions.cc:181
 #, fuzzy
 msgid "Align Regions End Relative"
 msgstr "Ευθυγράμμιση σχετικών"
 
-#: editor_actions.cc:183
+#: editor_actions.cc:184
 #, fuzzy
 msgid "Align Regions Sync"
 msgstr "ευθυγράμμιση περιοχής"
 
-#: editor_actions.cc:185
+#: editor_actions.cc:186
 #, fuzzy
 msgid "Align Regions Sync Relative"
 msgstr "Ευθυγράμμιση σχετικών"
 
-#: editor_actions.cc:188
+#: editor_actions.cc:189
 #, fuzzy
 msgid "Audition at Mouse"
 msgstr "Ακρόαση"
 
-#: editor_actions.cc:190
+#: editor_actions.cc:191
 #, fuzzy
 msgid "Brush at Mouse"
 msgstr "χρήση των master outs"
 
-#: editor_actions.cc:192
+#: editor_actions.cc:193
 #, fuzzy
 msgid "Set Edit Cursor"
 msgstr "Κέρσορας επεξεργασίας"
 
-#: editor_actions.cc:194
+#: editor_actions.cc:195
 #, fuzzy
 msgid "Mute/Unmute Region"
 msgstr "Δημιουργία περιοχής"
 
-#: editor_actions.cc:196
+#: editor_actions.cc:197
 #, fuzzy
 msgid "Set Playhead"
 msgstr "Αναπαραγωγέας"
 
-#: editor_actions.cc:198
+#: editor_actions.cc:199
 #, fuzzy
 msgid "Split Region"
 msgstr "Διαχωρισμός περιοχής"
 
-#: editor_actions.cc:200
+#: editor_actions.cc:201
 #, fuzzy
 msgid "Set Region Sync Position"
 msgstr "Με Θέση Περιοχής"
 
-#: editor_actions.cc:208
+#: editor_actions.cc:209
 #, fuzzy
 msgid "Export Session"
 msgstr "Εξαγωγή περιοχής"
 
-#: editor_actions.cc:210
+#: editor_actions.cc:211
 #, fuzzy
 msgid "Export Range"
 msgstr "Ξεχωριστό διάστημα"
 
 #. Note: for now, editor-delete does the exact same thing as editor-cut
-#: editor_actions.cc:216
+#: editor_actions.cc:217
 #, fuzzy
 msgid "Delete"
 msgstr "διαγραφή"
 
-#: editor_actions.cc:222
+#: editor_actions.cc:223
 #, fuzzy
 msgid "Duplicate Region"
 msgstr "αντιγραφή περιοχής"
 
-#: editor_actions.cc:224
+#: editor_actions.cc:225
 #, fuzzy
 msgid "Duplicate Range"
 msgstr "Αντιγραφή"
 
-#: editor_actions.cc:226
+#: editor_actions.cc:227
 msgid "Insert Region"
 msgstr "Προσθήκη περιοχής"
 
-#: editor_actions.cc:228
+#: editor_actions.cc:229
 #, fuzzy
 msgid "Reverse Region"
 msgstr "αντιστροφή περιοχών"
 
-#: editor_actions.cc:230
+#: editor_actions.cc:231
 #, fuzzy
 msgid "Normalize Region"
 msgstr "Εξομάλυνση"
 
-#: editor_actions.cc:232
+#: editor_actions.cc:233
 #, fuzzy
 msgid "crop"
 msgstr "αντιγραφή"
 
-#: editor_actions.cc:234
+#: editor_actions.cc:235
 #, fuzzy
 msgid "Insert Chunk"
 msgstr "Προσθήκη κομματιού"
 
-#: editor_actions.cc:237
+#: editor_actions.cc:238
 #, fuzzy
 msgid "Split at edit cursor"
 msgstr "Από αρχή μέχρι  κέρσορα επεξεργασίας"
 
-#: editor_actions.cc:240
+#: editor_actions.cc:241
 #, fuzzy
 msgid "Start Range"
 msgstr "Ξεχωριστό διάστημα"
 
-#: editor_actions.cc:242
+#: editor_actions.cc:243
 msgid "Finish Range"
 msgstr ""
 
-#: editor_actions.cc:244
+#: editor_actions.cc:245
 msgid "Finish add Range"
 msgstr ""
 
-#: editor_actions.cc:247
+#: editor_actions.cc:248
 msgid "Extend Range to End of Region"
 msgstr ""
 
-#: editor_actions.cc:249
+#: editor_actions.cc:250
 #, fuzzy
 msgid "Extend Range to Start of Region"
 msgstr "Αρχή της συνεδρίας"
 
-#: editor_actions.cc:252
+#: editor_actions.cc:253
 #, fuzzy
 msgid "Follow Playhead"
 msgstr "Ακολουθία Αναπαραγωγέα"
 
-#: editor_actions.cc:260
+#: editor_actions.cc:261
 #, fuzzy
 msgid "Zoom Focus Left"
 msgstr "Εστίαση Zoom"
 
-#: editor_actions.cc:262
+#: editor_actions.cc:263
 #, fuzzy
 msgid "Zoom Focus Right"
 msgstr "Εστίαση Zoom"
 
-#: editor_actions.cc:264
+#: editor_actions.cc:265
 #, fuzzy
 msgid "Zoom Focus Center"
 msgstr "Εστίαση Zoom"
 
-#: editor_actions.cc:266
+#: editor_actions.cc:267
 #, fuzzy
 msgid "Zoom Focus Playhead"
 msgstr "Εστίαση Zoom"
 
-#: editor_actions.cc:268
+#: editor_actions.cc:269
 #, fuzzy
 msgid "Zoom Focus Edit"
 msgstr "Εστίαση Zoom"
 
-#: editor_actions.cc:274
+#: editor_actions.cc:275
 msgid "Object Tool"
 msgstr ""
 
-#: editor_actions.cc:275
+#: editor_actions.cc:276
 #, fuzzy
 msgid "Range Tool"
 msgstr "Διάστημα"
 
-#: editor_actions.cc:276
+#: editor_actions.cc:277
 msgid "Gain Tool"
 msgstr ""
 
-#: editor_actions.cc:277
+#: editor_actions.cc:278
 #, fuzzy
 msgid "Zoom Tool"
 msgstr "Zoom out"
 
-#: editor_actions.cc:278
+#: editor_actions.cc:279
 msgid "Timefx Tool"
 msgstr ""
 
-#: editor_actions.cc:285
+#: editor_actions.cc:286
 #, fuzzy
 msgid "Snap to frame"
 msgstr "zoom σε καρέ"
 
-#: editor_actions.cc:286
+#: editor_actions.cc:287
 #, fuzzy
 msgid "Snap to cd frame"
 msgstr "Λειτουργία Έλξεως"
 
-#: editor_actions.cc:287
+#: editor_actions.cc:288
 #, fuzzy
 msgid "Snap to SMPTE frame"
 msgstr "SMPTE Frames"
 
-#: editor_actions.cc:288
+#: editor_actions.cc:289
 #, fuzzy
 msgid "Snap to SMPTE seconds"
 msgstr "SMPTE Δευτερόλεπτα"
 
-#: editor_actions.cc:289
+#: editor_actions.cc:290
 #, fuzzy
 msgid "Snap to SMPTE minutes"
 msgstr "SMPTE Λεπτά"
 
-#: editor_actions.cc:290
+#: editor_actions.cc:291
 #, fuzzy
 msgid "Snap to seconds"
 msgstr "Δευτερόλεπτα"
 
-#: editor_actions.cc:291
+#: editor_actions.cc:292
 msgid "Snap to minutes"
 msgstr ""
 
-#: editor_actions.cc:292
+#: editor_actions.cc:293
 #, fuzzy
 msgid "Snap to thirtyseconds"
 msgstr "τριακοστό-όγδοο (32)"
 
-#: editor_actions.cc:293
+#: editor_actions.cc:294
 msgid "Snap to asixteenthbeat"
 msgstr ""
 
-#: editor_actions.cc:294
+#: editor_actions.cc:295
 msgid "Snap to eighths"
 msgstr ""
 
-#: editor_actions.cc:295
+#: editor_actions.cc:296
 msgid "Snap to quarters"
 msgstr ""
 
-#: editor_actions.cc:296
+#: editor_actions.cc:297
 #, fuzzy
 msgid "Snap to thirds"
 msgstr "Λειτουργία Έλξεως"
 
-#: editor_actions.cc:297
+#: editor_actions.cc:298
 #, fuzzy
 msgid "Snap to beat"
 msgstr "Λειτουργία Έλξεως"
 
-#: editor_actions.cc:298
+#: editor_actions.cc:299
 #, fuzzy
 msgid "Snap to bar"
 msgstr "Έλξη σε"
 
-#: editor_actions.cc:299
+#: editor_actions.cc:300
 #, fuzzy
 msgid "Snap to mark"
 msgstr "πρόσθεση στίγματος χρόνου"
 
-#: editor_actions.cc:300
+#: editor_actions.cc:301
 #, fuzzy
 msgid "Snap to edit cursor"
 msgstr "Από αρχή μέχρι  κέρσορα επεξεργασίας"
 
-#: editor_actions.cc:301
+#: editor_actions.cc:302
 #, fuzzy
 msgid "Snap to region start"
 msgstr "Αρχές Περιοχών"
 
-#: editor_actions.cc:302
+#: editor_actions.cc:303
 #, fuzzy
 msgid "Snap to region end"
 msgstr "Τέλη Περιοχών"
 
-#: editor_actions.cc:303
+#: editor_actions.cc:304
 #, fuzzy
 msgid "Snap to region sync"
 msgstr "Συγχρονισμός Περιοχών"
 
-#: editor_actions.cc:304
+#: editor_actions.cc:305
 #, fuzzy
 msgid "Snap to region boundary"
 msgstr "Όρια περιοχών"
 
 #. the region list popup menu
-#: editor_actions.cc:313
+#: editor_actions.cc:314
 #, fuzzy
 msgid "Sort"
 msgstr "θύρα"
 
-#: editor_actions.cc:321
+#: editor_actions.cc:322
 msgid "Show all"
 msgstr "Ανάδειξη όλων"
 
-#: editor_actions.cc:322
+#: editor_actions.cc:323
 #, fuzzy
 msgid "Show automatic regions"
 msgstr "Ανάδειξη όλων των αυτοματισμών"
 
-#: editor_actions.cc:324
+#: editor_actions.cc:325
 msgid "Ascending"
 msgstr "Αύξουσα"
 
-#: editor_actions.cc:326
+#: editor_actions.cc:327
 msgid "Descending"
 msgstr "Φθίνουσα"
 
-#: editor_actions.cc:329
+#: editor_actions.cc:330
 msgid "By Region Name"
 msgstr "Με Όνομα Περιοχής"
 
-#: editor_actions.cc:331
+#: editor_actions.cc:332
 msgid "By Region Length"
 msgstr "Με Μέγεθος Περιοχής"
 
-#: editor_actions.cc:333
+#: editor_actions.cc:334
 msgid "By Region Position"
 msgstr "Με Θέση Περιοχής"
 
-#: editor_actions.cc:335
+#: editor_actions.cc:336
 msgid "By Region Timestamp"
 msgstr "Με Χρονο-στάμπα Περιοχής"
 
-#: editor_actions.cc:337
+#: editor_actions.cc:338
 msgid "By Region Start in File"
 msgstr "Με Αρχή-στο-αρχείο της Περιοχής"
 
-#: editor_actions.cc:339
+#: editor_actions.cc:340
 msgid "By Region End in File"
 msgstr "Με Τέλος-στο -αρχείο της Περιοχής"
 
-#: editor_actions.cc:341
+#: editor_actions.cc:342
 msgid "By Source File Name"
 msgstr "Με Όνομα Αρχείου Πηγής"
 
-#: editor_actions.cc:343
+#: editor_actions.cc:344
 msgid "By Source File Length"
 msgstr "Με Μέγεθος Αρχείου Πηγής"
 
-#: editor_actions.cc:345
+#: editor_actions.cc:346
 msgid "By Source File Creation Date"
 msgstr "Με Ημ/νία Αρχείου Πηγής"
 
-#: editor_actions.cc:347
+#: editor_actions.cc:348
 msgid "By Source Filesystem"
 msgstr "Με Filesystem Πηγής"
 
 #. the next two are duplicate items with different names for use in two different contexts
-#: editor_actions.cc:353
+#: editor_actions.cc:354
 #, fuzzy
 msgid "Add External Audio"
 msgstr "Πρόσθεση σε Λίστα Εξωτερικής Περιοχής"
 
-#: editor_actions.cc:355
+#: editor_actions.cc:356
 #, fuzzy
 msgid "as Region(s)"
 msgstr "Έλξη περιοχής(ων)"
 
-#: editor_actions.cc:357
+#: editor_actions.cc:358
 #, fuzzy
 msgid "as Tracks"
 msgstr "Κανάλια"
 
-#: editor_actions.cc:359
+#: editor_actions.cc:360
 #, fuzzy
 msgid "to Tracks"
 msgstr "Κανάλια"
 
-#: editor_actions.cc:362
+#: editor_actions.cc:363
 #, fuzzy
 msgid "Show Waveforms"
 msgstr "Ανάδειξη κυματομορφών"
 
-#: editor_actions.cc:363
+#: editor_actions.cc:364
 #, fuzzy
 msgid "Show Waveforms While Recording"
 msgstr "Ανάδειξη κυματομορφών κατά την εγγραφή"
 
-#: editor_actions.cc:364
+#: editor_actions.cc:365
 #, fuzzy
 msgid "Show Measures"
 msgstr "Ανάδειξη γραμμών μετρήσεων"
 
-#: editor_actions.cc:377 editor_actions.cc:384
+#: editor_actions.cc:378 editor_actions.cc:385
 msgid "Medium"
 msgstr ""
 
-#: editor_actions.cc:379
+#: editor_actions.cc:380
 #, fuzzy
 msgid "Faster"
 msgstr "Ταχύ"
 
-#: editor_actions.cc:385
+#: editor_actions.cc:386
 msgid "Long"
 msgstr ""
 
-#: editor_actions.cc:389
+#: editor_actions.cc:390
 #, fuzzy
 msgid "Later is Higher"
 msgstr "Υποβίβαση περιοχής κατά ένα στρώμα"
 
-#: editor_actions.cc:390
+#: editor_actions.cc:391
 #, fuzzy
 msgid "Most Recently Moved/Added is Higher"
 msgstr "Υποβίβαση περιοχής κατά ένα στρώμα"
 
-#: editor_actions.cc:391
+#: editor_actions.cc:392
 #, fuzzy
 msgid "Most Recently Added is Higher"
 msgstr "Υποβίβαση περιοχής κατά ένα στρώμα"
@@ -3451,39 +3444,39 @@ msgstr "Δεν γίνεται να εισαχθεί ήχος χωρίς να έ
 msgid "Add existing audio to session"
 msgstr "Ανάδειξη υπαρχόντων αυτοματισμών"
 
-#: editor_audio_import.cc:143
+#: editor_audio_import.cc:142
 msgid "ardour: importing %1"
 msgstr "ardour: εισαγωγή εν εξελίξι %1"
 
-#: editor_audio_import.cc:147
+#: editor_audio_import.cc:146
 msgid "Cancel Import"
 msgstr "Ακύρωση Εισαγωγής"
 
-#: editor_audio_import.cc:225
+#: editor_audio_import.cc:224
 #, fuzzy
 msgid "Editor: cannot open file \"%1\", (%2)"
 msgstr "Editor: δεν γίνεται να ανοίξει το αρχείο \"%1\" (%2)"
 
-#: editor_audio_import.cc:233
+#: editor_audio_import.cc:232
 #, fuzzy
 msgid "Cancel entire import"
 msgstr "Ακύρωση Εισαγωγής"
 
-#: editor_audio_import.cc:234
+#: editor_audio_import.cc:233
 #, fuzzy
 msgid "Don't embed it"
 msgstr "Μη %1"
 
-#: editor_audio_import.cc:235
+#: editor_audio_import.cc:234
 msgid "Embed all without questions"
 msgstr ""
 
-#: editor_audio_import.cc:240
+#: editor_audio_import.cc:239
 #, fuzzy
 msgid "Embed it anyway"
 msgstr "%1 το ούτως ή άλλως"
 
-#: editor_audio_import.cc:243
+#: editor_audio_import.cc:242
 msgid ""
 "%1\n"
 "This audiofile's sample rate doesn't match the session sample rate!"
@@ -3492,73 +3485,61 @@ msgstr ""
 "Ο ρυθμός δειγματοληψίας αυτού του αρχείου δεν ταιριάζει με αυτόν της "
 "συνεδρίας!"
 
-#: editor_audio_import.cc:276
+#: editor_audio_import.cc:275
 msgid "could not open %1"
 msgstr "δεν μπόρεσα να ανοίξω το %1"
 
-#: editor_audio_import.cc:321
+#: editor_audio_import.cc:320
 msgid "insert sndfile"
 msgstr "προσθήκη ηχο-αρχείου"
 
 #. stuff for the verbose canvas cursor
-#: editor_canvas.cc:117
+#: editor_canvas.cc:118
 msgid "VerboseCanvasCursor"
 msgstr ""
 
-#: editor_canvas.cc:285
-msgid "Start a new session\n"
-msgstr "Αρχή καινούριας συνεδρίας\n"
-
-#: editor_canvas.cc:285
-msgid "via Session menu"
-msgstr "μέσω του μενού Συνεδρίας"
-
-#: editor_canvas.cc:288
-msgid "FirstActionMessage"
-msgstr ""
-
-#: editor_edit_groups.cc:52 mixer_ui.cc:732
+#: editor_edit_groups.cc:53 mixer_ui.cc:736
 msgid "Activate All"
 msgstr "Ενεργοποίηση όλων"
 
-#: editor_edit_groups.cc:53 mixer_ui.cc:733
+#: editor_edit_groups.cc:54 mixer_ui.cc:737
 #, fuzzy
 msgid "Disable All"
 msgstr "Αποσύνδεση"
 
-#: editor_edit_groups.cc:55 mixer_ui.cc:735
+#: editor_edit_groups.cc:56 mixer_ui.cc:739
 #, fuzzy
 msgid "Add group"
 msgstr "Χωρίς ομάδα"
 
-#: editor_edit_groups.cc:225 mixer_ui.cc:964
+#: editor_edit_groups.cc:229 mixer_ui.cc:970
 #, fuzzy
 msgid "unnamed"
 msgstr "Μετονομασία"
 
-#: editor_edit_groups.cc:252 mixer_ui.cc:830
+#: editor_edit_groups.cc:258 mixer_ui.cc:834
 msgid "-all-"
 msgstr "-όλα-"
 
-#: editor_export_audio.cc:64
+#: editor_export_audio.cc:65
 msgid ""
 "There is no selection to export.\n"
 "\n"
 "Select a selection using the range mouse mode"
 msgstr ""
 
-#: editor_export_audio.cc:109
+#: editor_export_audio.cc:110
 msgid ""
 "There are no ranges to export.\n"
 "\n"
 "Create 1 or more ranges by dragging the mouse in the range bar"
 msgstr ""
 
-#: editor_imageframe.cc:624 editor_imageframe.cc:654
+#: editor_imageframe.cc:625 editor_imageframe.cc:655
 msgid "programming error: no ImageFrameView selected"
 msgstr "Σφάλμα προγραμματισμού: δεν επιλέχθηκε οπτική καρέ εικόνας"
 
-#: editor_imageframe.cc:847 editor_imageframe.cc:869
+#: editor_imageframe.cc:848 editor_imageframe.cc:870
 msgid "programming error: no MarkerView selected"
 msgstr "Σφάλμα προγραμματισμού: δεν επιλέχθηκε οπτική στίγματος"
 
@@ -3567,142 +3548,142 @@ msgstr "Σφάλμα προγραμματισμού: δεν επιλέχθηκε
 msgid "mute region"
 msgstr "σιγή παρούσας περιοχής"
 
-#: editor_keys.cc:45
+#: editor_keys.cc:46
 #, fuzzy
 msgid "keyboard selection"
 msgstr "επέκταση επιλογής"
 
-#: editor_markers.cc:291 editor_ops.cc:1227 editor_ops.cc:1240
-#: editor_ops.cc:1258 location_ui.cc:773
+#: editor_markers.cc:292 editor_ops.cc:1290 editor_ops.cc:1303
+#: editor_ops.cc:1321 location_ui.cc:774
 msgid "add marker"
 msgstr "πρόσθεση στίγματος"
 
-#: editor_markers.cc:306 editor_markers.cc:379 editor_markers.cc:551
-#: editor_markers.cc:569 editor_markers.cc:588 editor_markers.cc:607
-#: editor_markers.cc:637 editor_markers.cc:665 editor_markers.cc:693
-#: editor_markers.cc:731 editor_markers.cc:758 editor_markers.cc:781
-#: editor_markers.cc:800 editor_mouse.cc:1994 editor_mouse.cc:4237
+#: editor_markers.cc:307 editor_markers.cc:380 editor_markers.cc:552
+#: editor_markers.cc:570 editor_markers.cc:589 editor_markers.cc:608
+#: editor_markers.cc:638 editor_markers.cc:666 editor_markers.cc:694
+#: editor_markers.cc:732 editor_markers.cc:759 editor_markers.cc:782
+#: editor_markers.cc:801 editor_mouse.cc:2015 editor_mouse.cc:4275
 msgid "programming error: marker canvas item has no marker object pointer!"
 msgstr ""
 "Σφάλμα προγραμματισμού: ο καμβάς στιγμάτων δεν έχει δείκτη αντικειμένου "
 "στιγμάτων!"
 
-#: editor_markers.cc:330 location_ui.cc:655
+#: editor_markers.cc:331 location_ui.cc:656
 msgid "remove marker"
 msgstr "απαλοιφή στίγματος"
 
-#: editor_markers.cc:457
+#: editor_markers.cc:458
 #, fuzzy
 msgid "Locate to Mark"
 msgstr "Τοποθέτηση στο"
 
-#: editor_markers.cc:458
+#: editor_markers.cc:459
 #, fuzzy
 msgid "Play from Mark"
 msgstr "Αναπαρ/γή από αρχή"
 
-#: editor_markers.cc:459
+#: editor_markers.cc:460
 #, fuzzy
 msgid "Set Mark from Playhead"
 msgstr "Θέση από αναπαραγωγέα"
 
-#: editor_markers.cc:463
+#: editor_markers.cc:464
 #, fuzzy
 msgid "Rename Mark"
 msgstr "Μετονομασία"
 
-#: editor_markers.cc:464
+#: editor_markers.cc:465
 #, fuzzy
 msgid "Hide Mark"
 msgstr "νύξη καναλιού"
 
-#: editor_markers.cc:465
+#: editor_markers.cc:466
 #, fuzzy
 msgid "Remove Mark"
 msgstr "απαλοιφή στίγματος"
 
-#: editor_markers.cc:478 editor_markers.cc:534
+#: editor_markers.cc:479 editor_markers.cc:535
 #, fuzzy
 msgid "Locate to Range Mark"
 msgstr "Στίγματα Τοποθεσίας"
 
-#: editor_markers.cc:479 editor_markers.cc:535
+#: editor_markers.cc:480 editor_markers.cc:536
 #, fuzzy
 msgid "Play from Range Mark"
 msgstr "Επαναληπτική αναπαρ/γή διαστήματος"
 
-#: editor_markers.cc:480
+#: editor_markers.cc:481
 #, fuzzy
 msgid "Loop Range"
 msgstr "Loop διαστήματος"
 
-#: editor_markers.cc:481 editor_markers.cc:536
+#: editor_markers.cc:482 editor_markers.cc:537
 #, fuzzy
 msgid "Set Range Mark from Playhead"
 msgstr "Θέση από αναπαραγωγέα"
 
-#: editor_markers.cc:482 editor_markers.cc:537
+#: editor_markers.cc:483 editor_markers.cc:538
 #, fuzzy
 msgid "Set Range from Range Selection"
 msgstr "επιλογή διαστήματος"
 
-#: editor_markers.cc:486
+#: editor_markers.cc:487
 #, fuzzy
 msgid "Rename Range"
 msgstr "Μετονομασία"
 
-#: editor_markers.cc:487 editor_markers.cc:539
+#: editor_markers.cc:488 editor_markers.cc:540
 #, fuzzy
 msgid "Hide Range"
 msgstr "Πρόσθεση νέου διαστήματος"
 
-#: editor_markers.cc:488
+#: editor_markers.cc:489
 #, fuzzy
 msgid "Remove Range"
 msgstr "Απαλοιφή Πεδίου"
 
-#: editor_markers.cc:492 editor_markers.cc:541
+#: editor_markers.cc:493 editor_markers.cc:542
 #, fuzzy
 msgid "Separate Regions in Range"
 msgstr "Νέα περιοχή από διάστημα"
 
-#: editor_markers.cc:493 editor_markers.cc:542
+#: editor_markers.cc:494 editor_markers.cc:543
 #, fuzzy
 msgid "Select All in Range"
 msgstr "Επιλογή όλων στο  κανάλι"
 
-#: editor_markers.cc:519
+#: editor_markers.cc:520
 msgid "Set Loop Range"
 msgstr "Θέση Loop Διαστήματος"
 
-#: editor_markers.cc:520
+#: editor_markers.cc:521
 msgid "Set Punch Range"
 msgstr "Θέση Punch Διαστήματος"
 
-#: editor_markers.cc:814
+#: editor_markers.cc:815
 #, fuzzy
 msgid "New Name:"
 msgstr "νέο όνομα: "
 
-#: editor_markers.cc:817
+#: editor_markers.cc:818
 msgid "ardour: rename mark"
 msgstr "ardour: μετονομασία στίγματος"
 
-#: editor_markers.cc:819
+#: editor_markers.cc:820
 #, fuzzy
 msgid "ardour: rename range"
 msgstr "ardour: μετονομασία περιοχής"
 
-#: editor_markers.cc:839
+#: editor_markers.cc:840
 #, fuzzy
 msgid "rename marker"
 msgstr "απαλοιφή στίγματος"
 
-#: editor_markers.cc:864
+#: editor_markers.cc:865
 msgid "set loop range"
 msgstr "Θέση loop διαστήματος"
 
-#: editor_markers.cc:890
+#: editor_markers.cc:891
 msgid "set punch range"
 msgstr "θέση punch διαστήματος"
 
@@ -3711,76 +3692,81 @@ msgid "Editor::event_frame() used on unhandled event type %1"
 msgstr ""
 "Επαξεργαστής::event_frame() χρησιμοποιήθηκε στο αδιαχείριστο συμβάν τύπου %1"
 
-#: editor_mouse.cc:1589
+#: editor_mouse.cc:313
+#, fuzzy
+msgid "select on click"
+msgstr "Χρήση όπως στο μετρονόμο"
+
+#: editor_mouse.cc:1590
 msgid "programming error: start_grab called without drag item"
 msgstr ""
 "σφάλμα προγραμματισμού: η ρουτίνα start_grab εκλήθη δίχως 'drag' αντικείμενο"
 
-#: editor_mouse.cc:1793
+#: editor_mouse.cc:1814
 msgid "change fade in length"
 msgstr "αλλαγή μήκους fade in"
 
-#: editor_mouse.cc:1811
+#: editor_mouse.cc:1832
 msgid "programming error: fade out canvas item has no regionview data pointer!"
 msgstr ""
 "σφάλμα προγραμματισμού: ο καμβάς fade out δεν έχει δείκτη δεδομένων της "
 "οπτικής περιοχών!"
 
-#: editor_mouse.cc:1885
+#: editor_mouse.cc:1906
 msgid "change fade out length"
 msgstr "αλλαγή μήκους fade out"
 
-#: editor_mouse.cc:1904
+#: editor_mouse.cc:1925
 msgid "programming error: cursor canvas item has no cursor data pointer!"
 msgstr ""
 "σφάλμα προγραμματισμού: ο καμβάς του κέρσορα δεν έχει δείκτη δεδομένων του "
 "κέρσορα!"
 
-#: editor_mouse.cc:2119
+#: editor_mouse.cc:2142
 #, fuzzy
 msgid "move marker"
 msgstr "απαλοιφή στίγματος"
 
-#: editor_mouse.cc:2142 editor_mouse.cc:2173 editor_tempodisplay.cc:461
+#: editor_mouse.cc:2165 editor_mouse.cc:2196 editor_tempodisplay.cc:459
 msgid ""
 "programming error: meter marker canvas item has no marker object pointer!"
 msgstr ""
 "σφάλμα προγραμματισμού: ο καμβάς του μετρητή στιγμάτων δεν έχει δείκτη "
 "αντικειμένου στιγμάτων!"
 
-#: editor_mouse.cc:2241
+#: editor_mouse.cc:2264
 #, fuzzy
 msgid "copy meter mark"
 msgstr "μετακίνηση στίγματος μετρητή"
 
-#: editor_mouse.cc:2251
+#: editor_mouse.cc:2274
 msgid "move meter mark"
 msgstr "μετακίνηση στίγματος μετρητή"
 
-#: editor_mouse.cc:2266 editor_mouse.cc:2299 editor_tempodisplay.cc:327
-#: editor_tempodisplay.cc:411 editor_tempodisplay.cc:430
+#: editor_mouse.cc:2289 editor_mouse.cc:2322 editor_tempodisplay.cc:331
+#: editor_tempodisplay.cc:409 editor_tempodisplay.cc:428
 msgid ""
 "programming error: tempo marker canvas item has no marker object pointer!"
 msgstr ""
 "σφάλμα προγραμματισμού: ο καμβάς στίξης του tempo δεν έχει δείκτη "
 "αντικειμένου στιγμάτων!"
 
-#: editor_mouse.cc:2271 editor_mouse.cc:2304 editor_tempodisplay.cc:332
-#: editor_tempodisplay.cc:416
+#: editor_mouse.cc:2294 editor_mouse.cc:2327 editor_tempodisplay.cc:336
+#: editor_tempodisplay.cc:414
 msgid "programming error: marker for tempo is not a tempo marker!"
 msgstr ""
 "σφάλμα προγραμματισμού: το στίγμα για το  tempo δεν είναι στιγμα για tempo!"
 
-#: editor_mouse.cc:2371
+#: editor_mouse.cc:2394
 #, fuzzy
 msgid "copy tempo mark"
 msgstr "μετακίνηση στίγματος tempo"
 
-#: editor_mouse.cc:2381
+#: editor_mouse.cc:2404
 msgid "move tempo mark"
 msgstr "μετακίνηση στίγματος tempo"
 
-#: editor_mouse.cc:2395 editor_mouse.cc:2414 editor_mouse.cc:2427
+#: editor_mouse.cc:2418 editor_mouse.cc:2437 editor_mouse.cc:2450
 msgid ""
 "programming error: control point canvas item has no control point object "
 "pointer!"
@@ -3788,320 +3774,321 @@ msgstr ""
 "Σφάλμα Προγραμματισμού: ο καμβάς του σημείου ελέγχου δεν έχει  δείκτη "
 "αναφοράς!"
 
-#: editor_mouse.cc:2525
+#: editor_mouse.cc:2555
 msgid "programming error: line canvas item has no line pointer!"
 msgstr "σφάλμα προγραμματισμού: ο καμβάς γραμμών δεν έχει δείκτη γραμμών!"
 
-#: editor_mouse.cc:2634
+#: editor_mouse.cc:2664
 #, fuzzy
 msgid "move region(s)"
 msgstr "απαλοιφή περιοχής"
 
-#. this is committed in the grab finished callback.
-#: editor_mouse.cc:2646
-msgid "Drag region copy"
-msgstr "Έλξη αντιγραφής περιοχής"
-
-#: editor_mouse.cc:2758
+#: editor_mouse.cc:2727
 #, fuzzy
 msgid "Drag region brush"
 msgstr "Έλξη περιοχής(ων)"
 
+#. don't copy again
+#. this is committed in the grab finished callback.
+#: editor_mouse.cc:2751
+msgid "Drag region copy"
+msgstr "Έλξη αντιγραφής περιοχής"
+
 #. A selection grab currently creates two undo/redo operations, one for
 #. creating the new region and another for moving it.
 #.
-#: editor_mouse.cc:3574
+#: editor_mouse.cc:3609
 msgid "selection grab"
 msgstr "αρπαγή επιλεγμένων"
 
-#: editor_mouse.cc:3615
+#: editor_mouse.cc:3650
 #, fuzzy
 msgid "cancel selection"
 msgstr "επιλογή διαστήματος"
 
-#: editor_mouse.cc:3722
+#: editor_mouse.cc:3760
 msgid "range selection"
 msgstr "επιλογή διαστήματος"
 
-#: editor_mouse.cc:3738
+#: editor_mouse.cc:3776
 msgid "trim selection start"
 msgstr "αρχή επιλογής προς ισοστάθμιση"
 
-#: editor_mouse.cc:3754
+#: editor_mouse.cc:3792
 msgid "trim selection end"
 msgstr "τέλος επιλογής προς ισοστάθμιση"
 
-#: editor_mouse.cc:3771
+#: editor_mouse.cc:3809
 msgid "move selection"
 msgstr "μετακίνηση επιλογής"
 
-#: editor_mouse.cc:4157
+#: editor_mouse.cc:4195
 msgid "Start point trim"
 msgstr "Αρχή σημείου ισοσταθμίσεως"
 
-#: editor_mouse.cc:4185
+#: editor_mouse.cc:4223
 msgid "End point trim"
 msgstr "Τέλος σημείου ισοσταθμίσεως"
 
-#: editor_mouse.cc:4224
+#: editor_mouse.cc:4262
 msgid "trimmed region"
 msgstr "ισοσταθμισμένη περιοχή"
 
-#: editor_mouse.cc:4363
+#: editor_mouse.cc:4400
 msgid "new range marker"
 msgstr "νέο στίγμα διαστήματος"
 
-#: editor_mouse.cc:4578
+#: editor_mouse.cc:4642
 msgid "select regions"
 msgstr "επιλογή περιοχών"
 
-#: editor_mouse.cc:4607
+#: editor_mouse.cc:4671
 msgid "Name for region:"
 msgstr "Όνομα για περιοχή:"
 
-#: editor_mouse.cc:4671
+#: editor_mouse.cc:4735
 msgid "timestretch"
 msgstr "κάμψη χρόνου"
 
-#: editor_ops.cc:132
+#: editor_ops.cc:195
 msgid "split"
 msgstr "διαχωρισμός"
 
-#: editor_ops.cc:168
+#: editor_ops.cc:231
 msgid "remove region"
 msgstr "απαλοιφή περιοχής"
 
-#: editor_ops.cc:187
+#: editor_ops.cc:250
 msgid ""
 " This is destructive, will possibly delete audio files\n"
 "It cannot be undone\n"
 "Do you really want to destroy %1 ?"
 msgstr ""
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "these regions"
 msgstr "αντιστροφή περιοχών"
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "this region"
 msgstr "σιγή παρούσας περιοχής"
 
-#: editor_ops.cc:193 editor_ops.cc:3229 route_ui.cc:700
-#: visual_time_axis.cc:277
+#: editor_ops.cc:256 editor_ops.cc:3318 route_ui.cc:707
+#: visual_time_axis.cc:278
 msgid "No, do nothing."
 msgstr "Όχι, να μην γίνει τίποτα."
 
-#: editor_ops.cc:196
+#: editor_ops.cc:259
 #, fuzzy
 msgid "Yes, destroy them."
 msgstr "Ναι, να καταστραφεί."
 
-#: editor_ops.cc:198 editor_ops.cc:3230
+#: editor_ops.cc:261 editor_ops.cc:3319
 msgid "Yes, destroy it."
 msgstr "Ναι, να καταστραφεί."
 
-#: editor_ops.cc:289 editor_ops.cc:317
+#: editor_ops.cc:352 editor_ops.cc:380
 msgid "extend selection"
 msgstr "επέκταση επιλογής"
 
-#: editor_ops.cc:333 editor_ops.cc:367 editor_ops.cc:411 editor_ops.cc:437
+#: editor_ops.cc:396 editor_ops.cc:430 editor_ops.cc:474 editor_ops.cc:500
 msgid "nudge forward"
 msgstr "νύξη εμπρός"
 
-#: editor_ops.cc:501
+#: editor_ops.cc:564
 msgid "build_region_boundary_cache called with snap_type = %1"
 msgstr "build_region_boundary_cache εκλήθη με snap_type = %1"
 
-#: editor_ops.cc:1354
+#: editor_ops.cc:1420
 #, fuzzy
 msgid "select all within"
 msgstr "Επιλογή όλων"
 
-#: editor_ops.cc:1380
+#: editor_ops.cc:1452
 #, fuzzy
 msgid "set selection from region"
 msgstr "θέση επιλογής από διάστημα"
 
-#: editor_ops.cc:1413
+#: editor_ops.cc:1485
 msgid "set selection from range"
 msgstr "θέση επιλογής από διάστημα"
 
-#: editor_ops.cc:1443
+#: editor_ops.cc:1515
 #, fuzzy
 msgid "select all from range"
 msgstr "επιλογή διαστήματος zoom"
 
-#: editor_ops.cc:1465
+#: editor_ops.cc:1537
 #, fuzzy
 msgid "select all from punch"
 msgstr "Επιλογή όλων"
 
-#: editor_ops.cc:1487
+#: editor_ops.cc:1559
 #, fuzzy
 msgid "select all from loop"
 msgstr "Επιλογή όλων"
 
-#: editor_ops.cc:1501
+#: editor_ops.cc:1573
 #, fuzzy
 msgid "select all after cursor"
 msgstr "Από αρχή μέχρι  κέρσορα επεξεργασίας"
 
-#: editor_ops.cc:1506
+#: editor_ops.cc:1578
 #, fuzzy
 msgid "select all before cursor"
 msgstr "Θέση συγχρονισμού(sync) απο κέρσορα επεξερ/σίας"
 
-#: editor_ops.cc:1536
+#: editor_ops.cc:1608
 #, fuzzy
 msgid "select all between cursors"
 msgstr "Θέση συγχρονισμού(sync) απο κέρσορα επεξερ/σίας"
 
-#: editor_ops.cc:1667
+#: editor_ops.cc:1739
 msgid "clear markers"
 msgstr "εκκαθάριση στιγμάτων"
 
-#: editor_ops.cc:1679
+#: editor_ops.cc:1751
 msgid "clear ranges"
 msgstr "διαγραφή διαστημάτων"
 
-#: editor_ops.cc:1698
+#: editor_ops.cc:1770
 msgid "clear locations"
 msgstr "διαγραφή τοποθεσιών"
 
-#: editor_ops.cc:1748
+#: editor_ops.cc:1820
 msgid "insert dragged region"
 msgstr "προσθήκη ελκομένης περιοχής"
 
-#: editor_ops.cc:1784
+#: editor_ops.cc:1856
 msgid "insert region"
 msgstr "προσθήκη περιοχής"
 
-#: editor_ops.cc:1975 io_selector.cc:57 io_selector.cc:791
+#: editor_ops.cc:2047 io_selector.cc:58 io_selector.cc:792
 msgid "OK"
 msgstr "OK"
 
-#: editor_ops.cc:1982
+#: editor_ops.cc:2054
 msgid "ardour: rename region"
 msgstr "ardour: μετονομασία περιοχής"
 
-#: editor_ops.cc:2205 editor_ops.cc:2254
+#: editor_ops.cc:2277 editor_ops.cc:2326
 msgid "separate"
 msgstr "διαχωρισμός"
 
-#: editor_ops.cc:2316
+#: editor_ops.cc:2388
 msgid "trim to selection"
 msgstr "ισοστάθμιση προς τα επιλεγμένα"
 
-#: editor_ops.cc:2356
+#: editor_ops.cc:2428
 msgid "region fill"
 msgstr "γόμωση περιοχής"
 
-#: editor_ops.cc:2415
+#: editor_ops.cc:2487
 msgid "fill selection"
 msgstr "γόμωση επιλογής"
 
-#: editor_ops.cc:2436
+#: editor_ops.cc:2508
 #, fuzzy
 msgid "Programming error. that region doesn't cover that position"
 msgstr ""
 "Σφάλμα προγραμματισμού: ο χάρτης τοποθεσίας/στίγματος δεν περιέχει "
 "τοποθεσίες!"
 
-#: editor_ops.cc:2439
+#: editor_ops.cc:2511
 #, fuzzy
 msgid "set region sync position"
 msgstr "Περιοχές/θέση"
 
-#: editor_ops.cc:2454
+#: editor_ops.cc:2526
 msgid "Place the edit cursor at the desired sync point"
 msgstr "Τοποθετήστε τον κερσορα επεξερ/σίας στο επιθύμητό σημείο συγχρονισμού"
 
-#: editor_ops.cc:2459
+#: editor_ops.cc:2531
 msgid "set sync from edit cursor"
 msgstr "Θέση συγχρονισμού(sync) απο κέρσορα επεξερ/σίας"
 
-#: editor_ops.cc:2471
+#: editor_ops.cc:2543
 msgid "remove sync"
 msgstr "απαλοιφή συγχρονισμού(sync)"
 
-#: editor_ops.cc:2485
+#: editor_ops.cc:2557
 msgid "naturalize"
 msgstr "φυσικοποίηση"
 
-#: editor_ops.cc:2549
+#: editor_ops.cc:2621
 msgid "align selection (relative)"
 msgstr "ευθυγράμμιση επιλογής (σχετική)"
 
-#: editor_ops.cc:2577
+#: editor_ops.cc:2649
 msgid "align selection"
 msgstr "ευθυγράμμιση επιλογής"
 
-#: editor_ops.cc:2589
+#: editor_ops.cc:2661
 msgid "align region"
 msgstr "ευθυγράμμιση περιοχής"
 
-#: editor_ops.cc:2636 editor_ops.cc:2661
+#: editor_ops.cc:2708 editor_ops.cc:2733
 msgid "trim to edit"
 msgstr "ισοστάθμιση προς σύνταξη"
 
-#: editor_ops.cc:2712
+#: editor_ops.cc:2784
 #, fuzzy
 msgid "ardour: freeze"
 msgstr "ardour: "
 
-#: editor_ops.cc:2717
+#: editor_ops.cc:2789
 #, fuzzy
 msgid "Cancel Freeze"
 msgstr "Ακύρωση"
 
-#: editor_ops.cc:2754
+#: editor_ops.cc:2826
 msgid "bounce range"
 msgstr "αναπήδηση διαστήματο"
 
-#: editor_ops.cc:2807
+#: editor_ops.cc:2879
 msgid "cut"
 msgstr "κοπή"
 
-#: editor_ops.cc:2810
+#: editor_ops.cc:2882
 msgid "copy"
 msgstr "αντιγραφή"
 
-#: editor_ops.cc:2823
+#: editor_ops.cc:2895
 msgid " objects"
 msgstr " αντικειμένων"
 
-#: editor_ops.cc:2849
+#: editor_ops.cc:2921
 msgid " range"
 msgstr " διαστήματος"
 
-#: editor_ops.cc:3006
+#: editor_ops.cc:3078
 msgid "paste"
 msgstr "επικόλληση"
 
-#: editor_ops.cc:3044
+#: editor_ops.cc:3116
 msgid "paste chunk"
 msgstr "επικόλληση κομματιού"
 
 #. clear (below) will clear the argument list
-#: editor_ops.cc:3085
+#: editor_ops.cc:3157
 msgid "duplicate region"
 msgstr "αντιγραφή περιοχής"
 
-#: editor_ops.cc:3130
+#: editor_ops.cc:3202
 msgid "duplicate selection"
 msgstr "αντιγραφή επιλογής"
 
-#: editor_ops.cc:3170
+#: editor_ops.cc:3259
 msgid "clear playlist"
 msgstr "εκκαθάριση playlist"
 
-#: editor_ops.cc:3199
+#: editor_ops.cc:3288
 msgid "nudge track"
 msgstr "νύξη καναλιού"
 
-#: editor_ops.cc:3226
+#: editor_ops.cc:3315
 msgid ""
 "Do you really want to destroy the last capture?\n"
 "(This is destructive and cannot be undone)"
@@ -4109,160 +4096,157 @@ msgstr ""
 "Στ'αλήθεια θέλετε να καταστρέψετε την τελευταία λήψη?\n"
 "(Η πράξη είνα‎ι καταστρεπτική και δεν γίνεται επαναφορά της)"
 
-#: editor_ops.cc:3254
+#: editor_ops.cc:3343
 msgid "normalize"
 msgstr "εξομάλυνση"
 
-#: editor_ops.cc:3301
+#: editor_ops.cc:3390
 msgid "reverse regions"
 msgstr "αντιστροφή περιοχών"
 
-#: editor_region_list.cc:93 editor_region_list.cc:98 editor_region_list.cc:101
-#: location_ui.cc:55
+#: editor_region_list.cc:98 editor_region_list.cc:103
+#: editor_region_list.cc:106 location_ui.cc:56
 msgid "Hidden"
 msgstr "Κρυμμένο"
 
 #. added a new fresh one at the end
-#: editor_route_list.cc:101 editor_route_list.cc:102 editor_route_list.cc:246
+#: editor_route_list.cc:102 editor_route_list.cc:103 editor_route_list.cc:247
 msgid "editor"
 msgstr "επεξεργαστής"
 
-#: editor_route_list.cc:309 mixer_ui.cc:695
+#: editor_route_list.cc:310 mixer_ui.cc:699
 msgid "Show All"
 msgstr "Εμφάνιση Όλων"
 
-#: editor_route_list.cc:310 mixer_ui.cc:696
+#: editor_route_list.cc:311 mixer_ui.cc:700
 msgid "Hide All"
 msgstr "Απόκρυψη όλων"
 
-#: editor_route_list.cc:311 mixer_ui.cc:697
+#: editor_route_list.cc:312 mixer_ui.cc:701
 #, fuzzy
 msgid "Show All Audio Tracks"
 msgstr "Ανάδειξη όλων των Ηχοδιαύλων"
 
-#: editor_route_list.cc:312 mixer_ui.cc:698
+#: editor_route_list.cc:313 mixer_ui.cc:702
 #, fuzzy
 msgid "Hide All Audio Tracks"
 msgstr "Απόκρυψη όλων των Ηχοδιαύλων"
 
-#: editor_route_list.cc:313 mixer_ui.cc:699
+#: editor_route_list.cc:314 mixer_ui.cc:703
 #, fuzzy
 msgid "Show All Audio Busses"
 msgstr "Ανάδειξη όλων των Ηχοδιαύλων"
 
-#: editor_route_list.cc:314 mixer_ui.cc:700
+#: editor_route_list.cc:315 mixer_ui.cc:704
 #, fuzzy
 msgid "Hide All Audio Busses"
 msgstr "Απόκρυψη όλων των Ηχοδιαύλων"
 
-#: editor_rulers.cc:311
+#: editor_rulers.cc:312
 msgid "New location marker"
 msgstr "Νέο στίγμα θέσεως"
 
-#: editor_rulers.cc:312
+#: editor_rulers.cc:313
 msgid "Clear all locations"
 msgstr "Εκκαθάριση όλων των θέσεων"
 
 #. ruler_items.push_back (MenuElem (_("New Range")));
-#: editor_rulers.cc:317
+#: editor_rulers.cc:318
 msgid "Clear all ranges"
 msgstr "Εκκαθάριση όλων των διαστημάτων"
 
-#: editor_rulers.cc:326
+#: editor_rulers.cc:327
 msgid "New Tempo"
 msgstr "Νέος Χρόνος"
 
-#: editor_rulers.cc:327
+#: editor_rulers.cc:328
 msgid "Clear tempo"
 msgstr "Εκκαθάριση Χρόνου"
 
-#: editor_rulers.cc:332
+#: editor_rulers.cc:333
 msgid "New Meter"
 msgstr "Νέο μέτρο"
 
-#: editor_rulers.cc:333
+#: editor_rulers.cc:334
 msgid "Clear meter"
 msgstr "Εκκαθάριση μέτρου"
 
-#: editor_rulers.cc:341
+#: editor_rulers.cc:342
 msgid "Min:Secs"
 msgstr "Λεπ:Δεύτ"
 
-#: editor_selection_list.cc:110
+#: editor_selection_list.cc:108
 #, fuzzy
 msgid "Name for Chunk:"
 msgstr "όνομα για κομμάτι:"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 #, fuzzy
 msgid "Create Chunk"
 msgstr "Δημιουργία κομματιού"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 msgid "Forget it"
 msgstr "Ξέχασέ το"
 
-#: editor_tempodisplay.cc:249 editor_tempodisplay.cc:289
+#: editor_tempodisplay.cc:253 editor_tempodisplay.cc:293
 msgid "add"
 msgstr "πρόσθεση"
 
-#: editor_tempodisplay.cc:271
+#: editor_tempodisplay.cc:275
 msgid "add tempo mark"
 msgstr "πρόσθεση στίγματος χρόνου"
 
-#: editor_tempodisplay.cc:311
+#: editor_tempodisplay.cc:315
 msgid "add meter mark"
 msgstr "πρόσθεση στίγματος μέτρου"
 
-#: editor_tempodisplay.cc:344 editor_tempodisplay.cc:375
+#: editor_tempodisplay.cc:348 editor_tempodisplay.cc:376
 msgid "done"
 msgstr "έγινε"
 
-#: editor_tempodisplay.cc:365 editor_tempodisplay.cc:396
+#: editor_tempodisplay.cc:366 editor_tempodisplay.cc:394
 msgid "replace tempo mark"
 msgstr "αντικατάσταση στίγματος χρόνου"
 
-#: editor_tempodisplay.cc:435 editor_tempodisplay.cc:466
+#: editor_tempodisplay.cc:433 editor_tempodisplay.cc:464
 msgid "programming error: marker for meter is not a meter marker!"
 msgstr ""
 "Σφάλμα προγραμματισμού: το στίγμα για το μέτρο δεν είναι στίγμα μέτρου!"
 
-#: editor_tempodisplay.cc:445 editor_tempodisplay.cc:478
+#: editor_tempodisplay.cc:443 editor_tempodisplay.cc:476
 msgid "remove tempo mark"
 msgstr "απαλοιφή στίγματος χρόνου"
 
-#: editor_timefx.cc:50
+#: editor_timefx.cc:51
 msgid "Quick but Ugly"
 msgstr "Γρήγορο αλλά  Άσχημο"
 
-#: editor_timefx.cc:51
+#: editor_timefx.cc:52
 msgid "Skip Anti-aliasing"
 msgstr "Παράκαμψη Anti-aliasing"
 
-#: editor_timefx.cc:53
-msgid "Stretch/Shrink it"
-msgstr "Μεγέθυνέ/Σμίκρυνέ το"
-
-#: editor_timefx.cc:57
+#: editor_timefx.cc:56
 msgid "ardour: timestretch"
 msgstr "ardour: χρονοκάμψη"
 
-#: editor_timefx.cc:58
+#: editor_timefx.cc:57
 msgid "TimeStretchDialog"
 msgstr "ΔιάλογοςΧρονοκάμψης"
 
-#: editor_timefx.cc:80 editor_timefx.cc:81 editor_timefx.cc:82
-#: editor_timefx.cc:83
+#: editor_timefx.cc:70
+msgid "Stretch/Shrink it"
+msgstr "Μεγέθυνέ/Σμίκρυνέ το"
+
+#: editor_timefx.cc:73 editor_timefx.cc:74
 msgid "TimeStretchButton"
 msgstr "ΚουμπίΧρονοκάμψης"
 
-#: editor_timefx.cc:84
+#: editor_timefx.cc:75
 msgid "TimeStretchProgress"
 msgstr "ΠρόοδοςΧρονοκάμψης"
 
-#. GTK2FIX
-#. current_timestretch->close ();
-#: editor_timefx.cc:153
+#: editor_timefx.cc:139
 msgid "timestretch cannot be started - thread creation error"
 msgstr ""
 
@@ -4397,7 +4381,7 @@ msgstr "Εξαγωγή σε CD από μαρκάρισμα καναλιού"
 msgid "Export to File"
 msgstr "Εξαγωγή σε CD"
 
-#: export_dialog.cc:113 option_editor.cc:82 option_editor.cc:83
+#: export_dialog.cc:113 option_editor.cc:83 option_editor.cc:84
 msgid "Browse"
 msgstr "Αναζήτηση"
 
@@ -4413,7 +4397,8 @@ msgstr "ardour: εξαγωγή"
 msgid "ardour_export"
 msgstr "ardour_εξαγωγή"
 
-#: export_dialog.cc:139 export_dialog.cc:155
+#: export_dialog.cc:139 export_dialog.cc:155 mixer_strip.cc:124
+#: mixer_strip.cc:767
 #, fuzzy
 msgid "Output"
 msgstr "Έξοδοι"
@@ -4452,144 +4437,75 @@ msgstr ""
 msgid "File already exists, do you want to overwrite it?"
 msgstr ""
 
-#: export_dialog.cc:1159 export_range_markers_dialog.cc:154
+#: export_dialog.cc:1159 export_range_markers_dialog.cc:153
 msgid "Cannot write file in: "
 msgstr ""
 
 #. warning dialog
-#: export_range_markers_dialog.cc:136
+#: export_range_markers_dialog.cc:135
 msgid "Please enter a valid target directory."
 msgstr ""
 
-#: export_range_markers_dialog.cc:144
+#: export_range_markers_dialog.cc:143
 msgid ""
 "Please select an existing target directory. Files\n"
 "are not allowed!"
 msgstr ""
 
-#: gain_automation_time_axis.cc:61
+#: gain_automation_time_axis.cc:62
 #, fuzzy
 msgid "add gain automation event"
 msgstr "πρόσθεση συμβάντος αυτοματισμού σε "
 
-#: gain_meter.cc:66
+#: gain_meter.cc:67
 msgid "cannot find images for fader slider"
 msgstr ""
 
-#: gain_meter.cc:73
+#: gain_meter.cc:74
 msgid "cannot find images for fader rail"
 msgstr ""
 
-#: gain_meter.cc:88
-msgid "dbFS"
-msgstr "dbFS"
-
-#: gain_meter.cc:89 gain_meter.cc:143 gain_meter.cc:704
-msgid "pre"
-msgstr "προ"
-
-#: gain_meter.cc:139 gain_meter.cc:700
-#, fuzzy
-msgid "input"
-msgstr "%1 είσοδος"
-
-#: gain_meter.cc:147 gain_meter.cc:708
-#, fuzzy
-msgid "post"
-msgstr "θύρα"
-
-#. TRANSLATORS: this string should be longest of the strings
-#. used to describe meter points. In english, its "input".
-#.
-#: gain_meter.cc:155
-msgid "tupni"
-msgstr ""
-
-#: gain_meter.cc:174 gain_meter.cc:458 gain_meter.cc:480 gain_meter.cc:525
+#: gain_meter.cc:130 gain_meter.cc:339 gain_meter.cc:494 gain_meter.cc:539
 msgid "-inf"
 msgstr "-inf"
 
-#: glade/new_session_dialog.glade.h:1
+#: gain_meter.cc:140
 #, fuzzy
-msgid "<b>Advanced</b>"
-msgstr "Προχωρημένα..."
-
-#: glade/new_session_dialog.glade.h:2
-msgid "<b>Input</b>"
-msgstr ""
+msgid "Fader automation mode"
+msgstr "Λειτουργία αυτοματισμού pan"
 
-#: glade/new_session_dialog.glade.h:3
+#: gain_meter.cc:141
 #, fuzzy
-msgid "<b>Output</b>"
-msgstr "��ξοδοι"
+msgid "Fader automation type"
+msgstr "��ύπος αυτοματισμού Pan"
 
-#: glade/new_session_dialog.glade.h:4
+#. XXX it might different in different languages
+#: gain_meter.cc:182 gain_meter.cc:817 panner_ui.cc:99 panner_ui.cc:807
 #, fuzzy
-msgid "Automatically connect inputs"
-msgstr "αυτόματη σύνδεση inputs καναλιών σε φυσικές θύρες"
+msgid "Abs"
+msgstr "abs"
 
-#: glade/new_session_dialog.glade.h:5
+#: gain_meter.cc:472
 #, fuzzy
-msgid "Automatically connect outputs"
-msgstr "χειροκίνητη σύνδεση των outputs των καναλιών"
+msgid "-Inf"
+msgstr "-inf"
 
-#: glade/new_session_dialog.glade.h:6
+#: gain_meter.cc:781 mixer_strip.cc:770 panner_ui.cc:771
 #, fuzzy
-msgid "Channel Count"
-msgstr "Ακύρωση Εισαγωγής"
+msgid "O"
+msgstr "OR"
 
-#: glade/new_session_dialog.glade.h:7
-msgid "Connect to Master Bus"
+#: gain_meter.cc:784 panner_ui.cc:774
+msgid "P"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:8
-msgid "Connect to physical outputs"
+#: gain_meter.cc:787 panner_ui.cc:777
+msgid "T"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:9
-#, fuzzy
-msgid "Create Control Bus"
-msgstr "Control Outs"
-
-#: glade/new_session_dialog.glade.h:10
-#, fuzzy
-msgid "Create Master Bus"
-msgstr "χρήση των master outs"
-
-#: glade/new_session_dialog.glade.h:11
-#, fuzzy
-msgid "New Session"
-msgstr "Συνεδρία"
-
-#: glade/new_session_dialog.glade.h:12
-#, fuzzy
-msgid "Open Recent Session"
-msgstr "Άνοιγμα συνεδρίας"
-
-#: glade/new_session_dialog.glade.h:13
-#, fuzzy
-msgid "Open Session"
-msgstr "Άνοιγμα συνεδρίας"
-
-#: glade/new_session_dialog.glade.h:14
-#, fuzzy
-msgid "Port limit"
-msgstr "Ξέχασέ το"
-
-#: glade/new_session_dialog.glade.h:15
-#, fuzzy
-msgid "Select a File"
-msgstr "Επιλογή όλων"
-
-#: glade/new_session_dialog.glade.h:16
-#, fuzzy
-msgid "Select a Session"
-msgstr "επιλογή περιοχών"
-
-#: glade/new_session_dialog.glade.h:17
-#, fuzzy
-msgid "Track/Bus connection options"
-msgstr "κανάλια/δίαυλοι"
+#: gain_meter.cc:790 panner_ui.cc:780
+msgid "W"
+msgstr ""
 
 #: gtk-custom-ruler.c:126
 #, fuzzy
@@ -4636,129 +4552,129 @@ msgid "Draw current ruler position"
 msgstr ""
 
 #. end-of-file, other end closed or shutdown?
-#: imageframe_socket_handler.cc:126
+#: imageframe_socket_handler.cc:127
 msgid "Image Compositor Socket has been shutdown/closed"
 msgstr "Η  Socket για τον Image Compositor έχει τερματιστεί/κλείσει"
 
-#: imageframe_time_axis.cc:287
+#: imageframe_time_axis.cc:286
 #, fuzzy
 msgid "0.5 seconds"
 msgstr "Δευτερόλεπτα"
 
-#: imageframe_time_axis.cc:288 marker_time_axis.cc:241
+#: imageframe_time_axis.cc:287 marker_time_axis.cc:242
 #, fuzzy
 msgid "1 seconds"
 msgstr "Δευτερόλεπτα"
 
-#: imageframe_time_axis.cc:289 marker_time_axis.cc:242
+#: imageframe_time_axis.cc:288 marker_time_axis.cc:243
 #, fuzzy
 msgid "1.5 seconds"
 msgstr "Δευτερόλεπτα"
 
-#: imageframe_time_axis.cc:290 marker_time_axis.cc:243
+#: imageframe_time_axis.cc:289 marker_time_axis.cc:244
 #, fuzzy
 msgid "2 seconds"
 msgstr "Δευτερόλεπτα"
 
-#: imageframe_time_axis.cc:291 marker_time_axis.cc:244
+#: imageframe_time_axis.cc:290 marker_time_axis.cc:245
 #, fuzzy
 msgid "2.5 seconds"
 msgstr "Δευτερόλεπτα"
 
-#: imageframe_time_axis.cc:292 marker_time_axis.cc:245
+#: imageframe_time_axis.cc:291 marker_time_axis.cc:246
 #, fuzzy
 msgid "3 seconds"
 msgstr "Δευτερόλεπτα"
 
 #. duration_items.push_back(SeparatorElem()) ;
 #. duration_items.push_back(MenuElem (_("custom"), mem_fun(*this, &ImageFrameTimeAxis::set_marker_duration_custom))) ;
-#: imageframe_time_axis.cc:297 marker_time_axis.cc:250
+#: imageframe_time_axis.cc:296 marker_time_axis.cc:251
 #, fuzzy
 msgid "Duration (sec)"
 msgstr "Έλξη περιοχής(ων)"
 
-#: imageframe_time_axis.cc:302
+#: imageframe_time_axis.cc:301
 #, fuzzy
 msgid "Remove Frame"
 msgstr "Απαλοιφή Πεδίου"
 
-#: imageframe_time_axis.cc:305
+#: imageframe_time_axis.cc:304
 #, fuzzy
 msgid "Image Frame"
 msgstr "Frames"
 
-#: imageframe_time_axis.cc:306 marker_time_axis.cc:256
+#: imageframe_time_axis.cc:305 marker_time_axis.cc:257
 #, fuzzy
 msgid "Rename Track"
 msgstr "Μετονομασία"
 
-#: io_selector.cc:59 io_selector.cc:793
+#: io_selector.cc:60 io_selector.cc:794
 #, fuzzy
 msgid "Rescan"
 msgstr "Επανα-ανίχνευση"
 
-#: io_selector.cc:67
+#: io_selector.cc:68
 msgid "%1 input"
 msgstr "%1 είσοδος"
 
-#: io_selector.cc:69
+#: io_selector.cc:70
 msgid "%1 output"
 msgstr "%1 έξοδος"
 
-#: io_selector.cc:141 route_params_ui.cc:106
+#: io_selector.cc:142 route_params_ui.cc:107
 msgid "Inputs"
 msgstr "Είσοδοι"
 
-#: io_selector.cc:141 route_params_ui.cc:107
+#: io_selector.cc:142 route_params_ui.cc:108
 msgid "Outputs"
 msgstr "Έξοδοι"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Input"
 msgstr "πρόσθεση εισόδου"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Output"
 msgstr "πρόσθεση εξόδου"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Input"
 msgstr "Απαλοιφή σημείου συγχρονισμού"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Output"
 msgstr "# Έξοδοι"
 
-#: io_selector.cc:144
+#: io_selector.cc:145
 #, fuzzy
 msgid "Disconnect All"
 msgstr "Αποσύνδεση"
 
-#: io_selector.cc:158
+#: io_selector.cc:159
 msgid "Available connections"
 msgstr "Διαθέσιμες Συνδέσεις"
 
-#: io_selector.cc:554 io_selector.cc:573
+#: io_selector.cc:555 io_selector.cc:574
 msgid "There are no more JACK ports available."
 msgstr ""
 
-#: io_selector.cc:648 io_selector.cc:675 io_selector.cc:728
+#: io_selector.cc:649 io_selector.cc:676 io_selector.cc:729
 msgid "port"
 msgstr "θύρα"
 
-#: io_selector.cc:797
+#: io_selector.cc:798
 msgid "ardour: "
 msgstr "ardour: "
 
-#: keyboard.cc:297
+#: keyboard.cc:299
 msgid "KeyboardTarget: keyname \"%1\" is unknown."
 msgstr "KeyboardTarget: το Όνομα Πλήκτρου \"%1\" είναι άγνωστο."
 
-#: keyboard.cc:523
+#: keyboard.cc:525
 msgid ""
 "Your system is completely broken - NumLock uses \"%1\"as its modifier. This "
 "is madness - see the man page for xmodmap to find out how to fix this."
@@ -4767,7 +4683,7 @@ msgstr ""
 "μεταβλητή του. Αυτό είναι τρέλα - ανατρέξτε στην man page του xmodmap για να "
 "βρείτε πώς θα το φτιάξετε."
 
-#: keyboard.cc:531
+#: keyboard.cc:533
 msgid ""
 "Your system generates \"%1\" when the NumLock key is pressed. This can cause "
 "problems when editing so Ardour will use %2 to mean Meta rather than %1"
@@ -4776,103 +4692,103 @@ msgstr ""
 "μπορεί να δημιουργήσει προβλήματα στην επεξεργασία οπότε ο Ardour θα "
 "χρησιμοποιήσει %2 για Meta αντί του %1"
 
-#: keyboard.cc:592
+#: keyboard.cc:594
 msgid "You have %1 keys bound to \"mod1\""
 msgstr "Υπάρχουν %1 πλήκτρα αναθεμένα στο \"mod1\""
 
-#: keyboard.cc:607
+#: keyboard.cc:609
 msgid "You have %1 keys bound to \"mod2\""
 msgstr "Υπάρχουν %1 πλήκτρα αναθεμένα στο \"mod2\""
 
-#: keyboard.cc:622
+#: keyboard.cc:624
 msgid "You have %1 keys bound to \"mod3\""
 msgstr "Υπάρχουν %1 πλήκτρα αναθεμένα στο \"mod3\""
 
-#: keyboard.cc:637
+#: keyboard.cc:639
 msgid "You have %1 keys bound to \"mod4\""
 msgstr "Υπάρχουν %1 πλήκτρα αναθεμένα στο \"mod4\""
 
-#: keyboard.cc:652
+#: keyboard.cc:654
 msgid "You have %1 keys bound to \"mod5\""
 msgstr "Υπάρχουν %1 πλήκτρα αναθεμένα στο \"mod5\""
 
-#: location_ui.cc:47 location_ui.cc:50
+#: location_ui.cc:48 location_ui.cc:51
 msgid "Set"
 msgstr "Θέση"
 
-#: location_ui.cc:48 location_ui.cc:51
+#: location_ui.cc:49 location_ui.cc:52
 msgid "Go"
 msgstr "Πήγαινε"
 
-#: location_ui.cc:54
+#: location_ui.cc:55
 msgid "CD"
 msgstr "CD"
 
-#: location_ui.cc:57
+#: location_ui.cc:58
 msgid "SCMS"
 msgstr ""
 
-#: location_ui.cc:58
+#: location_ui.cc:59
 msgid "Pre-Emphasis"
 msgstr ""
 
-#: location_ui.cc:569
+#: location_ui.cc:570
 msgid "Add New Location"
 msgstr "Πρόσθεση νέας τοποθεσίας"
 
-#: location_ui.cc:570
+#: location_ui.cc:571
 msgid "Add New Range"
 msgstr "Πρόσθεση νέου διαστήματος"
 
-#: location_ui.cc:574
+#: location_ui.cc:575
 msgid "ardour: locations"
 msgstr "ardour: τοποθεσίες"
 
-#: location_ui.cc:575
+#: location_ui.cc:576
 msgid "ardour_locations"
 msgstr "ardour_τοποθεσίες"
 
-#: location_ui.cc:603
+#: location_ui.cc:604
 #, fuzzy
 msgid "Location (CD Index) Markers"
 msgstr "Στίγματα Τοποθεσίας"
 
-#: location_ui.cc:623
+#: location_ui.cc:624
 #, fuzzy
 msgid "Range (CD Track) Markers"
 msgstr "Στίγματα διαστημάτων"
 
-#: location_ui.cc:789
+#: location_ui.cc:790
 msgid "add range marker"
 msgstr "πρόσθεση στίγματος διαστήματος"
 
-#: main.cc:71
+#: main.cc:72
 msgid "ardour is killing itself for a clean exit\n"
 msgstr "Ο ardour σκοτώνει τον εαυτό του για καθαρή έξοδο\n"
 
-#: main.cc:80
+#: main.cc:81
 msgid "stopping user interface\n"
 msgstr "παύση του user interface\n"
 
 #. XXX its doubtful that snprintf() is async-safe
-#: main.cc:99
+#: main.cc:100
 #, fuzzy, c-format
 msgid "%d(%d): received signal %d\n"
 msgstr "%d: εδέχθη σήμα %d\n"
 
-#: main.cc:185
+#: main.cc:186
 msgid "cannot become new process group leader (%1)"
 msgstr ""
 
-#: main.cc:212
+#: main.cc:213
 msgid "cannot setup signal handling for %1"
 msgstr "δεν γίνεται να διαμορφώθεί η διαχείρηση σημάτων για %1"
 
-#: main.cc:223
+#: main.cc:224
 msgid "cannot set default signal mask (%1)"
 msgstr "δεν γίνεται να διαμορφώθεί η προκαθορισμένη μάσκα σημάτων (%1)"
 
-#: main.cc:253
+#: main.cc:254
 #, fuzzy
 msgid ""
 "Without a UI style file, ardour will look strange.\n"
@@ -4881,12 +4797,12 @@ msgstr ""
 "Δίχως αρχείο εμφάνισεως UI, ο ardour θα φαίνεται παράξενα.\n"
 "Παρακαλώ θέστε το ARDOUR_UI_RC να δείχνει σε ενεργό αρχείο εμφανίσεως UI"
 
-#: main.cc:273
+#: main.cc:276
 #, fuzzy
 msgid "Ardour could not connect to JACK."
 msgstr "Δεν γινόταν να συνδεθώ στον JACK server σαν  \"%1\""
 
-#: main.cc:277
+#: main.cc:280
 #, fuzzy
 msgid ""
 "There are several possible reasons:\n"
@@ -4906,380 +4822,469 @@ msgstr ""
 "\n"
 "Παρακαλώ αναλογιστείτε τις πιθανότητες, και ίσως (ξανα)ξεκινήστε τον JACK."
 
-#: main.cc:324
+#: main.cc:310
+msgid "could not load command line session \"%1\""
+msgstr "δεν γινόταν να φορτωθεί η συνεδρία γραμμής εντολών  \"%1\""
+
+#. it wasn't new, but we require a new session
+#: main.cc:330
+msgid ""
+"\n"
+"\n"
+"A session named \"%1\" already exists.\n"
+"To avoid this message, start ardour as \"ardour %1"
+msgstr ""
+
+#: main.cc:341
+msgid ""
+"\n"
+"\n"
+"No session named \"%1\" exists.\n"
+"To create it from the command line, start ardour as \"ardour --new %1"
+msgstr ""
+
+#: main.cc:405
 msgid "Ardour/GTK "
 msgstr "Ardour/GTK "
 
-#: main.cc:326
+#: main.cc:407
 msgid ""
 "\n"
 "   (built using "
 msgstr ""
 
-#: main.cc:330
+#: main.cc:411
 #, fuzzy
 msgid " with libardour "
 msgstr " τρέχοντας με libardour "
 
-#: main.cc:335
+#: main.cc:416
 msgid " and GCC version "
 msgstr ""
 
-#: main.cc:345
+#: main.cc:426
 #, fuzzy
-msgid "Copyright (C) 1999-2005 Paul Davis"
+msgid "Copyright (C) 1999-2006 Paul Davis"
 msgstr "Πνευματικα Δικαιώματα 1999-2004 Paul Davis"
 
-#: main.cc:346
+#: main.cc:427
 msgid ""
 "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker"
 msgstr ""
 
-#: main.cc:348
+#: main.cc:429
 msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
 msgstr "Ο Ardour έρχεται με απολύτως ΚΑΜΙΑ ΕΓΓΥΗΣΗ"
 
-#: main.cc:349
+#: main.cc:430
 msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 msgstr ""
 
-#: main.cc:350
+#: main.cc:431
 msgid "This is free software, and you are welcome to redistribute it "
 msgstr ""
 "Το παρόν είναι ελεύθερο λογισμικό, είστε ελεύθεροι να το επαναδιανείμετε "
 
-#: main.cc:351
+#: main.cc:432
 #, fuzzy
 msgid "under certain conditions; see the source for copying conditions."
 msgstr "υπό ορισμένους όρους, ανατρέξτε στο αρχείο COPYING για λεπτομέρειες"
 
-#: main.cc:360
+#: main.cc:441
 msgid "could not create ARDOUR GUI"
 msgstr "δεν γινόταν να δημιουργηθεί ARDOUR GUI"
 
-#: main.cc:378
+#: main.cc:459
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr "Δεν γινόταν να συνδεθώ στον JACK server σαν  \"%1\""
 
-#: main.cc:381
+#: main.cc:462
 msgid "could not initialize Ardour."
 msgstr "δεν γινόταν να εκκινηθεί ο  Ardour."
 
-#: main.cc:392
-msgid "could not load command line session \"%1\""
-msgstr "δεν γινόταν να φορτωθεί η συνεδρία γραμμής εντολών  \"%1\""
+#: marker.cc:244
+#, fuzzy
+msgid "MarkerText"
+msgstr "Στίγματα"
 
-#. it wasn't new, but we require a new session
-#: main.cc:412
-msgid ""
-"\n"
-"\n"
-"A session named \"%1\" already exists.\n"
-"To avoid this message, start ardour as \"ardour %1"
-msgstr ""
+#: marker_time_axis.cc:254
+#, fuzzy
+msgid "Remove Marker"
+msgstr "απαλοιφή στίγματος"
 
-#: main.cc:423
-msgid ""
-"\n"
-"\n"
-"No session named \"%1\" exists.\n"
-"To create it from the command line, start ardour as \"ardour --new %1"
-msgstr ""
-
-#: marker.cc:244
-#, fuzzy
-msgid "MarkerText"
-msgstr "Στίγματα"
-
-#: marker_time_axis.cc:253
-#, fuzzy
-msgid "Remove Marker"
-msgstr "απαλοιφή στίγματος"
-
-#: marker_time_axis.cc:255
+#: marker_time_axis.cc:256
 #, fuzzy
 msgid "Marker"
 msgstr "Στίγματα"
 
-#: meter_bridge.cc:77
+#: meter_bridge.cc:78
 msgid "ardour: meter bridge"
 msgstr "ardour: γέφυρα μετρήσεων"
 
-#: meter_bridge.cc:78
+#: meter_bridge.cc:79
 msgid "ardour_meter_bridge"
 msgstr "ardour_γέφυρα_μετρήσεων"
 
-#: meter_bridge_strip.cc:79 meter_bridge_strip.cc:93
+#: meter_bridge_strip.cc:80 meter_bridge_strip.cc:94
 #, c-format
 msgid "# of %u-sample overs"
 msgstr "# από %u-sample overs"
 
-#: meter_bridge_strip.cc:221
+#: meter_bridge_strip.cc:222
 #, fuzzy
 msgid "New Name for Meter:"
 msgstr "Νέο όνομα για μετρητή:"
 
-#: mixer_strip.cc:85 mixer_strip.cc:437 region_editor.cc:46
-msgid "mute"
-msgstr "σιγή"
-
-#: mixer_strip.cc:85 mixer_strip.cc:438
-msgid "solo"
-msgstr "σόλο"
-
-#: mixer_strip.cc:85 mixer_strip.cc:436
-msgid "RECORD"
-msgstr "ΕΓΓΡΑΦΗ"
+#: mixer_strip.cc:95 mixer_strip.cc:140 mixer_strip.cc:1227
+msgid "pre"
+msgstr "προ"
 
-#: mixer_strip.cc:96 mixer_strip.cc:441 mixer_strip.cc:1064
+#: mixer_strip.cc:96 mixer_strip.cc:822
 msgid "Comments"
 msgstr ""
 
-#: mixer_strip.cc:120 mixer_strip.cc:752
-msgid "INPUT"
-msgstr "ΕΙΣΟΔΟΣ"
-
-#: mixer_strip.cc:125 mixer_strip.cc:773
-msgid "OUTPUT"
-msgstr "ΕΞΟΔΟΣ"
-
-#: mixer_strip.cc:140
-msgid "Pan automation mode"
-msgstr "Λειτουργία αυτοματισμού Pan"
+#: mixer_strip.cc:119
+#, fuzzy
+msgid "Input"
+msgstr "Είσοδοι"
 
-#: mixer_strip.cc:141
-msgid "Gain automation mode"
-msgstr "Λειτουργία αυτοματισμού Gain"
+#: mixer_strip.cc:136 mixer_strip.cc:1223
+#, fuzzy
+msgid "input"
+msgstr "%1 είσοδος"
 
-#: mixer_strip.cc:143
-msgid "Pan automation type"
-msgstr "Τύπος αυτοματισμού Pan"
+#: mixer_strip.cc:144 mixer_strip.cc:1231
+#, fuzzy
+msgid "post"
+msgstr "θύρα"
 
-#: mixer_strip.cc:144
-msgid "Gain automation type"
-msgstr "Τύπος αυτοματισμού Gain"
+#. TRANSLATORS: this string should be longest of the strings
+#. used to describe meter points. In english, its "input".
+#.
+#: mixer_strip.cc:152
+msgid "tupni"
+msgstr ""
 
-#: mixer_strip.cc:183 mixer_strip.cc:195 mixer_strip.cc:913
-msgid "trim"
-msgstr "ισοστάθμιση"
+#: mixer_strip.cc:207
+#, fuzzy
+msgid "Varispeed"
+msgstr "μεταβλητή ταχύτητα"
 
-#. XXX it might different in different languages
-#: mixer_strip.cc:184 mixer_strip.cc:196 mixer_strip.cc:917
-msgid "abs"
-msgstr "abs"
+#: mixer_strip.cc:233 mixer_strip.cc:836
+msgid "Click to Add/Edit Comments"
+msgstr ""
 
-#: mixer_strip.cc:203
-msgid "gain automation mode"
-msgstr "��ειτουργία αυτοματισμού gain"
+#: mixer_strip.cc:374
+msgid "unknown strip width \"%1\" in XML GUI information"
+msgstr "��γνωστο εύρος διαδρόμου \"%1\" στις πληροφορίες του XML GUI"
 
-#: mixer_strip.cc:204
-msgid "pan automation mode"
-msgstr "Λειτουργία αυτοματισμού pan"
+#: mixer_strip.cc:417
+#, fuzzy
+msgid "record"
+msgstr "Εγγραφή"
 
-#: mixer_strip.cc:205
-msgid "gain automation state"
-msgstr "Κατάσταση αυτοματισμού gain"
+#: mixer_strip.cc:418 region_editor.cc:47
+msgid "mute"
+msgstr "σιγή"
 
-#: mixer_strip.cc:206
-msgid "pan automation state"
-msgstr "Κατάσταση αυτοματισμού pan"
+#: mixer_strip.cc:419
+msgid "solo"
+msgstr "σόλο"
 
-#: mixer_strip.cc:223
-msgid "varispeed"
-msgstr "μεταβλητή ταχύτητα"
+#: mixer_strip.cc:422
+msgid "comments"
+msgstr ""
 
-#: mixer_strip.cc:245 mixer_strip.cc:1078
-msgid "Click to Add/Edit Comments"
+#: mixer_strip.cc:424
+msgid "*comments*"
 msgstr ""
 
-#: mixer_strip.cc:393
-msgid "unknown strip width \"%1\" in XML GUI information"
-msgstr "άγνωστο εύρος διαδρόμου \"%1\" στις πληροφορίες του XML GUI"
+#: mixer_strip.cc:438
+#, fuzzy
+msgid "Rec"
+msgstr "Επανα-ανίχνευση"
 
-#: mixer_strip.cc:443 mixer_strip.cc:1062
-msgid "*Comments*"
+#: mixer_strip.cc:439
+msgid "M"
 msgstr ""
 
-#: mixer_strip.cc:457
-msgid "REC"
-msgstr "REC"
+#: mixer_strip.cc:440
+msgid "S"
+msgstr ""
 
-#: mixer_strip.cc:462 mixer_strip.cc:1072
+#: mixer_strip.cc:443 mixer_strip.cc:830
 #, fuzzy
 msgid "Cmt"
 msgstr "κοπή"
 
-#: mixer_strip.cc:464 mixer_strip.cc:1070
+#: mixer_strip.cc:445 mixer_strip.cc:828
 msgid "*Cmt*"
 msgstr ""
 
-#: mixer_strip.cc:503 mixer_strip.cc:562 redirect_box.cc:1004
+#: mixer_strip.cc:483 mixer_strip.cc:549 redirect_box.cc:1006
 msgid "Not connected to JACK - no I/O changes are possible"
 msgstr ""
 
-#: mixer_strip.cc:569
+#: mixer_strip.cc:560
 msgid "Track"
 msgstr "Κανάλι"
 
-#: mixer_strip.cc:593 mixer_strip.cc:609
+#: mixer_strip.cc:588 mixer_strip.cc:604
 msgid "could not register new ports required for that connection"
 msgstr ""
 
-#: mixer_strip.cc:755
-msgid "IN"
-msgstr "IN"
-
-#: mixer_strip.cc:776
-msgid "OUT"
-msgstr "OUT"
+#: mixer_strip.cc:747
+#, fuzzy
+msgid " Input"
+msgstr "# Είσοδοι"
 
-#: mixer_strip.cc:884
-msgid "aplay"
-msgstr "aplay"
+#: mixer_strip.cc:750
+#, fuzzy
+msgid "I"
+msgstr "IN"
 
-#: mixer_strip.cc:890
-msgid "awrite"
-msgstr "awrite"
+#: mixer_strip.cc:820
+msgid "*Comments*"
+msgstr ""
 
-#: mixer_strip.cc:1095
+#: mixer_strip.cc:859
 #, fuzzy
 msgid ": comment editor"
 msgstr "UI: Ο 'editor' δεν μπορεί να εγερθεί"
 
-#: mixer_strip.cc:1157 mixer_strip.cc:1178
-msgid "no group"
-msgstr "καμία ομάδα"
+#: mixer_strip.cc:953
+msgid "Grp"
+msgstr ""
 
-#: mixer_strip.cc:1181
+#: mixer_strip.cc:956
 msgid "~G"
 msgstr "~G"
 
-#: mixer_strip.cc:1229
+#: mixer_strip.cc:1004
 #, fuzzy
 msgid "Invert Polarity"
 msgstr "πολικότητα"
 
-#: mixer_ui.cc:84
+#: mixer_ui.cc:85
 msgid "Strips"
 msgstr "Διάδρομοι"
 
-#: mixer_ui.cc:108
-msgid "groupname"
-msgstr ""
-
-#: mixer_ui.cc:109 region_editor.cc:48 region_editor.cc:191
-#: region_editor.cc:225
-msgid "active"
-msgstr "ενεργό"
-
-#: mixer_ui.cc:110 region_editor.cc:49
-msgid "visible"
-msgstr "ορατό"
+#: mixer_ui.cc:110
+#, fuzzy
+msgid "Group"
+msgstr "Ανάμειξη ομάδων"
 
-#: mixer_ui.cc:207 mixer_ui.cc:366
+#: mixer_ui.cc:211 mixer_ui.cc:370
 msgid "ardour: mixer"
 msgstr "ardour: μίκτης"
 
-#: mixer_ui.cc:208
+#: mixer_ui.cc:212
 msgid "ardour_mixer"
 msgstr "ardour_μίκτης"
 
-#: mixer_ui.cc:342
+#: mixer_ui.cc:346
 msgid "ardour: mixer: "
 msgstr "ardour: μίκτης: "
 
-#: mixer_ui.cc:569
+#: mixer_ui.cc:573
 msgid "signal"
 msgstr "σήμα"
 
-#: mixer_ui.cc:719
+#: mixer_ui.cc:723
 msgid "track display list item for renamed strip not found!"
 msgstr "Λίστα αναδείξεως καναλιών για μετονομασμένο διάδρομο δεν ευρέθη!"
 
-#: option_editor.cc:75
+#: new_session_dialog.cc:39
+#, fuzzy
+msgid "New Session Name :"
+msgstr "Όνομα συνεδρίας:"
+
+#: new_session_dialog.cc:41
+msgid "Create Session Directory In :"
+msgstr ""
+
+#: new_session_dialog.cc:43
+#, fuzzy
+msgid "Use Session Template :"
+msgstr "Προσχέδιο συνεδρίας"
+
+#: new_session_dialog.cc:45
+#, fuzzy
+msgid "Channel Count"
+msgstr "Ακύρωση Εισαγωγής"
+
+#: new_session_dialog.cc:46
+#, fuzzy
+msgid "Create Monitor Bus"
+msgstr "Control Outs"
+
+#: new_session_dialog.cc:53
+#, fuzzy
+msgid "Create Master Bus"
+msgstr "χρήση των master outs"
+
+#: new_session_dialog.cc:55
+#, fuzzy
+msgid "Automatically Connect Inputs"
+msgstr "αυτόματη σύνδεση inputs καναλιών σε φυσικές θύρες"
+
+#: new_session_dialog.cc:56 new_session_dialog.cc:67
+#, fuzzy
+msgid "Port Limit"
+msgstr "Ξέχασέ το"
+
+#: new_session_dialog.cc:64
+#, fuzzy
+msgid "<b>Track/Bus Inputs</b>"
+msgstr "κανάλια/δίαυλοι"
+
+#: new_session_dialog.cc:66
+#, fuzzy
+msgid "Automatically Connect Outputs"
+msgstr "χειροκίνητη σύνδεση των outputs των καναλιών"
+
+#: new_session_dialog.cc:75
+msgid "Connect to Master Bus"
+msgstr ""
+
+#: new_session_dialog.cc:76
+msgid "Connect to Physical Outputs"
+msgstr ""
+
+#: new_session_dialog.cc:80
+#, fuzzy
+msgid "<b>Track/Bus Outputs</b>"
+msgstr "Έξοδοι"
+
+#: new_session_dialog.cc:83
+#, fuzzy
+msgid "Advanced Options"
+msgstr "Επεξ/στης Ρυθμίσεων"
+
+#: new_session_dialog.cc:91
+#, fuzzy
+msgid "Open Recent Session"
+msgstr "Άνοιγμα συνεδρίας"
+
+#: new_session_dialog.cc:127
+#, fuzzy
+msgid "Open Session File :"
+msgstr "Άνοιγμα συνεδρίας"
+
+#: new_session_dialog.cc:274
+#, fuzzy
+msgid "New Session"
+msgstr "Συνεδρία"
+
+#: new_session_dialog.cc:276
+#, fuzzy
+msgid "Open Session"
+msgstr "Άνοιγμα συνεδρίας"
+
+#: new_session_dialog.cc:281
+#, fuzzy
+msgid "ardour: session control"
+msgstr "ardour_νέα_συνεδρία"
+
+#: new_session_dialog.cc:310
+#, fuzzy
+msgid "select template"
+msgstr "Χωρίς προσχέδιο"
+
+#: new_session_dialog.cc:316
+#, fuzzy
+msgid "select session file"
+msgstr "επιλογή περιοχών"
+
+#: new_session_dialog.cc:325
+#, fuzzy
+msgid "select directory"
+msgstr "επιλογή περιοχών"
+
+#: option_editor.cc:76
 #, fuzzy
 msgid "SMPTE offset is negative"
 msgstr "SMPTE Έναρξη"
 
-#: option_editor.cc:101
+#: option_editor.cc:102
 msgid "ardour: options editor"
 msgstr "ardour: επεξεργαστής ρυθμίσεων"
 
-#: option_editor.cc:102
+#: option_editor.cc:103
 msgid "ardour_option_editor"
 msgstr "ardour_επεξεργαστής_ρυθμίσεων"
 
-#: option_editor.cc:126
+#: option_editor.cc:127
 msgid "Paths/Files"
 msgstr "Paths/Αρχεία"
 
-#: option_editor.cc:127
+#: option_editor.cc:128
 msgid "Kbd/Mouse"
 msgstr "Πλκτρ/Ποντίκι"
 
-#: option_editor.cc:130
+#: option_editor.cc:131
 msgid "Layers & Fades"
 msgstr ""
 
-#: option_editor.cc:134
+#: option_editor.cc:135
 msgid "MIDI"
 msgstr "MIDI"
 
-#: option_editor.cc:176
+#: option_editor.cc:177
 msgid "24 FPS"
 msgstr "24 FPS"
 
-#: option_editor.cc:178
+#: option_editor.cc:179
 msgid "25 FPS"
 msgstr "25 FPS"
 
-#: option_editor.cc:180
+#: option_editor.cc:181
 #, fuzzy
 msgid "30 FPS"
 msgstr "30 FPS drop"
 
-#: option_editor.cc:186
+#: option_editor.cc:187
 msgid "30 FPS drop"
 msgstr "30 FPS drop"
 
-#: option_editor.cc:243
+#: option_editor.cc:244
 msgid "session RAID path"
 msgstr "RAID path συνεδρίας"
 
-#: option_editor.cc:248
+#: option_editor.cc:249
 #, fuzzy
 msgid "Soundfile Search Paths"
 msgstr "Βιβλιοθήκη Soundfiles"
 
-#: option_editor.cc:253
+#: option_editor.cc:254
 #, fuzzy
 msgid "Paths"
 msgstr "Paths/Αρχεία"
 
-#: option_editor.cc:267 option_editor.cc:273 option_editor.cc:724
-#: option_editor.cc:751
+#: option_editor.cc:268 option_editor.cc:274 option_editor.cc:723
+#: option_editor.cc:750
 msgid "internal"
 msgstr "εσωτερικό"
 
-#: option_editor.cc:286
+#: option_editor.cc:287
 msgid "Short crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:298
+#: option_editor.cc:299
 msgid "Destructive crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:366
+#: option_editor.cc:367
 msgid "SMPTE Frames/second"
 msgstr "SMPTE Καρέ/δεύτερα"
 
-#: option_editor.cc:367
+#: option_editor.cc:368
 msgid "SMPTE Offset"
 msgstr "SMPTE Έναρξη"
 
-#: option_editor.cc:461 option_editor.cc:468 option_editor.cc:471
-#: option_editor.cc:617
+#: option_editor.cc:462 option_editor.cc:469 option_editor.cc:472
+#: option_editor.cc:618
 #, fuzzy
 msgid "online"
 msgstr "γραμμική"
@@ -5287,12 +5292,12 @@ msgstr "γραμμική"
 #. remember, we have to handle the i18n case where the relative
 #. lengths of the strings in language N is different than in english.
 #.
-#: option_editor.cc:468 option_editor.cc:469 option_editor.cc:614
+#: option_editor.cc:469 option_editor.cc:470 option_editor.cc:615
 #, fuzzy
 msgid "offline"
 msgstr "γραμμική"
 
-#: option_editor.cc:669
+#: option_editor.cc:670
 msgid "Choose Click"
 msgstr ""
 
@@ -5301,15 +5306,15 @@ msgstr ""
 msgid "Choose Click Emphasis"
 msgstr "Έμφαση χρήσεως όπως στο μετρονόμο"
 
-#: option_editor.cc:804
+#: option_editor.cc:803
 msgid "Click audio file"
 msgstr "Αρχείο ήχου Μετρονόμου"
 
-#: option_editor.cc:810
+#: option_editor.cc:809
 msgid "Click emphasis audiofile"
 msgstr "Αρχείο ήχου εμφάσεως Μετρονόμου"
 
-#: option_editor.cc:847
+#: option_editor.cc:846
 msgid ""
 "The auditioner is a dedicated mixer strip used\n"
 "for listening to specific regions outside the context\n"
@@ -5321,35 +5326,35 @@ msgstr ""
 "του γενικού μιξαρίσματος. Μπορεί να συνδεθεί σαν άλλος ένας\n"
 "διάδρομος μίξεως ή κανάλι."
 
-#: option_editor.cc:920
+#: option_editor.cc:919
 msgid "Edit using"
 msgstr "Επεξεργασία με"
 
-#: option_editor.cc:927 option_editor.cc:954
+#: option_editor.cc:926 option_editor.cc:953
 msgid "+ button"
 msgstr "+ κουμπί"
 
-#: option_editor.cc:947
+#: option_editor.cc:946
 msgid "Delete using"
 msgstr "Διαγραφή με"
 
-#: option_editor.cc:974
+#: option_editor.cc:973
 msgid "Ignore snap using"
 msgstr "Άγνοια έλξεως με"
 
-#: opts.cc:47
+#: opts.cc:46
 msgid "Usage: "
 msgstr "Χρήση: "
 
-#: opts.cc:48
+#: opts.cc:47
 msgid "  -v, --version                    Show version information\n"
 msgstr "  -v, --version                    Πληροφορίες εκδόσεως\n"
 
-#: opts.cc:49
+#: opts.cc:48
 msgid "  -h, --help                       Print this message\n"
 msgstr "  -h, --help                       Προβολή του παρόντος\n"
 
-#: opts.cc:50
+#: opts.cc:49
 msgid ""
 "  -b, --bindings                   Print all possible keyboard binding "
 "names\n"
@@ -5357,12 +5362,12 @@ msgstr ""
 "  -b, --bindings                   Προβολή όλων των πιθανών δεσμών "
 "πληκτρολογίου ονόματα\n"
 
-#: opts.cc:51
+#: opts.cc:50
 #, fuzzy
 msgid "  -n, --show-splash                Show splash screen\n"
 msgstr "  -n, --no-splash                  Μήν δείξεις την εισαγωγική εικόνα\n"
 
-#: opts.cc:52
+#: opts.cc:51
 #, fuzzy
 msgid ""
 "  -c, --name  name                 Use a specific jack client name, default "
@@ -5371,151 +5376,164 @@ msgstr ""
 "  -c, --jack-client-name  name     Χρήση συγκεκριμένου ονόματος για τον "
 "jack, το προκαθορισμένο είναι ardour\n"
 
-#: opts.cc:53
+#: opts.cc:52
 #, fuzzy
 msgid ""
 "  -N, --new session-name           Create a new session from the command "
 "line\n"
 msgstr "  [όνομα-συνεδρίας]                   Όνομα συνεδρίας προς φόρτωση\n"
 
-#: opts.cc:54
+#: opts.cc:53
 msgid ""
 "  -o, --use-hw-optimizations        Try to use h/w specific optimizations\n"
 msgstr ""
 
-#: opts.cc:56
+#: opts.cc:55
 #, fuzzy
 msgid "  -V, --novst                      Do not use VST support\n"
 msgstr "  -n, --no-splash                  Μήν δείξεις την εισαγωγική εικόνα\n"
 
-#: opts.cc:58
+#: opts.cc:57
 msgid "  [session-name]                   Name of session to load\n"
 msgstr "  [όνομα-συνεδρίας]                   Όνομα συνεδρίας προς φόρτωση\n"
 
-#: opts.cc:59
+#: opts.cc:58
 msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
 msgstr ""
 
-#: opts.cc:60
+#: opts.cc:59
 #, fuzzy
 msgid "  -g, --gtktheme                   Allow GTK to load a theme\n"
 msgstr "  -h, --help                       Προβολή του παρόντος\n"
 
-#: pan_automation_time_axis.cc:59
+#: pan_automation_time_axis.cc:60
 msgid "You can't graphically edit panning of more than stream"
 msgstr ""
 
-#: pan_automation_time_axis.cc:79
+#: pan_automation_time_axis.cc:80
 #, fuzzy
 msgid "add pan automation event"
 msgstr "πρόσθεση συμβάντος αυτοματισμού σε "
 
-#: panner2d.cc:588 panner_ui.cc:393 plugin_ui.cc:833
+#: panner2d.cc:589 panner_ui.cc:435 plugin_ui.cc:834
 #, fuzzy
 msgid "Bypass"
 msgstr "bypass"
 
-#: panner_ui.cc:57 panner_ui.cc:187
+#: panner_ui.cc:58 panner_ui.cc:225
 #, fuzzy
 msgid "link"
 msgstr "in"
 
+#: panner_ui.cc:69
+msgid "Pan automation mode"
+msgstr "Λειτουργία αυτοματισμού Pan"
+
 #: panner_ui.cc:70
+msgid "Pan automation type"
+msgstr "Τύπος αυτοματισμού Pan"
+
+#: panner_ui.cc:81
 msgid "panning link control"
 msgstr "έλεγχος panning link"
 
-#: panner_ui.cc:72
+#: panner_ui.cc:83
 msgid "panning link direction"
 msgstr "κατεύθυνση panning link"
 
-#: panner_ui.cc:197
+#: panner_ui.cc:235
 msgid "L"
 msgstr "L"
 
-#: panner_ui.cc:296
+#: panner_ui.cc:335
+#, fuzzy, c-format
+msgid "panner for channel %lu"
+msgstr "panner για το κανάλι %u"
+
+#: panner_ui.cc:337
 #, c-format
 msgid "panner for channel %u"
 msgstr "panner για το κανάλι %u"
 
-#: panner_ui.cc:403
+#: panner_ui.cc:445
 #, fuzzy
 msgid "Reset all"
 msgstr "Επιλογή όλων"
 
-#: playlist_selector.cc:51
+#: playlist_selector.cc:52
 #, fuzzy
 msgid "ardour: playlists"
 msgstr "ardour: plugins"
 
-#: playlist_selector.cc:58
+#: playlist_selector.cc:59
 msgid "Playlists grouped by track"
 msgstr ""
 
-#: playlist_selector.cc:97
+#: playlist_selector.cc:98
 #, fuzzy
 msgid "ardour: playlist for "
 msgstr "ardour: επεξεργαστής: "
 
-#: playlist_selector.cc:113
+#: playlist_selector.cc:114
 #, fuzzy
 msgid "Other tracks"
 msgstr "νύξη καναλιού"
 
-#: playlist_selector.cc:129
+#: playlist_selector.cc:130
 msgid "unassigned"
 msgstr ""
 
-#: plugin_selector.cc:42
+#: plugin_selector.cc:43
 msgid "ardour: plugins"
 msgstr "ardour: plugins"
 
-#: plugin_selector.cc:55
+#: plugin_selector.cc:56
 #, fuzzy
 msgid "Available LADSPA Plugins"
 msgstr "Διαθέσιμα LADSPA plugins"
 
-#: plugin_selector.cc:56
+#: plugin_selector.cc:57
 msgid "Type"
 msgstr "Τύπωση"
 
-#: plugin_selector.cc:57 plugin_selector.cc:80
+#: plugin_selector.cc:58 plugin_selector.cc:81
 msgid "# Inputs"
 msgstr "# Είσοδοι"
 
-#: plugin_selector.cc:58 plugin_selector.cc:81
+#: plugin_selector.cc:59 plugin_selector.cc:82
 msgid "# Outputs"
 msgstr "# Έξοδοι"
 
-#: plugin_selector.cc:67
+#: plugin_selector.cc:68
 msgid "Plugins to be Connected to Insert"
 msgstr ""
 
-#: plugin_selector.cc:79
+#: plugin_selector.cc:80
 #, fuzzy
 msgid "Available plugins"
 msgstr "Διαθέσιμα VST plugins"
 
-#: plugin_selector.cc:97
+#: plugin_selector.cc:98
 msgid "Add a plugin to the effect list"
 msgstr "Πρόσθεση plugin στη λίστα των εφφέ"
 
-#: plugin_selector.cc:99
+#: plugin_selector.cc:102
 msgid "Remove a plugin from the effect list"
 msgstr "Απαλοιφή plugin από τη λίστα των εφφέ"
 
-#: plugin_selector.cc:101
+#: plugin_selector.cc:104
 msgid "Update available plugins"
 msgstr "Ανανέωση διαθέσιμων plugins"
 
-#: plugin_selector.cc:123
+#: plugin_selector.cc:126
 msgid "LADSPA"
 msgstr "LADSPA"
 
-#: plugin_selector.cc:126
+#: plugin_selector.cc:129
 msgid "VST"
 msgstr "VST"
 
-#: plugin_ui.cc:83
+#: plugin_ui.cc:84
 msgid ""
 "unknown type of editor-supplying plugin (note: no VST support in this "
 "version of ardour)"
@@ -5523,50 +5541,51 @@ msgstr ""
 "άγνωστος τύπος προμηθευμένου plugin για τον editor(σημείωση: δεν υπάρχει "
 "υποστήριξη VST στην παρούσα έκδοση του ardour)"
 
-#: plugin_ui.cc:138
+#: plugin_ui.cc:139
 msgid "<span size=\"large\">Presets</span>"
 msgstr ""
 
-#: plugin_ui.cc:229
+#: plugin_ui.cc:230
 #, fuzzy
 msgid "Controls"
 msgstr "Control Outs"
 
-#: plugin_ui.cc:266
+#: plugin_ui.cc:267
 msgid "Plugin Editor: could not build control element for port %1"
 msgstr ""
 "Επεξεργαστής Plugin: δεν μπόρεσα να κτίσω στοιχείο ελέγχου για τη θύρα %1"
 
-#: plugin_ui.cc:357
-msgid "automation control"
+#: plugin_ui.cc:358
+#, fuzzy
+msgid "Automation control"
 msgstr "έλεγχος αυτοματισμού"
 
-#: plugin_ui.cc:853
+#: plugin_ui.cc:854
 msgid "Plugin preset %1 not found"
 msgstr "Προ-ρύθμιση plugin %1 δεν ευρέθη"
 
-#: plugin_ui.cc:863
+#: plugin_ui.cc:864
 #, fuzzy
 msgid "Name of New Preset:"
 msgstr "Όνομα για νέα σύνδεση:"
 
-#: redirect_automation_line.cc:53
+#: redirect_automation_line.cc:54
 msgid "redirect automation created for non-plugin"
 msgstr "προώθηση αυτοματισμού δημιουργημένου για non-plugin"
 
-#: redirect_automation_time_axis.cc:93
+#: redirect_automation_time_axis.cc:94
 msgid "add automation event to "
 msgstr "πρόσθεση συμβάντος αυτοματισμού σε "
 
-#: redirect_box.cc:222
+#: redirect_box.cc:223
 msgid "New send"
 msgstr "Nέο send"
 
-#: redirect_box.cc:223
+#: redirect_box.cc:224
 msgid "Show send controls"
 msgstr "Ανάδειξη ρυθμίσεων send"
 
-#: redirect_box.cc:377
+#: redirect_box.cc:383
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5584,7 +5603,7 @@ msgstr ""
 "Δεν έχει νόημα - έτσι χαραμίζετε\n"
 "μέρος του σήματος."
 
-#: redirect_box.cc:389
+#: redirect_box.cc:395
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5604,7 +5623,7 @@ msgstr ""
 "επι μέρους inputs. Μελλοντική έκδοση του Ardour θα\n"
 "υποστηρίζει αυτον τον τύπο διατάξεως."
 
-#: redirect_box.cc:402
+#: redirect_box.cc:408
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "\n"
@@ -5626,34 +5645,34 @@ msgstr ""
 "\n"
 "Ο Ardour δεν γνωρίζει τι να κάνει σε τέτοιες περιπτώσεις.\n"
 
-#: redirect_box.cc:493
+#: redirect_box.cc:495
 msgid "Pre-fader inserts, sends & plugins:"
 msgstr "Pre-fader εισαγωγές, sends & plugins:"
 
-#: redirect_box.cc:496
+#: redirect_box.cc:498
 msgid "Post-fader inserts, sends & plugins:"
 msgstr "Post-fader εισαγωγές, sends & plugins:"
 
-#: redirect_box.cc:642
+#: redirect_box.cc:644
 msgid ""
 "You cannot reorder this set of redirects\n"
 "in that way because the inputs and\n"
 "outputs do not work correctly."
 msgstr ""
 
-#: redirect_box.cc:747
+#: redirect_box.cc:749
 #, fuzzy
 msgid "rename redirect"
 msgstr "ardour: μετονομασία redirect"
 
-#: redirect_box.cc:824 redirect_box.cc:872
+#: redirect_box.cc:826 redirect_box.cc:874
 msgid ""
 "Copying the set of redirects on the clipboard failed,\n"
 "probably because the I/O configuration of the plugins\n"
 "could not match the configuration of this track."
 msgstr ""
 
-#: redirect_box.cc:894
+#: redirect_box.cc:896
 msgid ""
 "Do you really want to remove all redirects from this track?\n"
 "(this cannot be undone)"
@@ -5661,7 +5680,7 @@ msgstr ""
 "Στ'αλήθεια θέλετε να απαλοίψετε όλα τα redirects από το κανάλι?\n"
 "(δεν μπορεί να ανακληθεί)"
 
-#: redirect_box.cc:897
+#: redirect_box.cc:899
 msgid ""
 "Do you really want to remove all redirects from this bus?\n"
 "(this cannot be undone)"
@@ -5669,243 +5688,255 @@ msgstr ""
 "Στ'αλήθεια θέλετε να απαλοίψετε όλα τα redirects από το δίαυλο?\n"
 "(δεν μπορεί να ανακληθεί)"
 
-#: redirect_box.cc:902
+#: redirect_box.cc:904
 msgid "Yes, remove them all"
 msgstr "Ναι, απάλοιψέ τα όλα"
 
-#: redirect_box.cc:938
+#: redirect_box.cc:940
 msgid "ardour: %1"
 msgstr "ardour: %1"
 
-#: redirect_box.cc:980
+#: redirect_box.cc:982
 #, fuzzy
 msgid "ardour: %1: %2 (by %3)"
 msgstr "ardour: %1: %2"
 
 #. new stuff
-#: redirect_box.cc:1052
+#: redirect_box.cc:1054
 msgid "New Plugin ..."
 msgstr "Νέο Plugin ..."
 
-#: redirect_box.cc:1053
+#: redirect_box.cc:1055
 msgid "New Insert"
 msgstr "Νέο Προσθήκη"
 
-#: redirect_box.cc:1054
+#: redirect_box.cc:1056
 msgid "New Send ..."
 msgstr "Νέο Send ..."
 
-#: redirect_box.cc:1066
+#: redirect_box.cc:1068
 #, fuzzy
 msgid "Deselect All"
 msgstr "Επιλογή όλων"
 
-#: redirect_box.cc:1073
+#: redirect_box.cc:1075
 #, fuzzy
 msgid "Activate all"
 msgstr "Ενεργοποίηση όλων"
 
-#: redirect_box.cc:1074
+#: redirect_box.cc:1076
 #, fuzzy
 msgid "Deactivate all"
 msgstr "Απενεργοποίηση όλων"
 
-#: region_editor.cc:44
+#: region_editor.cc:45
 msgid "NAME:"
 msgstr "ΌΝΟΜΑ:"
 
-#: region_editor.cc:45
+#: region_editor.cc:46
 msgid "lock"
 msgstr "κλείδωμα"
 
-#: region_editor.cc:47
+#: region_editor.cc:48
 msgid "opaque"
 msgstr "αδιαφανής"
 
-#: region_editor.cc:52
+#: region_editor.cc:49 region_editor.cc:192 region_editor.cc:226
+msgid "active"
+msgstr "ενεργό"
+
+#: region_editor.cc:50
+msgid "visible"
+msgstr "ορατό"
+
+#: region_editor.cc:53
 msgid "Layer"
 msgstr "Στρώμα"
 
-#: region_editor.cc:60
+#: region_editor.cc:54
+msgid "play"
+msgstr "αναπαραγωγή"
+
+#: region_editor.cc:61
 msgid "ENVELOPE"
 msgstr "ΧΡΟΝΟΔΙΑΓΡΑΜΜΑ"
 
-#: region_editor.cc:106
+#: region_editor.cc:107
 msgid "mute this region"
 msgstr "σιγή παρούσας περιοχής"
 
-#: region_editor.cc:107
+#: region_editor.cc:108
 msgid "regions underneath this one cannot be heard"
 msgstr "περιοχές κάτωθι της παρούσας δεν μπορούν να ακουστούν"
 
-#: region_editor.cc:108
+#: region_editor.cc:109
 msgid "prevent any changes to this region"
 msgstr "αποτροπή αλλαγών σε αυτή την περιοχή"
 
-#: region_editor.cc:109
+#: region_editor.cc:110
 msgid "use the gain envelope during playback"
 msgstr "χρήση χρονοδιαγράμματος του gain κατά την αναπαρ/γή"
 
-#: region_editor.cc:110
+#: region_editor.cc:111
 msgid "show the gain envelope"
 msgstr "ανάδειξη χρονοδιαγράμματος του gain"
 
-#: region_editor.cc:111
+#: region_editor.cc:112
 msgid "use fade in curve during playback"
 msgstr "χρήση της καμπύλης fade in κατά την αναπαρ/γή"
 
-#: region_editor.cc:112
+#: region_editor.cc:113
 msgid "use fade out curve during playback"
 msgstr "χρήση της καμπύλης fade out κατά την αναπαρ/γή"
 
-#: region_editor.cc:113
+#: region_editor.cc:114
 msgid "audition this region"
 msgstr "ακρόαση της περιοχής"
 
-#: region_editor.cc:146
+#: region_editor.cc:147
 msgid "START:"
 msgstr "ΑΡΧΗ:"
 
-#: region_editor.cc:148
+#: region_editor.cc:149
 msgid "END:"
 msgstr "ΛΗΞΗ:"
 
-#: region_editor.cc:150
+#: region_editor.cc:151
 msgid "LENGTH:"
 msgstr "ΜΗΚΟΣ:"
 
-#: region_editor.cc:190
+#: region_editor.cc:191
 msgid "FADE IN"
 msgstr "FADE IN"
 
-#: region_editor.cc:192 region_editor.cc:226
+#: region_editor.cc:193 region_editor.cc:227
 msgid "msecs"
 msgstr "msecs"
 
-#: region_editor.cc:224
+#: region_editor.cc:225
 msgid "FADE OUT"
 msgstr "FADE OUT"
 
-#: region_editor.cc:264
+#: region_editor.cc:265
 msgid "ardour: region "
 msgstr "ardour: περιοχή "
 
-#: region_editor.cc:401
+#: region_editor.cc:402
 msgid "fade in edit"
 msgstr "επεξερ/σία fade in"
 
-#: region_editor.cc:413
+#: region_editor.cc:414
 msgid "fade out edit"
 msgstr "επεξερ/σία fade out"
 
-#: regionview.cc:1140
+#: regionview.cc:1146
 #, fuzzy
 msgid "add gain control point"
 msgstr "απαλοιφή σημείου ελέγχου"
 
-#: route_params_ui.cc:88
+#: route_params_ui.cc:89
 msgid "Tracks/Buses"
 msgstr "κανάλια/δίαυλοι"
 
-#: route_params_ui.cc:108
+#: route_params_ui.cc:109
 #, fuzzy
 msgid "Pre-fader Redirects"
 msgstr "Προ-Redirects"
 
-#: route_params_ui.cc:109
+#: route_params_ui.cc:110
 #, fuzzy
 msgid "Post-fader Redirects"
 msgstr "Μετα-Redirects"
 
-#: route_params_ui.cc:141
+#: route_params_ui.cc:144
 #, fuzzy
 msgid "ardour: track/bus inspector"
 msgstr "ardour: Εισαγωγή καναλιού/διαύλου"
 
-#: route_params_ui.cc:142
+#: route_params_ui.cc:145
 msgid "ardour_route_parameters"
 msgstr "ardour_παράμετροι_διαδρομών"
 
-#: route_params_ui.cc:199
+#: route_params_ui.cc:202
 msgid "route display list item for renamed route not found!"
 msgstr "Η λίστα ανάδειξης διαδρομών για μετονομασμένη διαδρομή δεν ευρέθη!"
 
-#: route_params_ui.cc:451
+#: route_params_ui.cc:453
 msgid "NO TRACK"
 msgstr "Κανένα κανάλι"
 
-#: route_params_ui.cc:693
+#: route_params_ui.cc:695
 #, fuzzy
 msgid "ardour: track/bus inspector: "
 msgstr "ardour: Εισαγωγή καναλιού/διαύλου"
 
-#: route_params_ui.cc:697
+#: route_params_ui.cc:699
 msgid "No Route Selected"
 msgstr "Δεν επελέχθη διαδρομή"
 
-#: route_params_ui.cc:698
+#: route_params_ui.cc:700
 #, fuzzy
 msgid "ardour: track/bus/inspector: no route selected"
 msgstr "ardour: παράμετροι διαδρομών: δεν επελέχθη διαδρομή"
 
 #. ctrl-shift-click applies change to all routes
-#: route_ui.cc:133
+#: route_ui.cc:134
 msgid "mute change"
 msgstr "αλλαγή σιγής"
 
 #. ctrl-shift-click applies change to all routes
 #. ctrl-alt-click: exclusively solo this track, not a toggle */
-#: route_ui.cc:208 route_ui.cc:218
+#: route_ui.cc:209 route_ui.cc:219
 msgid "solo change"
 msgstr "αλλαγή σόλο"
 
-#: route_ui.cc:281
+#: route_ui.cc:282
 msgid "rec-enable change"
 msgstr "αλλαγή rec-enable"
 
-#: route_ui.cc:472
+#: route_ui.cc:479
 #, fuzzy
 msgid "Solo-safe"
 msgstr "Σόλο"
 
-#: route_ui.cc:480 route_ui.cc:523
+#: route_ui.cc:487 route_ui.cc:530
 #, fuzzy
 msgid "MIDI Bind"
 msgstr "MIDI"
 
-#: route_ui.cc:494
+#: route_ui.cc:501
 msgid "Pre Fader"
 msgstr "Προ Fader"
 
-#: route_ui.cc:501
+#: route_ui.cc:508
 msgid "Post Fader"
 msgstr "Μετά Fader"
 
-#: route_ui.cc:508
+#: route_ui.cc:515
 msgid "Control Outs"
 msgstr "Control Outs"
 
-#: route_ui.cc:515
+#: route_ui.cc:522
 msgid "Main Outs"
 msgstr "Main Outs"
 
-#: route_ui.cc:552
+#: route_ui.cc:559
 msgid "mix group solo  change"
 msgstr "αλλαγή  solo ομάδας μίξεως"
 
-#: route_ui.cc:586
+#: route_ui.cc:593
 msgid "mix group mute change"
 msgstr "αλλαγή  mute ομάδας μίξεως"
 
-#: route_ui.cc:602
+#: route_ui.cc:609
 msgid "mix group rec-enable change"
 msgstr "αλλαγή  rec-enable ομάδας μίξεως"
 
-#: route_ui.cc:619 visual_time_axis.cc:236
+#: route_ui.cc:626 visual_time_axis.cc:237
 msgid "ardour: color selection"
 msgstr "ardour: επιλογή χρωμάτων"
 
-#: route_ui.cc:695
+#: route_ui.cc:702
 #, fuzzy
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
@@ -5917,7 +5948,7 @@ msgstr ""
 "Πιθανόν να χάσετε και τη λίστα που χρησιμοποιείται από το κανάλι.\n"
 "(δεν μπορεί να ανακληθεί)"
 
-#: route_ui.cc:697
+#: route_ui.cc:704
 msgid ""
 "Do you really want to remove bus \"%1\" ?\n"
 "(cannot be undone)"
@@ -5925,11 +5956,11 @@ msgstr ""
 "Στ'αλήθεια θέλετε να απαλοίψετε το κανάλι \"%1\" ?\n"
 "(δεν μπορεί να ανακληθεί)"
 
-#: route_ui.cc:701 visual_time_axis.cc:278
+#: route_ui.cc:708 visual_time_axis.cc:279
 msgid "Yes, remove it."
 msgstr "Ναι, απάλοιψε το."
 
-#: route_ui.cc:730
+#: route_ui.cc:737
 #, fuzzy
 msgid "New Name: "
 msgstr "νέο όνομα: "
@@ -5987,148 +6018,149 @@ msgstr "Δεν γινόταν να διαβαστεί το soundfile: "
 msgid "Name for Field"
 msgstr "Όνομα για περιοχή:"
 
-#: sfdb_ui.cc:333
+#: sfdb_ui.cc:335
 msgid "Split Channels"
 msgstr "Διαχωρισμός Καναλιών"
 
-#: sfdb_ui.cc:340
+#: sfdb_ui.cc:342
 msgid "Create a region for each channel"
 msgstr ""
 
-#: sfdb_ui.cc:342
+#: sfdb_ui.cc:344
 msgid "Embed"
 msgstr ""
 
-#: sfdb_ui.cc:344
+#: sfdb_ui.cc:346
 #, fuzzy
 msgid "Link to an external file"
 msgstr "Προσθήκη εξωτερικού αρχείου ήχου"
 
-#: sfdb_ui.cc:346
+#: sfdb_ui.cc:348
 msgid "Import"
 msgstr "Εισαγωγή"
 
-#: sfdb_ui.cc:348
+#: sfdb_ui.cc:350
 msgid "Copy a file to the session folder"
 msgstr ""
 
-#: sfdb_ui.cc:412
+#: sfdb_ui.cc:414
 #, fuzzy
 msgid "programming error: %1"
 msgstr "σφάλμα προγραμματισμού: "
 
-#: tempo_dialog.cc:17 tempo_dialog.cc:34
+#: tempo_dialog.cc:18 tempo_dialog.cc:35
 msgid "Beats per minute"
 msgstr "Κτύποι ανά λεπτό"
 
-#: tempo_dialog.cc:20 tempo_dialog.cc:37 tempo_dialog.cc:153
-#: tempo_dialog.cc:171
+#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:203
+#: tempo_dialog.cc:221
 msgid "Bar"
 msgstr "Μπάρα"
 
-#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:154
-#: tempo_dialog.cc:172
+#: tempo_dialog.cc:22 tempo_dialog.cc:39 tempo_dialog.cc:204
+#: tempo_dialog.cc:222
 msgid "Beat"
 msgstr "Κτύπος"
 
-#: tempo_dialog.cc:23 tempo_dialog.cc:40 tempo_dialog.cc:155
-#: tempo_dialog.cc:173
+#: tempo_dialog.cc:24 tempo_dialog.cc:41 tempo_dialog.cc:205
+#: tempo_dialog.cc:223
 msgid "Location"
 msgstr "Τοποθεσία"
 
-#: tempo_dialog.cc:149 tempo_dialog.cc:167
+#: tempo_dialog.cc:199 tempo_dialog.cc:217
 msgid "Meter denominator"
 msgstr "Παρονομαστής Μέτρου"
 
-#: tempo_dialog.cc:150 tempo_dialog.cc:168
+#: tempo_dialog.cc:200 tempo_dialog.cc:218
 msgid "Beats per bar"
 msgstr "Κτύποι ανά μπάρα"
 
-#: tempo_dialog.cc:186 tempo_dialog.cc:197
+#: tempo_dialog.cc:236 tempo_dialog.cc:247
 msgid "whole (1)"
 msgstr "ολόκληρο (1)"
 
-#: tempo_dialog.cc:187 tempo_dialog.cc:199
+#: tempo_dialog.cc:237 tempo_dialog.cc:249
 msgid "second (2)"
 msgstr "δεύτερο (2)"
 
-#: tempo_dialog.cc:188 tempo_dialog.cc:201
+#: tempo_dialog.cc:238 tempo_dialog.cc:251
 msgid "third (3)"
 msgstr "τρίτο (3)"
 
-#: tempo_dialog.cc:189 tempo_dialog.cc:203 tempo_dialog.cc:211
+#: tempo_dialog.cc:239 tempo_dialog.cc:253 tempo_dialog.cc:261
 msgid "quarter (4)"
 msgstr "τέταρτο (4)"
 
-#: tempo_dialog.cc:190 tempo_dialog.cc:205
+#: tempo_dialog.cc:240 tempo_dialog.cc:255
 msgid "eighth (8)"
 msgstr "όγδοο (8)"
 
-#: tempo_dialog.cc:191 tempo_dialog.cc:207
+#: tempo_dialog.cc:241 tempo_dialog.cc:257
 msgid "sixteenth (16)"
 msgstr "δέκατο έκτο (16)"
 
-#: tempo_dialog.cc:192 tempo_dialog.cc:209
+#: tempo_dialog.cc:242 tempo_dialog.cc:259
 msgid "thirty-second (32)"
 msgstr "τριακοστό-όγδοο (32)"
 
-#: tempo_dialog.cc:321
+#: tempo_dialog.cc:420
 msgid "garbaged note type entry (%1)"
 msgstr "είσοδος(type entry) άχρηστης σημειώσεως (%1)"
 
-#: tempo_dialog.cc:331
+#: tempo_dialog.cc:430
 msgid "incomprehensible note type entry (%1)"
 msgstr "είσοδος(type entry) ακατανόητης σημειώσεως (%1)"
 
-#: time_axis_view.cc:111
+#: time_axis_view.cc:112
 msgid "gTortnam"
 msgstr "gTortnam"
 
-#: time_axis_view.cc:548
+#: time_axis_view.cc:549
 msgid "Largest"
 msgstr "Μέγιστο"
 
-#: time_axis_view.cc:549
+#: time_axis_view.cc:550
 msgid "Large"
 msgstr "Μεγάλο"
 
-#: time_axis_view.cc:550
+#: time_axis_view.cc:551
 msgid "Larger"
 msgstr "Μεγαλύτερο"
 
-#: time_axis_view.cc:552
+#: time_axis_view.cc:553
 msgid "Smaller"
 msgstr "Μικρότερο"
 
-#: time_axis_view.cc:553
+#: time_axis_view.cc:554
 msgid "Small"
 msgstr "Μικρό"
 
-#: time_axis_view.cc:869
+#: time_axis_view.cc:870
 msgid "unknown track height name \"%1\" in XML GUI information"
 msgstr "Άγνωστο όνομα ύψους καναλιού\"%1\" στις XML GUI πληροφορίες"
 
-#: time_axis_view_item.cc:71
+#. first constructed item sets up font info
+#: time_axis_view_item.cc:79
 msgid "TimeAxisViewItemName"
 msgstr ""
 
-#: time_axis_view_item.cc:271
+#: time_axis_view_item.cc:298
 msgid "new duration %1 frames is out of bounds for %2"
 msgstr "νέα διάρκεια %1 καρέ είναι εκτός ορίων για %2"
 
-#: time_selection.cc:40
+#: time_selection.cc:41
 msgid "programming error: request for non-existent audio range (%1)!"
 msgstr "Σφάλμα προγραμματισμού: request για μη-υπάρχον ηχητικό διάστημα (%1)!"
 
-#: utils.cc:106 utils.cc:149
+#: utils.cc:107 utils.cc:150
 msgid "bad XPM header %1"
 msgstr "εσφαλμένος XPM header %1"
 
-#: utils.cc:331
+#: utils.cc:332
 msgid "missing RGBA style for \"%1\""
 msgstr ""
 
-#: visual_time_axis.cc:275
+#: visual_time_axis.cc:276
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
 "(cannot be undone)"
@@ -6136,14 +6168,87 @@ msgstr ""
 "Στ'αλήθεια θέλετε να απαλοίψετε το κανάλι \"%1\" ?\n"
 "(δεν μπορεί να ανακληθεί)"
 
-#: visual_time_axis.cc:324
+#: visual_time_axis.cc:325
 msgid "new name: "
 msgstr "νέο όνομα: "
 
-#: visual_time_axis.cc:335
+#: visual_time_axis.cc:336
 msgid "A track already exists with that name"
 msgstr "Κανάλι με αυτό το όνομα ήδη υπάρχει"
 
+#~ msgid "set selected trackview"
+#~ msgstr "θέση επιλεγμένης οπτικής καναλιού"
+
+#, fuzzy
+#~ msgid "set selected control point"
+#~ msgstr "απαλοιφή σημείου ελέγχου"
+
+#~ msgid "set selected regionview"
+#~ msgstr "θέση επιλεγμένης οπτικής περιοχής"
+
+#~ msgid "Start a new session\n"
+#~ msgstr "Αρχή καινούριας συνεδρίας\n"
+
+#~ msgid "via Session menu"
+#~ msgstr "μέσω του μενού Συνεδρίας"
+
+#~ msgid "dbFS"
+#~ msgstr "dbFS"
+
+#, fuzzy
+#~ msgid "<b>Advanced</b>"
+#~ msgstr "Προχωρημένα..."
+
+#, fuzzy
+#~ msgid "Select a File"
+#~ msgstr "Επιλογή όλων"
+
+#, fuzzy
+#~ msgid "Track/Bus connection options"
+#~ msgstr "κανάλια/δίαυλοι"
+
+#~ msgid "RECORD"
+#~ msgstr "ΕΓΓΡΑΦΗ"
+
+#~ msgid "INPUT"
+#~ msgstr "ΕΙΣΟΔΟΣ"
+
+#~ msgid "OUTPUT"
+#~ msgstr "ΕΞΟΔΟΣ"
+
+#~ msgid "Gain automation mode"
+#~ msgstr "Λειτουργία αυτοματισμού Gain"
+
+#~ msgid "Gain automation type"
+#~ msgstr "Τύπος αυτοματισμού Gain"
+
+#~ msgid "trim"
+#~ msgstr "ισοστάθμιση"
+
+#~ msgid "gain automation mode"
+#~ msgstr "Λειτουργία αυτοματισμού gain"
+
+#~ msgid "gain automation state"
+#~ msgstr "Κατάσταση αυτοματισμού gain"
+
+#~ msgid "pan automation state"
+#~ msgstr "Κατάσταση αυτοματισμού pan"
+
+#~ msgid "REC"
+#~ msgstr "REC"
+
+#~ msgid "OUT"
+#~ msgstr "OUT"
+
+#~ msgid "aplay"
+#~ msgstr "aplay"
+
+#~ msgid "awrite"
+#~ msgstr "awrite"
+
+#~ msgid "no group"
+#~ msgstr "καμία ομάδα"
+
 #, fuzzy
 #~ msgid "normal"
 #~ msgstr "Κανονικό"
@@ -6480,9 +6585,6 @@ msgstr "Κανάλι με αυτό το όνομα ήδη υπάρχει"
 #~ msgid "AND"
 #~ msgstr "AND"
 
-#~ msgid "OR"
-#~ msgstr "OR"
-
 #~ msgid "ardour: locate soundfiles"
 #~ msgstr "ardour: εύρεση soundfiles"
 
@@ -6498,9 +6600,6 @@ msgstr "Κανάλι με αυτό το όνομα ήδη υπάρχει"
 #~ msgid "Ardour: Search Results"
 #~ msgstr "Ardour: Αποτελέσματα Αναζητήσεως"
 
-#~ msgid "Mix Groups"
-#~ msgstr "Ανάμειξη ομάδων"
-
 #~ msgid "Hide All AudioTrack MixerStrips"
 #~ msgstr "Απόκρυψη όλων των ΔιαδρόμωνΜίξεως των καναλιών"
 
@@ -6513,9 +6612,6 @@ msgstr "Κανάλι με αυτό το όνομα ήδη υπάρχει"
 #~ msgid "Name for new mix group"
 #~ msgstr "Όνομα για νέα ομάδα μίξεως"
 
-#~ msgid "Session name:"
-#~ msgstr "Όνομα συνεδρίας:"
-
 #~ msgid "Create"
 #~ msgstr "Δημιουργία"
 
@@ -6553,18 +6649,12 @@ msgstr "Κανάλι με αυτό το όνομα ήδη υπάρχει"
 #~ "Αν επιθυμείτε να θέσετε διαφορετικό 'ρυθμό'\n"
 #~ "παρακαλώ βγείτε και επανεκκινήστε τον JACK"
 
-#~ msgid "Session template"
-#~ msgstr "Προσχέδιο συνεδρίας"
-
 #~ msgid "blank"
 #~ msgstr "κενό"
 
 #~ msgid "No template - create tracks/busses manually"
 #~ msgstr "Χωρίς προσχέδιο - δημιουργία καναλιών/διαύλων χειροκίνητα"
 
-#~ msgid "No template"
-#~ msgstr "Χωρίς προσχέδιο"
-
 #~ msgid "Slave to MTC"
 #~ msgstr "Slave στον MTC"
 
@@ -6599,9 +6689,6 @@ msgstr "Κανάλι με αυτό το όνομα ήδη υπάρχει"
 #~ msgid "Native Format"
 #~ msgstr "Εντόπιο Format"
 
-#~ msgid "Use as click"
-#~ msgstr "Χρήση όπως στο μετρονόμο"
-
 #~ msgid "--unknown--"
 #~ msgstr "--άγνωστο--"
 
index 4c3e8b99bbd20d900d7a4deeb6de5a95759b8500..10468d6ab824c36fb9dd072d7ee6b4a34d4f1503 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ardour 0.688.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 18:09-0400\n"
 "PO-Revision-Date: 2004-01-21 12:45+0100\n"
 "Last-Translator: Alex Krohn <alexkrohn@fastmail.fm>\n"
 "Language-Team: Spanish\n"
@@ -15,143 +15,143 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: about.cc:119
+#: about.cc:120
 msgid "Paul Davis"
 msgstr ""
 
-#: about.cc:120
+#: about.cc:121
 #, fuzzy
 msgid "Jesse Chappell"
 msgstr "resetear"
 
-#: about.cc:121
+#: about.cc:122
 msgid "Taybin Rutkin"
 msgstr ""
 
-#: about.cc:122
+#: about.cc:123
 msgid "Marcus Andersson"
 msgstr ""
 
-#: about.cc:123
+#: about.cc:124
 msgid "Jeremy Hall"
 msgstr ""
 
-#: about.cc:124
+#: about.cc:125
 msgid "Steve Harris"
 msgstr ""
 
-#: about.cc:125
+#: about.cc:126
 msgid "Tim Mayberry"
 msgstr ""
 
-#: about.cc:126
+#: about.cc:127
 msgid "Mark Stewart"
 msgstr ""
 
-#: about.cc:127
+#: about.cc:128
 msgid "Sam Chessman"
 msgstr ""
 
-#: about.cc:128
+#: about.cc:129
 msgid "Jack O'Quin"
 msgstr ""
 
-#: about.cc:129
+#: about.cc:130
 msgid "Matt Krai"
 msgstr ""
 
-#: about.cc:130
+#: about.cc:131
 msgid "Ben Bell"
 msgstr ""
 
-#: about.cc:131
+#: about.cc:132
 msgid "Gerard van Dongen"
 msgstr ""
 
-#: about.cc:132
+#: about.cc:133
 msgid "Thomas Charbonnel"
 msgstr ""
 
-#: about.cc:133
+#: about.cc:134
 msgid "Nick Mainsbridge"
 msgstr ""
 
-#: about.cc:134
+#: about.cc:135
 msgid "Colin Law"
 msgstr ""
 
-#: about.cc:135
+#: about.cc:136
 msgid "Sampo Savolainen"
 msgstr ""
 
-#: about.cc:136
+#: about.cc:137
 msgid "Joshua Leach"
 msgstr ""
 
-#: about.cc:137
+#: about.cc:138
 msgid "Rob Holland"
 msgstr ""
 
-#: about.cc:138
+#: about.cc:139
 msgid "Per Sigmond"
 msgstr ""
 
-#: about.cc:139
+#: about.cc:140
 msgid "Doug Mclain"
 msgstr ""
 
-#: about.cc:140
+#: about.cc:141
 msgid "Petter Sundlöf"
 msgstr ""
 
-#: about.cc:145
+#: about.cc:146
 msgid ""
 "French:\n"
 "\tAlain Fréhel <alain.frehel@free.fr>\n"
 msgstr ""
 
-#: about.cc:146
+#: about.cc:147
 msgid ""
 "German:\n"
 "\tKarsten Petersen <kapet@kapet.de>\n"
 msgstr ""
 
-#: about.cc:147
+#: about.cc:148
 msgid ""
 "Italian:\n"
 "\tFilippo Pappalardo <filippo@email.it>\n"
 msgstr ""
 
-#: about.cc:148
+#: about.cc:149
 msgid ""
 "Portuguese:\n"
 "\tRui Nuno Capela <rncbc@rncbc.org>\n"
 msgstr ""
 
-#: about.cc:149
+#: about.cc:150
 msgid ""
 "Brazilian Portuguese:\n"
 "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
 "\tChris Ross <chris@tebibyte.org>\n"
 msgstr ""
 
-#: about.cc:151
+#: about.cc:152
 msgid ""
 "Spanish:\n"
 "\t Alex Krohn <alexkrohn@fastmail.fm>\n"
 msgstr ""
 
-#: about.cc:152
+#: about.cc:153
 msgid ""
 "Russian:\n"
 "\t Igor Blinov <pitstop@nm.ru>\n"
 msgstr ""
 
-#: about.cc:180
+#: about.cc:181
 msgid "Copyright (C) 1999-2005 Paul Davis\n"
 msgstr ""
 
-#: about.cc:181
+#: about.cc:182
 #, fuzzy
 msgid ""
 "Ardour comes with ABSOLUTELY NO WARRANTY\n"
@@ -163,58 +163,58 @@ msgstr ""
 "bajo ciertas condiciones;lea el archivo COPYING(en ingl�)\n"
 "para m� detalles\n"
 
-#: about.cc:187
+#: about.cc:188
 msgid ""
 "%1\n"
 "(built with ardour/gtk %2.%3.%4 libardour: %5.%6.%7)"
 msgstr ""
 
-#: actions.cc:260
+#: actions.cc:261
 msgid "programmer error: %1 %2"
 msgstr ""
 
-#: add_route_dialog.cc:61
+#: add_route_dialog.cc:62
 msgid "ardour: add track/bus"
 msgstr "ardour: agregar Pistas/bus"
 
 #. path = "1"
-#: add_route_dialog.cc:62 editor_route_list.cc:72
+#: add_route_dialog.cc:63 editor_route_list.cc:73
 msgid "Tracks"
 msgstr "Pistas"
 
 #. path = "0"
-#: add_route_dialog.cc:63 editor_route_list.cc:69
+#: add_route_dialog.cc:64 editor_route_list.cc:70
 msgid "Busses"
 msgstr "Buses"
 
-#: add_route_dialog.cc:95 plugin_ui.cc:832
+#: add_route_dialog.cc:96 plugin_ui.cc:833
 msgid "Add"
 msgstr "Agregar"
 
-#: add_route_dialog.cc:113
+#: add_route_dialog.cc:114
 msgid "Name (template)"
 msgstr "Nombre (esquema)"
 
-#: add_route_dialog.cc:119
+#: add_route_dialog.cc:120
 #, fuzzy
 msgid "Channel Configuration"
 msgstr "Cancelar importacin"
 
-#: add_route_dialog.cc:176 editor.cc:131 editor.cc:3660 time_axis_view.cc:551
+#: add_route_dialog.cc:177 editor.cc:134 editor.cc:3688 time_axis_view.cc:552
 msgid "Normal"
 msgstr "Normal"
 
-#: add_route_dialog.cc:178
+#: add_route_dialog.cc:179
 #, fuzzy
 msgid "Tape"
 msgstr "Inicio"
 
-#: add_route_dialog.cc:195
+#: add_route_dialog.cc:196
 #, fuzzy
 msgid "Mono"
 msgstr "mono"
 
-#: add_route_dialog.cc:197
+#: add_route_dialog.cc:198
 #, fuzzy
 msgid "Stereo"
 msgstr "est�eo"
@@ -292,27 +292,11 @@ msgstr "AUDITANDO"
 msgid "SOLO"
 msgstr ""
 
-#: ardour_ui.cc:207
-msgid ""
-"You cannot record-enable\n"
-"track %1\n"
-"because it has no input connections.\n"
-"You would be wasting space recording silence."
-msgstr ""
-
-#: ardour_ui.cc:236
-msgid "no vertical meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:243
-msgid "no horizontal meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:410
+#: ardour_ui.cc:375
 msgid "quit"
 msgstr "salir"
 
-#: ardour_ui.cc:419
+#: ardour_ui.cc:384
 msgid ""
 "Ardour was unable to save your session.\n"
 "\n"
@@ -321,33 +305,33 @@ msgid ""
 "\"Just quit\" option."
 msgstr ""
 
-#: ardour_ui.cc:438
+#: ardour_ui.cc:403
 msgid "ardour: save session?"
 msgstr "ardour: guardar sesin?"
 
-#: ardour_ui.cc:445
+#: ardour_ui.cc:410
 msgid "Don't %1"
 msgstr "No %1"
 
-#: ardour_ui.cc:447
+#: ardour_ui.cc:412
 msgid "Just %1"
 msgstr "Slo %1"
 
-#: ardour_ui.cc:449
+#: ardour_ui.cc:414
 msgid "Save and %1"
 msgstr "Guardar y %1"
 
-#: ardour_ui.cc:461
+#: ardour_ui.cc:426
 #, fuzzy
 msgid "session"
 msgstr "Sesin"
 
-#: ardour_ui.cc:463
+#: ardour_ui.cc:428
 #, fuzzy
 msgid "snapshot"
 msgstr "Capturar instant�ea de sesin"
 
-#: ardour_ui.cc:465
+#: ardour_ui.cc:430
 #, fuzzy
 msgid ""
 "The %1\"%2\"\n"
@@ -366,82 +350,82 @@ msgstr ""
 "\n"
 "Qu�desea hacer?"
 
-#: ardour_ui.cc:479
+#: ardour_ui.cc:444
 msgid "Prompter"
 msgstr ""
 
-#: ardour_ui.cc:538
+#: ardour_ui.cc:503
 #, fuzzy, c-format
 msgid "disconnected"
 msgstr "Desconectar"
 
-#: ardour_ui.cc:545
+#: ardour_ui.cc:510
 #, fuzzy, c-format
 msgid "SR: %.1f kHz / %4.1f msecs"
 msgstr "SR: %.1f kHz"
 
-#: ardour_ui.cc:549
+#: ardour_ui.cc:514
 #, c-format
 msgid "SR: %u kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:562
+#: ardour_ui.cc:527
 #, fuzzy, c-format
 msgid "DSP Load: %.1f%%"
 msgstr "CPU usada: %.1f%%"
 
-#: ardour_ui.cc:572
+#: ardour_ui.cc:537
 #, fuzzy, c-format
 msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
 msgstr "Buffers p:%5.0f%% c:%5.0f%%"
 
-#: ardour_ui.cc:599
+#: ardour_ui.cc:564
 msgid "space: 24hrs+"
 msgstr "disponible: 24hrs+"
 
-#: ardour_ui.cc:629
+#: ardour_ui.cc:594
 #, c-format
 msgid "space: %02dh:%02dm:%02ds"
 msgstr "disponible: %02dh:%02dm:%02ds"
 
-#: ardour_ui.cc:668
+#: ardour_ui.cc:633
 msgid "programming error: impossible control method"
 msgstr ""
 
 #
-#: ardour_ui.cc:776 new_session_dialog.cc:89
+#: ardour_ui.cc:741 new_session_dialog.cc:294
 #, fuzzy
 msgid "Recent Sessions"
 msgstr "Abrir sesin"
 
 #
 #. ardour sessions are folders
-#: ardour_ui.cc:867
+#: ardour_ui.cc:834
 msgid "open session"
 msgstr "Abrir sesin"
 
-#: ardour_ui.cc:873
+#: ardour_ui.cc:840
 #, fuzzy
 msgid "Ardour sessions"
 msgstr "ardour: guardar sesin?"
 
-#: ardour_ui.cc:906
+#: ardour_ui.cc:873
 msgid "Patience is a virtue.\n"
 msgstr "La paciencia es una virtud.\n"
 
-#: ardour_ui.cc:915
+#: ardour_ui.cc:882
 msgid "You cannot add a track without a session already loaded."
 msgstr "No puede agregar pistas hasta que haya creado o abierto una sesin."
 
-#: ardour_ui.cc:922
+#: ardour_ui.cc:889
 msgid "could not create new audio track"
 msgstr "no se pudo crear la nueva pista"
 
-#: ardour_ui.cc:926
+#: ardour_ui.cc:893
 msgid "could not create new audio bus"
 msgstr "no se pudo crear el nuevo bus"
 
-#: ardour_ui.cc:945
+#: ardour_ui.cc:912
 msgid ""
 "There are insufficient JACK ports available\n"
 "to create a new track or bus.\n"
@@ -449,14 +433,14 @@ msgid ""
 "restart JACK with more ports."
 msgstr ""
 
-#: ardour_ui.cc:1069
+#: ardour_ui.cc:1036
 msgid ""
 "Please create 1 or more track\n"
 "before trying to record.\n"
 "Check the Session menu."
 msgstr ""
 
-#: ardour_ui.cc:1298
+#: ardour_ui.cc:1265
 #, fuzzy
 msgid ""
 "JACK has either been shutdown or it\n"
@@ -470,57 +454,55 @@ msgstr ""
 "Usted puede guardar su sesin ahora\n"
 "sin perder los cambios hechos.Luego,reinicie a Ardour y a Jackd."
 
-#: ardour_ui.cc:1315
+#: ardour_ui.cc:1282
 msgid "Unable to create all required ports"
 msgstr ""
 
-#: ardour_ui.cc:1323
+#: ardour_ui.cc:1290
 #, fuzzy
 msgid "Unable to start the session running"
 msgstr "Ir al inicio de la sesin"
 
-#: ardour_ui.cc:1459
+#: ardour_ui.cc:1426
 msgid "No Stream"
 msgstr "Sin Flujo"
 
-#: ardour_ui.cc:1486 ardour_ui.cc:1505
+#: ardour_ui.cc:1453 ardour_ui.cc:1472
 msgid "none"
 msgstr "ninguno"
 
-#: ardour_ui.cc:1495 ardour_ui.cc:1514 automation_time_axis.cc:183
-#: automation_time_axis.cc:212 automation_time_axis.cc:459 mixer_strip.cc:174
-#: mixer_strip.cc:186 mixer_strip.cc:881 plugin_ui.cc:391 plugin_ui.cc:634
+#: ardour_ui.cc:1462 ardour_ui.cc:1481
 msgid "off"
 msgstr "off"
 
-#: ardour_ui.cc:1538
+#: ardour_ui.cc:1505
 #, fuzzy
 msgid "Name of New Snapshot"
 msgstr "Nombre a captura de sesin"
 
-#: ardour_ui.cc:1684
+#: ardour_ui.cc:1651
 msgid "Name for mix template:"
 msgstr "Nombre a esquema de mixer"
 
-#: ardour_ui.cc:1685
+#: ardour_ui.cc:1652
 msgid "-template"
 msgstr "-esquema"
 
-#: ardour_ui.cc:1836
+#: ardour_ui.cc:1809
 msgid ""
 "You do not have write access to this session.\n"
 "This prevents the session from being loaded."
 msgstr ""
 
-#: ardour_ui.cc:1849 ardour_ui.cc:1904
+#: ardour_ui.cc:1822 ardour_ui.cc:1877
 msgid "Session \"%1 (snapshot %2)\" did not load successfully"
 msgstr "No se puede cargar la sesin \"%1 (captura %2)\" "
 
-#: ardour_ui.cc:1960
+#: ardour_ui.cc:1933
 msgid "No audio files were ready for cleanup"
 msgstr ""
 
-#: ardour_ui.cc:1964
+#: ardour_ui.cc:1937
 msgid ""
 "If this seems suprising, \n"
 "check for any existing snapshots.\n"
@@ -528,23 +510,23 @@ msgid ""
 "require some unused files to continue to exist."
 msgstr ""
 
-#: ardour_ui.cc:1973
+#: ardour_ui.cc:1946
 msgid "ardour: cleanup"
 msgstr "ardour: limpiar"
 
-#: ardour_ui.cc:2009 ardour_ui.cc:2015
+#: ardour_ui.cc:1982 ardour_ui.cc:1988
 msgid "files were"
 msgstr ""
 
-#: ardour_ui.cc:2011 ardour_ui.cc:2017
+#: ardour_ui.cc:1984 ardour_ui.cc:1990
 msgid "file was"
 msgstr ""
 
-#: ardour_ui.cc:2058
+#: ardour_ui.cc:2031
 msgid "Are you sure you want to cleanup?"
 msgstr ""
 
-#: ardour_ui.cc:2063
+#: ardour_ui.cc:2036
 msgid ""
 "Cleanup is a destructive operation.\n"
 "ALL undo/redo information will be lost if you cleanup.\n"
@@ -552,26 +534,26 @@ msgid ""
 "location."
 msgstr ""
 
-#: ardour_ui.cc:2069
+#: ardour_ui.cc:2042
 #, fuzzy
 msgid "Clean Up"
 msgstr "Limpiar"
 
-#: ardour_ui.cc:2072
+#: ardour_ui.cc:2045
 #, fuzzy
 msgid "CleanupDialog"
 msgstr "Limpiar"
 
-#: ardour_ui.cc:2073
+#: ardour_ui.cc:2046
 #, fuzzy
 msgid "ardour_cleanup"
 msgstr "ardour: limpiar"
 
-#: ardour_ui.cc:2092
+#: ardour_ui.cc:2065
 msgid "cleaned files"
 msgstr "archivos limpios"
 
-#: ardour_ui.cc:2093
+#: ardour_ui.cc:2066
 #, fuzzy
 msgid ""
 "The following %1 %2 not in use and \n"
@@ -586,12 +568,12 @@ msgstr ""
 "Cuando vuelva a vaciar la papelera\n"
 "se liberar�%2 megabytes de espacio en disco \n"
 
-#: ardour_ui.cc:2118
+#: ardour_ui.cc:2091
 #, fuzzy
 msgid "deleted file"
 msgstr "archivos eliminados"
 
-#: ardour_ui.cc:2119
+#: ardour_ui.cc:2092
 #, fuzzy
 msgid ""
 "The following %1 %2 deleted from\n"
@@ -601,11 +583,11 @@ msgstr ""
 "Los siguientes %1 archivos fueron eliminados, liberando %2 megabytes de "
 "espacio"
 
-#: ardour_ui.cc:2242
+#: ardour_ui.cc:2215
 msgid "Recording was stopped because your system could not keep up."
 msgstr "Se detuvo la grabacin porque el sistema se sobrecarg"
 
-#: ardour_ui.cc:2265
+#: ardour_ui.cc:2238
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -614,7 +596,7 @@ msgid ""
 "quickly enough to keep up with recording.\n"
 msgstr ""
 
-#: ardour_ui.cc:2284
+#: ardour_ui.cc:2257
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -623,7 +605,7 @@ msgid ""
 "quickly enough to keep up with playback.\n"
 msgstr ""
 
-#: ardour_ui.cc:2310
+#: ardour_ui.cc:2283
 msgid ""
 "This session appears to have been in\n"
 "middle of recording when ardour or\n"
@@ -634,372 +616,372 @@ msgid ""
 "what you would like to do.\n"
 msgstr ""
 
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2293
 msgid "Recover from crash"
 msgstr ""
 
-#: ardour_ui.cc:2321
+#: ardour_ui.cc:2294
 msgid "Ignore crash data"
 msgstr ""
 
-#: ardour_ui.cc:2339
+#: ardour_ui.cc:2312
 #, fuzzy
 msgid "Could not disconnect from JACK"
 msgstr "No se pudo conectar a JACK con el nombre \"%1\""
 
-#: ardour_ui.cc:2352
+#: ardour_ui.cc:2325
 #, fuzzy
 msgid "Could not reconnect to JACK"
 msgstr "No se pudo conectar a JACK con el nombre \"%1\""
 
-#: ardour_ui2.cc:59
+#: ardour_ui2.cc:60
 msgid "UI: cannot setup editor"
 msgstr "no se pudo iniciar el editor"
 
-#: ardour_ui2.cc:64
+#: ardour_ui2.cc:65
 msgid "UI: cannot setup mixer"
 msgstr "no se pudo iniciar el mixer"
 
-#: ardour_ui2.cc:90
+#: ardour_ui2.cc:91
 msgid "MMC + Local"
 msgstr ""
 
-#: ardour_ui2.cc:91
+#: ardour_ui2.cc:92
 msgid "MMC"
 msgstr ""
 
-#: ardour_ui2.cc:92
+#: ardour_ui2.cc:93
 msgid "Local"
 msgstr ""
 
-#: ardour_ui2.cc:109
+#: ardour_ui2.cc:110
 msgid "MMC ID"
 msgstr ""
 
-#: ardour_ui2.cc:290
+#: ardour_ui2.cc:291
 msgid "Play from playhead"
 msgstr "Reproduzir a partir del in�io"
 
-#: ardour_ui2.cc:291
+#: ardour_ui2.cc:292
 msgid "Stop playback"
 msgstr "Detener la reproduccion"
 
-#: ardour_ui2.cc:292
+#: ardour_ui2.cc:293
 #, fuzzy
 msgid "Play range/selection"
 msgstr "Reproducir seleccin"
 
-#: ardour_ui2.cc:293
+#: ardour_ui2.cc:294
 msgid "Go to start of session"
 msgstr "Ir al inicio de la sesin"
 
-#: ardour_ui2.cc:294
+#: ardour_ui2.cc:295
 msgid "Go to end of session"
 msgstr "Ir al final de la sesin"
 
-#: ardour_ui2.cc:295
+#: ardour_ui2.cc:296
 #, fuzzy
 msgid "Play loop range"
 msgstr "Reproducir el intervalo cont�uamente"
 
-#: ardour_ui2.cc:296
+#: ardour_ui2.cc:297
 msgid "Return to last playback start when stopped"
 msgstr "Al detenerse, volver a donde inici la reproduccin"
 
-#: ardour_ui2.cc:297
+#: ardour_ui2.cc:298
 msgid "Start playback after any locate"
 msgstr ""
 "Reproducir inmedi�amente despu� de relocalizar la barra de reproduccin"
 
-#: ardour_ui2.cc:298
+#: ardour_ui2.cc:299
 msgid "Be sensible about input monitoring"
 msgstr "Monitorizacin sensible de entradas"
 
-#: ardour_ui2.cc:299
+#: ardour_ui2.cc:300
 msgid "Start recording at auto-punch start"
 msgstr "Iniciar grabacin en el punto auto-punch start(inicio)"
 
-#: ardour_ui2.cc:300
+#: ardour_ui2.cc:301
 msgid "Stop recording at auto-punch end"
 msgstr "Detener grabacin en el punto auto-punch end(final)"
 
-#: ardour_ui2.cc:301
+#: ardour_ui2.cc:302
 msgid "Enable/Disable audio click"
 msgstr "Habilitar/desabilitar metrnomo"
 
-#: ardour_ui2.cc:302
+#: ardour_ui2.cc:303
 msgid "Positional sync source"
 msgstr ""
 
-#: ardour_ui2.cc:303
+#: ardour_ui2.cc:304
 msgid "Does Ardour control the time?"
 msgstr ""
 
-#: ardour_ui2.cc:304
+#: ardour_ui2.cc:305
 #, fuzzy
 msgid "Shuttle speed control"
 msgstr "Control de velocidad y sentido de reproduccin(pitch)"
 
-#: ardour_ui2.cc:305
+#: ardour_ui2.cc:306
 #, fuzzy, c-format
 msgid "Select semitones or %%-age for speed display"
 msgstr "Mostrar velocidad en semitonos o %-age"
 
-#: ardour_ui2.cc:306
+#: ardour_ui2.cc:307
 #, fuzzy
 msgid "Current transport speed"
 msgstr "Velocidad actual de transporte"
 
-#: ardour_ui2.cc:329
+#: ardour_ui2.cc:330
 msgid "Primary clock"
 msgstr "Reloj primario"
 
-#: ardour_ui2.cc:330
+#: ardour_ui2.cc:331
 msgid "secondary clock"
 msgstr "Reloj secundario"
 
 #. XXX: this should really be saved in instant.xml or something similar and restored from there
 #. Combo's are stupid - they steal space from the entry for the button
-#: ardour_ui2.cc:387 ardour_ui2.cc:823 ardour_ui2.cc:836 ardour_ui2.cc:899
-#: ardour_ui2.cc:901
+#: ardour_ui2.cc:388 ardour_ui2.cc:833 ardour_ui2.cc:846 ardour_ui2.cc:909
+#: ardour_ui2.cc:911
 #, fuzzy
 msgid "sprung"
 msgstr "Salto"
 
-#: ardour_ui2.cc:388 ardour_ui2.cc:825 ardour_ui2.cc:847
+#: ardour_ui2.cc:389 ardour_ui2.cc:835 ardour_ui2.cc:857
 #, fuzzy
 msgid "wheel"
 msgstr "Rueda"
 
-#: ardour_ui2.cc:450
+#: ardour_ui2.cc:451
 msgid "ardour: clock"
 msgstr "ardour: reloj"
 
-#: ardour_ui2.cc:595
+#: ardour_ui2.cc:596
 #, fuzzy
 msgid "Maximum speed"
 msgstr "velocidad"
 
-#: ardour_ui2.cc:813
+#: ardour_ui2.cc:823
 msgid "st"
 msgstr ""
 
-#: ardour_ui2.cc:857 ardour_ui2.cc:880 ardour_ui2.cc:897
+#: ardour_ui2.cc:867 ardour_ui2.cc:890 ardour_ui2.cc:907
 msgid "stopped"
 msgstr "detenido"
 
-#: ardour_ui_dialogs.cc:152 playlist_selector.cc:69
+#: ardour_ui_dialogs.cc:153 playlist_selector.cc:70
 #, fuzzy
 msgid "close"
 msgstr "Cerrar"
 
-#: ardour_ui_dialogs.cc:359 ardour_ui_ed.cc:181
+#: ardour_ui_dialogs.cc:360 ardour_ui_ed.cc:184
 #, fuzzy
 msgid "Sound File Browser"
 msgstr "Biblioteca de audio"
 
 #. menus + submenus that need action items
-#: ardour_ui_ed.cc:69
+#: ardour_ui_ed.cc:72
 msgid "Session"
 msgstr "Sesin"
 
-#: ardour_ui_ed.cc:70 ardour_ui_ed.cc:127 editor.cc:1843 export_dialog.cc:350
+#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:130 editor.cc:1836 export_dialog.cc:350
 #: export_dialog.cc:1059 export_dialog.cc:1063
 msgid "Export"
 msgstr "Exportar"
 
-#: ardour_ui_ed.cc:71
+#: ardour_ui_ed.cc:74
 msgid "Cleanup"
 msgstr "Limpiar"
 
-#: ardour_ui_ed.cc:72 option_editor.cc:125
+#: ardour_ui_ed.cc:75 option_editor.cc:126
 msgid "Sync"
 msgstr "Sincronizacin"
 
-#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:74
+#: ardour_ui_ed.cc:76 ardour_ui_ed.cc:77
 #, fuzzy
 msgid "Options"
 msgstr "Opciones Editor"
 
-#: ardour_ui_ed.cc:75
+#: ardour_ui_ed.cc:78
 msgid "Help"
 msgstr ""
 
-#: ardour_ui_ed.cc:76
+#: ardour_ui_ed.cc:79
 msgid "KeyMouse Actions"
 msgstr ""
 
-#: ardour_ui_ed.cc:77
+#: ardour_ui_ed.cc:80
 #, fuzzy
 msgid "Audio File Format"
 msgstr "Cuadros de Audio"
 
-#: ardour_ui_ed.cc:78
+#: ardour_ui_ed.cc:81
 #, fuzzy
 msgid "Header"
 msgstr "Pre-Fader"
 
-#: ardour_ui_ed.cc:79
+#: ardour_ui_ed.cc:82
 msgid "Data"
 msgstr ""
 
-#: ardour_ui_ed.cc:80
+#: ardour_ui_ed.cc:83
 #, fuzzy
 msgid "Control Surfaces"
 msgstr "Control de Salidas"
 
 #. the real actions
-#: ardour_ui_ed.cc:84 audio_time_axis.cc:1856 new_session_dialog.cc:342
+#: ardour_ui_ed.cc:87 audio_time_axis.cc:1854 new_session_dialog.cc:529
 msgid "New"
 msgstr "Nuevo"
 
-#: ardour_ui_ed.cc:86 new_session_dialog.cc:334
+#: ardour_ui_ed.cc:89 new_session_dialog.cc:517
 msgid "Open"
 msgstr "Abrir"
 
-#: ardour_ui_ed.cc:87
+#: ardour_ui_ed.cc:90
 msgid "Recent"
 msgstr "Reciente"
 
-#: ardour_ui_ed.cc:88 io_selector.cc:57 io_selector.cc:791
+#: ardour_ui_ed.cc:91 io_selector.cc:58 io_selector.cc:792
 msgid "Close"
 msgstr "Cerrar"
 
-#: ardour_ui_ed.cc:91 route_params_ui.cc:512
+#: ardour_ui_ed.cc:94 route_params_ui.cc:514
 msgid "Add Track/Bus"
 msgstr "Agregar Pista/Bus"
 
-#: ardour_ui_ed.cc:102
+#: ardour_ui_ed.cc:105
 msgid "Connect"
 msgstr "Conectar"
 
 #. </CMT Additions>
-#: ardour_ui_ed.cc:110
+#: ardour_ui_ed.cc:113
 msgid "Snapshot"
 msgstr "Capturar instant�ea de sesin"
 
-#: ardour_ui_ed.cc:113
+#: ardour_ui_ed.cc:116
 msgid "Save Template..."
 msgstr "Guardar esquema"
 
-#: ardour_ui_ed.cc:116
+#: ardour_ui_ed.cc:119
 msgid "Export session to audiofile..."
 msgstr "Exportar sesin a archivo de audio"
 
-#: ardour_ui_ed.cc:119
+#: ardour_ui_ed.cc:122
 #, fuzzy
 msgid "Export selection to audiofile..."
 msgstr "Exportar sesin a archivo de audio"
 
-#: ardour_ui_ed.cc:123
+#: ardour_ui_ed.cc:126
 #, fuzzy
 msgid "Export range markers to audiofile..."
 msgstr "Exportar sesin a archivo de audio"
 
-#: ardour_ui_ed.cc:130
+#: ardour_ui_ed.cc:133
 msgid "Cleanup unused sources"
 msgstr "Arrojar archivos no usados a papelera"
 
-#: ardour_ui_ed.cc:132
+#: ardour_ui_ed.cc:135
 msgid "Flush wastebasket"
 msgstr "Vaciar papelera"
 
-#: ardour_ui_ed.cc:138 ardour_ui_options.cc:381 ardour_ui_options.cc:390
-#: ardour_ui_options.cc:462
+#: ardour_ui_ed.cc:141 ardour_ui_options.cc:408 ardour_ui_options.cc:417
+#: ardour_ui_options.cc:489
 msgid "JACK"
 msgstr "JACK"
 
-#: ardour_ui_ed.cc:139
+#: ardour_ui_ed.cc:142
 msgid "Latency"
 msgstr ""
 
-#: ardour_ui_ed.cc:141
+#: ardour_ui_ed.cc:144
 #, fuzzy
 msgid "Reconnect"
 msgstr "Conectar"
 
-#: ardour_ui_ed.cc:144 mixer_strip.cc:514 mixer_strip.cc:574
+#: ardour_ui_ed.cc:147 mixer_strip.cc:497 mixer_strip.cc:565
 msgid "Disconnect"
 msgstr "Desconectar"
 
-#: ardour_ui_ed.cc:171
+#: ardour_ui_ed.cc:174
 msgid "Windows"
 msgstr "Ventanas"
 
-#: ardour_ui_ed.cc:172
+#: ardour_ui_ed.cc:175
 msgid "start prefix"
 msgstr ""
 
-#: ardour_ui_ed.cc:173
+#: ardour_ui_ed.cc:176
 msgid "Quit"
 msgstr "Salir"
 
 #. windows visibility actions
-#: ardour_ui_ed.cc:177
+#: ardour_ui_ed.cc:180
 msgid "Maximise Editor Space"
 msgstr ""
 
-#: ardour_ui_ed.cc:179
+#: ardour_ui_ed.cc:182
 #, fuzzy
 msgid "Show Editor"
 msgstr "Editor"
 
-#: ardour_ui_ed.cc:180
+#: ardour_ui_ed.cc:183
 #, fuzzy
 msgid "Show Mixer"
 msgstr "Mixer"
 
-#: ardour_ui_ed.cc:182
+#: ardour_ui_ed.cc:185
 msgid "Options Editor"
 msgstr "Opciones Editor"
 
-#: ardour_ui_ed.cc:183
+#: ardour_ui_ed.cc:186
 #, fuzzy
 msgid "Track/Bus Inspector"
 msgstr "Pistas/Buses"
 
-#: ardour_ui_ed.cc:185
+#: ardour_ui_ed.cc:188
 msgid "Connections"
 msgstr "Conecciones"
 
-#: ardour_ui_ed.cc:187
+#: ardour_ui_ed.cc:190
 msgid "Locations"
 msgstr "Localizaciones"
 
-#: ardour_ui_ed.cc:189
+#: ardour_ui_ed.cc:192
 msgid "Big Clock"
 msgstr "Reloj Grande"
 
-#: ardour_ui_ed.cc:191
+#: ardour_ui_ed.cc:194
 msgid "About"
 msgstr "Acerca de"
 
-#: ardour_ui_ed.cc:192
+#: ardour_ui_ed.cc:195
 #, fuzzy
 msgid "Colors"
 msgstr "Color"
 
-#: ardour_ui_ed.cc:194
+#: ardour_ui_ed.cc:197
 #, fuzzy
 msgid "Add Audio Track"
 msgstr "Agregar Pista/Bus"
 
-#: ardour_ui_ed.cc:196
+#: ardour_ui_ed.cc:199
 #, fuzzy
 msgid "Add Audio Bus"
 msgstr "Ocultar todos los Buses"
 
-#: ardour_ui_ed.cc:198
+#: ardour_ui_ed.cc:201
 msgid "Save"
 msgstr "Guardar"
 
-#: ardour_ui_ed.cc:200 editor_actions.cc:254
+#: ardour_ui_ed.cc:203 editor_actions.cc:255
 #, fuzzy
 msgid "Remove Last Capture"
 msgstr "Quitar ltima captura"
 
 #. do-nothing action for the "transport" menu bar item
-#: ardour_ui_ed.cc:207
+#: ardour_ui_ed.cc:210
 #, fuzzy
 msgid "Transport"
 msgstr "Traductores"
@@ -1007,73 +989,73 @@ msgstr "Traductores"
 #. these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
 #. menus and via button proxies.
 #.
-#: ardour_ui_ed.cc:213 sfdb_ui.cc:57
+#: ardour_ui_ed.cc:216 sfdb_ui.cc:57
 msgid "Stop"
 msgstr "Detener"
 
-#: ardour_ui_ed.cc:216
+#: ardour_ui_ed.cc:219
 msgid "Roll"
 msgstr ""
 
-#: ardour_ui_ed.cc:220
+#: ardour_ui_ed.cc:223
 #, fuzzy
 msgid "Start/Stop"
 msgstr "Inicio:"
 
-#: ardour_ui_ed.cc:223
+#: ardour_ui_ed.cc:226
 msgid "Stop + Forget Capture"
 msgstr ""
 
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:229
 #, fuzzy
 msgid "Play Loop Range"
 msgstr "Reproducir el intervalo cont�uamente"
 
-#: ardour_ui_ed.cc:229
+#: ardour_ui_ed.cc:232
 #, fuzzy
 msgid "Play Selection"
 msgstr "Reproducir regin selecionada"
 
-#: ardour_ui_ed.cc:233
+#: ardour_ui_ed.cc:236
 #, fuzzy
 msgid "Enable Record"
 msgstr "Grabar"
 
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:239
 #, fuzzy
 msgid "Rewind"
 msgstr "Regin"
 
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:242
 msgid "Rewind (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:242
+#: ardour_ui_ed.cc:245
 msgid "Rewind (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:245
+#: ardour_ui_ed.cc:248
 msgid "Forward"
 msgstr ""
 
-#: ardour_ui_ed.cc:248
+#: ardour_ui_ed.cc:251
 msgid "Forward (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:251
+#: ardour_ui_ed.cc:254
 msgid "Forward (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:254
+#: ardour_ui_ed.cc:257
 msgid "Goto Zero"
 msgstr ""
 
-#: ardour_ui_ed.cc:257
+#: ardour_ui_ed.cc:260
 #, fuzzy
 msgid "Goto Start"
 msgstr "Inicio:"
 
-#: ardour_ui_ed.cc:260
+#: ardour_ui_ed.cc:263
 msgid "Goto End"
 msgstr ""
 
@@ -1081,25 +1063,25 @@ msgstr ""
 #. that proxies for these action to be more compact. It would be nice to find a way to override the action
 #. name appearance on the buttons.
 #.
-#: ardour_ui_ed.cc:269
+#: ardour_ui_ed.cc:272
 #, fuzzy
 msgid ""
 "Punch\n"
 "in"
 msgstr "Insercin"
 
-#: ardour_ui_ed.cc:272
+#: ardour_ui_ed.cc:275
 #, fuzzy
 msgid ""
 "Punch\n"
 "out"
 msgstr "Insercin"
 
-#: ardour_ui_ed.cc:275 option_editor.cc:128
+#: ardour_ui_ed.cc:278 option_editor.cc:129
 msgid "Click"
 msgstr "Metrnomo"
 
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:281
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1108,7 +1090,7 @@ msgstr ""
 "auto\n"
 "monitoreo"
 
-#: ardour_ui_ed.cc:281
+#: ardour_ui_ed.cc:284
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1117,7 +1099,7 @@ msgstr ""
 "reproduccn\n"
 "autom�ica"
 
-#: ardour_ui_ed.cc:284
+#: ardour_ui_ed.cc:287
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1126,285 +1108,285 @@ msgstr ""
 "retorno\n"
 "autom�ico"
 
-#: ardour_ui_ed.cc:288
+#: ardour_ui_ed.cc:291
 #, fuzzy
 msgid ""
 "Time\n"
 "master"
 msgstr "M�ter de tiempo JACK"
 
-#: ardour_ui_ed.cc:291
+#: ardour_ui_ed.cc:294
 msgid "Toggle Record Enable Track1"
 msgstr ""
 
-#: ardour_ui_ed.cc:293
+#: ardour_ui_ed.cc:296
 msgid "Toggle Record Enable Track2"
 msgstr ""
 
-#: ardour_ui_ed.cc:295
+#: ardour_ui_ed.cc:298
 msgid "Toggle Record Enable Track3"
 msgstr ""
 
-#: ardour_ui_ed.cc:297
+#: ardour_ui_ed.cc:300
 msgid "Toggle Record Enable Track4"
 msgstr ""
 
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:302
 msgid "Toggle Record Enable Track5"
 msgstr ""
 
-#: ardour_ui_ed.cc:301
+#: ardour_ui_ed.cc:304
 msgid "Toggle Record Enable Track6"
 msgstr ""
 
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:306
 msgid "Toggle Record Enable Track7"
 msgstr ""
 
-#: ardour_ui_ed.cc:305
+#: ardour_ui_ed.cc:308
 msgid "Toggle Record Enable Track8"
 msgstr ""
 
-#: ardour_ui_ed.cc:307
+#: ardour_ui_ed.cc:310
 msgid "Toggle Record Enable Track9"
 msgstr ""
 
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:312
 msgid "Toggle Record Enable Track10"
 msgstr ""
 
-#: ardour_ui_ed.cc:311
+#: ardour_ui_ed.cc:314
 msgid "Toggle Record Enable Track11"
 msgstr ""
 
-#: ardour_ui_ed.cc:313
+#: ardour_ui_ed.cc:316
 msgid "Toggle Record Enable Track12"
 msgstr ""
 
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:318
 msgid "Toggle Record Enable Track13"
 msgstr ""
 
-#: ardour_ui_ed.cc:317
+#: ardour_ui_ed.cc:320
 msgid "Toggle Record Enable Track14"
 msgstr ""
 
-#: ardour_ui_ed.cc:319
+#: ardour_ui_ed.cc:322
 msgid "Toggle Record Enable Track15"
 msgstr ""
 
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:324
 msgid "Toggle Record Enable Track16"
 msgstr ""
 
-#: ardour_ui_ed.cc:323
+#: ardour_ui_ed.cc:326
 msgid "Toggle Record Enable Track17"
 msgstr ""
 
-#: ardour_ui_ed.cc:325
+#: ardour_ui_ed.cc:328
 msgid "Toggle Record Enable Track18"
 msgstr ""
 
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:330
 msgid "Toggle Record Enable Track19"
 msgstr ""
 
-#: ardour_ui_ed.cc:329
+#: ardour_ui_ed.cc:332
 msgid "Toggle Record Enable Track20"
 msgstr ""
 
-#: ardour_ui_ed.cc:331
+#: ardour_ui_ed.cc:334
 msgid "Toggle Record Enable Track21"
 msgstr ""
 
-#: ardour_ui_ed.cc:333
+#: ardour_ui_ed.cc:336
 msgid "Toggle Record Enable Track22"
 msgstr ""
 
-#: ardour_ui_ed.cc:335
+#: ardour_ui_ed.cc:338
 msgid "Toggle Record Enable Track23"
 msgstr ""
 
-#: ardour_ui_ed.cc:337
+#: ardour_ui_ed.cc:340
 msgid "Toggle Record Enable Track24"
 msgstr ""
 
-#: ardour_ui_ed.cc:339
+#: ardour_ui_ed.cc:342
 msgid "Toggle Record Enable Track25"
 msgstr ""
 
-#: ardour_ui_ed.cc:341
+#: ardour_ui_ed.cc:344
 msgid "Toggle Record Enable Track26"
 msgstr ""
 
-#: ardour_ui_ed.cc:343
+#: ardour_ui_ed.cc:346
 msgid "Toggle Record Enable Track27"
 msgstr ""
 
-#: ardour_ui_ed.cc:345
+#: ardour_ui_ed.cc:348
 msgid "Toggle Record Enable Track28"
 msgstr ""
 
-#: ardour_ui_ed.cc:347
+#: ardour_ui_ed.cc:350
 msgid "Toggle Record Enable Track29"
 msgstr ""
 
-#: ardour_ui_ed.cc:349
+#: ardour_ui_ed.cc:352
 msgid "Toggle Record Enable Track30"
 msgstr ""
 
-#: ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:354
 msgid "Toggle Record Enable Track31"
 msgstr ""
 
-#: ardour_ui_ed.cc:353
+#: ardour_ui_ed.cc:356
 msgid "Toggle Record Enable Track32"
 msgstr ""
 
-#: ardour_ui_ed.cc:358
+#: ardour_ui_ed.cc:361
 #, fuzzy
 msgid "Percentage"
 msgstr "Porcentage"
 
-#: ardour_ui_ed.cc:359
+#: ardour_ui_ed.cc:362
 #, fuzzy
 msgid "Semitones"
 msgstr "Semitonos"
 
-#: ardour_ui_ed.cc:363
+#: ardour_ui_ed.cc:366
 msgid "Send MTC"
 msgstr "Enviar MTC"
 
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:368
 msgid "Send MMC"
 msgstr "Enviar MMC"
 
-#: ardour_ui_ed.cc:367
+#: ardour_ui_ed.cc:370
 #, fuzzy
 msgid "Use MMC"
 msgstr "Enviar MMC"
 
-#: ardour_ui_ed.cc:369
+#: ardour_ui_ed.cc:372
 msgid "Send MIDI feedback"
 msgstr ""
 
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:374
 #, fuzzy
 msgid "Use MIDI control"
 msgstr "Puerto MMC"
 
-#: ardour_ui_ed.cc:374
+#: ardour_ui_ed.cc:377
 #, fuzzy
-msgid "Connect newtrack inputs to hardware"
+msgid "Connect new track inputs to hardware"
 msgstr "Conectar nuevas pistas autom�icamente"
 
-#: ardour_ui_ed.cc:392
+#: ardour_ui_ed.cc:396
 #, fuzzy
 msgid "Connect new track outputs to hardware"
 msgstr "Conectar nuevas pistas autom�icamente"
 
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:398
 #, fuzzy
 msgid "Connect new track outputs to master"
 msgstr "conectar autom�icamente salidas de pistas a salidas Master"
 
-#: ardour_ui_ed.cc:396
+#: ardour_ui_ed.cc:400
 #, fuzzy
 msgid "Manually connect new track outputs"
 msgstr "conectar pistas manualmente"
 
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:405
 #, fuzzy
 msgid "Hardware monitoring"
 msgstr "Monitorizacin por Hardware"
 
-#: ardour_ui_ed.cc:402
+#: ardour_ui_ed.cc:406
 #, fuzzy
 msgid "Software monitoring"
 msgstr "Monitorizacin por Software"
 
-#: ardour_ui_ed.cc:403
+#: ardour_ui_ed.cc:407
 #, fuzzy
 msgid "External monitoring"
 msgstr "Monitorizacin por Hardware"
 
 #. Configuration object options (i.e. not session specific)
-#: ardour_ui_ed.cc:407
+#: ardour_ui_ed.cc:411
 msgid "Stop plugins with transport"
 msgstr "No procesar plugins durante transporte"
 
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:412
 #, fuzzy
 msgid "Verify remove last capture"
 msgstr "Quitar ltima captura"
 
-#: ardour_ui_ed.cc:409
+#: ardour_ui_ed.cc:413
 msgid "Stop recording on xrun"
 msgstr "Detener grabacin al detectar un XRUN"
 
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:414
 #, fuzzy
 msgid "Stop transport at session end"
 msgstr "Detener el transporte al llegar al final de la sesin"
 
-#: ardour_ui_ed.cc:411
+#: ardour_ui_ed.cc:415
 msgid "-12dB gain reduce ffwd/rewind"
 msgstr ""
 
-#: ardour_ui_ed.cc:412
+#: ardour_ui_ed.cc:416
 msgid "Rec-enable stays engaged at stop"
 msgstr ""
 
 #. session options
-#: ardour_ui_ed.cc:416
+#: ardour_ui_ed.cc:420
 #, fuzzy
 msgid "Do not run plugins while recording"
 msgstr "Procesar plugins durante la grabacin"
 
-#: ardour_ui_ed.cc:419
+#: ardour_ui_ed.cc:423
 msgid "Latched solo"
 msgstr ""
 
-#: ardour_ui_ed.cc:424
+#: ardour_ui_ed.cc:428
 #, fuzzy
 msgid "Solo in-place"
 msgstr "Solo"
 
-#: ardour_ui_ed.cc:426
+#: ardour_ui_ed.cc:430
 msgid "Solo via bus"
 msgstr ""
 
-#: ardour_ui_ed.cc:429
+#: ardour_ui_ed.cc:433
 #, fuzzy
 msgid "Automatically create crossfades"
 msgstr "Crosfade autom�ico si dos regiones se superponen"
 
-#: ardour_ui_ed.cc:431
+#: ardour_ui_ed.cc:435
 msgid "Unmute new full crossfades"
 msgstr ""
 
-#: ardour_ui_options.cc:379 ardour_ui_options.cc:389 ardour_ui_options.cc:456
+#: ardour_ui_options.cc:406 ardour_ui_options.cc:416 ardour_ui_options.cc:483
 #, fuzzy
 msgid "Internal"
 msgstr "interno"
 
-#: ardour_ui_options.cc:380 ardour_ui_options.cc:459
+#: ardour_ui_options.cc:407 ardour_ui_options.cc:486
 msgid "MTC"
 msgstr ""
 
-#: audio_clock.cc:1719 editor.cc:185
+#: audio_clock.cc:1742 editor.cc:188
 msgid "SMPTE"
 msgstr ""
 
-#: audio_clock.cc:1720 editor.cc:184 editor_rulers.cc:359
+#: audio_clock.cc:1743 editor.cc:187 editor_rulers.cc:360
 msgid "Bars:Beats"
 msgstr "Compaces:Pulsos"
 
-#: audio_clock.cc:1721
+#: audio_clock.cc:1744
 msgid "Minutes:Seconds"
 msgstr "Minutos:Segundos"
 
-#: audio_clock.cc:1722
+#: audio_clock.cc:1745
 msgid "Audio Frames"
 msgstr "Cuadros de Audio"
 
@@ -1412,297 +1394,315 @@ msgstr "Cuadros de Audio"
 #. Slowest = 6.6dB/sec falloff at update rate of 40ms
 #. Slow    = 6.8dB/sec falloff at update rate of 40ms
 #.
-#: audio_clock.cc:1723 editor_actions.cc:374 editor_actions.cc:382
+#: audio_clock.cc:1746 editor_actions.cc:375 editor_actions.cc:383
+#: gain_meter.cc:172 panner_ui.cc:89 plugin_ui.cc:392 plugin_ui.cc:635
 msgid "Off"
 msgstr "Deshabilitar"
 
-#: audio_clock.cc:1725
+#: audio_clock.cc:1748
 msgid "Mode"
 msgstr "Modo"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:458
+#: audio_time_axis.cc:91
 msgid "m"
 msgstr ""
 
-#: audio_time_axis.cc:90 mixer_strip.cc:459
+#: audio_time_axis.cc:91
 msgid "s"
 msgstr ""
 
-#: audio_time_axis.cc:90
+#: audio_time_axis.cc:91
 msgid "r"
 msgstr ""
 
-#: audio_time_axis.cc:94
+#: audio_time_axis.cc:95
 msgid "g"
 msgstr ""
 
 #. group
-#: audio_time_axis.cc:95
+#: audio_time_axis.cc:96
 msgid "p"
 msgstr ""
 
-#: audio_time_axis.cc:96 automation_time_axis.cc:31 visual_time_axis.cc:73
+#: audio_time_axis.cc:97 automation_time_axis.cc:32 visual_time_axis.cc:74
 msgid "h"
 msgstr ""
 
 #. height
-#: audio_time_axis.cc:97
+#: audio_time_axis.cc:98
 msgid "a"
 msgstr ""
 
-#: audio_time_axis.cc:98 visual_time_axis.cc:72
+#: audio_time_axis.cc:99 visual_time_axis.cc:73
 msgid "v"
 msgstr ""
 
-#: audio_time_axis.cc:173
+#: audio_time_axis.cc:168 mixer_strip.cc:86
 msgid "Record"
 msgstr "Grabar"
 
-#: audio_time_axis.cc:174 editor_actions.cc:36
+#: audio_time_axis.cc:169 editor_actions.cc:37 mixer_strip.cc:86
 msgid "Solo"
 msgstr "Solo"
 
-#: audio_time_axis.cc:175 editor.cc:1767 editor.cc:1866 panner_ui.cc:385
+#: audio_time_axis.cc:170 editor.cc:1760 editor.cc:1859 mixer_strip.cc:86
+#: panner_ui.cc:427
 msgid "Mute"
 msgstr ""
 
-#: audio_time_axis.cc:176
+#: audio_time_axis.cc:171
 msgid "Edit Group"
 msgstr "Editar Grupo"
 
-#: audio_time_axis.cc:177 visual_time_axis.cc:91
+#: audio_time_axis.cc:172 visual_time_axis.cc:92
 msgid "Display Height"
 msgstr "Tamao de pista"
 
-#: audio_time_axis.cc:178
+#: audio_time_axis.cc:173
 msgid "Playlist"
 msgstr "Lista de reproduccin"
 
-#: audio_time_axis.cc:179 audio_time_axis.cc:743
+#: audio_time_axis.cc:174 audio_time_axis.cc:741
 msgid "Automation"
 msgstr "Automatizacin"
 
-#: audio_time_axis.cc:180 visual_time_axis.cc:92
+#: audio_time_axis.cc:175 visual_time_axis.cc:93
 msgid "Visual options"
 msgstr "Opciones visuales"
 
-#: audio_time_axis.cc:181 visual_time_axis.cc:93
+#: audio_time_axis.cc:176 visual_time_axis.cc:94
 msgid "Hide this track"
 msgstr "Ocultar esta pista"
 
-#: audio_time_axis.cc:337
+#: audio_time_axis.cc:333 mixer_strip.cc:927
 msgid "No group"
 msgstr "Sin grupo"
 
-#: audio_time_axis.cc:704 automation_time_axis.cc:448
-#: imageframe_time_axis.cc:256 marker_time_axis.cc:210
+#: audio_time_axis.cc:702 automation_time_axis.cc:450
+#: imageframe_time_axis.cc:255 marker_time_axis.cc:211
 msgid "Height"
 msgstr "Altura"
 
-#: audio_time_axis.cc:705 color_manager.cc:40 imageframe_time_axis.cc:257
-#: marker_time_axis.cc:211
+#: audio_time_axis.cc:703 color_manager.cc:41 imageframe_time_axis.cc:256
+#: marker_time_axis.cc:212
 msgid "Color"
 msgstr "Color"
 
-#: audio_time_axis.cc:709
+#: audio_time_axis.cc:707
 msgid "Hide all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:710
+#: audio_time_axis.cc:708
 msgid "Show all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:714 mixer_strip.cc:1236
+#: audio_time_axis.cc:712 mixer_strip.cc:1011
 #, fuzzy
 msgid "Remote Control ID"
 msgstr "Remover punto de sincron�"
 
-#: audio_time_axis.cc:720
+#: audio_time_axis.cc:718
 #, fuzzy
-msgid "show all automation"
+msgid "Show all automation"
 msgstr "Mostrar toda automatizacin"
 
-#: audio_time_axis.cc:723
+#: audio_time_axis.cc:721
 #, fuzzy
-msgid "show existing automation"
+msgid "Show existing automation"
 msgstr "Mostrar toda automatizacin"
 
-#: audio_time_axis.cc:726
+#: audio_time_axis.cc:724
 #, fuzzy
-msgid "hide all automation"
+msgid "Hide all automation"
 msgstr "ocultar toda automatizacin"
 
-#: audio_time_axis.cc:731 audio_time_axis.cc:1169 editor.cc:215
-msgid "gain"
-msgstr "volumen"
+#: audio_time_axis.cc:729
+#, fuzzy
+msgid "Fader"
+msgstr "Fades"
 
-#: audio_time_axis.cc:736 audio_time_axis.cc:1209
-msgid "pan"
+#: audio_time_axis.cc:734
+#, fuzzy
+msgid "Pan"
 msgstr "balance"
 
-#: audio_time_axis.cc:741
+#: audio_time_axis.cc:739
 msgid "Plugins"
 msgstr ""
 
-#: audio_time_axis.cc:749
+#: audio_time_axis.cc:747
 msgid "Show waveforms"
 msgstr "Mostrar onda de audio"
 
-#: audio_time_axis.cc:757
+#: audio_time_axis.cc:755
 msgid "Traditional"
 msgstr "Tradicional"
 
-#: audio_time_axis.cc:760
+#: audio_time_axis.cc:758
 msgid "Rectified"
 msgstr "Corregido"
 
-#: audio_time_axis.cc:763
+#: audio_time_axis.cc:761
 msgid "Waveform"
 msgstr "Onda de audio"
 
-#: audio_time_axis.cc:773
+#: audio_time_axis.cc:771
 #, fuzzy
-msgid "align with existing material"
+msgid "Align with existing material"
 msgstr "Material existente"
 
-#: audio_time_axis.cc:778
+#: audio_time_axis.cc:776
 #, fuzzy
-msgid "align with capture time"
+msgid "Align with capture time"
 msgstr "Tiempo de captura"
 
-#: audio_time_axis.cc:784
+#: audio_time_axis.cc:782
 #, fuzzy
 msgid "Alignment"
 msgstr "Alinear"
 
-#: audio_time_axis.cc:790 editor.cc:523 editor_actions.cc:59
-#: mixer_strip.cc:1225
+#: audio_time_axis.cc:788 editor.cc:527 editor_actions.cc:60
+#: mixer_strip.cc:1000 mixer_ui.cc:111
 msgid "Active"
 msgstr "Activar"
 
-#: audio_time_axis.cc:795 editor.cc:1929 editor_actions.cc:319
-#: editor_markers.cc:507 imageframe_time_axis.cc:260 location_ui.cc:56
-#: marker_time_axis.cc:214 mixer_strip.cc:1239
+#: audio_time_axis.cc:793 editor.cc:1922 editor_actions.cc:320
+#: editor_markers.cc:508 imageframe_time_axis.cc:259 location_ui.cc:57
+#: marker_time_axis.cc:215 mixer_strip.cc:1014
 msgid "Remove"
 msgstr "Quitar"
 
-#: audio_time_axis.cc:835
+#: audio_time_axis.cc:833
 #, fuzzy
 msgid "Name for playlist"
 msgstr "Nombre a captura de sesin"
 
-#: audio_time_axis.cc:837 audio_time_axis.cc:1853 editor_markers.cc:826
-#: editor_mouse.cc:4609 imageframe_time_axis.cc:249 marker_time_axis.cc:207
-#: meter_bridge_strip.cc:223 mixer_strip.cc:1223 redirect_box.cc:749
-#: redirect_box.cc:1063 route_ui.cc:732 visual_time_axis.cc:325
+#: audio_time_axis.cc:835 audio_time_axis.cc:1851 editor_markers.cc:827
+#: editor_mouse.cc:4673 imageframe_time_axis.cc:248 marker_time_axis.cc:208
+#: meter_bridge_strip.cc:224 mixer_strip.cc:998 redirect_box.cc:751
+#: redirect_box.cc:1065 route_ui.cc:739 visual_time_axis.cc:326
 msgid "Rename"
 msgstr "Renombrar"
 
-#: audio_time_axis.cc:870 audio_time_axis.cc:910
+#: audio_time_axis.cc:868 audio_time_axis.cc:908
 #, fuzzy
 msgid "Name for Playlist"
 msgstr "Nombre a captura de sesin"
 
-#: audio_time_axis.cc:1128 visual_time_axis.cc:382
+#: audio_time_axis.cc:1126 visual_time_axis.cc:383
 msgid "a track already exists with that name"
 msgstr "ya existe una pista con este nombre"
 
-#: audio_time_axis.cc:1412 editor.cc:1490 selection.cc:622
+#: audio_time_axis.cc:1167 editor.cc:218
+msgid "gain"
+msgstr "volumen"
+
+#: audio_time_axis.cc:1207
+msgid "pan"
+msgstr "balance"
+
+#: audio_time_axis.cc:1410 editor.cc:1483 selection.cc:634
 msgid "programming error: "
 msgstr ""
 
-#: audio_time_axis.cc:1850
+#: audio_time_axis.cc:1848
 msgid "Current: %1"
 msgstr "Actual: %1"
 
-#: audio_time_axis.cc:1857
+#: audio_time_axis.cc:1855
 msgid "New Copy"
 msgstr "Nueva Copia"
 
-#: audio_time_axis.cc:1859
+#: audio_time_axis.cc:1857
 msgid "Clear Current"
 msgstr "Borrar actual"
 
-#: audio_time_axis.cc:1861 editor.cc:2031 editor.cc:2107
+#: audio_time_axis.cc:1859 editor.cc:2024 editor.cc:2100
 msgid "Select"
 msgstr "Seleccionar"
 
-#: automation_line.cc:883
+#: automation_line.cc:884
 #, fuzzy
 msgid "automation event move"
 msgstr "mover evento de automatizacin"
 
-#: automation_line.cc:885
+#: automation_line.cc:886
 #, fuzzy
 msgid "automation range drag"
 msgstr "desplazar intervalo de automatizacin"
 
-#: automation_line.cc:1014 region_gain_line.cc:61
+#: automation_line.cc:1015 region_gain_line.cc:62
 #, fuzzy
 msgid "remove control point"
 msgstr "Remover punto de sincron�"
 
-#: automation_time_axis.cc:32 editor_ops.cc:2813
+#: automation_time_axis.cc:33 editor_ops.cc:2885
 msgid "clear"
 msgstr "borrar"
 
-#: automation_time_axis.cc:74
+#: automation_time_axis.cc:75
 msgid "track height"
 msgstr ""
 
-#: automation_time_axis.cc:75
+#: automation_time_axis.cc:76
 #, fuzzy
 msgid "automation state"
 msgstr "estado de automatizacin de balance"
 
-#: automation_time_axis.cc:76
+#: automation_time_axis.cc:77
 #, fuzzy
 msgid "clear track"
 msgstr "borrar intervalos"
 
-#: automation_time_axis.cc:77
+#: automation_time_axis.cc:78
 #, fuzzy
 msgid "hide track"
 msgstr "Ocultar esta pista"
 
-#: automation_time_axis.cc:185 automation_time_axis.cc:223
-#: automation_time_axis.cc:463 mixer_strip.cc:176 mixer_strip.cc:188
-#: plugin_ui.cc:394 plugin_ui.cc:636 region_editor.cc:53
-msgid "play"
-msgstr "reproducir"
+#: automation_time_axis.cc:184 automation_time_axis.cc:213
+#: automation_time_axis.cc:461
+msgid "Manual"
+msgstr ""
 
-#: automation_time_axis.cc:187 automation_time_axis.cc:234
-#: automation_time_axis.cc:467 mixer_strip.cc:178 mixer_strip.cc:190
-#: plugin_ui.cc:397 plugin_ui.cc:638
-msgid "write"
+#: automation_time_axis.cc:186 automation_time_axis.cc:224
+#: automation_time_axis.cc:465 editor.cc:2001 editor.cc:2082 gain_meter.cc:174
+#: panner_ui.cc:91 plugin_ui.cc:395 plugin_ui.cc:637 sfdb_ui.cc:56
+msgid "Play"
+msgstr "Reproducir"
+
+#: automation_time_axis.cc:188 automation_time_axis.cc:235
+#: automation_time_axis.cc:469 gain_meter.cc:176 panner_ui.cc:93
+#: plugin_ui.cc:398 plugin_ui.cc:639
+#, fuzzy
+msgid "Write"
 msgstr "escritura"
 
-#: automation_time_axis.cc:189 automation_time_axis.cc:245
-#: automation_time_axis.cc:471 mixer_strip.cc:180 mixer_strip.cc:192
-#: mixer_strip.cc:887 plugin_ui.cc:400 plugin_ui.cc:640
+#: automation_time_axis.cc:190 automation_time_axis.cc:246
+#: automation_time_axis.cc:473 gain_meter.cc:178 panner_ui.cc:95
+#: plugin_ui.cc:401 plugin_ui.cc:641
 #, fuzzy
-msgid "touch"
+msgid "Touch"
 msgstr "tocar"
 
-#: automation_time_axis.cc:256 option_editor.cc:182 option_editor.cc:188
-#: plugin_ui.cc:403
+#: automation_time_axis.cc:257 option_editor.cc:183 option_editor.cc:189
+#: plugin_ui.cc:404
 msgid "???"
 msgstr ""
 
-#: automation_time_axis.cc:270
+#: automation_time_axis.cc:271
 #, fuzzy
 msgid "clear automation"
 msgstr "borrar localizaciones"
 
-#: automation_time_axis.cc:450 editor_actions.cc:317
+#: automation_time_axis.cc:452 editor_actions.cc:318
 msgid "Hide"
 msgstr "Ocultar"
 
-#: automation_time_axis.cc:452 crossfade_edit.cc:76 redirect_box.cc:1055
+#: automation_time_axis.cc:454 crossfade_edit.cc:78 redirect_box.cc:1057
 msgid "Clear"
 msgstr "Quitar todos"
 
-#: automation_time_axis.cc:475
+#: automation_time_axis.cc:477
 #, fuzzy
 msgid "State"
 msgstr "Inicio"
@@ -1849,1614 +1849,1601 @@ msgstr ""
 msgid "color of fill"
 msgstr ""
 
-#: color_manager.cc:39
+#: color_manager.cc:40
 #, fuzzy
 msgid "Object"
 msgstr "objeto"
 
-#: color_manager.cc:77
+#: color_manager.cc:78
 #, fuzzy
 msgid "cannot open color definition file %1: %2"
 msgstr "no se pudo mostrar el la imagen Acerca de \"%1\""
 
-#: crossfade_edit.cc:73
+#: crossfade_edit.cc:75
 msgid "ardour: x-fade edit"
 msgstr ""
 
-#: crossfade_edit.cc:77 panner_ui.cc:401
+#: crossfade_edit.cc:79 panner_ui.cc:443
 #, fuzzy
 msgid "Reset"
 msgstr "resetear"
 
-#: crossfade_edit.cc:78
+#: crossfade_edit.cc:80
 #, fuzzy
 msgid "Fade"
 msgstr "Fades"
 
-#: crossfade_edit.cc:79
+#: crossfade_edit.cc:81
 msgid "Out (dry)"
 msgstr ""
 
-#: crossfade_edit.cc:80
+#: crossfade_edit.cc:82
 #, fuzzy
 msgid "Out"
 msgstr "Salidas"
 
-#: crossfade_edit.cc:81
+#: crossfade_edit.cc:83
 msgid "In (dry)"
 msgstr ""
 
-#: crossfade_edit.cc:82
+#: crossfade_edit.cc:84
 msgid "In"
 msgstr ""
 
-#: crossfade_edit.cc:84
+#: crossfade_edit.cc:86
 msgid "With Pre-roll"
 msgstr ""
 
-#: crossfade_edit.cc:85
+#: crossfade_edit.cc:87
 msgid "With Post-roll"
 msgstr ""
 
-#: crossfade_edit.cc:93
+#: crossfade_edit.cc:95
 msgid "Fade In"
 msgstr ""
 
-#: crossfade_edit.cc:94
+#: crossfade_edit.cc:96
 msgid "Fade Out"
 msgstr ""
 
-#: crossfade_edit.cc:170 editor.cc:1842 editor_actions.cc:315
-#: option_editor.cc:129
+#: crossfade_edit.cc:172 editor.cc:1835 editor_actions.cc:316
+#: option_editor.cc:130
 msgid "Audition"
 msgstr "Audicionando"
 
-#: editor.cc:101 editor.cc:3588
+#: editor.cc:104 editor.cc:3616
 msgid "Slide"
 msgstr "Deslizar"
 
-#: editor.cc:102 editor.cc:3586
+#: editor.cc:105 editor.cc:3614
 msgid "Splice"
 msgstr "Reunir"
 
-#: editor.cc:107 editor.cc:3643 export_dialog.cc:78 export_dialog.cc:92
-#: export_dialog.cc:893 export_dialog.cc:1225
+#. note that this menu list starts at zero, not 1, because zero
+#. is a valid, if useless, ID.
+#.
+#. leave some breathing room
+#: editor.cc:110 editor.cc:3671 export_dialog.cc:78 export_dialog.cc:92
+#: export_dialog.cc:893 export_dialog.cc:1225 route_ui.cc:437
 msgid "None"
 msgstr "Ningn"
 
-#: editor.cc:108 editor.cc:3631
+#: editor.cc:111 editor.cc:3659
 #, fuzzy
 msgid "CD Frames"
 msgstr "Cuadros"
 
-#: editor.cc:109 editor.cc:3633
+#: editor.cc:112 editor.cc:3661
 #, fuzzy
 msgid "SMPTE Frames"
 msgstr "SMPTE Cuadros/segundo"
 
-#: editor.cc:110 editor.cc:3635
+#: editor.cc:113 editor.cc:3663
 #, fuzzy
 msgid "SMPTE Seconds"
 msgstr "SMPTE Cuadros/segundo"
 
-#: editor.cc:111 editor.cc:3637
+#: editor.cc:114 editor.cc:3665
 msgid "SMPTE Minutes"
 msgstr ""
 
-#: editor.cc:112 editor.cc:3639
+#: editor.cc:115 editor.cc:3667
 #, fuzzy
 msgid "Seconds"
 msgstr "Minutos:Segundos"
 
-#: editor.cc:113 editor.cc:3641
+#: editor.cc:116 editor.cc:3669
 #, fuzzy
 msgid "Minutes"
 msgstr "Salidas Principales"
 
-#: editor.cc:114 editor.cc:3613
+#: editor.cc:117 editor.cc:3641
 msgid "Beats/32"
 msgstr "Pulsos/32"
 
-#: editor.cc:115 editor.cc:3611
+#: editor.cc:118 editor.cc:3639
 msgid "Beats/16"
 msgstr "Pulsos/16"
 
-#: editor.cc:116 editor.cc:3609
+#: editor.cc:119 editor.cc:3637
 msgid "Beats/8"
 msgstr "Pulsos/8"
 
-#: editor.cc:117 editor.cc:3607
+#: editor.cc:120 editor.cc:3635
 msgid "Beats/4"
 msgstr "Pulsos/4"
 
-#: editor.cc:118 editor.cc:3605
+#: editor.cc:121 editor.cc:3633
 msgid "Beats/3"
 msgstr "Pulsos/3"
 
-#: editor.cc:119 editor.cc:3615
+#: editor.cc:122 editor.cc:3643
 msgid "Beats"
 msgstr "Pulsos"
 
-#: editor.cc:120 editor.cc:3617
+#: editor.cc:123 editor.cc:3645
 msgid "Bars"
 msgstr "Compaces"
 
-#: editor.cc:121 editor.cc:3619
+#: editor.cc:124 editor.cc:3647
 msgid "Marks"
 msgstr "Marcas"
 
-#: editor.cc:122 editor.cc:141 editor.cc:3621 editor.cc:3687
+#: editor.cc:125 editor.cc:144 editor.cc:3649 editor.cc:3715
 msgid "Edit Cursor"
 msgstr "Cursor de Edicin"
 
-#: editor.cc:123 editor.cc:3623
+#: editor.cc:126 editor.cc:3651
 msgid "Region starts"
 msgstr "Comienzos de regin"
 
-#: editor.cc:124 editor.cc:3625
+#: editor.cc:127 editor.cc:3653
 msgid "Region ends"
 msgstr "Fines de regin"
 
-#: editor.cc:125 editor.cc:3629
+#: editor.cc:128 editor.cc:3657
 msgid "Region syncs"
 msgstr "Sincronizaciones de region"
 
-#: editor.cc:126 editor.cc:3627
+#: editor.cc:129 editor.cc:3655
 msgid "Region bounds"
 msgstr "Bordes de regin"
 
-#: editor.cc:132 editor.cc:3662
+#: editor.cc:135 editor.cc:3690
 #, fuzzy
 msgid "Magnetic"
 msgstr "Magn�ico"
 
-#: editor.cc:137 editor.cc:3679 export_dialog.cc:140 export_dialog.cc:156
+#: editor.cc:140 editor.cc:3707 export_dialog.cc:140 export_dialog.cc:156
 #: export_dialog.cc:1068 export_dialog.cc:1072
 msgid "Left"
 msgstr "Izquierdo"
 
-#: editor.cc:138 editor.cc:3681 export_dialog.cc:141 export_dialog.cc:157
+#: editor.cc:141 editor.cc:3709 export_dialog.cc:141 export_dialog.cc:157
 msgid "Right"
 msgstr "Derecho"
 
-#: editor.cc:139 editor.cc:3683
+#: editor.cc:142 editor.cc:3711
 msgid "Center"
 msgstr "Centro"
 
-#: editor.cc:140 editor.cc:3685
+#: editor.cc:143 editor.cc:3713
 msgid "Playhead"
 msgstr "Barra de reproduccin"
 
 #. time display buttons
-#: editor.cc:183
+#: editor.cc:186
 msgid "Mins:Secs"
 msgstr "Mins:Segs"
 
-#: editor.cc:186 editor_rulers.cc:353
+#: editor.cc:189 editor_rulers.cc:354
 msgid "Frames"
 msgstr "Cuadros"
 
-#: editor.cc:187 editor_rulers.cc:373
+#: editor.cc:190 editor_rulers.cc:374
 msgid "Tempo"
 msgstr "Tempo"
 
-#: editor.cc:188 editor_rulers.cc:367
+#: editor.cc:191 editor_rulers.cc:368
 msgid "Meter"
 msgstr "Vmetro"
 
-#: editor.cc:189 editor_rulers.cc:379
+#: editor.cc:192 editor_rulers.cc:380
 #, fuzzy
 msgid "Location Markers"
 msgstr "Marcadores de localizacin"
 
-#: editor.cc:190 editor_rulers.cc:385
+#: editor.cc:193 editor_rulers.cc:386
 #, fuzzy
 msgid "Range Markers"
 msgstr "Marcadores de intervalo"
 
-#: editor.cc:191 editor_rulers.cc:391
+#: editor.cc:194 editor_rulers.cc:392
 msgid "Loop/Punch Ranges"
 msgstr ""
 
-#: editor.cc:213
+#: editor.cc:216
 msgid "range"
 msgstr "intervalo"
 
-#: editor.cc:214
+#: editor.cc:217
 msgid "object"
 msgstr "objeto"
 
-#: editor.cc:216
+#: editor.cc:219
 msgid "zoom"
 msgstr "zoom"
 
-#: editor.cc:217
+#: editor.cc:220
 msgid "timefx"
 msgstr ""
 
-#: editor.cc:218
+#: editor.cc:221
 msgid "listen"
 msgstr ""
 
-#: editor.cc:220
+#: editor.cc:223
 msgid "mode"
 msgstr "modo"
 
-#: editor.cc:221
+#: editor.cc:224
 msgid "automation"
 msgstr "automatizacin"
 
-#: editor.cc:223
+#: editor.cc:226
 msgid "Edit Mode"
 msgstr "Modo de edicin"
 
-#: editor.cc:224 editor_actions.cc:283
+#: editor.cc:227 editor_actions.cc:284
 msgid "Snap To"
 msgstr "Ajustar a"
 
-#: editor.cc:225
+#: editor.cc:228
 #, fuzzy
 msgid "Snap Mode"
 msgstr "Modo de ajuste"
 
-#: editor.cc:226
+#: editor.cc:229
 msgid "Zoom Focus"
 msgstr "Foco de Zoom"
 
 #. </CMT Additions>
 #. nudge
-#: editor.cc:234 editor.cc:1907 editor.cc:2073 editor.cc:2129
+#: editor.cc:237 editor.cc:1900 editor.cc:2066 editor.cc:2122
 msgid "Nudge"
 msgstr "Retocar"
 
-#: editor.cc:466
+#: editor.cc:470
 msgid "Zoom in"
 msgstr "Acercar"
 
-#: editor.cc:467
+#: editor.cc:471
 msgid "Zoom out"
 msgstr "Alejar"
 
-#: editor.cc:470
+#: editor.cc:474
 msgid "Zoom to session"
 msgstr "Mostrar toda la sesin"
 
-#: editor.cc:485
+#: editor.cc:489
 msgid "Zoom Span"
 msgstr "Alcance de zoom"
 
-#: editor.cc:498 editor.cc:524 editor_actions.cc:61 mixer_ui.cc:85
+#: editor.cc:502 editor.cc:528 editor_actions.cc:62 mixer_ui.cc:86
+#: mixer_ui.cc:112
 #, fuzzy
 msgid "Visible"
 msgstr "visible"
 
-#: editor.cc:499 editor.cc:522
+#: editor.cc:503 editor.cc:526
 #, fuzzy
 msgid "Name"
 msgstr "Cuadros"
 
-#: editor.cc:595 editor.cc:661
+#: editor.cc:602 editor.cc:669
 #, fuzzy
 msgid "Regions"
 msgstr "Regin"
 
-#: editor.cc:634 editor.cc:673
+#: editor.cc:642 editor.cc:681
 msgid "Chunks"
 msgstr "Trechos"
 
-#: editor.cc:664
+#: editor.cc:672
 #, fuzzy
 msgid "Tracks/Busses"
 msgstr "Pistas/Buses"
 
-#: editor.cc:667
+#: editor.cc:675
 msgid "Snapshots"
 msgstr "Capturas"
 
-#: editor.cc:670
+#: editor.cc:678
 msgid "Edit Groups"
 msgstr "Editar Grupos"
 
-#: editor.cc:719
+#: editor.cc:727
 msgid "Nudge region/selection forwards"
 msgstr "Retocar regin/selecin adelante"
 
-#: editor.cc:720
+#: editor.cc:728
 msgid "Nudge region/selection backwards"
 msgstr "Retocar regin/selecin atr�"
 
-#: editor.cc:727 editor_mixer.cc:298
+#: editor.cc:735 editor_mixer.cc:299
 msgid "ardour: editor"
 msgstr ""
 
-#: editor.cc:728
+#: editor.cc:736
 msgid "ardour_editor"
 msgstr ""
 
-#: editor.cc:1190
+#: editor.cc:1183
 msgid "ardour: editor: "
 msgstr ""
 
 #. force name
-#: editor.cc:1275 editor.cc:1284 editor_markers.cc:869
+#: editor.cc:1268 editor.cc:1277 editor_markers.cc:870
 msgid "Loop"
 msgstr "c�lico"
 
 #. force name
-#: editor.cc:1289 editor.cc:1298 editor_markers.cc:895
+#: editor.cc:1282 editor.cc:1291 editor_markers.cc:896
 msgid "Punch"
 msgstr "Insercin"
 
-#: editor.cc:1446 editor_mouse.cc:1721
+#: editor.cc:1439 editor_mouse.cc:1742
 msgid "programming error: fade in canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor.cc:1458 editor.cc:1475 redirect_box.cc:1071
+#: editor.cc:1451 editor.cc:1468 redirect_box.cc:1073
 msgid "Deactivate"
 msgstr "Desactivar"
 
 #. activation
-#: editor.cc:1460 editor.cc:1477 redirect_box.cc:1069
+#: editor.cc:1453 editor.cc:1470 redirect_box.cc:1071
 msgid "Activate"
 msgstr "Activar"
 
-#: editor.cc:1465 editor.cc:1482
+#: editor.cc:1458 editor.cc:1475
 #, fuzzy
 msgid "Linear"
 msgstr "linear"
 
-#: editor.cc:1466 editor.cc:1483 editor_actions.cc:375
+#: editor.cc:1459 editor.cc:1476 editor_actions.cc:376
 #, fuzzy
 msgid "Slowest"
 msgstr "Menor"
 
-#: editor.cc:1467 editor.cc:1484 editor_actions.cc:376
+#: editor.cc:1460 editor.cc:1477 editor_actions.cc:377
 #, fuzzy
 msgid "Slow"
 msgstr "Solo"
 
-#: editor.cc:1468 editor.cc:1485 editor_actions.cc:378
+#: editor.cc:1461 editor.cc:1478 editor_actions.cc:379
 #, fuzzy
 msgid "Fast"
 msgstr "Fades"
 
-#: editor.cc:1469 editor.cc:1486 editor_actions.cc:380
+#: editor.cc:1462 editor.cc:1479 editor_actions.cc:381
 #, fuzzy
 msgid "Fastest"
 msgstr "r�ido"
 
-#: editor.cc:1596 editor.cc:1604
+#: editor.cc:1589 editor.cc:1597
 msgid "Freeze"
 msgstr "Unir regiones"
 
-#: editor.cc:1600
+#: editor.cc:1593
 msgid "Unfreeze"
 msgstr "Separar regiones"
 
-#: editor.cc:1769 editor.cc:1864
+#: editor.cc:1762 editor.cc:1857
 #, fuzzy
 msgid "Unmute"
 msgstr "mudo"
 
 #. non-operative menu items for menu bar
 #. show editors
-#: editor.cc:1773 editor.cc:2053 editor.cc:2755 editor_actions.cc:26
-#: editor_markers.cc:506 mixer_strip.cc:512 mixer_strip.cc:572
-#: redirect_box.cc:1077
+#: editor.cc:1766 editor.cc:2046 editor.cc:2748 editor_actions.cc:27
+#: editor_markers.cc:507 mixer_strip.cc:495 mixer_strip.cc:563
+#: redirect_box.cc:1079
 msgid "Edit"
 msgstr "Editar"
 
-#: editor.cc:1778
+#: editor.cc:1771
 msgid "Convert to short"
 msgstr ""
 
-#: editor.cc:1780
+#: editor.cc:1773
 msgid "Convert to full"
 msgstr ""
 
-#: editor.cc:1791
+#: editor.cc:1784
 #, fuzzy
 msgid "Crossfade"
 msgstr "editar fade in"
 
-#: editor.cc:1834
+#: editor.cc:1827
 msgid "Popup region editor"
 msgstr "Editor de regiones"
 
-#: editor.cc:1835
+#: editor.cc:1828
 #, fuzzy
 msgid "Raise to top layer"
 msgstr "Elevar regin a la capa m� alta"
 
-#: editor.cc:1836
+#: editor.cc:1829
 #, fuzzy
 msgid "Lower to bottom layer"
 msgstr "Enviar regin a capa m� baja"
 
-#: editor.cc:1838
+#: editor.cc:1831
 msgid "Define sync point"
 msgstr "Definir punto de sincron�"
 
-#: editor.cc:1839
+#: editor.cc:1832
 msgid "Remove sync point"
 msgstr "Remover punto de sincron�"
 
-#: editor.cc:1844
+#: editor.cc:1837
 #, fuzzy
 msgid "Bounce"
 msgstr "intervalo"
 
-#: editor.cc:1847
+#: editor.cc:1840
 #, fuzzy
 msgid "Analyze region"
 msgstr "Reproducir Regin"
 
-#: editor.cc:1859
+#: editor.cc:1852
 #, fuzzy
 msgid "Lock"
 msgstr "bloquear"
 
-#: editor.cc:1860
+#: editor.cc:1853
 #, fuzzy
 msgid "Unlock"
 msgstr "Desbloquear"
 
-#: editor.cc:1870
+#: editor.cc:1863
 #, fuzzy
 msgid "Original position"
 msgstr "Posicin original"
 
-#: editor.cc:1876
+#: editor.cc:1869
 msgid "Toggle envelope visibility"
 msgstr ""
 
-#: editor.cc:1877
+#: editor.cc:1870
 #, fuzzy
 msgid "Toggle envelope active"
 msgstr "activar"
 
-#: editor.cc:1881
+#: editor.cc:1874
 #, fuzzy
 msgid "DeNormalize"
 msgstr "Normalizar"
 
-#: editor.cc:1883
+#: editor.cc:1876
 #, fuzzy
 msgid "Normalize"
 msgstr "Normalizar"
 
-#: editor.cc:1886
+#: editor.cc:1879
 #, fuzzy
 msgid "Reverse"
 msgstr "Invertir"
 
 #. range related stuff
-#: editor.cc:1892
+#: editor.cc:1885
 #, fuzzy
 msgid "Add Range Markers"
 msgstr "Marcadores de intervalo"
 
-#: editor.cc:1893
+#: editor.cc:1886
 #, fuzzy
 msgid "Set Range"
 msgstr "Separar Regin"
 
-#: editor.cc:1902
+#: editor.cc:1895
 #, fuzzy
 msgid "Nudge fwd"
 msgstr "Retocar"
 
-#: editor.cc:1903
+#: editor.cc:1896
 #, fuzzy
 msgid "Nudge bwd"
 msgstr "Retocar"
 
-#: editor.cc:1904
+#: editor.cc:1897
 msgid "Nudge fwd by capture offset"
 msgstr ""
 
-#: editor.cc:1905
+#: editor.cc:1898
 msgid "Nudge bwd by capture offset"
 msgstr ""
 
-#: editor.cc:1914
+#: editor.cc:1907
 msgid "Start to edit cursor"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor.cc:1915
+#: editor.cc:1908
 msgid "Edit cursor to end"
 msgstr "Desde cursor de edicin hasta final"
 
-#: editor.cc:1917
+#: editor.cc:1910 gain_meter.cc:181 gain_meter.cc:813 panner_ui.cc:98
+#: panner_ui.cc:803
 msgid "Trim"
 msgstr "Cortar"
 
-#: editor.cc:1920
+#: editor.cc:1913
 msgid "Split"
 msgstr "Separar"
 
-#: editor.cc:1923
+#: editor.cc:1916
 msgid "Make mono regions"
 msgstr "Crear regiones mono"
 
-#: editor.cc:1926
+#: editor.cc:1919
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: editor.cc:1927
+#: editor.cc:1920
 msgid "Fill Track"
 msgstr "Llenar Pista"
 
-#: editor.cc:1931
+#: editor.cc:1924
 #, fuzzy
 msgid "Destroy"
 msgstr "Destruir"
 
-#: editor.cc:1961
+#: editor.cc:1954
 #, fuzzy
 msgid "Play range"
 msgstr "Reproducir el intervalo cont�uamente"
 
-#: editor.cc:1962
+#: editor.cc:1955
 #, fuzzy
 msgid "Loop range"
 msgstr "rango de reproduccin cont�ua"
 
-#: editor.cc:1966
+#: editor.cc:1959
 #, fuzzy
 msgid "Analyze range"
 msgstr "Reproducir el intervalo cont�uamente"
 
-#: editor.cc:1970
+#: editor.cc:1963
 #, fuzzy
 msgid "Separate range to track"
 msgstr "Separar Regin"
 
-#: editor.cc:1971
+#: editor.cc:1964
 #, fuzzy
 msgid "Separate range to region list"
 msgstr "Reproducir regin seleccionada cont�uamente"
 
-#: editor.cc:1974
+#: editor.cc:1967
 #, fuzzy
 msgid "Select all in range"
 msgstr "Seleccionar todo dentro de pista"
 
-#: editor.cc:1976 editor.cc:2021
+#: editor.cc:1969 editor.cc:2014
 #, fuzzy
 msgid "Set range to loop range"
 msgstr "seleccionar rango de zoom"
 
-#: editor.cc:1977 editor.cc:2022
+#: editor.cc:1970 editor.cc:2015
 #, fuzzy
 msgid "Set range to punch range"
 msgstr "Seleccionar intervalo actual"
 
-#: editor.cc:1979
+#: editor.cc:1972
 #, fuzzy
 msgid "Crop region to range"
 msgstr "Acortar regin hasta la seleccin"
 
-#: editor.cc:1980
+#: editor.cc:1973
 #, fuzzy
 msgid "Fill range with region"
 msgstr "Crear Regin"
 
-#: editor.cc:1981
+#: editor.cc:1974
 #, fuzzy
 msgid "Duplicate range"
 msgstr "Duplicar"
 
-#: editor.cc:1982
+#: editor.cc:1975
 #, fuzzy
 msgid "Create chunk from range"
 msgstr "Crear trecho a partir de seleccin"
 
-#: editor.cc:1984
+#: editor.cc:1977
 #, fuzzy
 msgid "Bounce range"
 msgstr "intervalo"
 
-#: editor.cc:1985
+#: editor.cc:1978
 #, fuzzy
 msgid "Export range"
 msgstr "Exportar regin"
 
-#: editor.cc:1987
+#: editor.cc:1980
 #, fuzzy
 msgid "Range"
 msgstr "intervalo"
 
-#: editor.cc:2002 editor.cc:2087
+#: editor.cc:1995 editor.cc:2080
 #, fuzzy
 msgid "Play from edit cursor"
 msgstr "Reproducir desde el cursor"
 
-#: editor.cc:2003 editor.cc:2088
+#: editor.cc:1996 editor.cc:2081
 msgid "Play from start"
 msgstr "Reproducir desde el principio"
 
-#: editor.cc:2004
+#: editor.cc:1997
 #, fuzzy
 msgid "Play region"
 msgstr "Reproducir Regin"
 
-#: editor.cc:2006
+#: editor.cc:1999
 #, fuzzy
 msgid "Loop Region"
 msgstr "Reproducir regin cont�uamente"
 
-#: editor.cc:2008 editor.cc:2089 sfdb_ui.cc:56
-msgid "Play"
-msgstr "Reproducir"
-
-#: editor.cc:2016 editor.cc:2097
+#: editor.cc:2009 editor.cc:2090
 #, fuzzy
 msgid "Select All in track"
 msgstr "Seleccionar todo dentro de pista"
 
-#: editor.cc:2017 editor.cc:2098 redirect_box.cc:1065
+#: editor.cc:2010 editor.cc:2091 redirect_box.cc:1067
 #, fuzzy
 msgid "Select All"
 msgstr "Seleccionar todo"
 
-#: editor.cc:2018 editor.cc:2099
+#: editor.cc:2011 editor.cc:2092
 #, fuzzy
 msgid "Invert selection in track"
 msgstr "Invertir dentro de pista"
 
-#: editor.cc:2019 editor.cc:2100
+#: editor.cc:2012 editor.cc:2093
 #, fuzzy
 msgid "Invert selection"
 msgstr "Grabar seleccin"
 
-#: editor.cc:2024 editor.cc:2102
+#: editor.cc:2017 editor.cc:2095
 #, fuzzy
 msgid "Select all after edit cursor"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor.cc:2025 editor.cc:2103
+#: editor.cc:2018 editor.cc:2096
 #, fuzzy
 msgid "Select all before edit cursor"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor.cc:2026 editor.cc:2104
+#: editor.cc:2019 editor.cc:2097
 #, fuzzy
 msgid "Select all after playhead"
 msgstr "Ubicar desde barra de reproduccin"
 
-#: editor.cc:2027 editor.cc:2105
+#: editor.cc:2020 editor.cc:2098
 #, fuzzy
 msgid "Select all before playhead"
 msgstr "Ubicar desde barra de reproduccin"
 
-#: editor.cc:2028
+#: editor.cc:2021
 #, fuzzy
 msgid "Select all between cursors"
 msgstr "Desde principio hasta cursor de edicin"
 
 #. standard editing stuff
-#: editor.cc:2039 editor.cc:2115 editor.cc:3455 editor_actions.cc:213
-#: redirect_box.cc:1058
+#: editor.cc:2032 editor.cc:2108 editor.cc:3483 editor_actions.cc:214
+#: redirect_box.cc:1060
 msgid "Cut"
 msgstr "Cortar"
 
-#: editor.cc:2040 editor.cc:2116 editor.cc:3457 editor_actions.cc:218
-#: redirect_box.cc:1060
+#: editor.cc:2033 editor.cc:2109 editor.cc:3485 editor_actions.cc:219
+#: redirect_box.cc:1062
 msgid "Copy"
 msgstr "Copiar"
 
-#: editor.cc:2041
+#: editor.cc:2034
 #, fuzzy
 msgid "Paste at edit cursor"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor.cc:2042
+#: editor.cc:2035
 #, fuzzy
 msgid "Paste at mouse"
 msgstr "usar salidas Master"
 
-#: editor.cc:2046 editor.cc:3462
+#: editor.cc:2039 editor.cc:3490
 msgid "Align"
 msgstr "Alinear"
 
-#: editor.cc:2047 editor.cc:3464
+#: editor.cc:2040 editor.cc:3492
 msgid "Align Relative"
 msgstr "Alinear relativamente"
 
-#: editor.cc:2051
+#: editor.cc:2044
 msgid "Insert chunk"
 msgstr "Insertar trecho"
 
-#: editor.cc:2058
+#: editor.cc:2051
 #, fuzzy
 msgid "Insert Selected Region"
 msgstr "Reproducir regin seleccionada cont�uamente"
 
-#: editor.cc:2059
+#: editor.cc:2052
 msgid "Insert Existing Audio"
 msgstr ""
 
-#: editor.cc:2068 editor.cc:2124
+#: editor.cc:2061 editor.cc:2117
 msgid "Nudge entire track fwd"
 msgstr "Retocar toda la pista adelante"
 
-#: editor.cc:2069 editor.cc:2125
+#: editor.cc:2062 editor.cc:2118
 msgid "Nudge track after edit cursor fwd"
 msgstr "Retocar pista desde cursor de edicin adelante"
 
-#: editor.cc:2070 editor.cc:2126
+#: editor.cc:2063 editor.cc:2119
 msgid "Nudge entire track bwd"
 msgstr "Retocar toda la pista atr�"
 
-#: editor.cc:2071 editor.cc:2127
+#: editor.cc:2064 editor.cc:2120
 msgid "Nudge track after edit cursor bwd"
 msgstr "Retocar toda la pista, desde cursor de edicin atr�"
 
-#: editor.cc:2117 editor.cc:3459 editor_actions.cc:220 redirect_box.cc:1062
+#: editor.cc:2110 editor.cc:3487 editor_actions.cc:221 redirect_box.cc:1064
 msgid "Paste"
 msgstr "Pegar"
 
-#: editor.cc:2637
+#: editor.cc:2630
 msgid "select/move objects"
 msgstr "selecionar/mover objetos"
 
-#: editor.cc:2638
+#: editor.cc:2631
 msgid "select/move ranges"
 msgstr "selecionar/mover intervalos"
 
-#: editor.cc:2639
+#: editor.cc:2632
 msgid "draw gain automation"
 msgstr "dibujar automatizacin de volumen"
 
-#: editor.cc:2640
+#: editor.cc:2633
 msgid "select zoom range"
 msgstr "seleccionar rango de zoom"
 
-#: editor.cc:2641
+#: editor.cc:2634
 msgid "stretch/shrink regions"
 msgstr "estirar/encoger regiones"
 
-#: editor.cc:2642
+#: editor.cc:2635
 #, fuzzy
 msgid "listen to specific regions"
 msgstr "Reproducir regin seleccionada cont�uamente"
 
-#: editor.cc:2753
+#: editor.cc:2746
 msgid "Start:"
 msgstr "Inicio:"
 
-#: editor.cc:2754
+#: editor.cc:2747
 msgid "End:"
 msgstr "Final:"
 
-#: editor.cc:3097
-#, fuzzy
-msgid "set selected trackview"
-msgstr "Insertar seleccin"
-
-#: editor.cc:3137
-#, fuzzy
-msgid "set selected control point"
-msgstr "Remover punto de sincron�"
-
-#: editor.cc:3246
+#: editor.cc:3362 editor.cc:3402
 #, fuzzy
-msgid "set selected regionview"
+msgid "set selected regions"
 msgstr "Reproducir regin seleccionada cont�uamente"
 
-#: editor.cc:3334 editor.cc:3374
-#, fuzzy
-msgid "set selected regions"
-msgstr "Reproducir regin seleccionada cont�uamente"
-
-#: editor.cc:3430 editor_actions.cc:203
+#: editor.cc:3458 editor_actions.cc:204
 msgid "Undo"
 msgstr "Deshacer"
 
-#: editor.cc:3432
+#: editor.cc:3460
 msgid "Undo (%1)"
 msgstr "Deshacer (%1)"
 
-#: editor.cc:3442 editor_actions.cc:205
+#: editor.cc:3470 editor_actions.cc:206
 msgid "Redo"
 msgstr "Rehacer"
 
-#: editor.cc:3444
+#: editor.cc:3472
 msgid "Redo (%1)"
 msgstr "Rehacer (%1)"
 
-#: editor.cc:3478
+#: editor.cc:3506
 msgid "... as new track"
 msgstr ""
 
-#: editor.cc:3479
+#: editor.cc:3507
 #, fuzzy
 msgid "... as new region"
 msgstr "normalizar regiones"
 
-#: editor.cc:3481
+#: editor.cc:3509
 msgid "Import audio (copy)"
 msgstr "Importar audio (copiar)"
 
-#: editor.cc:3484
+#: editor.cc:3512
 #, fuzzy
 msgid "Remove last capture"
 msgstr "Quitar ltima captura"
 
-#: editor.cc:3508
+#: editor.cc:3536
 msgid "Duplicate how many times?"
 msgstr "Duplicar cuantas veces?"
 
-#: editor.cc:3994
+#: editor.cc:4022
 msgid ""
 "Playlist %1 is currently unused.\n"
 "If left alone, no audio files used by it will be cleaned.\n"
 "If deleted, audio files used by it alone by will cleaned."
 msgstr ""
 
-#: editor.cc:4002
+#: editor.cc:4030
 #, fuzzy
 msgid "Delete playlist"
 msgstr "Nombre a captura de sesin"
 
-#: editor.cc:4003
+#: editor.cc:4031
 #, fuzzy
 msgid "Keep playlist"
 msgstr "Nombre a captura de sesin"
 
-#: editor.cc:4004 editor_audio_import.cc:237 editor_ops.cc:1976
-#: editor_timefx.cc:52 export_dialog.cc:971 io_selector.cc:58
-#: io_selector.cc:792 redirect_box.cc:901 tempo_dialog.cc:19
-#: tempo_dialog.cc:36 tempo_dialog.cc:152 tempo_dialog.cc:170
+#: editor.cc:4032 editor_audio_import.cc:236 editor_ops.cc:2048
+#: editor_timefx.cc:71 export_dialog.cc:971 io_selector.cc:59
+#: io_selector.cc:793 redirect_box.cc:903 tempo_dialog.cc:20
+#: tempo_dialog.cc:37 tempo_dialog.cc:202 tempo_dialog.cc:220
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: editor.cc:4171
+#: editor.cc:4199
 #, fuzzy
 msgid "new playlists"
 msgstr "Nombre a captura de sesin"
 
-#: editor.cc:4179
+#: editor.cc:4207
 #, fuzzy
 msgid "copy playlists"
 msgstr "Nombre a captura de sesin"
 
-#: editor.cc:4187
+#: editor.cc:4215
 #, fuzzy
 msgid "clear playlists"
 msgstr "Nombre a captura de sesin"
 
-#: editor_actions.cc:27
+#: editor_actions.cc:28
 #, fuzzy
 msgid "Select regions"
 msgstr "Reproducir regin seleccionada cont�uamente"
 
-#: editor_actions.cc:28
+#: editor_actions.cc:29
 #, fuzzy
 msgid "Select range operations"
 msgstr "Reproducir regin seleccionada cont�uamente"
 
-#: editor_actions.cc:29
+#: editor_actions.cc:30
 #, fuzzy
 msgid "Move edit cursor"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor_actions.cc:30
+#: editor_actions.cc:31
 #, fuzzy
 msgid "Region operations"
 msgstr "Regiones/creacin"
 
-#: editor_actions.cc:31
+#: editor_actions.cc:32
 msgid "Tools"
 msgstr ""
 
-#: editor_actions.cc:32
+#: editor_actions.cc:33
 msgid "View"
 msgstr ""
 
-#: editor_actions.cc:33
+#: editor_actions.cc:34
 #, fuzzy
 msgid "ZoomFocus"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:34
+#: editor_actions.cc:35
 #, fuzzy
 msgid "Meter hold"
 msgstr "Vmetro"
 
-#: editor_actions.cc:35
+#: editor_actions.cc:36
 msgid "Meter falloff"
 msgstr ""
 
-#: editor_actions.cc:37
+#: editor_actions.cc:38
 #, fuzzy
 msgid "Crossfades"
 msgstr "editar fade in"
 
-#: editor_actions.cc:38
+#: editor_actions.cc:39
 #, fuzzy
 msgid "Monitoring"
 msgstr "Monitorizacin por Hardware"
 
-#: editor_actions.cc:39
+#: editor_actions.cc:40
 #, fuzzy
 msgid "Autoconnect"
 msgstr "Conectar"
 
-#: editor_actions.cc:40
+#: editor_actions.cc:41
 #, fuzzy
 msgid "Layering"
 msgstr "Capa"
 
-#: editor_actions.cc:41
+#: editor_actions.cc:42
 #, fuzzy
 msgid "Metering"
 msgstr "Vmetro"
 
-#: editor_actions.cc:42
+#: editor_actions.cc:43
 msgid "Fall off rate"
 msgstr ""
 
-#: editor_actions.cc:43
+#: editor_actions.cc:44
 msgid "Hold Time"
 msgstr ""
 
-#: editor_actions.cc:44
+#: editor_actions.cc:45
 msgid "Add Existing Audio"
 msgstr ""
 
 #. add named actions for the editor
-#: editor_actions.cc:49
+#: editor_actions.cc:50
 #, fuzzy
 msgid "Show Editor Mixer"
 msgstr "Mostrar todas las pistas de Audio en el Mixer"
 
-#: editor_actions.cc:54
+#: editor_actions.cc:55
 #, fuzzy
 msgid "Span Entire Overlap"
 msgstr "Elevar regin una capa"
 
-#: editor_actions.cc:56 editor_actions.cc:383
+#: editor_actions.cc:57 editor_actions.cc:384
 #, fuzzy
 msgid "Short"
 msgstr "conector"
 
-#: editor_actions.cc:63
+#: editor_actions.cc:64
 msgid "Created Automatically"
 msgstr ""
 
-#: editor_actions.cc:66
+#: editor_actions.cc:67
 msgid "Playhead to Next Region Start"
 msgstr ""
 
-#: editor_actions.cc:68
+#: editor_actions.cc:69
 msgid "Playhead to Next Region End"
 msgstr ""
 
-#: editor_actions.cc:70
+#: editor_actions.cc:71
 msgid "Playhead to Next Region Sync"
 msgstr ""
 
-#: editor_actions.cc:73
+#: editor_actions.cc:74
 msgid "Playhead to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:75
+#: editor_actions.cc:76
 msgid "Playhead to Previous Region End"
 msgstr ""
 
-#: editor_actions.cc:77
+#: editor_actions.cc:78
 msgid "Playhead to Previous Region Sync"
 msgstr ""
 
-#: editor_actions.cc:80
+#: editor_actions.cc:81
 #, fuzzy
 msgid "Edit Cursor to Next Region Start"
 msgstr "Desde cursor de edicin hasta final"
 
-#: editor_actions.cc:82
+#: editor_actions.cc:83
 #, fuzzy
 msgid "Edit Cursor to Next Region End"
 msgstr "Desde cursor de edicin hasta final"
 
-#: editor_actions.cc:84
+#: editor_actions.cc:85
 #, fuzzy
 msgid "Edit Cursor to Next Region Sync"
 msgstr "Desde cursor de edicin hasta final"
 
-#: editor_actions.cc:87
+#: editor_actions.cc:88
 msgid "Edit Cursor to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:89
+#: editor_actions.cc:90
 #, fuzzy
 msgid "Edit Cursor to Previous Region End"
 msgstr "Desde cursor de edicin hasta final"
 
-#: editor_actions.cc:91
+#: editor_actions.cc:92
 #, fuzzy
 msgid "Edit Cursor to Previous Region Sync"
 msgstr "Desde cursor de edicin hasta final"
 
-#: editor_actions.cc:94
+#: editor_actions.cc:95
 msgid "Playhead to Range Start"
 msgstr ""
 
-#: editor_actions.cc:96
+#: editor_actions.cc:97
 #, fuzzy
 msgid "Playhead to Range End"
 msgstr "Reproducir el intervalo cont�uamente"
 
-#: editor_actions.cc:99
+#: editor_actions.cc:100
 #, fuzzy
 msgid "Edit Cursor to Range Start"
 msgstr "Desde cursor de edicin hasta final"
 
-#: editor_actions.cc:101
+#: editor_actions.cc:102
 #, fuzzy
 msgid "Edit Cursor to Range End"
 msgstr "Desde cursor de edicin hasta final"
 
-#: editor_actions.cc:104 editor_ops.cc:1300
+#: editor_actions.cc:105 editor_ops.cc:1363
 #, fuzzy
 msgid "select all"
 msgstr "Seleccionar todo"
 
-#: editor_actions.cc:106
+#: editor_actions.cc:107
 #, fuzzy
 msgid "Select All After Edit Cursor"
 msgstr "Reproducir desde el cursor"
 
-#: editor_actions.cc:108
+#: editor_actions.cc:109
 msgid "Select All Before Edit Cursor"
 msgstr ""
 
-#: editor_actions.cc:111
+#: editor_actions.cc:112
 #, fuzzy
 msgid "Select All After Playhead"
 msgstr "Ubicar desde barra de reproduccin"
 
-#: editor_actions.cc:113
+#: editor_actions.cc:114
 #, fuzzy
 msgid "Select All Before Playhead"
 msgstr "Ubicar desde barra de reproduccin"
 
-#: editor_actions.cc:115
+#: editor_actions.cc:116
 #, fuzzy
 msgid "Select All Between Cursors"
 msgstr "Reproducir desde el cursor"
 
-#: editor_actions.cc:118
+#: editor_actions.cc:119
 #, fuzzy
 msgid "Select All in Punch Range"
 msgstr "Seleccionar intervalo de punch"
 
-#: editor_actions.cc:120
+#: editor_actions.cc:121
 #, fuzzy
 msgid "Select All in Loop Range"
 msgstr "seleccionar rango de zoom"
 
-#: editor_actions.cc:123
+#: editor_actions.cc:124
 msgid "Jump Forward to Mark"
 msgstr ""
 
-#: editor_actions.cc:125
+#: editor_actions.cc:126
 msgid "Jump Backward to Mark"
 msgstr ""
 
-#: editor_actions.cc:127
+#: editor_actions.cc:128
 #, fuzzy
 msgid "Add Location from Playhead"
 msgstr "Ubicar desde barra de reproduccin"
 
-#: editor_actions.cc:130
+#: editor_actions.cc:131
 #, fuzzy
 msgid "Nudge Forward"
 msgstr "Retocar"
 
-#: editor_actions.cc:132
+#: editor_actions.cc:133
 #, fuzzy
 msgid "Nudge Next Forward"
 msgstr "Retocar regin/selecin adelante"
 
-#: editor_actions.cc:134
+#: editor_actions.cc:135
 #, fuzzy
 msgid "Nudge Backward"
 msgstr "Retocar"
 
-#: editor_actions.cc:136
+#: editor_actions.cc:137
 #, fuzzy
 msgid "Nudge Next Backward"
 msgstr "Retocar toda la pista adelante"
 
-#: editor_actions.cc:139
+#: editor_actions.cc:140
 #, fuzzy
 msgid "Zoom Out"
 msgstr "Alejar"
 
-#: editor_actions.cc:141
+#: editor_actions.cc:142
 #, fuzzy
 msgid "Zoom In"
 msgstr "Acercar"
 
-#: editor_actions.cc:143
+#: editor_actions.cc:144
 #, fuzzy
 msgid "Zoom to Session"
 msgstr "Mostrar toda la sesin"
 
-#: editor_actions.cc:146
+#: editor_actions.cc:147
 #, fuzzy
 msgid "Scroll Tracks Up"
 msgstr "Llenar Pista"
 
-#: editor_actions.cc:148
+#: editor_actions.cc:149
 msgid "Scroll Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:150
+#: editor_actions.cc:151
 #, fuzzy
 msgid "Step Tracks Up"
 msgstr "Ocultar esta pista"
 
-#: editor_actions.cc:152
+#: editor_actions.cc:153
 msgid "Step Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:155
+#: editor_actions.cc:156
 msgid "Scroll Backward"
 msgstr ""
 
-#: editor_actions.cc:157
+#: editor_actions.cc:158
 msgid "Scroll Forward"
 msgstr ""
 
-#: editor_actions.cc:159
+#: editor_actions.cc:160
 msgid "goto"
 msgstr ""
 
-#: editor_actions.cc:161
+#: editor_actions.cc:162
 #, fuzzy
 msgid "Center Playhead"
 msgstr "Barra de reproduccin"
 
-#: editor_actions.cc:163
+#: editor_actions.cc:164
 #, fuzzy
 msgid "Center Edit Cursor"
 msgstr "Cursor de Edicin"
 
-#: editor_actions.cc:165
+#: editor_actions.cc:166
 #, fuzzy
 msgid "Playhead Forward"
 msgstr "Barra de reproduccin"
 
-#: editor_actions.cc:167
+#: editor_actions.cc:168
 #, fuzzy
 msgid "Playhead Backward"
 msgstr "Barra de reproduccin"
 
-#: editor_actions.cc:169
+#: editor_actions.cc:170
 #, fuzzy
 msgid "Playhead to Edit"
 msgstr "Barra de reproduccin"
 
-#: editor_actions.cc:171
+#: editor_actions.cc:172
 #, fuzzy
 msgid "Edit to Playhead"
 msgstr "Ubicar desde barra de reproduccin"
 
-#: editor_actions.cc:174
+#: editor_actions.cc:175
 #, fuzzy
 msgid "Align Regions Start"
 msgstr "Comienzos de regin"
 
-#: editor_actions.cc:176
+#: editor_actions.cc:177
 #, fuzzy
 msgid "Align Regions Start Relative"
 msgstr "Alinear relativamente"
 
-#: editor_actions.cc:178
+#: editor_actions.cc:179
 #, fuzzy
 msgid "Align Regions End"
 msgstr "normalizar regiones"
 
-#: editor_actions.cc:180
+#: editor_actions.cc:181
 #, fuzzy
 msgid "Align Regions End Relative"
 msgstr "Alinear relativamente"
 
-#: editor_actions.cc:183
+#: editor_actions.cc:184
 #, fuzzy
 msgid "Align Regions Sync"
 msgstr "normalizar regiones"
 
-#: editor_actions.cc:185
+#: editor_actions.cc:186
 #, fuzzy
 msgid "Align Regions Sync Relative"
 msgstr "Alinear relativamente"
 
-#: editor_actions.cc:188
+#: editor_actions.cc:189
 #, fuzzy
 msgid "Audition at Mouse"
 msgstr "Audicionando"
 
-#: editor_actions.cc:190
+#: editor_actions.cc:191
 #, fuzzy
 msgid "Brush at Mouse"
 msgstr "usar salidas Master"
 
-#: editor_actions.cc:192
+#: editor_actions.cc:193
 #, fuzzy
 msgid "Set Edit Cursor"
 msgstr "Cursor de Edicin"
 
-#: editor_actions.cc:194
+#: editor_actions.cc:195
 #, fuzzy
 msgid "Mute/Unmute Region"
 msgstr "Crear Regin"
 
-#: editor_actions.cc:196
+#: editor_actions.cc:197
 #, fuzzy
 msgid "Set Playhead"
 msgstr "Barra de reproduccin"
 
-#: editor_actions.cc:198
+#: editor_actions.cc:199
 #, fuzzy
 msgid "Split Region"
 msgstr "Separar Regin"
 
-#: editor_actions.cc:200
+#: editor_actions.cc:201
 #, fuzzy
 msgid "Set Region Sync Position"
 msgstr "Por Posicin de regin"
 
-#: editor_actions.cc:208
+#: editor_actions.cc:209
 #, fuzzy
 msgid "Export Session"
 msgstr "Exportar regin"
 
-#: editor_actions.cc:210
+#: editor_actions.cc:211
 #, fuzzy
 msgid "Export Range"
 msgstr "Separar Regin"
 
 #. Note: for now, editor-delete does the exact same thing as editor-cut
-#: editor_actions.cc:216
+#: editor_actions.cc:217
 #, fuzzy
 msgid "Delete"
 msgstr "quitar"
 
-#: editor_actions.cc:222
+#: editor_actions.cc:223
 #, fuzzy
 msgid "Duplicate Region"
 msgstr "Reproducir regin seleccionada cont�uamente"
 
-#: editor_actions.cc:224
+#: editor_actions.cc:225
 #, fuzzy
 msgid "Duplicate Range"
 msgstr "Duplicar"
 
-#: editor_actions.cc:226
+#: editor_actions.cc:227
 msgid "Insert Region"
 msgstr "Insertar Regin"
 
-#: editor_actions.cc:228
+#: editor_actions.cc:229
 #, fuzzy
 msgid "Reverse Region"
 msgstr "invertir regiones"
 
-#: editor_actions.cc:230
+#: editor_actions.cc:231
 #, fuzzy
 msgid "Normalize Region"
 msgstr "Normalizar"
 
-#: editor_actions.cc:232
+#: editor_actions.cc:233
 #, fuzzy
 msgid "crop"
 msgstr "copiar"
 
-#: editor_actions.cc:234
+#: editor_actions.cc:235
 #, fuzzy
 msgid "Insert Chunk"
 msgstr "Insertar trecho"
 
-#: editor_actions.cc:237
+#: editor_actions.cc:238
 #, fuzzy
 msgid "Split at edit cursor"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor_actions.cc:240
+#: editor_actions.cc:241
 #, fuzzy
 msgid "Start Range"
 msgstr "Separar Regin"
 
-#: editor_actions.cc:242
+#: editor_actions.cc:243
 msgid "Finish Range"
 msgstr ""
 
-#: editor_actions.cc:244
+#: editor_actions.cc:245
 msgid "Finish add Range"
 msgstr ""
 
-#: editor_actions.cc:247
+#: editor_actions.cc:248
 msgid "Extend Range to End of Region"
 msgstr ""
 
-#: editor_actions.cc:249
+#: editor_actions.cc:250
 #, fuzzy
 msgid "Extend Range to Start of Region"
 msgstr "Ir al inicio de la sesin"
 
-#: editor_actions.cc:252
+#: editor_actions.cc:253
 #, fuzzy
 msgid "Follow Playhead"
 msgstr "Seguir a la barra de reproduccin"
 
-#: editor_actions.cc:260
+#: editor_actions.cc:261
 #, fuzzy
 msgid "Zoom Focus Left"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:262
+#: editor_actions.cc:263
 #, fuzzy
 msgid "Zoom Focus Right"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:264
+#: editor_actions.cc:265
 #, fuzzy
 msgid "Zoom Focus Center"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:266
+#: editor_actions.cc:267
 #, fuzzy
 msgid "Zoom Focus Playhead"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:268
+#: editor_actions.cc:269
 #, fuzzy
 msgid "Zoom Focus Edit"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:274
+#: editor_actions.cc:275
 msgid "Object Tool"
 msgstr ""
 
-#: editor_actions.cc:275
+#: editor_actions.cc:276
 #, fuzzy
 msgid "Range Tool"
 msgstr "intervalo"
 
-#: editor_actions.cc:276
+#: editor_actions.cc:277
 msgid "Gain Tool"
 msgstr ""
 
-#: editor_actions.cc:277
+#: editor_actions.cc:278
 #, fuzzy
 msgid "Zoom Tool"
 msgstr "Alejar"
 
-#: editor_actions.cc:278
+#: editor_actions.cc:279
 msgid "Timefx Tool"
 msgstr ""
 
-#: editor_actions.cc:285
+#: editor_actions.cc:286
 #, fuzzy
 msgid "Snap to frame"
 msgstr "Modo de ajuste"
 
-#: editor_actions.cc:286
+#: editor_actions.cc:287
 #, fuzzy
 msgid "Snap to cd frame"
 msgstr "Modo de ajuste"
 
-#: editor_actions.cc:287
+#: editor_actions.cc:288
 #, fuzzy
 msgid "Snap to SMPTE frame"
 msgstr "SMPTE Cuadros/segundo"
 
-#: editor_actions.cc:288
+#: editor_actions.cc:289
 #, fuzzy
 msgid "Snap to SMPTE seconds"
 msgstr "SMPTE Cuadros/segundo"
 
-#: editor_actions.cc:289
+#: editor_actions.cc:290
 msgid "Snap to SMPTE minutes"
 msgstr ""
 
-#: editor_actions.cc:290
+#: editor_actions.cc:291
 #, fuzzy
 msgid "Snap to seconds"
 msgstr "Minutos:Segundos"
 
-#: editor_actions.cc:291
+#: editor_actions.cc:292
 msgid "Snap to minutes"
 msgstr ""
 
-#: editor_actions.cc:292
+#: editor_actions.cc:293
 #, fuzzy
 msgid "Snap to thirtyseconds"
 msgstr "trig�ima segunda (32)"
 
-#: editor_actions.cc:293
+#: editor_actions.cc:294
 msgid "Snap to asixteenthbeat"
 msgstr ""
 
-#: editor_actions.cc:294
+#: editor_actions.cc:295
 msgid "Snap to eighths"
 msgstr ""
 
-#: editor_actions.cc:295
+#: editor_actions.cc:296
 msgid "Snap to quarters"
 msgstr ""
 
-#: editor_actions.cc:296
+#: editor_actions.cc:297
 #, fuzzy
 msgid "Snap to thirds"
 msgstr "Modo de ajuste"
 
-#: editor_actions.cc:297
+#: editor_actions.cc:298
 #, fuzzy
 msgid "Snap to beat"
 msgstr "Modo de ajuste"
 
-#: editor_actions.cc:298
+#: editor_actions.cc:299
 #, fuzzy
 msgid "Snap to bar"
 msgstr "Ajustar a"
 
-#: editor_actions.cc:299
+#: editor_actions.cc:300
 #, fuzzy
 msgid "Snap to mark"
 msgstr "agregar un marcador de regin"
 
-#: editor_actions.cc:300
+#: editor_actions.cc:301
 #, fuzzy
 msgid "Snap to edit cursor"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor_actions.cc:301
+#: editor_actions.cc:302
 #, fuzzy
 msgid "Snap to region start"
 msgstr "Comienzos de regin"
 
-#: editor_actions.cc:302
+#: editor_actions.cc:303
 #, fuzzy
 msgid "Snap to region end"
 msgstr "Fines de regin"
 
-#: editor_actions.cc:303
+#: editor_actions.cc:304
 #, fuzzy
 msgid "Snap to region sync"
 msgstr "Sincronizaciones de region"
 
-#: editor_actions.cc:304
+#: editor_actions.cc:305
 #, fuzzy
 msgid "Snap to region boundary"
 msgstr "Bordes de regin"
 
 #. the region list popup menu
-#: editor_actions.cc:313
+#: editor_actions.cc:314
 #, fuzzy
 msgid "Sort"
 msgstr "conector"
 
-#: editor_actions.cc:321
+#: editor_actions.cc:322
 msgid "Show all"
 msgstr "Mostrar todo"
 
-#: editor_actions.cc:322
+#: editor_actions.cc:323
 #, fuzzy
 msgid "Show automatic regions"
 msgstr "Mostrar toda automatizacin"
 
-#: editor_actions.cc:324
+#: editor_actions.cc:325
 msgid "Ascending"
 msgstr "Ascendente"
 
-#: editor_actions.cc:326
+#: editor_actions.cc:327
 msgid "Descending"
 msgstr "Descendente"
 
-#: editor_actions.cc:329
+#: editor_actions.cc:330
 msgid "By Region Name"
 msgstr "Por Nombre de Regin"
 
-#: editor_actions.cc:331
+#: editor_actions.cc:332
 msgid "By Region Length"
 msgstr "Por Tamao de Regin"
 
-#: editor_actions.cc:333
+#: editor_actions.cc:334
 msgid "By Region Position"
 msgstr "Por Posicin de regin"
 
-#: editor_actions.cc:335
+#: editor_actions.cc:336
 msgid "By Region Timestamp"
 msgstr "Por fecha de Regin"
 
-#: editor_actions.cc:337
+#: editor_actions.cc:338
 msgid "By Region Start in File"
 msgstr "Por inicio de regin en archivo"
 
-#: editor_actions.cc:339
+#: editor_actions.cc:340
 msgid "By Region End in File"
 msgstr "Por fin de regin en archivo"
 
-#: editor_actions.cc:341
+#: editor_actions.cc:342
 msgid "By Source File Name"
 msgstr "Por nombre de archivo"
 
-#: editor_actions.cc:343
+#: editor_actions.cc:344
 msgid "By Source File Length"
 msgstr "Por tamao de archivo"
 
-#: editor_actions.cc:345
+#: editor_actions.cc:346
 msgid "By Source File Creation Date"
 msgstr "Por fecha de creacin"
 
-#: editor_actions.cc:347
+#: editor_actions.cc:348
 msgid "By Source Filesystem"
 msgstr "Por sistema de archivos"
 
 #. the next two are duplicate items with different names for use in two different contexts
-#: editor_actions.cc:353
+#: editor_actions.cc:354
 #, fuzzy
 msgid "Add External Audio"
 msgstr "Agregar a lista externa de regiones"
 
-#: editor_actions.cc:355
+#: editor_actions.cc:356
 #, fuzzy
 msgid "as Region(s)"
 msgstr "normalizar regiones"
 
-#: editor_actions.cc:357
+#: editor_actions.cc:358
 #, fuzzy
 msgid "as Tracks"
 msgstr "Pistas"
 
-#: editor_actions.cc:359
+#: editor_actions.cc:360
 #, fuzzy
 msgid "to Tracks"
 msgstr "Pistas"
 
-#: editor_actions.cc:362
+#: editor_actions.cc:363
 #, fuzzy
 msgid "Show Waveforms"
 msgstr "Mostrar onda de audio"
 
-#: editor_actions.cc:363
+#: editor_actions.cc:364
 #, fuzzy
 msgid "Show Waveforms While Recording"
 msgstr "Mostrar onda de audio"
 
-#: editor_actions.cc:364
+#: editor_actions.cc:365
 #, fuzzy
 msgid "Show Measures"
 msgstr "Mostrar l�eas de medida"
 
-#: editor_actions.cc:377 editor_actions.cc:384
+#: editor_actions.cc:378 editor_actions.cc:385
 msgid "Medium"
 msgstr ""
 
-#: editor_actions.cc:379
+#: editor_actions.cc:380
 #, fuzzy
 msgid "Faster"
 msgstr "Fades"
 
-#: editor_actions.cc:385
+#: editor_actions.cc:386
 msgid "Long"
 msgstr ""
 
-#: editor_actions.cc:389
+#: editor_actions.cc:390
 #, fuzzy
 msgid "Later is Higher"
 msgstr "Bajar regin una capa"
 
-#: editor_actions.cc:390
+#: editor_actions.cc:391
 #, fuzzy
 msgid "Most Recently Moved/Added is Higher"
 msgstr "Bajar regin una capa"
 
-#: editor_actions.cc:391
+#: editor_actions.cc:392
 #, fuzzy
 msgid "Most Recently Added is Higher"
 msgstr "Bajar regin una capa"
@@ -3471,115 +3458,103 @@ msgstr "No puede importar un archivo a menos que abra o cree una sesin"
 msgid "Add existing audio to session"
 msgstr "Mostrar toda automatizacin"
 
-#: editor_audio_import.cc:143
+#: editor_audio_import.cc:142
 #, fuzzy
 msgid "ardour: importing %1"
 msgstr "ardour: exportar"
 
-#: editor_audio_import.cc:147
+#: editor_audio_import.cc:146
 msgid "Cancel Import"
 msgstr "Cancelar importacin"
 
-#: editor_audio_import.cc:225
+#: editor_audio_import.cc:224
 #, fuzzy
 msgid "Editor: cannot open file \"%1\", (%2)"
 msgstr "Editor: no se pudo abrir el archivo \"%1\" (%2)"
 
-#: editor_audio_import.cc:233
+#: editor_audio_import.cc:232
 #, fuzzy
 msgid "Cancel entire import"
 msgstr "Cancelar importacin"
 
-#: editor_audio_import.cc:234
+#: editor_audio_import.cc:233
 #, fuzzy
 msgid "Don't embed it"
 msgstr "No %1"
 
-#: editor_audio_import.cc:235
+#: editor_audio_import.cc:234
 msgid "Embed all without questions"
 msgstr ""
 
-#: editor_audio_import.cc:240
+#: editor_audio_import.cc:239
 #, fuzzy
 msgid "Embed it anyway"
 msgstr "Linquear de todas formas"
 
-#: editor_audio_import.cc:243
+#: editor_audio_import.cc:242
 #, fuzzy
 msgid ""
 "%1\n"
 "This audiofile's sample rate doesn't match the session sample rate!"
 msgstr "La frecuencia de muestreo de este archivo difiere de la de la sesin!"
 
-#: editor_audio_import.cc:276
+#: editor_audio_import.cc:275
 msgid "could not open %1"
 msgstr "no se pudo abrir %1"
 
-#: editor_audio_import.cc:321
+#: editor_audio_import.cc:320
 #, fuzzy
 msgid "insert sndfile"
 msgstr "Insertar archivo de audio externo"
 
 #. stuff for the verbose canvas cursor
-#: editor_canvas.cc:117
+#: editor_canvas.cc:118
 msgid "VerboseCanvasCursor"
 msgstr ""
 
-#: editor_canvas.cc:285
-msgid "Start a new session\n"
-msgstr "Iniciar una nueva sesin\n"
-
-#: editor_canvas.cc:285
-msgid "via Session menu"
-msgstr "via men de Sesin"
-
-#: editor_canvas.cc:288
-msgid "FirstActionMessage"
-msgstr ""
-
-#: editor_edit_groups.cc:52 mixer_ui.cc:732
+#: editor_edit_groups.cc:53 mixer_ui.cc:736
 #, fuzzy
 msgid "Activate All"
 msgstr "Activar"
 
-#: editor_edit_groups.cc:53 mixer_ui.cc:733
+#: editor_edit_groups.cc:54 mixer_ui.cc:737
 #, fuzzy
 msgid "Disable All"
 msgstr "Desconectar"
 
-#: editor_edit_groups.cc:55 mixer_ui.cc:735
+#: editor_edit_groups.cc:56 mixer_ui.cc:739
 #, fuzzy
 msgid "Add group"
 msgstr "Sin grupo"
 
-#: editor_edit_groups.cc:225 mixer_ui.cc:964
+#: editor_edit_groups.cc:229 mixer_ui.cc:970
 #, fuzzy
 msgid "unnamed"
 msgstr "Renombrar"
 
-#: editor_edit_groups.cc:252 mixer_ui.cc:830
+#: editor_edit_groups.cc:258 mixer_ui.cc:834
 msgid "-all-"
 msgstr "-todo-"
 
-#: editor_export_audio.cc:64
+#: editor_export_audio.cc:65
 msgid ""
 "There is no selection to export.\n"
 "\n"
 "Select a selection using the range mouse mode"
 msgstr ""
 
-#: editor_export_audio.cc:109
+#: editor_export_audio.cc:110
 msgid ""
 "There are no ranges to export.\n"
 "\n"
 "Create 1 or more ranges by dragging the mouse in the range bar"
 msgstr ""
 
-#: editor_imageframe.cc:624 editor_imageframe.cc:654
+#: editor_imageframe.cc:625 editor_imageframe.cc:655
 msgid "programming error: no ImageFrameView selected"
 msgstr ""
 
-#: editor_imageframe.cc:847 editor_imageframe.cc:869
+#: editor_imageframe.cc:848 editor_imageframe.cc:870
 msgid "programming error: no MarkerView selected"
 msgstr ""
 
@@ -3588,142 +3563,142 @@ msgstr ""
 msgid "mute region"
 msgstr "enmudecer a esta regin"
 
-#: editor_keys.cc:45
+#: editor_keys.cc:46
 #, fuzzy
 msgid "keyboard selection"
 msgstr "Separar Seleccin"
 
-#: editor_markers.cc:291 editor_ops.cc:1227 editor_ops.cc:1240
-#: editor_ops.cc:1258 location_ui.cc:773
+#: editor_markers.cc:292 editor_ops.cc:1290 editor_ops.cc:1303
+#: editor_ops.cc:1321 location_ui.cc:774
 msgid "add marker"
 msgstr "agregar marcador"
 
-#: editor_markers.cc:306 editor_markers.cc:379 editor_markers.cc:551
-#: editor_markers.cc:569 editor_markers.cc:588 editor_markers.cc:607
-#: editor_markers.cc:637 editor_markers.cc:665 editor_markers.cc:693
-#: editor_markers.cc:731 editor_markers.cc:758 editor_markers.cc:781
-#: editor_markers.cc:800 editor_mouse.cc:1994 editor_mouse.cc:4237
+#: editor_markers.cc:307 editor_markers.cc:380 editor_markers.cc:552
+#: editor_markers.cc:570 editor_markers.cc:589 editor_markers.cc:608
+#: editor_markers.cc:638 editor_markers.cc:666 editor_markers.cc:694
+#: editor_markers.cc:732 editor_markers.cc:759 editor_markers.cc:782
+#: editor_markers.cc:801 editor_mouse.cc:2015 editor_mouse.cc:4275
 msgid "programming error: marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_markers.cc:330 location_ui.cc:655
+#: editor_markers.cc:331 location_ui.cc:656
 msgid "remove marker"
 msgstr "quitar marcador"
 
-#: editor_markers.cc:457
+#: editor_markers.cc:458
 #, fuzzy
 msgid "Locate to Mark"
 msgstr "Localizar a"
 
-#: editor_markers.cc:458
+#: editor_markers.cc:459
 #, fuzzy
 msgid "Play from Mark"
 msgstr "Reproducir desde el principio"
 
-#: editor_markers.cc:459
+#: editor_markers.cc:460
 #, fuzzy
 msgid "Set Mark from Playhead"
 msgstr "Ubicar desde barra de reproduccin"
 
-#: editor_markers.cc:463
+#: editor_markers.cc:464
 #, fuzzy
 msgid "Rename Mark"
 msgstr "Renombrar"
 
-#: editor_markers.cc:464
+#: editor_markers.cc:465
 #, fuzzy
 msgid "Hide Mark"
 msgstr "Ocultar esta pista"
 
-#: editor_markers.cc:465
+#: editor_markers.cc:466
 #, fuzzy
 msgid "Remove Mark"
 msgstr "quitar marcador"
 
-#: editor_markers.cc:478 editor_markers.cc:534
+#: editor_markers.cc:479 editor_markers.cc:535
 #, fuzzy
 msgid "Locate to Range Mark"
 msgstr "Marcadores de localizacin"
 
-#: editor_markers.cc:479 editor_markers.cc:535
+#: editor_markers.cc:480 editor_markers.cc:536
 #, fuzzy
 msgid "Play from Range Mark"
 msgstr "Reproducir el intervalo cont�uamente"
 
-#: editor_markers.cc:480
+#: editor_markers.cc:481
 #, fuzzy
 msgid "Loop Range"
 msgstr "rango de reproduccin cont�ua"
 
-#: editor_markers.cc:481 editor_markers.cc:536
+#: editor_markers.cc:482 editor_markers.cc:537
 #, fuzzy
 msgid "Set Range Mark from Playhead"
 msgstr "Ubicar desde barra de reproduccin"
 
-#: editor_markers.cc:482 editor_markers.cc:537
+#: editor_markers.cc:483 editor_markers.cc:538
 #, fuzzy
 msgid "Set Range from Range Selection"
 msgstr "Reproducir seleccin"
 
-#: editor_markers.cc:486
+#: editor_markers.cc:487
 #, fuzzy
 msgid "Rename Range"
 msgstr "Renombrar"
 
-#: editor_markers.cc:487 editor_markers.cc:539
+#: editor_markers.cc:488 editor_markers.cc:540
 #, fuzzy
 msgid "Hide Range"
 msgstr "Agregar nueva regin"
 
-#: editor_markers.cc:488
+#: editor_markers.cc:489
 #, fuzzy
 msgid "Remove Range"
 msgstr "Quitar Campo"
 
-#: editor_markers.cc:492 editor_markers.cc:541
+#: editor_markers.cc:493 editor_markers.cc:542
 #, fuzzy
 msgid "Separate Regions in Range"
 msgstr "Nueva region a partir de seleccin"
 
-#: editor_markers.cc:493 editor_markers.cc:542
+#: editor_markers.cc:494 editor_markers.cc:543
 #, fuzzy
 msgid "Select All in Range"
 msgstr "Seleccionar todo dentro de pista"
 
-#: editor_markers.cc:519
+#: editor_markers.cc:520
 #, fuzzy
 msgid "Set Loop Range"
 msgstr "selecionar intervalo de reproduccin cont�ua"
 
-#: editor_markers.cc:520
+#: editor_markers.cc:521
 msgid "Set Punch Range"
 msgstr "Seleccionar intervalo de punch"
 
-#: editor_markers.cc:814
+#: editor_markers.cc:815
 #, fuzzy
 msgid "New Name:"
 msgstr "nuevo nombre: "
 
-#: editor_markers.cc:817
+#: editor_markers.cc:818
 msgid "ardour: rename mark"
 msgstr "ardour: renombrar marca"
 
-#: editor_markers.cc:819
+#: editor_markers.cc:820
 #, fuzzy
 msgid "ardour: rename range"
 msgstr "ardour: renombrar regin"
 
-#: editor_markers.cc:839
+#: editor_markers.cc:840
 #, fuzzy
 msgid "rename marker"
 msgstr "quitar marcador"
 
-#: editor_markers.cc:864
+#: editor_markers.cc:865
 #, fuzzy
 msgid "set loop range"
 msgstr "seleccionar rango de zoom"
 
-#: editor_markers.cc:890
+#: editor_markers.cc:891
 #, fuzzy
 msgid "set punch range"
 msgstr "Seleccionar intervalo actual"
@@ -3732,423 +3707,429 @@ msgstr "Seleccionar intervalo actual"
 msgid "Editor::event_frame() used on unhandled event type %1"
 msgstr ""
 
-#: editor_mouse.cc:1589
+#: editor_mouse.cc:313
+#, fuzzy
+msgid "select on click"
+msgstr "Usar como metrnomo"
+
+#: editor_mouse.cc:1590
 msgid "programming error: start_grab called without drag item"
 msgstr ""
 
-#: editor_mouse.cc:1793
+#: editor_mouse.cc:1814
 #, fuzzy
 msgid "change fade in length"
 msgstr "editar fade in"
 
-#: editor_mouse.cc:1811
+#: editor_mouse.cc:1832
 msgid "programming error: fade out canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:1885
+#: editor_mouse.cc:1906
 #, fuzzy
 msgid "change fade out length"
 msgstr "agregar salida"
 
-#: editor_mouse.cc:1904
+#: editor_mouse.cc:1925
 msgid "programming error: cursor canvas item has no cursor data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2119
+#: editor_mouse.cc:2142
 #, fuzzy
 msgid "move marker"
 msgstr "quitar marcador"
 
-#: editor_mouse.cc:2142 editor_mouse.cc:2173 editor_tempodisplay.cc:461
+#: editor_mouse.cc:2165 editor_mouse.cc:2196 editor_tempodisplay.cc:459
 msgid ""
 "programming error: meter marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2241
+#: editor_mouse.cc:2264
 #, fuzzy
 msgid "copy meter mark"
 msgstr "quitar marcador"
 
-#: editor_mouse.cc:2251
+#: editor_mouse.cc:2274
 #, fuzzy
 msgid "move meter mark"
 msgstr "quitar marcador"
 
-#: editor_mouse.cc:2266 editor_mouse.cc:2299 editor_tempodisplay.cc:327
-#: editor_tempodisplay.cc:411 editor_tempodisplay.cc:430
+#: editor_mouse.cc:2289 editor_mouse.cc:2322 editor_tempodisplay.cc:331
+#: editor_tempodisplay.cc:409 editor_tempodisplay.cc:428
 msgid ""
 "programming error: tempo marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2271 editor_mouse.cc:2304 editor_tempodisplay.cc:332
-#: editor_tempodisplay.cc:416
+#: editor_mouse.cc:2294 editor_mouse.cc:2327 editor_tempodisplay.cc:336
+#: editor_tempodisplay.cc:414
 msgid "programming error: marker for tempo is not a tempo marker!"
 msgstr ""
 
-#: editor_mouse.cc:2371
+#: editor_mouse.cc:2394
 #, fuzzy
 msgid "copy tempo mark"
 msgstr "quitar marcador"
 
-#: editor_mouse.cc:2381
+#: editor_mouse.cc:2404
 #, fuzzy
 msgid "move tempo mark"
 msgstr "quitar marcador"
 
-#: editor_mouse.cc:2395 editor_mouse.cc:2414 editor_mouse.cc:2427
+#: editor_mouse.cc:2418 editor_mouse.cc:2437 editor_mouse.cc:2450
 msgid ""
 "programming error: control point canvas item has no control point object "
 "pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2525
+#: editor_mouse.cc:2555
 msgid "programming error: line canvas item has no line pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2634
+#: editor_mouse.cc:2664
 #, fuzzy
 msgid "move region(s)"
 msgstr "invertir regiones"
 
-#. this is committed in the grab finished callback.
-#: editor_mouse.cc:2646
-msgid "Drag region copy"
-msgstr ""
-
-#: editor_mouse.cc:2758
+#: editor_mouse.cc:2727
 #, fuzzy
 msgid "Drag region brush"
 msgstr "normalizar regiones"
 
+#. don't copy again
+#. this is committed in the grab finished callback.
+#: editor_mouse.cc:2751
+msgid "Drag region copy"
+msgstr ""
+
 #. A selection grab currently creates two undo/redo operations, one for
 #. creating the new region and another for moving it.
 #.
-#: editor_mouse.cc:3574
+#: editor_mouse.cc:3609
 #, fuzzy
 msgid "selection grab"
 msgstr "Seleccin"
 
-#: editor_mouse.cc:3615
+#: editor_mouse.cc:3650
 #, fuzzy
 msgid "cancel selection"
 msgstr "Reproducir seleccin"
 
-#: editor_mouse.cc:3722
+#: editor_mouse.cc:3760
 #, fuzzy
 msgid "range selection"
 msgstr "Reproducir seleccin"
 
-#: editor_mouse.cc:3738
+#: editor_mouse.cc:3776
 #, fuzzy
 msgid "trim selection start"
 msgstr "Desde locacin"
 
-#: editor_mouse.cc:3754
+#: editor_mouse.cc:3792
 #, fuzzy
 msgid "trim selection end"
 msgstr "Desde locacin"
 
-#: editor_mouse.cc:3771
+#: editor_mouse.cc:3809
 #, fuzzy
 msgid "move selection"
 msgstr "Grabar seleccin"
 
-#: editor_mouse.cc:4157
+#: editor_mouse.cc:4195
 #, fuzzy
 msgid "Start point trim"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor_mouse.cc:4185
+#: editor_mouse.cc:4223
 msgid "End point trim"
 msgstr ""
 
-#: editor_mouse.cc:4224
+#: editor_mouse.cc:4262
 msgid "trimmed region"
 msgstr "regin acortada"
 
-#: editor_mouse.cc:4363
+#: editor_mouse.cc:4400
 #, fuzzy
 msgid "new range marker"
 msgstr "agregar un marcador de regin"
 
-#: editor_mouse.cc:4578
+#: editor_mouse.cc:4642
 #, fuzzy
 msgid "select regions"
 msgstr "Reproducir regin seleccionada cont�uamente"
 
-#: editor_mouse.cc:4607
+#: editor_mouse.cc:4671
 msgid "Name for region:"
 msgstr "Nombre para regin:"
 
-#: editor_mouse.cc:4671
+#: editor_mouse.cc:4735
 msgid "timestretch"
 msgstr ""
 
-#: editor_ops.cc:132
+#: editor_ops.cc:195
 #, fuzzy
 msgid "split"
 msgstr "Separar"
 
-#: editor_ops.cc:168
+#: editor_ops.cc:231
 #, fuzzy
 msgid "remove region"
 msgstr "invertir regiones"
 
-#: editor_ops.cc:187
+#: editor_ops.cc:250
 msgid ""
 " This is destructive, will possibly delete audio files\n"
 "It cannot be undone\n"
 "Do you really want to destroy %1 ?"
 msgstr ""
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "these regions"
 msgstr "invertir regiones"
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "this region"
 msgstr "enmudecer a esta regin"
 
-#: editor_ops.cc:193 editor_ops.cc:3229 route_ui.cc:700
-#: visual_time_axis.cc:277
+#: editor_ops.cc:256 editor_ops.cc:3318 route_ui.cc:707
+#: visual_time_axis.cc:278
 #, fuzzy
 msgid "No, do nothing."
 msgstr "No, no hacer nada."
 
-#: editor_ops.cc:196
+#: editor_ops.cc:259
 #, fuzzy
 msgid "Yes, destroy them."
 msgstr "Si, eliminar."
 
-#: editor_ops.cc:198 editor_ops.cc:3230
+#: editor_ops.cc:261 editor_ops.cc:3319
 #, fuzzy
 msgid "Yes, destroy it."
 msgstr "Si, eliminar."
 
-#: editor_ops.cc:289 editor_ops.cc:317
+#: editor_ops.cc:352 editor_ops.cc:380
 #, fuzzy
 msgid "extend selection"
 msgstr "Separar Seleccin"
 
-#: editor_ops.cc:333 editor_ops.cc:367 editor_ops.cc:411 editor_ops.cc:437
+#: editor_ops.cc:396 editor_ops.cc:430 editor_ops.cc:474 editor_ops.cc:500
 msgid "nudge forward"
 msgstr ""
 
-#: editor_ops.cc:501
+#: editor_ops.cc:564
 msgid "build_region_boundary_cache called with snap_type = %1"
 msgstr ""
 
-#: editor_ops.cc:1354
+#: editor_ops.cc:1420
 #, fuzzy
 msgid "select all within"
 msgstr "Seleccionar todo"
 
-#: editor_ops.cc:1380
+#: editor_ops.cc:1452
 #, fuzzy
 msgid "set selection from region"
 msgstr "Nueva region a partir de seleccin"
 
-#: editor_ops.cc:1413
+#: editor_ops.cc:1485
 #, fuzzy
 msgid "set selection from range"
 msgstr "Nueva region a partir de seleccin"
 
-#: editor_ops.cc:1443
+#: editor_ops.cc:1515
 #, fuzzy
 msgid "select all from range"
 msgstr "seleccionar rango de zoom"
 
-#: editor_ops.cc:1465
+#: editor_ops.cc:1537
 #, fuzzy
 msgid "select all from punch"
 msgstr "Seleccionar todo"
 
-#: editor_ops.cc:1487
+#: editor_ops.cc:1559
 #, fuzzy
 msgid "select all from loop"
 msgstr "Seleccionar todo"
 
-#: editor_ops.cc:1501
+#: editor_ops.cc:1573
 #, fuzzy
 msgid "select all after cursor"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor_ops.cc:1506
+#: editor_ops.cc:1578
 #, fuzzy
 msgid "select all before cursor"
 msgstr "Reproducir desde el cursor"
 
-#: editor_ops.cc:1536
+#: editor_ops.cc:1608
 #, fuzzy
 msgid "select all between cursors"
 msgstr "Reproducir desde el cursor"
 
-#: editor_ops.cc:1667
+#: editor_ops.cc:1739
 msgid "clear markers"
 msgstr "borrar marcadores"
 
-#: editor_ops.cc:1679
+#: editor_ops.cc:1751
 msgid "clear ranges"
 msgstr "borrar intervalos"
 
-#: editor_ops.cc:1698
+#: editor_ops.cc:1770
 msgid "clear locations"
 msgstr "borrar localizaciones"
 
-#: editor_ops.cc:1748
+#: editor_ops.cc:1820
 #, fuzzy
 msgid "insert dragged region"
 msgstr "Insertar Regin"
 
-#: editor_ops.cc:1784
+#: editor_ops.cc:1856
 #, fuzzy
 msgid "insert region"
 msgstr "Insertar Regin"
 
-#: editor_ops.cc:1975 io_selector.cc:57 io_selector.cc:791
+#: editor_ops.cc:2047 io_selector.cc:58 io_selector.cc:792
 msgid "OK"
 msgstr "OK"
 
-#: editor_ops.cc:1982
+#: editor_ops.cc:2054
 msgid "ardour: rename region"
 msgstr "ardour: renombrar regin"
 
-#: editor_ops.cc:2205 editor_ops.cc:2254
+#: editor_ops.cc:2277 editor_ops.cc:2326
 #, fuzzy
 msgid "separate"
 msgstr "Separar Regin"
 
-#: editor_ops.cc:2316
+#: editor_ops.cc:2388
 #, fuzzy
 msgid "trim to selection"
 msgstr "Desde locacin"
 
-#: editor_ops.cc:2356
+#: editor_ops.cc:2428
 msgid "region fill"
 msgstr ""
 
-#: editor_ops.cc:2415
+#: editor_ops.cc:2487
 #, fuzzy
 msgid "fill selection"
 msgstr "Reproducir seleccin cont�uamente"
 
-#: editor_ops.cc:2436
+#: editor_ops.cc:2508
 msgid "Programming error. that region doesn't cover that position"
 msgstr ""
 
-#: editor_ops.cc:2439
+#: editor_ops.cc:2511
 #, fuzzy
 msgid "set region sync position"
 msgstr "Regiones/posicin"
 
-#: editor_ops.cc:2454
+#: editor_ops.cc:2526
 msgid "Place the edit cursor at the desired sync point"
 msgstr "Coloque el cursor de edicin en el punto de sincron� deseado"
 
-#: editor_ops.cc:2459
+#: editor_ops.cc:2531
 #, fuzzy
 msgid "set sync from edit cursor"
 msgstr "Reproducir desde el cursor"
 
-#: editor_ops.cc:2471
+#: editor_ops.cc:2543
 #, fuzzy
 msgid "remove sync"
 msgstr "Remover punto de sincron�"
 
-#: editor_ops.cc:2485
+#: editor_ops.cc:2557
 #, fuzzy
 msgid "naturalize"
 msgstr "Normalizar"
 
-#: editor_ops.cc:2549
+#: editor_ops.cc:2621
 #, fuzzy
 msgid "align selection (relative)"
 msgstr "Alinear relativamente"
 
-#: editor_ops.cc:2577
+#: editor_ops.cc:2649
 #, fuzzy
 msgid "align selection"
 msgstr "Grabar seleccin"
 
-#: editor_ops.cc:2589
+#: editor_ops.cc:2661
 #, fuzzy
 msgid "align region"
 msgstr "normalizar regiones"
 
-#: editor_ops.cc:2636 editor_ops.cc:2661
+#: editor_ops.cc:2708 editor_ops.cc:2733
 #, fuzzy
 msgid "trim to edit"
 msgstr "Desde principio hasta cursor de edicin"
 
-#: editor_ops.cc:2712
+#: editor_ops.cc:2784
 #, fuzzy
 msgid "ardour: freeze"
 msgstr "ardour: renombrar regin"
 
-#: editor_ops.cc:2717
+#: editor_ops.cc:2789
 #, fuzzy
 msgid "Cancel Freeze"
 msgstr "Cancelar"
 
-#: editor_ops.cc:2754
+#: editor_ops.cc:2826
 #, fuzzy
 msgid "bounce range"
 msgstr "intervalo"
 
-#: editor_ops.cc:2807
+#: editor_ops.cc:2879
 #, fuzzy
 msgid "cut"
 msgstr "cortar"
 
-#: editor_ops.cc:2810
+#: editor_ops.cc:2882
 #, fuzzy
 msgid "copy"
 msgstr "copiar"
 
-#: editor_ops.cc:2823
+#: editor_ops.cc:2895
 #, fuzzy
 msgid " objects"
 msgstr "objetos"
 
-#: editor_ops.cc:2849
+#: editor_ops.cc:2921
 #, fuzzy
 msgid " range"
 msgstr "intervalo"
 
-#: editor_ops.cc:3006
+#: editor_ops.cc:3078
 #, fuzzy
 msgid "paste"
 msgstr "Pegar"
 
-#: editor_ops.cc:3044
+#: editor_ops.cc:3116
 #, fuzzy
 msgid "paste chunk"
 msgstr "Crear trecho"
 
 #. clear (below) will clear the argument list
-#: editor_ops.cc:3085
+#: editor_ops.cc:3157
 #, fuzzy
 msgid "duplicate region"
 msgstr "Reproducir regin seleccionada cont�uamente"
 
-#: editor_ops.cc:3130
+#: editor_ops.cc:3202
 #, fuzzy
 msgid "duplicate selection"
 msgstr "Grabar seleccin"
 
-#: editor_ops.cc:3170
+#: editor_ops.cc:3259
 #, fuzzy
 msgid "clear playlist"
 msgstr "Nombre a captura de sesin"
 
-#: editor_ops.cc:3199
+#: editor_ops.cc:3288
 #, fuzzy
 msgid "nudge track"
 msgstr "Ocultar esta pista"
 
-#: editor_ops.cc:3226
+#: editor_ops.cc:3315
 #, fuzzy
 msgid ""
 "Do you really want to destroy the last capture?\n"
@@ -4157,173 +4138,170 @@ msgstr ""
 "Realmente desea quitar el bus \"%1\" ?\n"
 "(no podr�deshacer este cambio)"
 
-#: editor_ops.cc:3254
+#: editor_ops.cc:3343
 #, fuzzy
 msgid "normalize"
 msgstr "Normalizar"
 
-#: editor_ops.cc:3301
+#: editor_ops.cc:3390
 #, fuzzy
 msgid "reverse regions"
 msgstr "invertir regiones"
 
-#: editor_region_list.cc:93 editor_region_list.cc:98 editor_region_list.cc:101
-#: location_ui.cc:55
+#: editor_region_list.cc:98 editor_region_list.cc:103
+#: editor_region_list.cc:106 location_ui.cc:56
 #, fuzzy
 msgid "Hidden"
 msgstr "Oculto"
 
 #. added a new fresh one at the end
-#: editor_route_list.cc:101 editor_route_list.cc:102 editor_route_list.cc:246
+#: editor_route_list.cc:102 editor_route_list.cc:103 editor_route_list.cc:247
 msgid "editor"
 msgstr "editor"
 
-#: editor_route_list.cc:309 mixer_ui.cc:695
+#: editor_route_list.cc:310 mixer_ui.cc:699
 msgid "Show All"
 msgstr "Mostrar Todo"
 
-#: editor_route_list.cc:310 mixer_ui.cc:696
+#: editor_route_list.cc:311 mixer_ui.cc:700
 msgid "Hide All"
 msgstr "Ocultar Todo"
 
-#: editor_route_list.cc:311 mixer_ui.cc:697
+#: editor_route_list.cc:312 mixer_ui.cc:701
 #, fuzzy
 msgid "Show All Audio Tracks"
 msgstr "Mostrar todos los Buses"
 
-#: editor_route_list.cc:312 mixer_ui.cc:698
+#: editor_route_list.cc:313 mixer_ui.cc:702
 #, fuzzy
 msgid "Hide All Audio Tracks"
 msgstr "Ocultar todos los Buses"
 
-#: editor_route_list.cc:313 mixer_ui.cc:699
+#: editor_route_list.cc:314 mixer_ui.cc:703
 #, fuzzy
 msgid "Show All Audio Busses"
 msgstr "Mostrar todos los Buses"
 
-#: editor_route_list.cc:314 mixer_ui.cc:700
+#: editor_route_list.cc:315 mixer_ui.cc:704
 #, fuzzy
 msgid "Hide All Audio Busses"
 msgstr "Ocultar todos los Buses"
 
-#: editor_rulers.cc:311
+#: editor_rulers.cc:312
 #, fuzzy
 msgid "New location marker"
 msgstr "Nuevo marcador de localizacin"
 
-#: editor_rulers.cc:312
+#: editor_rulers.cc:313
 #, fuzzy
 msgid "Clear all locations"
 msgstr "Quitar todas las localizaciones"
 
 #. ruler_items.push_back (MenuElem (_("New Range")));
-#: editor_rulers.cc:317
+#: editor_rulers.cc:318
 #, fuzzy
 msgid "Clear all ranges"
 msgstr "Quitar todas las selecciones"
 
-#: editor_rulers.cc:326
+#: editor_rulers.cc:327
 #, fuzzy
 msgid "New Tempo"
 msgstr "Nuevo tempo"
 
-#: editor_rulers.cc:327
+#: editor_rulers.cc:328
 #, fuzzy
 msgid "Clear tempo"
 msgstr "Resetear tempo"
 
-#: editor_rulers.cc:332
+#: editor_rulers.cc:333
 #, fuzzy
 msgid "New Meter"
 msgstr "Nuevo Medidor"
 
-#: editor_rulers.cc:333
+#: editor_rulers.cc:334
 #, fuzzy
 msgid "Clear meter"
 msgstr "Resetear Medidor"
 
-#: editor_rulers.cc:341
+#: editor_rulers.cc:342
 #, fuzzy
 msgid "Min:Secs"
 msgstr "Mins:Segs"
 
-#: editor_selection_list.cc:110
+#: editor_selection_list.cc:108
 #, fuzzy
 msgid "Name for Chunk:"
 msgstr "nombre para trecho"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 #, fuzzy
 msgid "Create Chunk"
 msgstr "Crear trecho"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 msgid "Forget it"
 msgstr "Olvidarlo"
 
-#: editor_tempodisplay.cc:249 editor_tempodisplay.cc:289
+#: editor_tempodisplay.cc:253 editor_tempodisplay.cc:293
 msgid "add"
 msgstr "agregar"
 
-#: editor_tempodisplay.cc:271
+#: editor_tempodisplay.cc:275
 #, fuzzy
 msgid "add tempo mark"
 msgstr "agregar un marcador de regin"
 
-#: editor_tempodisplay.cc:311
+#: editor_tempodisplay.cc:315
 #, fuzzy
 msgid "add meter mark"
 msgstr "agregar un marcador de regin"
 
-#: editor_tempodisplay.cc:344 editor_tempodisplay.cc:375
+#: editor_tempodisplay.cc:348 editor_tempodisplay.cc:376
 msgid "done"
 msgstr "listo"
 
-#: editor_tempodisplay.cc:365 editor_tempodisplay.cc:396
+#: editor_tempodisplay.cc:366 editor_tempodisplay.cc:394
 msgid "replace tempo mark"
 msgstr ""
 
-#: editor_tempodisplay.cc:435 editor_tempodisplay.cc:466
+#: editor_tempodisplay.cc:433 editor_tempodisplay.cc:464
 msgid "programming error: marker for meter is not a meter marker!"
 msgstr ""
 
-#: editor_tempodisplay.cc:445 editor_tempodisplay.cc:478
+#: editor_tempodisplay.cc:443 editor_tempodisplay.cc:476
 #, fuzzy
 msgid "remove tempo mark"
 msgstr "quitar marcador"
 
-#: editor_timefx.cc:50
+#: editor_timefx.cc:51
 msgid "Quick but Ugly"
 msgstr "R�ido pero pobre"
 
-#: editor_timefx.cc:51
+#: editor_timefx.cc:52
 msgid "Skip Anti-aliasing"
 msgstr "No usar Anti-aliasing"
 
-#: editor_timefx.cc:53
-msgid "Stretch/Shrink it"
-msgstr "Estirar/Encoger esto"
-
-#: editor_timefx.cc:57
+#: editor_timefx.cc:56
 msgid "ardour: timestretch"
 msgstr ""
 
-#: editor_timefx.cc:58
+#: editor_timefx.cc:57
 msgid "TimeStretchDialog"
 msgstr ""
 
-#: editor_timefx.cc:80 editor_timefx.cc:81 editor_timefx.cc:82
-#: editor_timefx.cc:83
+#: editor_timefx.cc:70
+msgid "Stretch/Shrink it"
+msgstr "Estirar/Encoger esto"
+
+#: editor_timefx.cc:73 editor_timefx.cc:74
 msgid "TimeStretchButton"
 msgstr ""
 
-#: editor_timefx.cc:84
+#: editor_timefx.cc:75
 msgid "TimeStretchProgress"
 msgstr ""
 
-#. GTK2FIX
-#. current_timestretch->close ();
-#: editor_timefx.cc:153
+#: editor_timefx.cc:139
 msgid "timestretch cannot be started - thread creation error"
 msgstr ""
 
@@ -4457,7 +4435,7 @@ msgstr ""
 msgid "Export to File"
 msgstr "Exportar a CD"
 
-#: export_dialog.cc:113 option_editor.cc:82 option_editor.cc:83
+#: export_dialog.cc:113 option_editor.cc:83 option_editor.cc:84
 msgid "Browse"
 msgstr "Seleccionar"
 
@@ -4473,7 +4451,8 @@ msgstr "ardour: exportar"
 msgid "ardour_export"
 msgstr ""
 
-#: export_dialog.cc:139 export_dialog.cc:155
+#: export_dialog.cc:139 export_dialog.cc:155 mixer_strip.cc:124
+#: mixer_strip.cc:767
 #, fuzzy
 msgid "Output"
 msgstr "Salidas"
@@ -4512,147 +4491,75 @@ msgstr ""
 msgid "File already exists, do you want to overwrite it?"
 msgstr ""
 
-#: export_dialog.cc:1159 export_range_markers_dialog.cc:154
+#: export_dialog.cc:1159 export_range_markers_dialog.cc:153
 msgid "Cannot write file in: "
 msgstr ""
 
 #. warning dialog
-#: export_range_markers_dialog.cc:136
+#: export_range_markers_dialog.cc:135
 msgid "Please enter a valid target directory."
 msgstr ""
 
-#: export_range_markers_dialog.cc:144
+#: export_range_markers_dialog.cc:143
 msgid ""
 "Please select an existing target directory. Files\n"
 "are not allowed!"
 msgstr ""
 
-#: gain_automation_time_axis.cc:61
+#: gain_automation_time_axis.cc:62
 #, fuzzy
 msgid "add gain automation event"
 msgstr "agregar evento de automatizacin a "
 
-#: gain_meter.cc:66
+#: gain_meter.cc:67
 msgid "cannot find images for fader slider"
 msgstr ""
 
-#: gain_meter.cc:73
+#: gain_meter.cc:74
 msgid "cannot find images for fader rail"
 msgstr ""
 
-#: gain_meter.cc:88
-msgid "dbFS"
-msgstr ""
-
-#: gain_meter.cc:89 gain_meter.cc:143 gain_meter.cc:704
-msgid "pre"
-msgstr ""
-
-#: gain_meter.cc:139 gain_meter.cc:700
-#, fuzzy
-msgid "input"
-msgstr "%1 entrada"
-
-#: gain_meter.cc:147 gain_meter.cc:708
-#, fuzzy
-msgid "post"
-msgstr "conector"
-
-#. TRANSLATORS: this string should be longest of the strings
-#. used to describe meter points. In english, its "input".
-#.
-#: gain_meter.cc:155
-msgid "tupni"
-msgstr ""
-
-#: gain_meter.cc:174 gain_meter.cc:458 gain_meter.cc:480 gain_meter.cc:525
+#: gain_meter.cc:130 gain_meter.cc:339 gain_meter.cc:494 gain_meter.cc:539
 #, fuzzy
 msgid "-inf"
 msgstr "entrada"
 
-#: glade/new_session_dialog.glade.h:1
+#: gain_meter.cc:140
 #, fuzzy
-msgid "<b>Advanced</b>"
-msgstr "Avanzado..."
-
-#: glade/new_session_dialog.glade.h:2
-msgid "<b>Input</b>"
-msgstr ""
+msgid "Fader automation mode"
+msgstr "modo de automatizacin de balance"
 
-#: glade/new_session_dialog.glade.h:3
+#: gain_meter.cc:141
 #, fuzzy
-msgid "<b>Output</b>"
-msgstr "Salidas"
+msgid "Fader automation type"
+msgstr "estado de automatizacin de balance"
 
-#: glade/new_session_dialog.glade.h:4
-#, fuzzy
-msgid "Automatically connect inputs"
-msgstr "conectar autom�icamente entradas de pistas a entradas f�icas"
+#. XXX it might different in different languages
+#: gain_meter.cc:182 gain_meter.cc:817 panner_ui.cc:99 panner_ui.cc:807
+msgid "Abs"
+msgstr ""
 
-#: glade/new_session_dialog.glade.h:5
+#: gain_meter.cc:472
 #, fuzzy
-msgid "Automatically connect outputs"
-msgstr "conectar pistas manualmente"
+msgid "-Inf"
+msgstr "entrada"
 
-#: glade/new_session_dialog.glade.h:6
+#: gain_meter.cc:781 mixer_strip.cc:770 panner_ui.cc:771
 #, fuzzy
-msgid "Channel Count"
-msgstr "Cancelar importacin"
+msgid "O"
+msgstr "O"
 
-#: glade/new_session_dialog.glade.h:7
-msgid "Connect to Master Bus"
+#: gain_meter.cc:784 panner_ui.cc:774
+msgid "P"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:8
-msgid "Connect to physical outputs"
+#: gain_meter.cc:787 panner_ui.cc:777
+msgid "T"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:9
-#, fuzzy
-msgid "Create Control Bus"
-msgstr "Control de Salidas"
-
-#: glade/new_session_dialog.glade.h:10
-#, fuzzy
-msgid "Create Master Bus"
-msgstr "usar salidas Master"
-
-#: glade/new_session_dialog.glade.h:11
-#, fuzzy
-msgid "New Session"
-msgstr "Sesin"
-
-#
-#: glade/new_session_dialog.glade.h:12
-#, fuzzy
-msgid "Open Recent Session"
-msgstr "Abrir sesin"
-
-#
-#: glade/new_session_dialog.glade.h:13
-#, fuzzy
-msgid "Open Session"
-msgstr "Abrir sesin"
-
-#: glade/new_session_dialog.glade.h:14
-#, fuzzy
-msgid "Port limit"
-msgstr "Olvidarlo"
-
-#: glade/new_session_dialog.glade.h:15
-#, fuzzy
-msgid "Select a File"
-msgstr "Seleccionar todo"
-
-#: glade/new_session_dialog.glade.h:16
-#, fuzzy
-msgid "Select a Session"
-msgstr "Reproducir regin seleccionada cont�uamente"
-
-#: glade/new_session_dialog.glade.h:17
-#, fuzzy
-msgid "Track/Bus connection options"
-msgstr "Pistas/Buses"
+#: gain_meter.cc:790 panner_ui.cc:780
+msgid "W"
+msgstr ""
 
 #: gtk-custom-ruler.c:126
 #, fuzzy
@@ -4699,240 +4606,240 @@ msgid "Draw current ruler position"
 msgstr ""
 
 #. end-of-file, other end closed or shutdown?
-#: imageframe_socket_handler.cc:126
+#: imageframe_socket_handler.cc:127
 msgid "Image Compositor Socket has been shutdown/closed"
 msgstr "Se desconect al Compositor de Imagen"
 
-#: imageframe_time_axis.cc:287
+#: imageframe_time_axis.cc:286
 #, fuzzy
 msgid "0.5 seconds"
 msgstr "Minutos:Segundos"
 
-#: imageframe_time_axis.cc:288 marker_time_axis.cc:241
+#: imageframe_time_axis.cc:287 marker_time_axis.cc:242
 #, fuzzy
 msgid "1 seconds"
 msgstr "Minutos:Segundos"
 
-#: imageframe_time_axis.cc:289 marker_time_axis.cc:242
+#: imageframe_time_axis.cc:288 marker_time_axis.cc:243
 #, fuzzy
 msgid "1.5 seconds"
 msgstr "Minutos:Segundos"
 
-#: imageframe_time_axis.cc:290 marker_time_axis.cc:243
+#: imageframe_time_axis.cc:289 marker_time_axis.cc:244
 #, fuzzy
 msgid "2 seconds"
 msgstr "Minutos:Segundos"
 
-#: imageframe_time_axis.cc:291 marker_time_axis.cc:244
+#: imageframe_time_axis.cc:290 marker_time_axis.cc:245
 #, fuzzy
 msgid "2.5 seconds"
 msgstr "Minutos:Segundos"
 
-#: imageframe_time_axis.cc:292 marker_time_axis.cc:245
+#: imageframe_time_axis.cc:291 marker_time_axis.cc:246
 #, fuzzy
 msgid "3 seconds"
 msgstr "Minutos:Segundos"
 
 #. duration_items.push_back(SeparatorElem()) ;
 #. duration_items.push_back(MenuElem (_("custom"), mem_fun(*this, &ImageFrameTimeAxis::set_marker_duration_custom))) ;
-#: imageframe_time_axis.cc:297 marker_time_axis.cc:250
+#: imageframe_time_axis.cc:296 marker_time_axis.cc:251
 #, fuzzy
 msgid "Duration (sec)"
 msgstr "normalizar regiones"
 
-#: imageframe_time_axis.cc:302
+#: imageframe_time_axis.cc:301
 #, fuzzy
 msgid "Remove Frame"
 msgstr "Quitar Campo"
 
-#: imageframe_time_axis.cc:305
+#: imageframe_time_axis.cc:304
 #, fuzzy
 msgid "Image Frame"
 msgstr "Cuadros"
 
-#: imageframe_time_axis.cc:306 marker_time_axis.cc:256
+#: imageframe_time_axis.cc:305 marker_time_axis.cc:257
 #, fuzzy
 msgid "Rename Track"
 msgstr "Renombrar"
 
-#: io_selector.cc:59 io_selector.cc:793
+#: io_selector.cc:60 io_selector.cc:794
 #, fuzzy
 msgid "Rescan"
 msgstr "buscar de nuevo"
 
-#: io_selector.cc:67
+#: io_selector.cc:68
 msgid "%1 input"
 msgstr "%1 entrada"
 
-#: io_selector.cc:69
+#: io_selector.cc:70
 msgid "%1 output"
 msgstr "%1 salida"
 
-#: io_selector.cc:141 route_params_ui.cc:106
+#: io_selector.cc:142 route_params_ui.cc:107
 msgid "Inputs"
 msgstr "Entradas"
 
-#: io_selector.cc:141 route_params_ui.cc:107
+#: io_selector.cc:142 route_params_ui.cc:108
 msgid "Outputs"
 msgstr "Salidas"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Input"
 msgstr "agregar entrada"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Output"
 msgstr "agregar salida"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Input"
 msgstr "Remover punto de sincron�"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Output"
 msgstr "# Salidas"
 
-#: io_selector.cc:144
+#: io_selector.cc:145
 #, fuzzy
 msgid "Disconnect All"
 msgstr "Desconectar"
 
-#: io_selector.cc:158
+#: io_selector.cc:159
 msgid "Available connections"
 msgstr "Conecciones disponibles"
 
-#: io_selector.cc:554 io_selector.cc:573
+#: io_selector.cc:555 io_selector.cc:574
 msgid "There are no more JACK ports available."
 msgstr ""
 
-#: io_selector.cc:648 io_selector.cc:675 io_selector.cc:728
+#: io_selector.cc:649 io_selector.cc:676 io_selector.cc:729
 msgid "port"
 msgstr "conector"
 
-#: io_selector.cc:797
+#: io_selector.cc:798
 msgid "ardour: "
 msgstr ""
 
-#: keyboard.cc:297
+#: keyboard.cc:299
 msgid "KeyboardTarget: keyname \"%1\" is unknown."
 msgstr ""
 
-#: keyboard.cc:523
+#: keyboard.cc:525
 msgid ""
 "Your system is completely broken - NumLock uses \"%1\"as its modifier. This "
 "is madness - see the man page for xmodmap to find out how to fix this."
 msgstr ""
 
-#: keyboard.cc:531
+#: keyboard.cc:533
 msgid ""
 "Your system generates \"%1\" when the NumLock key is pressed. This can cause "
 "problems when editing so Ardour will use %2 to mean Meta rather than %1"
 msgstr ""
 
-#: keyboard.cc:592
+#: keyboard.cc:594
 msgid "You have %1 keys bound to \"mod1\""
 msgstr "Tiene %1 teclas asignadas a \"mod1\""
 
-#: keyboard.cc:607
+#: keyboard.cc:609
 msgid "You have %1 keys bound to \"mod2\""
 msgstr "Tiene %1 teclas asignadas a \"mod2\""
 
-#: keyboard.cc:622
+#: keyboard.cc:624
 msgid "You have %1 keys bound to \"mod3\""
 msgstr "Tiene %1 teclas asignadas a \"mod3\""
 
-#: keyboard.cc:637
+#: keyboard.cc:639
 msgid "You have %1 keys bound to \"mod4\""
 msgstr "Tiene %1 teclas asignadas a \"mod4\""
 
-#: keyboard.cc:652
+#: keyboard.cc:654
 msgid "You have %1 keys bound to \"mod5\""
 msgstr "Tiene %1 teclas asignadas a \"mod5\""
 
-#: location_ui.cc:47 location_ui.cc:50
+#: location_ui.cc:48 location_ui.cc:51
 #, fuzzy
 msgid "Set"
 msgstr "Selecionar"
 
-#: location_ui.cc:48 location_ui.cc:51
+#: location_ui.cc:49 location_ui.cc:52
 msgid "Go"
 msgstr ""
 
-#: location_ui.cc:54
+#: location_ui.cc:55
 msgid "CD"
 msgstr "CD"
 
-#: location_ui.cc:57
+#: location_ui.cc:58
 msgid "SCMS"
 msgstr ""
 
-#: location_ui.cc:58
+#: location_ui.cc:59
 msgid "Pre-Emphasis"
 msgstr ""
 
-#: location_ui.cc:569
+#: location_ui.cc:570
 #, fuzzy
 msgid "Add New Location"
 msgstr "Agregar nueva localizacin"
 
-#: location_ui.cc:570
+#: location_ui.cc:571
 msgid "Add New Range"
 msgstr "Agregar nueva regin"
 
-#: location_ui.cc:574
+#: location_ui.cc:575
 msgid "ardour: locations"
 msgstr "ardour: localizaciones"
 
-#: location_ui.cc:575
+#: location_ui.cc:576
 msgid "ardour_locations"
 msgstr ""
 
-#: location_ui.cc:603
+#: location_ui.cc:604
 #, fuzzy
 msgid "Location (CD Index) Markers"
 msgstr "Marcadores de localizacin"
 
-#: location_ui.cc:623
+#: location_ui.cc:624
 #, fuzzy
 msgid "Range (CD Track) Markers"
 msgstr "Marcadores de intervalo"
 
-#: location_ui.cc:789
+#: location_ui.cc:790
 #, fuzzy
 msgid "add range marker"
 msgstr "agregar un marcador de regin"
 
-#: main.cc:71
+#: main.cc:72
 msgid "ardour is killing itself for a clean exit\n"
 msgstr "ardour se est�cerrando limpiamente\n"
 
-#: main.cc:80
+#: main.cc:81
 msgid "stopping user interface\n"
 msgstr "deteniendo interfase visual\n"
 
 #. XXX its doubtful that snprintf() is async-safe
-#: main.cc:99
+#: main.cc:100
 #, c-format
 msgid "%d(%d): received signal %d\n"
 msgstr ""
 
-#: main.cc:185
+#: main.cc:186
 msgid "cannot become new process group leader (%1)"
 msgstr ""
 
-#: main.cc:212
+#: main.cc:213
 msgid "cannot setup signal handling for %1"
 msgstr ""
 
-#: main.cc:223
+#: main.cc:224
 msgid "cannot set default signal mask (%1)"
 msgstr ""
 
-#: main.cc:253
+#: main.cc:254
 #, fuzzy
 msgid ""
 "Without a UI style file, ardour will look strange.\n"
@@ -4941,12 +4848,12 @@ msgstr ""
 "Sin un archivo de interfase visual, Ardour no se \n"
 "ver�correctamente. Apunte ARDOUR_UI_RC a un archivo v�ido"
 
-#: main.cc:273
+#: main.cc:276
 #, fuzzy
 msgid "Ardour could not connect to JACK."
 msgstr "No se pudo conectar a JACK con el nombre \"%1\""
 
-#: main.cc:277
+#: main.cc:280
 #, fuzzy
 msgid ""
 "There are several possible reasons:\n"
@@ -4966,385 +4873,469 @@ msgstr ""
 "\n"
 "Considere estas posibilidades y o reinicie a JACK.\n"
 
-#: main.cc:324
+#: main.cc:310
+msgid "could not load command line session \"%1\""
+msgstr "no se pudo cargar desde l�ea de comando a la sesin \"%1\""
+
+#. it wasn't new, but we require a new session
+#: main.cc:330
+msgid ""
+"\n"
+"\n"
+"A session named \"%1\" already exists.\n"
+"To avoid this message, start ardour as \"ardour %1"
+msgstr ""
+
+#: main.cc:341
+msgid ""
+"\n"
+"\n"
+"No session named \"%1\" exists.\n"
+"To create it from the command line, start ardour as \"ardour --new %1"
+msgstr ""
+
+#: main.cc:405
 msgid "Ardour/GTK "
 msgstr ""
 
-#: main.cc:326
+#: main.cc:407
 msgid ""
 "\n"
 "   (built using "
 msgstr ""
 
-#: main.cc:330
+#: main.cc:411
 #, fuzzy
 msgid " with libardour "
 msgstr " corriendo con libardour "
 
-#: main.cc:335
+#: main.cc:416
 msgid " and GCC version "
 msgstr ""
 
-#: main.cc:345
-msgid "Copyright (C) 1999-2005 Paul Davis"
+#: main.cc:426
+msgid "Copyright (C) 1999-2006 Paul Davis"
 msgstr ""
 
-#: main.cc:346
+#: main.cc:427
 msgid ""
 "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker"
 msgstr ""
 
-#: main.cc:348
+#: main.cc:429
 msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
 msgstr "Ardour no ofrece ningn tipo de garant�"
 
-#: main.cc:349
+#: main.cc:430
 msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 msgstr ""
 
-#: main.cc:350
+#: main.cc:431
 msgid "This is free software, and you are welcome to redistribute it "
 msgstr "Este software es gratuito.Usted puede distribuirlo "
 
-#: main.cc:351
+#: main.cc:432
 #, fuzzy
 msgid "under certain conditions; see the source for copying conditions."
 msgstr "bajo ciertas condiciones; lea el archivo COPYING para m� detalles"
 
-#: main.cc:360
+#: main.cc:441
 msgid "could not create ARDOUR GUI"
 msgstr "no se pudo crear la interfase visual de Ardour"
 
-#: main.cc:378
+#: main.cc:459
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr "No se pudo conectar a JACK con el nombre \"%1\""
 
-#: main.cc:381
+#: main.cc:462
 msgid "could not initialize Ardour."
 msgstr "no se pudo iniciar a Ardour."
 
-#: main.cc:392
-msgid "could not load command line session \"%1\""
-msgstr "no se pudo cargar desde l�ea de comando a la sesin \"%1\""
+#: marker.cc:244
+#, fuzzy
+msgid "MarkerText"
+msgstr "Marcas"
 
-#. it wasn't new, but we require a new session
-#: main.cc:412
-msgid ""
-"\n"
-"\n"
-"A session named \"%1\" already exists.\n"
-"To avoid this message, start ardour as \"ardour %1"
-msgstr ""
-
-#: main.cc:423
-msgid ""
-"\n"
-"\n"
-"No session named \"%1\" exists.\n"
-"To create it from the command line, start ardour as \"ardour --new %1"
-msgstr ""
-
-#: marker.cc:244
-#, fuzzy
-msgid "MarkerText"
-msgstr "Marcas"
-
-#: marker_time_axis.cc:253
+#: marker_time_axis.cc:254
 #, fuzzy
 msgid "Remove Marker"
 msgstr "quitar marcador"
 
-#: marker_time_axis.cc:255
+#: marker_time_axis.cc:256
 #, fuzzy
 msgid "Marker"
 msgstr "Marcas"
 
-#: meter_bridge.cc:77
+#: meter_bridge.cc:78
 msgid "ardour: meter bridge"
 msgstr "ardour: vmetro"
 
-#: meter_bridge.cc:78
+#: meter_bridge.cc:79
 msgid "ardour_meter_bridge"
 msgstr ""
 
-#: meter_bridge_strip.cc:79 meter_bridge_strip.cc:93
+#: meter_bridge_strip.cc:80 meter_bridge_strip.cc:94
 #, c-format
 msgid "# of %u-sample overs"
 msgstr ""
 
-#: meter_bridge_strip.cc:221
+#: meter_bridge_strip.cc:222
 #, fuzzy
 msgid "New Name for Meter:"
 msgstr "Nuevo nombre para vmetro"
 
-#: mixer_strip.cc:85 mixer_strip.cc:437 region_editor.cc:46
-msgid "mute"
-msgstr "mudo"
-
-#: mixer_strip.cc:85 mixer_strip.cc:438
-msgid "solo"
-msgstr "solo"
-
-#: mixer_strip.cc:85 mixer_strip.cc:436
-msgid "RECORD"
-msgstr "GRABAR"
+#: mixer_strip.cc:95 mixer_strip.cc:140 mixer_strip.cc:1227
+msgid "pre"
+msgstr ""
 
-#: mixer_strip.cc:96 mixer_strip.cc:441 mixer_strip.cc:1064
+#: mixer_strip.cc:96 mixer_strip.cc:822
 msgid "Comments"
 msgstr ""
 
-#: mixer_strip.cc:120 mixer_strip.cc:752
-msgid "INPUT"
-msgstr "ENTRADA"
-
-#: mixer_strip.cc:125 mixer_strip.cc:773
-msgid "OUTPUT"
-msgstr "SALIDA"
-
-#: mixer_strip.cc:140
+#: mixer_strip.cc:119
 #, fuzzy
-msgid "Pan automation mode"
-msgstr "modo de automatizacin de balance"
+msgid "Input"
+msgstr "Entradas"
 
-#: mixer_strip.cc:141
+#: mixer_strip.cc:136 mixer_strip.cc:1223
 #, fuzzy
-msgid "Gain automation mode"
-msgstr "modo de automatizacin de volumen"
+msgid "input"
+msgstr "%1 entrada"
 
-#: mixer_strip.cc:143
+#: mixer_strip.cc:144 mixer_strip.cc:1231
 #, fuzzy
-msgid "Pan automation type"
-msgstr "estado de automatizacin de balance"
+msgid "post"
+msgstr "conector"
 
-#: mixer_strip.cc:144
-#, fuzzy
-msgid "Gain automation type"
-msgstr "estado de automatizacin de volumen"
+#. TRANSLATORS: this string should be longest of the strings
+#. used to describe meter points. In english, its "input".
+#.
+#: mixer_strip.cc:152
+msgid "tupni"
+msgstr ""
 
-#: mixer_strip.cc:183 mixer_strip.cc:195 mixer_strip.cc:913
+#: mixer_strip.cc:207
 #, fuzzy
-msgid "trim"
-msgstr "cortar"
+msgid "Varispeed"
+msgstr "velocidad"
 
-#. XXX it might different in different languages
-#: mixer_strip.cc:184 mixer_strip.cc:196 mixer_strip.cc:917
-msgid "abs"
+#: mixer_strip.cc:233 mixer_strip.cc:836
+msgid "Click to Add/Edit Comments"
 msgstr ""
 
-#: mixer_strip.cc:203
-#, fuzzy
-msgid "gain automation mode"
-msgstr "modo de automatizacin de volumen"
-
-#: mixer_strip.cc:204
-#, fuzzy
-msgid "pan automation mode"
-msgstr "modo de automatizacin de balance"
+#: mixer_strip.cc:374
+msgid "unknown strip width \"%1\" in XML GUI information"
+msgstr ""
 
-#: mixer_strip.cc:205
+#: mixer_strip.cc:417
 #, fuzzy
-msgid "gain automation state"
-msgstr "estado de automatizacin de volumen"
+msgid "record"
+msgstr "Grabar"
 
-#: mixer_strip.cc:206
-#, fuzzy
-msgid "pan automation state"
-msgstr "estado de automatizacin de balance"
+#: mixer_strip.cc:418 region_editor.cc:47
+msgid "mute"
+msgstr "mudo"
 
-#: mixer_strip.cc:223
-msgid "varispeed"
-msgstr "velocidad"
+#: mixer_strip.cc:419
+msgid "solo"
+msgstr "solo"
 
-#: mixer_strip.cc:245 mixer_strip.cc:1078
-msgid "Click to Add/Edit Comments"
+#: mixer_strip.cc:422
+msgid "comments"
 msgstr ""
 
-#: mixer_strip.cc:393
-msgid "unknown strip width \"%1\" in XML GUI information"
+#: mixer_strip.cc:424
+msgid "*comments*"
 msgstr ""
 
-#: mixer_strip.cc:443 mixer_strip.cc:1062
-msgid "*Comments*"
+#: mixer_strip.cc:438
+#, fuzzy
+msgid "Rec"
+msgstr "buscar de nuevo"
+
+#: mixer_strip.cc:439
+msgid "M"
 msgstr ""
 
-#: mixer_strip.cc:457
-msgid "REC"
+#: mixer_strip.cc:440
+msgid "S"
 msgstr ""
 
-#: mixer_strip.cc:462 mixer_strip.cc:1072
+#: mixer_strip.cc:443 mixer_strip.cc:830
 #, fuzzy
 msgid "Cmt"
 msgstr "cortar"
 
-#: mixer_strip.cc:464 mixer_strip.cc:1070
+#: mixer_strip.cc:445 mixer_strip.cc:828
 msgid "*Cmt*"
 msgstr ""
 
-#: mixer_strip.cc:503 mixer_strip.cc:562 redirect_box.cc:1004
+#: mixer_strip.cc:483 mixer_strip.cc:549 redirect_box.cc:1006
 msgid "Not connected to JACK - no I/O changes are possible"
 msgstr ""
 
-#: mixer_strip.cc:569
+#: mixer_strip.cc:560
 msgid "Track"
 msgstr "Pista"
 
-#: mixer_strip.cc:593 mixer_strip.cc:609
+#: mixer_strip.cc:588 mixer_strip.cc:604
 msgid "could not register new ports required for that connection"
 msgstr ""
 
-#: mixer_strip.cc:755
-msgid "IN"
-msgstr "ENTRADA"
-
-#: mixer_strip.cc:776
-msgid "OUT"
-msgstr "SALIDA"
+#: mixer_strip.cc:747
+#, fuzzy
+msgid " Input"
+msgstr "# Entradas"
 
-#: mixer_strip.cc:884
-msgid "aplay"
-msgstr ""
+#: mixer_strip.cc:750
+#, fuzzy
+msgid "I"
+msgstr "ENTRADA"
 
-#: mixer_strip.cc:890
-msgid "awrite"
+#: mixer_strip.cc:820
+msgid "*Comments*"
 msgstr ""
 
-#: mixer_strip.cc:1095
+#: mixer_strip.cc:859
 #, fuzzy
 msgid ": comment editor"
 msgstr "no se pudo iniciar el editor"
 
-#: mixer_strip.cc:1157 mixer_strip.cc:1178
-msgid "no group"
-msgstr "sin grupo"
+#: mixer_strip.cc:953
+msgid "Grp"
+msgstr ""
 
-#: mixer_strip.cc:1181
+#: mixer_strip.cc:956
 msgid "~G"
 msgstr ""
 
-#: mixer_strip.cc:1229
+#: mixer_strip.cc:1004
 #, fuzzy
 msgid "Invert Polarity"
 msgstr "polaridad"
 
-#: mixer_ui.cc:84
+#: mixer_ui.cc:85
 msgid "Strips"
 msgstr "Pistas"
 
-#: mixer_ui.cc:108
-msgid "groupname"
-msgstr ""
-
-#: mixer_ui.cc:109 region_editor.cc:48 region_editor.cc:191
-#: region_editor.cc:225
-msgid "active"
-msgstr "activo"
-
-#: mixer_ui.cc:110 region_editor.cc:49
-msgid "visible"
-msgstr "visible"
+#: mixer_ui.cc:110
+#, fuzzy
+msgid "Group"
+msgstr "Grupos de Mixer"
 
-#: mixer_ui.cc:207 mixer_ui.cc:366
+#: mixer_ui.cc:211 mixer_ui.cc:370
 msgid "ardour: mixer"
 msgstr ""
 
-#: mixer_ui.cc:208
+#: mixer_ui.cc:212
 msgid "ardour_mixer"
 msgstr "ardour_mixer"
 
-#: mixer_ui.cc:342
+#: mixer_ui.cc:346
 msgid "ardour: mixer: "
 msgstr ""
 
-#: mixer_ui.cc:569
+#: mixer_ui.cc:573
 msgid "signal"
 msgstr "seal"
 
-#: mixer_ui.cc:719
+#: mixer_ui.cc:723
 msgid "track display list item for renamed strip not found!"
 msgstr ""
 
-#: option_editor.cc:75
+#
+#: new_session_dialog.cc:39
+#, fuzzy
+msgid "New Session Name :"
+msgstr "Nombre de sesin:"
+
+#: new_session_dialog.cc:41
+msgid "Create Session Directory In :"
+msgstr ""
+
+#: new_session_dialog.cc:43
+#, fuzzy
+msgid "Use Session Template :"
+msgstr "usar esquema existente"
+
+#: new_session_dialog.cc:45
+#, fuzzy
+msgid "Channel Count"
+msgstr "Cancelar importacin"
+
+#: new_session_dialog.cc:46
+#, fuzzy
+msgid "Create Monitor Bus"
+msgstr "Control de Salidas"
+
+#: new_session_dialog.cc:53
+#, fuzzy
+msgid "Create Master Bus"
+msgstr "usar salidas Master"
+
+#: new_session_dialog.cc:55
+#, fuzzy
+msgid "Automatically Connect Inputs"
+msgstr "conectar autom�icamente entradas de pistas a entradas f�icas"
+
+#: new_session_dialog.cc:56 new_session_dialog.cc:67
+#, fuzzy
+msgid "Port Limit"
+msgstr "Olvidarlo"
+
+#: new_session_dialog.cc:64
+#, fuzzy
+msgid "<b>Track/Bus Inputs</b>"
+msgstr "Pistas/Buses"
+
+#: new_session_dialog.cc:66
+#, fuzzy
+msgid "Automatically Connect Outputs"
+msgstr "conectar pistas manualmente"
+
+#: new_session_dialog.cc:75
+msgid "Connect to Master Bus"
+msgstr ""
+
+#: new_session_dialog.cc:76
+msgid "Connect to Physical Outputs"
+msgstr ""
+
+#: new_session_dialog.cc:80
+#, fuzzy
+msgid "<b>Track/Bus Outputs</b>"
+msgstr "Salidas"
+
+#: new_session_dialog.cc:83
+#, fuzzy
+msgid "Advanced Options"
+msgstr "Opciones Editor"
+
+#
+#: new_session_dialog.cc:91
+#, fuzzy
+msgid "Open Recent Session"
+msgstr "Abrir sesin"
+
+#
+#: new_session_dialog.cc:127
+#, fuzzy
+msgid "Open Session File :"
+msgstr "Abrir sesin"
+
+#: new_session_dialog.cc:274
+#, fuzzy
+msgid "New Session"
+msgstr "Sesin"
+
+#
+#: new_session_dialog.cc:276
+#, fuzzy
+msgid "Open Session"
+msgstr "Abrir sesin"
+
+#: new_session_dialog.cc:281
+#, fuzzy
+msgid "ardour: session control"
+msgstr "ardour: guardar sesin?"
+
+#: new_session_dialog.cc:310
+#, fuzzy
+msgid "select template"
+msgstr "-esquema"
+
+#: new_session_dialog.cc:316
+#, fuzzy
+msgid "select session file"
+msgstr "Reproducir regin seleccionada cont�uamente"
+
+#: new_session_dialog.cc:325
+#, fuzzy
+msgid "select directory"
+msgstr "Reproducir regin seleccionada cont�uamente"
+
+#: option_editor.cc:76
 msgid "SMPTE offset is negative"
 msgstr ""
 
-#: option_editor.cc:101
+#: option_editor.cc:102
 msgid "ardour: options editor"
 msgstr "ardour: opciones editor"
 
-#: option_editor.cc:102
+#: option_editor.cc:103
 msgid "ardour_option_editor"
 msgstr ""
 
-#: option_editor.cc:126
+#: option_editor.cc:127
 msgid "Paths/Files"
 msgstr "Carpetas/Archivos"
 
-#: option_editor.cc:127
+#: option_editor.cc:128
 msgid "Kbd/Mouse"
 msgstr "Teclado/Mouse"
 
-#: option_editor.cc:130
+#: option_editor.cc:131
 msgid "Layers & Fades"
 msgstr ""
 
-#: option_editor.cc:134
+#: option_editor.cc:135
 msgid "MIDI"
 msgstr "MIDI"
 
-#: option_editor.cc:176
+#: option_editor.cc:177
 msgid "24 FPS"
 msgstr ""
 
-#: option_editor.cc:178
+#: option_editor.cc:179
 msgid "25 FPS"
 msgstr ""
 
-#: option_editor.cc:180
+#: option_editor.cc:181
 msgid "30 FPS"
 msgstr ""
 
-#: option_editor.cc:186
+#: option_editor.cc:187
 msgid "30 FPS drop"
 msgstr ""
 
-#: option_editor.cc:243
+#: option_editor.cc:244
 msgid "session RAID path"
 msgstr "ubicacin de archivos de sesin"
 
-#: option_editor.cc:248
+#: option_editor.cc:249
 #, fuzzy
 msgid "Soundfile Search Paths"
 msgstr "Biblioteca de audio"
 
-#: option_editor.cc:253
+#: option_editor.cc:254
 #, fuzzy
 msgid "Paths"
 msgstr "Carpetas/Archivos"
 
-#: option_editor.cc:267 option_editor.cc:273 option_editor.cc:724
-#: option_editor.cc:751
+#: option_editor.cc:268 option_editor.cc:274 option_editor.cc:723
+#: option_editor.cc:750
 msgid "internal"
 msgstr "interno"
 
-#: option_editor.cc:286
+#: option_editor.cc:287
 msgid "Short crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:298
+#: option_editor.cc:299
 msgid "Destructive crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:366
+#: option_editor.cc:367
 msgid "SMPTE Frames/second"
 msgstr "SMPTE Cuadros/segundo"
 
-#: option_editor.cc:367
+#: option_editor.cc:368
 msgid "SMPTE Offset"
 msgstr ""
 
-#: option_editor.cc:461 option_editor.cc:468 option_editor.cc:471
-#: option_editor.cc:617
+#: option_editor.cc:462 option_editor.cc:469 option_editor.cc:472
+#: option_editor.cc:618
 #, fuzzy
 msgid "online"
 msgstr "linear"
@@ -5352,12 +5343,12 @@ msgstr "linear"
 #. remember, we have to handle the i18n case where the relative
 #. lengths of the strings in language N is different than in english.
 #.
-#: option_editor.cc:468 option_editor.cc:469 option_editor.cc:614
+#: option_editor.cc:469 option_editor.cc:470 option_editor.cc:615
 #, fuzzy
 msgid "offline"
 msgstr "linear"
 
-#: option_editor.cc:669
+#: option_editor.cc:670
 msgid "Choose Click"
 msgstr ""
 
@@ -5366,15 +5357,15 @@ msgstr ""
 msgid "Choose Click Emphasis"
 msgstr "Usar como ï¿½fasis de metrnomo"
 
-#: option_editor.cc:804
+#: option_editor.cc:803
 msgid "Click audio file"
 msgstr "Archivo de sonido para metrnomo"
 
-#: option_editor.cc:810
+#: option_editor.cc:809
 msgid "Click emphasis audiofile"
 msgstr "Archivo de sonido de ï¿½fasis de metrnomo"
 
-#: option_editor.cc:847
+#: option_editor.cc:846
 msgid ""
 "The auditioner is a dedicated mixer strip used\n"
 "for listening to specific regions outside the context\n"
@@ -5386,36 +5377,36 @@ msgstr ""
 "escuchar archivos de sonido en el men Biblioteca de Audio\n"
 "Se puede configurar sus conecciones como a cualquier.otra del mixer"
 
-#: option_editor.cc:920
+#: option_editor.cc:919
 msgid "Edit using"
 msgstr "Editar con"
 
-#: option_editor.cc:927 option_editor.cc:954
+#: option_editor.cc:926 option_editor.cc:953
 msgid "+ button"
 msgstr "botn +"
 
-#: option_editor.cc:947
+#: option_editor.cc:946
 msgid "Delete using"
 msgstr "Eliminar con"
 
-#: option_editor.cc:974
+#: option_editor.cc:973
 msgid "Ignore snap using"
 msgstr "Ignorar trabar con"
 
-#: opts.cc:47
+#: opts.cc:46
 msgid "Usage: "
 msgstr "Uso: "
 
-#: opts.cc:48
+#: opts.cc:47
 msgid "  -v, --version                    Show version information\n"
 msgstr ""
 "  -v, --version                    Mostra informacin acerca de la versin\n"
 
-#: opts.cc:49
+#: opts.cc:48
 msgid "  -h, --help                       Print this message\n"
 msgstr "  -h, --help                       Muestra este mensage\n"
 
-#: opts.cc:50
+#: opts.cc:49
 msgid ""
 "  -b, --bindings                   Print all possible keyboard binding "
 "names\n"
@@ -5423,12 +5414,12 @@ msgstr ""
 "  -b, --bindings                   Muestra todos los comandos asignables a "
 "botones del teclado(shortcuts)\n"
 
-#: opts.cc:51
+#: opts.cc:50
 #, fuzzy
 msgid "  -n, --show-splash                Show splash screen\n"
 msgstr "  -n, --no-splash                  No mostrar recuadro inicial\n"
 
-#: opts.cc:52
+#: opts.cc:51
 #, fuzzy
 msgid ""
 "  -c, --name  name                 Use a specific jack client name, default "
@@ -5437,202 +5428,217 @@ msgstr ""
 "  -c, --jack-client-name  nombre     Nombre de cliente jack para Ardour. Si "
 "no selecciona ninguno, el nombre ser�ardour\n"
 
-#: opts.cc:53
+#: opts.cc:52
 #, fuzzy
 msgid ""
 "  -N, --new session-name           Create a new session from the command "
 "line\n"
 msgstr "  [nombre-sesin]                   Nombre de sesin a cargar\n"
 
-#: opts.cc:54
+#: opts.cc:53
 msgid ""
 "  -o, --use-hw-optimizations        Try to use h/w specific optimizations\n"
 msgstr ""
 
-#: opts.cc:56
+#: opts.cc:55
 #, fuzzy
 msgid "  -V, --novst                      Do not use VST support\n"
 msgstr "  -n, --no-splash                  No mostrar recuadro inicial\n"
 
-#: opts.cc:58
+#: opts.cc:57
 msgid "  [session-name]                   Name of session to load\n"
 msgstr "  [nombre-sesin]                   Nombre de sesin a cargar\n"
 
-#: opts.cc:59
+#: opts.cc:58
 msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
 msgstr ""
 
-#: opts.cc:60
+#: opts.cc:59
 #, fuzzy
 msgid "  -g, --gtktheme                   Allow GTK to load a theme\n"
 msgstr "  -h, --help                       Muestra este mensage\n"
 
-#: pan_automation_time_axis.cc:59
+#: pan_automation_time_axis.cc:60
 msgid "You can't graphically edit panning of more than stream"
 msgstr ""
 
-#: pan_automation_time_axis.cc:79
+#: pan_automation_time_axis.cc:80
 #, fuzzy
 msgid "add pan automation event"
 msgstr "agregar evento de automatizacin a "
 
-#: panner2d.cc:588 panner_ui.cc:393 plugin_ui.cc:833
+#: panner2d.cc:589 panner_ui.cc:435 plugin_ui.cc:834
 #, fuzzy
 msgid "Bypass"
 msgstr "no procesar"
 
-#: panner_ui.cc:57 panner_ui.cc:187
+#: panner_ui.cc:58 panner_ui.cc:225
 #, fuzzy
 msgid "link"
 msgstr "entrada"
 
+#: panner_ui.cc:69
+#, fuzzy
+msgid "Pan automation mode"
+msgstr "modo de automatizacin de balance"
+
 #: panner_ui.cc:70
+#, fuzzy
+msgid "Pan automation type"
+msgstr "estado de automatizacin de balance"
+
+#: panner_ui.cc:81
 msgid "panning link control"
 msgstr ""
 
-#: panner_ui.cc:72
+#: panner_ui.cc:83
 msgid "panning link direction"
 msgstr ""
 
-#: panner_ui.cc:197
+#: panner_ui.cc:235
 msgid "L"
 msgstr ""
 
-#: panner_ui.cc:296
+#: panner_ui.cc:335
+#, c-format
+msgid "panner for channel %lu"
+msgstr ""
+
+#: panner_ui.cc:337
 #, c-format
 msgid "panner for channel %u"
 msgstr ""
 
-#: panner_ui.cc:403
+#: panner_ui.cc:445
 #, fuzzy
 msgid "Reset all"
 msgstr "resetear"
 
-#: playlist_selector.cc:51
+#: playlist_selector.cc:52
 #, fuzzy
 msgid "ardour: playlists"
 msgstr "ardour: plugins"
 
-#: playlist_selector.cc:58
+#: playlist_selector.cc:59
 msgid "Playlists grouped by track"
 msgstr ""
 
-#: playlist_selector.cc:97
+#: playlist_selector.cc:98
 #, fuzzy
 msgid "ardour: playlist for "
 msgstr "ardour: plugins"
 
-#: playlist_selector.cc:113
+#: playlist_selector.cc:114
 #, fuzzy
 msgid "Other tracks"
 msgstr "Ocultar esta pista"
 
-#: playlist_selector.cc:129
+#: playlist_selector.cc:130
 msgid "unassigned"
 msgstr ""
 
-#: plugin_selector.cc:42
+#: plugin_selector.cc:43
 msgid "ardour: plugins"
 msgstr "ardour: plugins"
 
-#: plugin_selector.cc:55
+#: plugin_selector.cc:56
 #, fuzzy
 msgid "Available LADSPA Plugins"
 msgstr "Plugins LADSPA dispon�les"
 
-#: plugin_selector.cc:56
+#: plugin_selector.cc:57
 msgid "Type"
 msgstr "Tipo"
 
-#: plugin_selector.cc:57 plugin_selector.cc:80
+#: plugin_selector.cc:58 plugin_selector.cc:81
 msgid "# Inputs"
 msgstr "# Entradas"
 
-#: plugin_selector.cc:58 plugin_selector.cc:81
+#: plugin_selector.cc:59 plugin_selector.cc:82
 msgid "# Outputs"
 msgstr "# Salidas"
 
-#: plugin_selector.cc:67
+#: plugin_selector.cc:68
 msgid "Plugins to be Connected to Insert"
 msgstr ""
 
-#: plugin_selector.cc:79
+#: plugin_selector.cc:80
 #, fuzzy
 msgid "Available plugins"
 msgstr "Plugins LADSPA dispon�les"
 
-#: plugin_selector.cc:97
+#: plugin_selector.cc:98
 msgid "Add a plugin to the effect list"
 msgstr "Agregar plugin a lista de efectos"
 
-#: plugin_selector.cc:99
+#: plugin_selector.cc:102
 msgid "Remove a plugin from the effect list"
 msgstr "Quitar plugin de lista de efectos"
 
-#: plugin_selector.cc:101
+#: plugin_selector.cc:104
 msgid "Update available plugins"
 msgstr "Actualizar plugins dispon�les"
 
-#: plugin_selector.cc:123
+#: plugin_selector.cc:126
 msgid "LADSPA"
 msgstr ""
 
-#: plugin_selector.cc:126
+#: plugin_selector.cc:129
 msgid "VST"
 msgstr ""
 
-#: plugin_ui.cc:83
+#: plugin_ui.cc:84
 msgid ""
 "unknown type of editor-supplying plugin (note: no VST support in this "
 "version of ardour)"
 msgstr ""
 
-#: plugin_ui.cc:138
+#: plugin_ui.cc:139
 msgid "<span size=\"large\">Presets</span>"
 msgstr ""
 
-#: plugin_ui.cc:229
+#: plugin_ui.cc:230
 #, fuzzy
 msgid "Controls"
 msgstr "Control de Salidas"
 
-#: plugin_ui.cc:266
+#: plugin_ui.cc:267
 msgid "Plugin Editor: could not build control element for port %1"
 msgstr ""
 
-#: plugin_ui.cc:357
+#: plugin_ui.cc:358
 #, fuzzy
-msgid "automation control"
+msgid "Automation control"
 msgstr "mover evento de automatizacin"
 
-#: plugin_ui.cc:853
+#: plugin_ui.cc:854
 msgid "Plugin preset %1 not found"
 msgstr ""
 
-#: plugin_ui.cc:863
+#: plugin_ui.cc:864
 #, fuzzy
 msgid "Name of New Preset:"
 msgstr "Nombre para nueva coneccin:"
 
-#: redirect_automation_line.cc:53
+#: redirect_automation_line.cc:54
 msgid "redirect automation created for non-plugin"
 msgstr "automatizacin creada para un redireccionamiento no-plugin"
 
-#: redirect_automation_time_axis.cc:93
+#: redirect_automation_time_axis.cc:94
 #, fuzzy
 msgid "add automation event to "
 msgstr "agregar evento de automatizacin a "
 
-#: redirect_box.cc:222
+#: redirect_box.cc:223
 msgid "New send"
 msgstr ""
 
-#: redirect_box.cc:223
+#: redirect_box.cc:224
 #, fuzzy
 msgid "Show send controls"
 msgstr "Control de velocidad y sentido de reproduccin(pitch)"
 
-#: redirect_box.cc:377
+#: redirect_box.cc:383
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5643,7 +5649,7 @@ msgid ""
 "part of the signal."
 msgstr ""
 
-#: redirect_box.cc:389
+#: redirect_box.cc:395
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5655,7 +5661,7 @@ msgid ""
 "support this type of configuration."
 msgstr ""
 
-#: redirect_box.cc:402
+#: redirect_box.cc:408
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "\n"
@@ -5668,34 +5674,34 @@ msgid ""
 "Ardour does not understand what to do in such situations.\n"
 msgstr ""
 
-#: redirect_box.cc:493
+#: redirect_box.cc:495
 msgid "Pre-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:496
+#: redirect_box.cc:498
 msgid "Post-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:642
+#: redirect_box.cc:644
 msgid ""
 "You cannot reorder this set of redirects\n"
 "in that way because the inputs and\n"
 "outputs do not work correctly."
 msgstr ""
 
-#: redirect_box.cc:747
+#: redirect_box.cc:749
 #, fuzzy
 msgid "rename redirect"
 msgstr "ardour: renombrar regin"
 
-#: redirect_box.cc:824 redirect_box.cc:872
+#: redirect_box.cc:826 redirect_box.cc:874
 msgid ""
 "Copying the set of redirects on the clipboard failed,\n"
 "probably because the I/O configuration of the plugins\n"
 "could not match the configuration of this track."
 msgstr ""
 
-#: redirect_box.cc:894
+#: redirect_box.cc:896
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this track?\n"
@@ -5704,7 +5710,7 @@ msgstr ""
 "Realmente desea quitar la pista \"%1\" ?\n"
 "(no podr�deshacer esto)"
 
-#: redirect_box.cc:897
+#: redirect_box.cc:899
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this bus?\n"
@@ -5713,249 +5719,261 @@ msgstr ""
 "Realmente desea quitar la pista \"%1\" ?\n"
 "(no podr�deshacer esto)"
 
-#: redirect_box.cc:902
+#: redirect_box.cc:904
 #, fuzzy
 msgid "Yes, remove them all"
 msgstr "Si, eliminar esto."
 
-#: redirect_box.cc:938
+#: redirect_box.cc:940
 #, fuzzy
 msgid "ardour: %1"
 msgstr "ardour: reloj"
 
-#: redirect_box.cc:980
+#: redirect_box.cc:982
 #, fuzzy
 msgid "ardour: %1: %2 (by %3)"
 msgstr "ardour: regin"
 
 #. new stuff
-#: redirect_box.cc:1052
+#: redirect_box.cc:1054
 msgid "New Plugin ..."
 msgstr ""
 
-#: redirect_box.cc:1053
+#: redirect_box.cc:1055
 #, fuzzy
 msgid "New Insert"
 msgstr "nueva entrada"
 
-#: redirect_box.cc:1054
+#: redirect_box.cc:1056
 msgid "New Send ..."
 msgstr ""
 
-#: redirect_box.cc:1066
+#: redirect_box.cc:1068
 #, fuzzy
 msgid "Deselect All"
 msgstr "Seleccionar todo"
 
-#: redirect_box.cc:1073
+#: redirect_box.cc:1075
 #, fuzzy
 msgid "Activate all"
 msgstr "Activar"
 
-#: redirect_box.cc:1074
+#: redirect_box.cc:1076
 #, fuzzy
 msgid "Deactivate all"
 msgstr "Desactivar"
 
-#: region_editor.cc:44
+#: region_editor.cc:45
 msgid "NAME:"
 msgstr "NOMBRE:"
 
-#: region_editor.cc:45
+#: region_editor.cc:46
 msgid "lock"
 msgstr "bloquear"
 
-#: region_editor.cc:47
+#: region_editor.cc:48
 msgid "opaque"
 msgstr "opaco"
 
-#: region_editor.cc:52
+#: region_editor.cc:49 region_editor.cc:192 region_editor.cc:226
+msgid "active"
+msgstr "activo"
+
+#: region_editor.cc:50
+msgid "visible"
+msgstr "visible"
+
+#: region_editor.cc:53
 msgid "Layer"
 msgstr "Capa"
 
-#: region_editor.cc:60
+#: region_editor.cc:54
+msgid "play"
+msgstr "reproducir"
+
+#: region_editor.cc:61
 msgid "ENVELOPE"
 msgstr "ENVELOPE"
 
-#: region_editor.cc:106
+#: region_editor.cc:107
 msgid "mute this region"
 msgstr "enmudecer a esta regin"
 
-#: region_editor.cc:107
+#: region_editor.cc:108
 msgid "regions underneath this one cannot be heard"
 msgstr "no se oir� a las regiones que est� bajo ï¿½ta"
 
-#: region_editor.cc:108
+#: region_editor.cc:109
 msgid "prevent any changes to this region"
 msgstr "bloquear contra cambios a esta regin"
 
-#: region_editor.cc:109
+#: region_editor.cc:110
 msgid "use the gain envelope during playback"
 msgstr "usar envelope de volumen durante la reproduccin"
 
-#: region_editor.cc:110
+#: region_editor.cc:111
 msgid "show the gain envelope"
 msgstr "mostrar envelope de volumen"
 
-#: region_editor.cc:111
+#: region_editor.cc:112
 msgid "use fade in curve during playback"
 msgstr "usar fade-in durante reproduccin"
 
-#: region_editor.cc:112
+#: region_editor.cc:113
 msgid "use fade out curve during playback"
 msgstr "usar fade-out durante reproduccin"
 
-#: region_editor.cc:113
+#: region_editor.cc:114
 msgid "audition this region"
 msgstr "audicionar esta regin"
 
-#: region_editor.cc:146
+#: region_editor.cc:147
 msgid "START:"
 msgstr "INICIO"
 
-#: region_editor.cc:148
+#: region_editor.cc:149
 msgid "END:"
 msgstr "FINAL:"
 
-#: region_editor.cc:150
+#: region_editor.cc:151
 msgid "LENGTH:"
 msgstr "DURACI�:"
 
-#: region_editor.cc:190
+#: region_editor.cc:191
 msgid "FADE IN"
 msgstr "FADE IN"
 
-#: region_editor.cc:192 region_editor.cc:226
+#: region_editor.cc:193 region_editor.cc:227
 msgid "msecs"
 msgstr "milisecs."
 
-#: region_editor.cc:224
+#: region_editor.cc:225
 msgid "FADE OUT"
 msgstr "FADE OUT"
 
-#: region_editor.cc:264
+#: region_editor.cc:265
 msgid "ardour: region "
 msgstr "ardour: regin"
 
-#: region_editor.cc:401
+#: region_editor.cc:402
 msgid "fade in edit"
 msgstr "editar fade in"
 
-#: region_editor.cc:413
+#: region_editor.cc:414
 #, fuzzy
 msgid "fade out edit"
 msgstr "agregar salida"
 
-#: regionview.cc:1140
+#: regionview.cc:1146
 #, fuzzy
 msgid "add gain control point"
 msgstr "Remover punto de sincron�"
 
-#: route_params_ui.cc:88
+#: route_params_ui.cc:89
 msgid "Tracks/Buses"
 msgstr "Pistas/Buses"
 
-#: route_params_ui.cc:108
+#: route_params_ui.cc:109
 #, fuzzy
 msgid "Pre-fader Redirects"
 msgstr "Pre Redireccionamentos"
 
-#: route_params_ui.cc:109
+#: route_params_ui.cc:110
 #, fuzzy
 msgid "Post-fader Redirects"
 msgstr "Pst Redireccionamentos"
 
-#: route_params_ui.cc:141
+#: route_params_ui.cc:144
 #, fuzzy
 msgid "ardour: track/bus inspector"
 msgstr "ardour: agregar Pistas/bus"
 
-#: route_params_ui.cc:142
+#: route_params_ui.cc:145
 msgid "ardour_route_parameters"
 msgstr "ardour_route_parameters"
 
-#: route_params_ui.cc:199
+#: route_params_ui.cc:202
 msgid "route display list item for renamed route not found!"
 msgstr ""
 
-#: route_params_ui.cc:451
+#: route_params_ui.cc:453
 msgid "NO TRACK"
 msgstr "NINGUNA PISTA"
 
-#: route_params_ui.cc:693
+#: route_params_ui.cc:695
 #, fuzzy
 msgid "ardour: track/bus inspector: "
 msgstr "ardour: agregar Pistas/bus"
 
-#: route_params_ui.cc:697
+#: route_params_ui.cc:699
 msgid "No Route Selected"
 msgstr "No seleccion ninguna Ruta"
 
-#: route_params_ui.cc:698
+#: route_params_ui.cc:700
 #, fuzzy
 msgid "ardour: track/bus/inspector: no route selected"
 msgstr "ardour: par�etros de ruteo: no seleccion ninguna ruta"
 
 #. ctrl-shift-click applies change to all routes
-#: route_ui.cc:133
+#: route_ui.cc:134
 #, fuzzy
 msgid "mute change"
 msgstr "Seleccionar intervalo de punch"
 
 #. ctrl-shift-click applies change to all routes
 #. ctrl-alt-click: exclusively solo this track, not a toggle */
-#: route_ui.cc:208 route_ui.cc:218
+#: route_ui.cc:209 route_ui.cc:219
 #, fuzzy
 msgid "solo change"
 msgstr "rango de reproduccin cont�ua"
 
-#: route_ui.cc:281
+#: route_ui.cc:282
 msgid "rec-enable change"
 msgstr ""
 
-#: route_ui.cc:472
+#: route_ui.cc:479
 #, fuzzy
 msgid "Solo-safe"
 msgstr "Solo"
 
-#: route_ui.cc:480 route_ui.cc:523
+#: route_ui.cc:487 route_ui.cc:530
 #, fuzzy
 msgid "MIDI Bind"
 msgstr "MIDI"
 
-#: route_ui.cc:494
+#: route_ui.cc:501
 msgid "Pre Fader"
 msgstr "Pre-Fader"
 
-#: route_ui.cc:501
+#: route_ui.cc:508
 msgid "Post Fader"
 msgstr "Pst-Fader"
 
-#: route_ui.cc:508
+#: route_ui.cc:515
 msgid "Control Outs"
 msgstr "Control de Salidas"
 
-#: route_ui.cc:515
+#: route_ui.cc:522
 msgid "Main Outs"
 msgstr "Salidas Principales"
 
-#: route_ui.cc:552
+#: route_ui.cc:559
 msgid "mix group solo  change"
 msgstr ""
 
-#: route_ui.cc:586
+#: route_ui.cc:593
 msgid "mix group mute change"
 msgstr ""
 
-#: route_ui.cc:602
+#: route_ui.cc:609
 msgid "mix group rec-enable change"
 msgstr ""
 
-#: route_ui.cc:619 visual_time_axis.cc:236
+#: route_ui.cc:626 visual_time_axis.cc:237
 msgid "ardour: color selection"
 msgstr "ardour: seleccin de color"
 
-#: route_ui.cc:695
+#: route_ui.cc:702
 #, fuzzy
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
@@ -5966,7 +5984,7 @@ msgstr ""
 "Realmente desea quitar la pista \"%1\" ?\n"
 "(no podr�deshacer esto)"
 
-#: route_ui.cc:697
+#: route_ui.cc:704
 msgid ""
 "Do you really want to remove bus \"%1\" ?\n"
 "(cannot be undone)"
@@ -5974,11 +5992,11 @@ msgstr ""
 "Realmente desea quitar el  bus \"%1\" ?\n"
 "(no podr�deshacer esto)"
 
-#: route_ui.cc:701 visual_time_axis.cc:278
+#: route_ui.cc:708 visual_time_axis.cc:279
 msgid "Yes, remove it."
 msgstr "Si, eliminar esto."
 
-#: route_ui.cc:730
+#: route_ui.cc:737
 #, fuzzy
 msgid "New Name: "
 msgstr "nuevo nombre: "
@@ -6037,147 +6055,148 @@ msgstr "No se pudo acceder a archivo de audio"
 msgid "Name for Field"
 msgstr "Nombre para regin:"
 
-#: sfdb_ui.cc:333
+#: sfdb_ui.cc:335
 msgid "Split Channels"
 msgstr "Separar canales"
 
-#: sfdb_ui.cc:340
+#: sfdb_ui.cc:342
 msgid "Create a region for each channel"
 msgstr ""
 
-#: sfdb_ui.cc:342
+#: sfdb_ui.cc:344
 msgid "Embed"
 msgstr ""
 
-#: sfdb_ui.cc:344
+#: sfdb_ui.cc:346
 #, fuzzy
 msgid "Link to an external file"
 msgstr "Insertar archivo de audio externo"
 
-#: sfdb_ui.cc:346
+#: sfdb_ui.cc:348
 msgid "Import"
 msgstr "Importar"
 
-#: sfdb_ui.cc:348
+#: sfdb_ui.cc:350
 msgid "Copy a file to the session folder"
 msgstr ""
 
-#: sfdb_ui.cc:412
+#: sfdb_ui.cc:414
 msgid "programming error: %1"
 msgstr ""
 
-#: tempo_dialog.cc:17 tempo_dialog.cc:34
+#: tempo_dialog.cc:18 tempo_dialog.cc:35
 msgid "Beats per minute"
 msgstr "Pulsos por minuto"
 
-#: tempo_dialog.cc:20 tempo_dialog.cc:37 tempo_dialog.cc:153
-#: tempo_dialog.cc:171
+#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:203
+#: tempo_dialog.cc:221
 msgid "Bar"
 msgstr "Comp�"
 
-#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:154
-#: tempo_dialog.cc:172
+#: tempo_dialog.cc:22 tempo_dialog.cc:39 tempo_dialog.cc:204
+#: tempo_dialog.cc:222
 msgid "Beat"
 msgstr "Pulsos"
 
-#: tempo_dialog.cc:23 tempo_dialog.cc:40 tempo_dialog.cc:155
-#: tempo_dialog.cc:173
+#: tempo_dialog.cc:24 tempo_dialog.cc:41 tempo_dialog.cc:205
+#: tempo_dialog.cc:223
 msgid "Location"
 msgstr "Localizacin"
 
-#: tempo_dialog.cc:149 tempo_dialog.cc:167
+#: tempo_dialog.cc:199 tempo_dialog.cc:217
 msgid "Meter denominator"
 msgstr "Denominador m�rico"
 
-#: tempo_dialog.cc:150 tempo_dialog.cc:168
+#: tempo_dialog.cc:200 tempo_dialog.cc:218
 msgid "Beats per bar"
 msgstr "Pulsos por compaces"
 
-#: tempo_dialog.cc:186 tempo_dialog.cc:197
+#: tempo_dialog.cc:236 tempo_dialog.cc:247
 msgid "whole (1)"
 msgstr "toda (1)"
 
-#: tempo_dialog.cc:187 tempo_dialog.cc:199
+#: tempo_dialog.cc:237 tempo_dialog.cc:249
 msgid "second (2)"
 msgstr "segunda (2)"
 
-#: tempo_dialog.cc:188 tempo_dialog.cc:201
+#: tempo_dialog.cc:238 tempo_dialog.cc:251
 msgid "third (3)"
 msgstr "tercera (3)"
 
-#: tempo_dialog.cc:189 tempo_dialog.cc:203 tempo_dialog.cc:211
+#: tempo_dialog.cc:239 tempo_dialog.cc:253 tempo_dialog.cc:261
 msgid "quarter (4)"
 msgstr "cuarta (4)"
 
-#: tempo_dialog.cc:190 tempo_dialog.cc:205
+#: tempo_dialog.cc:240 tempo_dialog.cc:255
 msgid "eighth (8)"
 msgstr "octava (8)"
 
-#: tempo_dialog.cc:191 tempo_dialog.cc:207
+#: tempo_dialog.cc:241 tempo_dialog.cc:257
 msgid "sixteenth (16)"
 msgstr "d�ima sexta (16)"
 
-#: tempo_dialog.cc:192 tempo_dialog.cc:209
+#: tempo_dialog.cc:242 tempo_dialog.cc:259
 msgid "thirty-second (32)"
 msgstr "trig�ima segunda (32)"
 
-#: tempo_dialog.cc:321
+#: tempo_dialog.cc:420
 msgid "garbaged note type entry (%1)"
 msgstr "se descart el texto (%1)"
 
-#: tempo_dialog.cc:331
+#: tempo_dialog.cc:430
 msgid "incomprehensible note type entry (%1)"
 msgstr "El formato de este texto es incomprensible(%1)"
 
-#: time_axis_view.cc:111
+#: time_axis_view.cc:112
 msgid "gTortnam"
 msgstr "gTortnam"
 
-#: time_axis_view.cc:548
+#: time_axis_view.cc:549
 msgid "Largest"
 msgstr "Enorme"
 
-#: time_axis_view.cc:549
+#: time_axis_view.cc:550
 msgid "Large"
 msgstr "Grande"
 
-#: time_axis_view.cc:550
+#: time_axis_view.cc:551
 msgid "Larger"
 msgstr "Mayor"
 
-#: time_axis_view.cc:552
+#: time_axis_view.cc:553
 msgid "Smaller"
 msgstr "Menor"
 
-#: time_axis_view.cc:553
+#: time_axis_view.cc:554
 msgid "Small"
 msgstr "Chico"
 
-#: time_axis_view.cc:869
+#: time_axis_view.cc:870
 msgid "unknown track height name \"%1\" in XML GUI information"
 msgstr ""
 
-#: time_axis_view_item.cc:71
+#. first constructed item sets up font info
+#: time_axis_view_item.cc:79
 msgid "TimeAxisViewItemName"
 msgstr ""
 
-#: time_axis_view_item.cc:271
+#: time_axis_view_item.cc:298
 msgid "new duration %1 frames is out of bounds for %2"
 msgstr ""
 
-#: time_selection.cc:40
+#: time_selection.cc:41
 msgid "programming error: request for non-existent audio range (%1)!"
 msgstr ""
 
-#: utils.cc:106 utils.cc:149
+#: utils.cc:107 utils.cc:150
 msgid "bad XPM header %1"
 msgstr ""
 
-#: utils.cc:331
+#: utils.cc:332
 msgid "missing RGBA style for \"%1\""
 msgstr ""
 
-#: visual_time_axis.cc:275
+#: visual_time_axis.cc:276
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
 "(cannot be undone)"
@@ -6185,14 +6204,83 @@ msgstr ""
 "Realmente desea quitar la pista \"%1\" ?\n"
 "(no podr�deshacer esto)"
 
-#: visual_time_axis.cc:324
+#: visual_time_axis.cc:325
 msgid "new name: "
 msgstr "nuevo nombre: "
 
-#: visual_time_axis.cc:335
+#: visual_time_axis.cc:336
 msgid "A track already exists with that name"
 msgstr "Ya existe una pista con este nombre"
 
+#, fuzzy
+#~ msgid "set selected trackview"
+#~ msgstr "Insertar seleccin"
+
+#, fuzzy
+#~ msgid "set selected control point"
+#~ msgstr "Remover punto de sincron�"
+
+#, fuzzy
+#~ msgid "set selected regionview"
+#~ msgstr "Reproducir regin seleccionada cont�uamente"
+
+#~ msgid "Start a new session\n"
+#~ msgstr "Iniciar una nueva sesin\n"
+
+#~ msgid "via Session menu"
+#~ msgstr "via men de Sesin"
+
+#, fuzzy
+#~ msgid "<b>Advanced</b>"
+#~ msgstr "Avanzado..."
+
+#, fuzzy
+#~ msgid "Select a File"
+#~ msgstr "Seleccionar todo"
+
+#, fuzzy
+#~ msgid "Track/Bus connection options"
+#~ msgstr "Pistas/Buses"
+
+#~ msgid "RECORD"
+#~ msgstr "GRABAR"
+
+#~ msgid "INPUT"
+#~ msgstr "ENTRADA"
+
+#~ msgid "OUTPUT"
+#~ msgstr "SALIDA"
+
+#, fuzzy
+#~ msgid "Gain automation mode"
+#~ msgstr "modo de automatizacin de volumen"
+
+#, fuzzy
+#~ msgid "Gain automation type"
+#~ msgstr "estado de automatizacin de volumen"
+
+#, fuzzy
+#~ msgid "trim"
+#~ msgstr "cortar"
+
+#, fuzzy
+#~ msgid "gain automation mode"
+#~ msgstr "modo de automatizacin de volumen"
+
+#, fuzzy
+#~ msgid "gain automation state"
+#~ msgstr "estado de automatizacin de volumen"
+
+#, fuzzy
+#~ msgid "pan automation state"
+#~ msgstr "estado de automatizacin de balance"
+
+#~ msgid "OUT"
+#~ msgstr "SALIDA"
+
+#~ msgid "no group"
+#~ msgstr "sin grupo"
+
 #, fuzzy
 #~ msgid "normal"
 #~ msgstr "Normal"
@@ -6458,9 +6546,6 @@ msgstr "Ya existe una pista con este nombre"
 #~ msgid "AND"
 #~ msgstr "Y"
 
-#~ msgid "OR"
-#~ msgstr "O"
-
 #~ msgid "ardour: locate soundfiles"
 #~ msgstr "ardour: localizar archivos de audio"
 
@@ -6476,9 +6561,6 @@ msgstr "Ya existe una pista con este nombre"
 #~ msgid "Ardour: Search Results"
 #~ msgstr "Ardour: Resultado de Bsqueda"
 
-#~ msgid "Mix Groups"
-#~ msgstr "Grupos de Mixer"
-
 #~ msgid "Hide All AudioTrack MixerStrips"
 #~ msgstr "Ocultar todas las pistas de Audio en el Mixer"
 
@@ -6491,11 +6573,6 @@ msgstr "Ya existe una pista con este nombre"
 #~ msgid "Name for new mix group"
 #~ msgstr "Nombre para nuevo grupo del mixer"
 
-#
-#, fuzzy
-#~ msgid "Session name:"
-#~ msgstr "Nombre de sesin:"
-
 #, fuzzy
 #~ msgid "Create"
 #~ msgstr "Crear"
@@ -6535,17 +6612,9 @@ msgstr "Ya existe una pista con este nombre"
 #~ "frecuencia de muestreo distinta, cierre Ardour,reinice\n"
 #~ "JACK y vuelva a ejecutar Ardour\n"
 
-#, fuzzy
-#~ msgid "Session template"
-#~ msgstr "usar esquema existente"
-
 #~ msgid "blank"
 #~ msgstr "en blanco"
 
-#, fuzzy
-#~ msgid "No template"
-#~ msgstr "-esquema"
-
 #, fuzzy
 #~ msgid "Slave to MTC"
 #~ msgstr "Enviar MTC"
@@ -6565,9 +6634,6 @@ msgstr "Ya existe una pista con este nombre"
 #~ msgid "Native Format"
 #~ msgstr "Formato Nativo"
 
-#~ msgid "Use as click"
-#~ msgstr "Usar como metrnomo"
-
 #~ msgid "--unknown--"
 #~ msgstr "--desconocido--"
 
index c1d57a1806ddc908c1be4a2ec8fbcf5443944f4e..4875e577124b6303eeb0441375b6394dfeb1ed65 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gtk-ardour 0.334.5\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 18:09-0400\n"
 "PO-Revision-Date: 2005-02-14 11:19-0500\n"
 "Last-Translator: Alain Fréhel <alain.frehel@free.fr>\n"
 "Language-Team: French <ardour-dev@lists.sourceforge.net>\n"
@@ -15,96 +15,96 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: about.cc:119
+#: about.cc:120
 msgid "Paul Davis"
 msgstr ""
 
-#: about.cc:120
+#: about.cc:121
 #, fuzzy
 msgid "Jesse Chappell"
 msgstr "Réinitialiser"
 
-#: about.cc:121
+#: about.cc:122
 msgid "Taybin Rutkin"
 msgstr ""
 
-#: about.cc:122
+#: about.cc:123
 msgid "Marcus Andersson"
 msgstr ""
 
-#: about.cc:123
+#: about.cc:124
 msgid "Jeremy Hall"
 msgstr ""
 
-#: about.cc:124
+#: about.cc:125
 msgid "Steve Harris"
 msgstr ""
 
-#: about.cc:125
+#: about.cc:126
 msgid "Tim Mayberry"
 msgstr ""
 
-#: about.cc:126
+#: about.cc:127
 msgid "Mark Stewart"
 msgstr ""
 
-#: about.cc:127
+#: about.cc:128
 msgid "Sam Chessman"
 msgstr ""
 
-#: about.cc:128
+#: about.cc:129
 msgid "Jack O'Quin"
 msgstr ""
 
-#: about.cc:129
+#: about.cc:130
 msgid "Matt Krai"
 msgstr ""
 
-#: about.cc:130
+#: about.cc:131
 msgid "Ben Bell"
 msgstr ""
 
-#: about.cc:131
+#: about.cc:132
 msgid "Gerard van Dongen"
 msgstr ""
 
-#: about.cc:132
+#: about.cc:133
 msgid "Thomas Charbonnel"
 msgstr ""
 
-#: about.cc:133
+#: about.cc:134
 msgid "Nick Mainsbridge"
 msgstr ""
 
-#: about.cc:134
+#: about.cc:135
 msgid "Colin Law"
 msgstr ""
 
-#: about.cc:135
+#: about.cc:136
 msgid "Sampo Savolainen"
 msgstr ""
 
-#: about.cc:136
+#: about.cc:137
 msgid "Joshua Leach"
 msgstr ""
 
-#: about.cc:137
+#: about.cc:138
 msgid "Rob Holland"
 msgstr ""
 
-#: about.cc:138
+#: about.cc:139
 msgid "Per Sigmond"
 msgstr ""
 
-#: about.cc:139
+#: about.cc:140
 msgid "Doug Mclain"
 msgstr ""
 
-#: about.cc:140
+#: about.cc:141
 msgid "Petter Sundlöf"
 msgstr ""
 
-#: about.cc:145
+#: about.cc:146
 #, fuzzy
 msgid ""
 "French:\n"
@@ -113,7 +113,7 @@ msgstr ""
 "Français :\n"
 "\tAlain Fréhel <alain.frehel@free.fr>"
 
-#: about.cc:146
+#: about.cc:147
 #, fuzzy
 msgid ""
 "German:\n"
@@ -122,7 +122,7 @@ msgstr ""
 "Allemand :\n"
 "\tKarsten Petersen <kapet@kapet.de>"
 
-#: about.cc:147
+#: about.cc:148
 #, fuzzy
 msgid ""
 "Italian:\n"
@@ -131,7 +131,7 @@ msgstr ""
 "Italien :\n"
 "\tFilippo Pappalardo <filippo@email.it>"
 
-#: about.cc:148
+#: about.cc:149
 #, fuzzy
 msgid ""
 "Portuguese:\n"
@@ -140,7 +140,7 @@ msgstr ""
 "Portugais :\n"
 "\tRui Nuno Capela <rncbc@rncbc.org>"
 
-#: about.cc:149
+#: about.cc:150
 #, fuzzy
 msgid ""
 "Brazilian Portuguese:\n"
@@ -151,7 +151,7 @@ msgstr ""
 "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
 "\tChris Ross <chris@tebibyte.org>"
 
-#: about.cc:151
+#: about.cc:152
 #, fuzzy
 msgid ""
 "Spanish:\n"
@@ -160,7 +160,7 @@ msgstr ""
 "Espagnol :\n"
 "\tAlex Krohn <alexkrohn@fastmail.fm>"
 
-#: about.cc:152
+#: about.cc:153
 #, fuzzy
 msgid ""
 "Russian:\n"
@@ -169,12 +169,12 @@ msgstr ""
 "Russe :\n"
 "\tIgor Blinov <pitstop@nm.ru>"
 
-#: about.cc:180
+#: about.cc:181
 #, fuzzy
 msgid "Copyright (C) 1999-2005 Paul Davis\n"
 msgstr "Copyright (C) 1999-2005 Paul Davis"
 
-#: about.cc:181
+#: about.cc:182
 #, fuzzy
 msgid ""
 "Ardour comes with ABSOLUTELY NO WARRANTY\n"
@@ -187,7 +187,7 @@ msgstr ""
 "Ceci est un logiciel libre, et vous êtes encouragés à le distribuer\n"
 "sous certaines conditions ; voir le fichier COPYING pour les détails.\n"
 
-#: about.cc:187
+#: about.cc:188
 #, fuzzy
 msgid ""
 "%1\n"
@@ -196,53 +196,53 @@ msgstr ""
 "Ardour: %1\n"
 "(fonctionnant avec ardour/gtk %2 libardour: %3.%4.%5)"
 
-#: actions.cc:260
+#: actions.cc:261
 #, fuzzy
 msgid "programmer error: %1 %2"
 msgstr "erreur de programmation : "
 
-#: add_route_dialog.cc:61
+#: add_route_dialog.cc:62
 msgid "ardour: add track/bus"
 msgstr "ardour : ajouter piste/bus"
 
 #. path = "1"
-#: add_route_dialog.cc:62 editor_route_list.cc:72
+#: add_route_dialog.cc:63 editor_route_list.cc:73
 msgid "Tracks"
 msgstr "Pistes"
 
 #. path = "0"
-#: add_route_dialog.cc:63 editor_route_list.cc:69
+#: add_route_dialog.cc:64 editor_route_list.cc:70
 msgid "Busses"
 msgstr "Bus"
 
-#: add_route_dialog.cc:95 plugin_ui.cc:832
+#: add_route_dialog.cc:96 plugin_ui.cc:833
 msgid "Add"
 msgstr "Ajouter"
 
-#: add_route_dialog.cc:113
+#: add_route_dialog.cc:114
 msgid "Name (template)"
 msgstr "Nom (modèle)"
 
-#: add_route_dialog.cc:119
+#: add_route_dialog.cc:120
 #, fuzzy
 msgid "Channel Configuration"
 msgstr "Configuration"
 
-#: add_route_dialog.cc:176 editor.cc:131 editor.cc:3660 time_axis_view.cc:551
+#: add_route_dialog.cc:177 editor.cc:134 editor.cc:3688 time_axis_view.cc:552
 msgid "Normal"
 msgstr "Normal"
 
-#: add_route_dialog.cc:178
+#: add_route_dialog.cc:179
 #, fuzzy
 msgid "Tape"
 msgstr "État"
 
-#: add_route_dialog.cc:195
+#: add_route_dialog.cc:196
 #, fuzzy
 msgid "Mono"
 msgstr "mono"
 
-#: add_route_dialog.cc:197
+#: add_route_dialog.cc:198
 #, fuzzy
 msgid "Stereo"
 msgstr "stéréo"
@@ -329,31 +329,11 @@ msgstr "ECOUTE"
 msgid "SOLO"
 msgstr "SOLO"
 
-#: ardour_ui.cc:207
-msgid ""
-"You cannot record-enable\n"
-"track %1\n"
-"because it has no input connections.\n"
-"You would be wasting space recording silence."
-msgstr ""
-"Vous ne pouvez activer\n"
-"l'enregistrement de la piste %1\n"
-"car elle n'a pas de connections en entrée.\n"
-"Vous gacheriez de l'espace en enregistrant du silence."
-
-#: ardour_ui.cc:236
-msgid "no vertical meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:243
-msgid "no horizontal meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:410
+#: ardour_ui.cc:375
 msgid "quit"
 msgstr "quitter"
 
-#: ardour_ui.cc:419
+#: ardour_ui.cc:384
 msgid ""
 "Ardour was unable to save your session.\n"
 "\n"
@@ -362,31 +342,31 @@ msgid ""
 "\"Just quit\" option."
 msgstr ""
 
-#: ardour_ui.cc:438
+#: ardour_ui.cc:403
 msgid "ardour: save session?"
 msgstr "ardour : enregistrer la session ?"
 
-#: ardour_ui.cc:445
+#: ardour_ui.cc:410
 msgid "Don't %1"
 msgstr "Ne pas %1"
 
-#: ardour_ui.cc:447
+#: ardour_ui.cc:412
 msgid "Just %1"
 msgstr "Juste %1"
 
-#: ardour_ui.cc:449
+#: ardour_ui.cc:414
 msgid "Save and %1"
 msgstr "Enregistrer et %1"
 
-#: ardour_ui.cc:461
+#: ardour_ui.cc:426
 msgid "session"
 msgstr "session"
 
-#: ardour_ui.cc:463
+#: ardour_ui.cc:428
 msgid "snapshot"
 msgstr "Instantané"
 
-#: ardour_ui.cc:465
+#: ardour_ui.cc:430
 #, fuzzy
 msgid ""
 "The %1\"%2\"\n"
@@ -405,81 +385,81 @@ msgstr ""
 "\n"
 "Que voulez-vous faire ?"
 
-#: ardour_ui.cc:479
+#: ardour_ui.cc:444
 msgid "Prompter"
 msgstr "Prompter"
 
-#: ardour_ui.cc:538
+#: ardour_ui.cc:503
 #, c-format
 msgid "disconnected"
 msgstr "déconnecté"
 
-#: ardour_ui.cc:545
+#: ardour_ui.cc:510
 #, c-format
 msgid "SR: %.1f kHz / %4.1f msecs"
 msgstr "F.E. : %.1f kHz / %4.1f ms"
 
-#: ardour_ui.cc:549
+#: ardour_ui.cc:514
 #, c-format
 msgid "SR: %u kHz / %4.1f msecs"
 msgstr "F.E. : %u kHz / %4.1f ms"
 
-#: ardour_ui.cc:562
+#: ardour_ui.cc:527
 #, c-format
 msgid "DSP Load: %.1f%%"
 msgstr "Charge DSP : %.1f%%"
 
-#: ardour_ui.cc:572
+#: ardour_ui.cc:537
 #, c-format
 msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
 msgstr "Tampons p:%<PRIu32>%% c:%<PRIu32>%%"
 
-#: ardour_ui.cc:599
+#: ardour_ui.cc:564
 msgid "space: 24hrs+"
 msgstr "espace : 24hrs+"
 
-#: ardour_ui.cc:629
+#: ardour_ui.cc:594
 #, c-format
 msgid "space: %02dh:%02dm:%02ds"
 msgstr "espace: %02dh:%02dm:%02ds"
 
-#: ardour_ui.cc:668
+#: ardour_ui.cc:633
 msgid "programming error: impossible control method"
 msgstr "erreur de programmation : méthode de contrôle impossible"
 
-#: ardour_ui.cc:776 new_session_dialog.cc:89
+#: ardour_ui.cc:741 new_session_dialog.cc:294
 #, fuzzy
 msgid "Recent Sessions"
 msgstr "ouvrir session"
 
 #. ardour sessions are folders
-#: ardour_ui.cc:867
+#: ardour_ui.cc:834
 msgid "open session"
 msgstr "ouvrir session"
 
-#: ardour_ui.cc:873
+#: ardour_ui.cc:840
 #, fuzzy
 msgid "Ardour sessions"
 msgstr "ardour_nouvelle_session"
 
-#: ardour_ui.cc:906
+#: ardour_ui.cc:873
 msgid "Patience is a virtue.\n"
 msgstr "La patience est une vertue.\n"
 
-#: ardour_ui.cc:915
+#: ardour_ui.cc:882
 msgid "You cannot add a track without a session already loaded."
 msgstr ""
 "Vous ne pouvez pas ajouter une piste sans qu'une session ait été chargée."
 
-#: ardour_ui.cc:922
+#: ardour_ui.cc:889
 msgid "could not create new audio track"
 msgstr "impossible de créer une nouvelle piste audio"
 
-#: ardour_ui.cc:926
+#: ardour_ui.cc:893
 msgid "could not create new audio bus"
 msgstr "impossible de créer un nouveau bus audio"
 
-#: ardour_ui.cc:945
+#: ardour_ui.cc:912
 msgid ""
 "There are insufficient JACK ports available\n"
 "to create a new track or bus.\n"
@@ -491,7 +471,7 @@ msgstr ""
 "Vous devriez enregistrer, quitter, puis\n"
 "redémarrer JACK avec plus de ports."
 
-#: ardour_ui.cc:1069
+#: ardour_ui.cc:1036
 msgid ""
 "Please create 1 or more track\n"
 "before trying to record.\n"
@@ -501,7 +481,7 @@ msgstr ""
 "avant d'essayer d'enregistrer.\n"
 "Regardez dans le menu Session."
 
-#: ardour_ui.cc:1298
+#: ardour_ui.cc:1265
 msgid ""
 "JACK has either been shutdown or it\n"
 "disconnected Ardour because Ardour\n"
@@ -513,56 +493,54 @@ msgstr ""
 "Vous devriez enregistrer la session\n"
 "et/ou essayer de le reconnecter à JACK."
 
-#: ardour_ui.cc:1315
+#: ardour_ui.cc:1282
 msgid "Unable to create all required ports"
 msgstr ""
 
-#: ardour_ui.cc:1323
+#: ardour_ui.cc:1290
 msgid "Unable to start the session running"
 msgstr "Impossible de lancer la session"
 
-#: ardour_ui.cc:1459
+#: ardour_ui.cc:1426
 msgid "No Stream"
 msgstr "Pas de flux"
 
-#: ardour_ui.cc:1486 ardour_ui.cc:1505
+#: ardour_ui.cc:1453 ardour_ui.cc:1472
 msgid "none"
 msgstr "aucun"
 
-#: ardour_ui.cc:1495 ardour_ui.cc:1514 automation_time_axis.cc:183
-#: automation_time_axis.cc:212 automation_time_axis.cc:459 mixer_strip.cc:174
-#: mixer_strip.cc:186 mixer_strip.cc:881 plugin_ui.cc:391 plugin_ui.cc:634
+#: ardour_ui.cc:1462 ardour_ui.cc:1481
 msgid "off"
 msgstr "arrêt"
 
-#: ardour_ui.cc:1538
+#: ardour_ui.cc:1505
 #, fuzzy
 msgid "Name of New Snapshot"
 msgstr "Nom de l'instantané"
 
-#: ardour_ui.cc:1684
+#: ardour_ui.cc:1651
 msgid "Name for mix template:"
 msgstr "Nom du modèle de mélange : "
 
-#: ardour_ui.cc:1685
+#: ardour_ui.cc:1652
 msgid "-template"
 msgstr "-modèle"
 
-#: ardour_ui.cc:1836
+#: ardour_ui.cc:1809
 msgid ""
 "You do not have write access to this session.\n"
 "This prevents the session from being loaded."
 msgstr ""
 
-#: ardour_ui.cc:1849 ardour_ui.cc:1904
+#: ardour_ui.cc:1822 ardour_ui.cc:1877
 msgid "Session \"%1 (snapshot %2)\" did not load successfully"
 msgstr "La session \"%1 (instantané %2)\" ne s'est pas chargée correctement"
 
-#: ardour_ui.cc:1960
+#: ardour_ui.cc:1933
 msgid "No audio files were ready for cleanup"
 msgstr ""
 
-#: ardour_ui.cc:1964
+#: ardour_ui.cc:1937
 msgid ""
 "If this seems suprising, \n"
 "check for any existing snapshots.\n"
@@ -570,25 +548,25 @@ msgid ""
 "require some unused files to continue to exist."
 msgstr ""
 
-#: ardour_ui.cc:1973
+#: ardour_ui.cc:1946
 msgid "ardour: cleanup"
 msgstr "ardour : nettoyage"
 
-#: ardour_ui.cc:2009 ardour_ui.cc:2015
+#: ardour_ui.cc:1982 ardour_ui.cc:1988
 #, fuzzy
 msgid "files were"
 msgstr "fichiers"
 
-#: ardour_ui.cc:2011 ardour_ui.cc:2017
+#: ardour_ui.cc:1984 ardour_ui.cc:1990
 #, fuzzy
 msgid "file was"
 msgstr "fichiers"
 
-#: ardour_ui.cc:2058
+#: ardour_ui.cc:2031
 msgid "Are you sure you want to cleanup?"
 msgstr ""
 
-#: ardour_ui.cc:2063
+#: ardour_ui.cc:2036
 msgid ""
 "Cleanup is a destructive operation.\n"
 "ALL undo/redo information will be lost if you cleanup.\n"
@@ -596,26 +574,26 @@ msgid ""
 "location."
 msgstr ""
 
-#: ardour_ui.cc:2069
+#: ardour_ui.cc:2042
 #, fuzzy
 msgid "Clean Up"
 msgstr "Nettoyer"
 
-#: ardour_ui.cc:2072
+#: ardour_ui.cc:2045
 #, fuzzy
 msgid "CleanupDialog"
 msgstr "Nettoyer"
 
-#: ardour_ui.cc:2073
+#: ardour_ui.cc:2046
 #, fuzzy
 msgid "ardour_cleanup"
 msgstr "ardour : nettoyage"
 
-#: ardour_ui.cc:2092
+#: ardour_ui.cc:2065
 msgid "cleaned files"
 msgstr "fichiers nettoyés"
 
-#: ardour_ui.cc:2093
+#: ardour_ui.cc:2066
 #, fuzzy
 msgid ""
 "The following %1 %2 not in use and \n"
@@ -631,11 +609,11 @@ msgstr ""
 "%3 %4-octets d'espace disque supplémentaires seront\n"
 "libérés"
 
-#: ardour_ui.cc:2118
+#: ardour_ui.cc:2091
 msgid "deleted file"
 msgstr "fichiers effacés"
 
-#: ardour_ui.cc:2119
+#: ardour_ui.cc:2092
 #, fuzzy
 msgid ""
 "The following %1 %2 deleted from\n"
@@ -645,12 +623,12 @@ msgstr ""
 "Les %1 fichier%2 suivant%2 seront effacé%2, libérant %3 %4-octets d'espace "
 "disque"
 
-#: ardour_ui.cc:2242
+#: ardour_ui.cc:2215
 msgid "Recording was stopped because your system could not keep up."
 msgstr ""
 "L'enregistrement a été stoppé parce que votre système ne peut pas suivre."
 
-#: ardour_ui.cc:2265
+#: ardour_ui.cc:2238
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -664,7 +642,7 @@ msgstr ""
 "Plus précisement, il a été incapable d'écrire les données\n"
 "sur le disque assez rapidement pour suivre l'enregistrement.\n"
 
-#: ardour_ui.cc:2284
+#: ardour_ui.cc:2257
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -678,7 +656,7 @@ msgstr ""
 "Plus précisement, il a été incapable de lire les données\n"
 "sur le disque assez rapidement pour suivre la lecture.\n"
 
-#: ardour_ui.cc:2310
+#: ardour_ui.cc:2283
 msgid ""
 "This session appears to have been in\n"
 "middle of recording when ardour or\n"
@@ -696,363 +674,363 @@ msgstr ""
 "ou vous pouvez l'ignorer. Veuillez décider\n"
 "sur ce que vous voulez faire.\n"
 
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2293
 msgid "Recover from crash"
 msgstr "Récupérer après un plantage"
 
-#: ardour_ui.cc:2321
+#: ardour_ui.cc:2294
 msgid "Ignore crash data"
 msgstr "Ignorer les données du plantage"
 
-#: ardour_ui.cc:2339
+#: ardour_ui.cc:2312
 msgid "Could not disconnect from JACK"
 msgstr "Impossible de se déconnecter de JACK"
 
-#: ardour_ui.cc:2352
+#: ardour_ui.cc:2325
 msgid "Could not reconnect to JACK"
 msgstr "Impossible de se reconnecter à JACK"
 
-#: ardour_ui2.cc:59
+#: ardour_ui2.cc:60
 msgid "UI: cannot setup editor"
 msgstr "IHM : impossible d'initialiser l'éditeur"
 
-#: ardour_ui2.cc:64
+#: ardour_ui2.cc:65
 msgid "UI: cannot setup mixer"
 msgstr "IHM : impossible d'initialiser la console de mixage"
 
-#: ardour_ui2.cc:90
+#: ardour_ui2.cc:91
 msgid "MMC + Local"
 msgstr "MMC + Local"
 
-#: ardour_ui2.cc:91
+#: ardour_ui2.cc:92
 msgid "MMC"
 msgstr "MMC"
 
-#: ardour_ui2.cc:92
+#: ardour_ui2.cc:93
 msgid "Local"
 msgstr "Local"
 
-#: ardour_ui2.cc:109
+#: ardour_ui2.cc:110
 msgid "MMC ID"
 msgstr "ID MMC"
 
-#: ardour_ui2.cc:290
+#: ardour_ui2.cc:291
 msgid "Play from playhead"
 msgstr "Jouer depuis la tête de lecture"
 
-#: ardour_ui2.cc:291
+#: ardour_ui2.cc:292
 msgid "Stop playback"
 msgstr "Arrêter la lecture"
 
-#: ardour_ui2.cc:292
+#: ardour_ui2.cc:293
 msgid "Play range/selection"
 msgstr "Jouer l'intervalle/la sélection"
 
-#: ardour_ui2.cc:293
+#: ardour_ui2.cc:294
 msgid "Go to start of session"
 msgstr "Aller au début de la session"
 
-#: ardour_ui2.cc:294
+#: ardour_ui2.cc:295
 msgid "Go to end of session"
 msgstr "Aller à la fin de la session"
 
-#: ardour_ui2.cc:295
+#: ardour_ui2.cc:296
 msgid "Play loop range"
 msgstr "Jouer l'intervalle de boucle"
 
-#: ardour_ui2.cc:296
+#: ardour_ui2.cc:297
 msgid "Return to last playback start when stopped"
 msgstr "Revenir au dernier départ de lecture lors de l'arrêt"
 
-#: ardour_ui2.cc:297
+#: ardour_ui2.cc:298
 msgid "Start playback after any locate"
 msgstr "Démarrer la lecture aprés chaque locate"
 
-#: ardour_ui2.cc:298
+#: ardour_ui2.cc:299
 msgid "Be sensible about input monitoring"
 msgstr "Être raisonnable avec la pré-écoute des entrées"
 
-#: ardour_ui2.cc:299
+#: ardour_ui2.cc:300
 msgid "Start recording at auto-punch start"
 msgstr "Démarrer l'enregistrement en début d'auto-punch"
 
-#: ardour_ui2.cc:300
+#: ardour_ui2.cc:301
 msgid "Stop recording at auto-punch end"
 msgstr "Arrêter l'enregistrement en fin d'auto-punch"
 
-#: ardour_ui2.cc:301
+#: ardour_ui2.cc:302
 msgid "Enable/Disable audio click"
 msgstr "Activer/Désactiver le clic sonore"
 
-#: ardour_ui2.cc:302
+#: ardour_ui2.cc:303
 #, fuzzy
 msgid "Positional sync source"
 msgstr "Synchro. positionelle"
 
-#: ardour_ui2.cc:303
+#: ardour_ui2.cc:304
 msgid "Does Ardour control the time?"
 msgstr ""
 
-#: ardour_ui2.cc:304
+#: ardour_ui2.cc:305
 #, fuzzy
 msgid "Shuttle speed control"
 msgstr "Contrôle de la vitesse avec molette"
 
-#: ardour_ui2.cc:305
+#: ardour_ui2.cc:306
 #, fuzzy, c-format
 msgid "Select semitones or %%-age for speed display"
 msgstr "Sélectionner les demi-tons ou le %-age pour l'affichage de la vitesse"
 
-#: ardour_ui2.cc:306
+#: ardour_ui2.cc:307
 msgid "Current transport speed"
 msgstr "Vitesse de transport courante"
 
-#: ardour_ui2.cc:329
+#: ardour_ui2.cc:330
 msgid "Primary clock"
 msgstr "Horloge principale"
 
-#: ardour_ui2.cc:330
+#: ardour_ui2.cc:331
 msgid "secondary clock"
 msgstr "Horloge secondaire"
 
 #. XXX: this should really be saved in instant.xml or something similar and restored from there
 #. Combo's are stupid - they steal space from the entry for the button
-#: ardour_ui2.cc:387 ardour_ui2.cc:823 ardour_ui2.cc:836 ardour_ui2.cc:899
-#: ardour_ui2.cc:901
+#: ardour_ui2.cc:388 ardour_ui2.cc:833 ardour_ui2.cc:846 ardour_ui2.cc:909
+#: ardour_ui2.cc:911
 msgid "sprung"
 msgstr ""
 
-#: ardour_ui2.cc:388 ardour_ui2.cc:825 ardour_ui2.cc:847
+#: ardour_ui2.cc:389 ardour_ui2.cc:835 ardour_ui2.cc:857
 msgid "wheel"
 msgstr "roulette"
 
-#: ardour_ui2.cc:450
+#: ardour_ui2.cc:451
 msgid "ardour: clock"
 msgstr "ardour : horloge"
 
-#: ardour_ui2.cc:595
+#: ardour_ui2.cc:596
 #, fuzzy
 msgid "Maximum speed"
 msgstr "varispeed"
 
-#: ardour_ui2.cc:813
+#: ardour_ui2.cc:823
 msgid "st"
 msgstr "er"
 
-#: ardour_ui2.cc:857 ardour_ui2.cc:880 ardour_ui2.cc:897
+#: ardour_ui2.cc:867 ardour_ui2.cc:890 ardour_ui2.cc:907
 msgid "stopped"
 msgstr "arrêté"
 
-#: ardour_ui_dialogs.cc:152 playlist_selector.cc:69
+#: ardour_ui_dialogs.cc:153 playlist_selector.cc:70
 #, fuzzy
 msgid "close"
 msgstr "Fermer"
 
-#: ardour_ui_dialogs.cc:359 ardour_ui_ed.cc:181
+#: ardour_ui_dialogs.cc:360 ardour_ui_ed.cc:184
 #, fuzzy
 msgid "Sound File Browser"
 msgstr "Bibliothèque audio"
 
 #. menus + submenus that need action items
-#: ardour_ui_ed.cc:69
+#: ardour_ui_ed.cc:72
 msgid "Session"
 msgstr "Session"
 
-#: ardour_ui_ed.cc:70 ardour_ui_ed.cc:127 editor.cc:1843 export_dialog.cc:350
+#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:130 editor.cc:1836 export_dialog.cc:350
 #: export_dialog.cc:1059 export_dialog.cc:1063
 msgid "Export"
 msgstr "Exporter"
 
-#: ardour_ui_ed.cc:71
+#: ardour_ui_ed.cc:74
 msgid "Cleanup"
 msgstr "Nettoyer"
 
-#: ardour_ui_ed.cc:72 option_editor.cc:125
+#: ardour_ui_ed.cc:75 option_editor.cc:126
 msgid "Sync"
 msgstr "Synchro."
 
-#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:74
+#: ardour_ui_ed.cc:76 ardour_ui_ed.cc:77
 #, fuzzy
 msgid "Options"
 msgstr "Éditeur d'options"
 
-#: ardour_ui_ed.cc:75
+#: ardour_ui_ed.cc:78
 msgid "Help"
 msgstr ""
 
-#: ardour_ui_ed.cc:76
+#: ardour_ui_ed.cc:79
 msgid "KeyMouse Actions"
 msgstr ""
 
-#: ardour_ui_ed.cc:77
+#: ardour_ui_ed.cc:80
 #, fuzzy
 msgid "Audio File Format"
 msgstr "Trames audio"
 
-#: ardour_ui_ed.cc:78
+#: ardour_ui_ed.cc:81
 #, fuzzy
 msgid "Header"
 msgstr "Pré fader"
 
-#: ardour_ui_ed.cc:79
+#: ardour_ui_ed.cc:82
 msgid "Data"
 msgstr ""
 
-#: ardour_ui_ed.cc:80
+#: ardour_ui_ed.cc:83
 #, fuzzy
 msgid "Control Surfaces"
 msgstr "Sorties de contrôle"
 
 #. the real actions
-#: ardour_ui_ed.cc:84 audio_time_axis.cc:1856 new_session_dialog.cc:342
+#: ardour_ui_ed.cc:87 audio_time_axis.cc:1854 new_session_dialog.cc:529
 msgid "New"
 msgstr "Nouveau"
 
-#: ardour_ui_ed.cc:86 new_session_dialog.cc:334
+#: ardour_ui_ed.cc:89 new_session_dialog.cc:517
 msgid "Open"
 msgstr "Ouvrir"
 
-#: ardour_ui_ed.cc:87
+#: ardour_ui_ed.cc:90
 msgid "Recent"
 msgstr "Récent"
 
-#: ardour_ui_ed.cc:88 io_selector.cc:57 io_selector.cc:791
+#: ardour_ui_ed.cc:91 io_selector.cc:58 io_selector.cc:792
 msgid "Close"
 msgstr "Fermer"
 
-#: ardour_ui_ed.cc:91 route_params_ui.cc:512
+#: ardour_ui_ed.cc:94 route_params_ui.cc:514
 msgid "Add Track/Bus"
 msgstr "Ajouter piste/bus"
 
-#: ardour_ui_ed.cc:102
+#: ardour_ui_ed.cc:105
 msgid "Connect"
 msgstr "Connecter"
 
 #. </CMT Additions>
-#: ardour_ui_ed.cc:110
+#: ardour_ui_ed.cc:113
 msgid "Snapshot"
 msgstr "Instantané"
 
-#: ardour_ui_ed.cc:113
+#: ardour_ui_ed.cc:116
 msgid "Save Template..."
 msgstr "Enregistrer le modèle..."
 
-#: ardour_ui_ed.cc:116
+#: ardour_ui_ed.cc:119
 msgid "Export session to audiofile..."
 msgstr "Exporter la session dans un fichier audio..."
 
-#: ardour_ui_ed.cc:119
+#: ardour_ui_ed.cc:122
 #, fuzzy
 msgid "Export selection to audiofile..."
 msgstr "Exporter la session dans un fichier audio..."
 
-#: ardour_ui_ed.cc:123
+#: ardour_ui_ed.cc:126
 #, fuzzy
 msgid "Export range markers to audiofile..."
 msgstr "Exporter la range dans un fichier audio..."
 
-#: ardour_ui_ed.cc:130
+#: ardour_ui_ed.cc:133
 msgid "Cleanup unused sources"
 msgstr "Nettoyer les sources inutilisées"
 
-#: ardour_ui_ed.cc:132
+#: ardour_ui_ed.cc:135
 msgid "Flush wastebasket"
 msgstr "Vider la corbeille"
 
-#: ardour_ui_ed.cc:138 ardour_ui_options.cc:381 ardour_ui_options.cc:390
-#: ardour_ui_options.cc:462
+#: ardour_ui_ed.cc:141 ardour_ui_options.cc:408 ardour_ui_options.cc:417
+#: ardour_ui_options.cc:489
 msgid "JACK"
 msgstr "JACK"
 
-#: ardour_ui_ed.cc:139
+#: ardour_ui_ed.cc:142
 msgid "Latency"
 msgstr "Latence"
 
-#: ardour_ui_ed.cc:141
+#: ardour_ui_ed.cc:144
 msgid "Reconnect"
 msgstr "Reconnecter"
 
-#: ardour_ui_ed.cc:144 mixer_strip.cc:514 mixer_strip.cc:574
+#: ardour_ui_ed.cc:147 mixer_strip.cc:497 mixer_strip.cc:565
 msgid "Disconnect"
 msgstr "Déconnecter"
 
-#: ardour_ui_ed.cc:171
+#: ardour_ui_ed.cc:174
 msgid "Windows"
 msgstr "Fenêtres"
 
-#: ardour_ui_ed.cc:172
+#: ardour_ui_ed.cc:175
 msgid "start prefix"
 msgstr ""
 
-#: ardour_ui_ed.cc:173
+#: ardour_ui_ed.cc:176
 msgid "Quit"
 msgstr "Quitter"
 
 #. windows visibility actions
-#: ardour_ui_ed.cc:177
+#: ardour_ui_ed.cc:180
 msgid "Maximise Editor Space"
 msgstr ""
 
-#: ardour_ui_ed.cc:179
+#: ardour_ui_ed.cc:182
 #, fuzzy
 msgid "Show Editor"
 msgstr "Éditeur"
 
-#: ardour_ui_ed.cc:180
+#: ardour_ui_ed.cc:183
 #, fuzzy
 msgid "Show Mixer"
 msgstr "Console de mixage"
 
-#: ardour_ui_ed.cc:182
+#: ardour_ui_ed.cc:185
 msgid "Options Editor"
 msgstr "Éditeur d'options"
 
-#: ardour_ui_ed.cc:183
+#: ardour_ui_ed.cc:186
 msgid "Track/Bus Inspector"
 msgstr "Inspecteur de pistes/bus"
 
-#: ardour_ui_ed.cc:185
+#: ardour_ui_ed.cc:188
 msgid "Connections"
 msgstr "Connexions"
 
-#: ardour_ui_ed.cc:187
+#: ardour_ui_ed.cc:190
 msgid "Locations"
 msgstr "Emplacements"
 
-#: ardour_ui_ed.cc:189
+#: ardour_ui_ed.cc:192
 msgid "Big Clock"
 msgstr "Grande horloge"
 
-#: ardour_ui_ed.cc:191
+#: ardour_ui_ed.cc:194
 msgid "About"
 msgstr "À propos"
 
-#: ardour_ui_ed.cc:192
+#: ardour_ui_ed.cc:195
 #, fuzzy
 msgid "Colors"
 msgstr "Couleur"
 
-#: ardour_ui_ed.cc:194
+#: ardour_ui_ed.cc:197
 #, fuzzy
 msgid "Add Audio Track"
 msgstr "Ajouter piste/bus"
 
-#: ardour_ui_ed.cc:196
+#: ardour_ui_ed.cc:199
 #, fuzzy
 msgid "Add Audio Bus"
 msgstr "Cacher tous les BusAudio"
 
-#: ardour_ui_ed.cc:198
+#: ardour_ui_ed.cc:201
 msgid "Save"
 msgstr "Enregistrer"
 
-#: ardour_ui_ed.cc:200 editor_actions.cc:254
+#: ardour_ui_ed.cc:203 editor_actions.cc:255
 #, fuzzy
 msgid "Remove Last Capture"
 msgstr "Enlever la dernière capture"
 
 #. do-nothing action for the "transport" menu bar item
-#: ardour_ui_ed.cc:207
+#: ardour_ui_ed.cc:210
 #, fuzzy
 msgid "Transport"
 msgstr "Traducteurs"
@@ -1060,74 +1038,74 @@ msgstr "Traducteurs"
 #. these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
 #. menus and via button proxies.
 #.
-#: ardour_ui_ed.cc:213 sfdb_ui.cc:57
+#: ardour_ui_ed.cc:216 sfdb_ui.cc:57
 msgid "Stop"
 msgstr "Arrêter"
 
-#: ardour_ui_ed.cc:216
+#: ardour_ui_ed.cc:219
 msgid "Roll"
 msgstr ""
 
-#: ardour_ui_ed.cc:220
+#: ardour_ui_ed.cc:223
 #, fuzzy
 msgid "Start/Stop"
 msgstr "Début :"
 
-#: ardour_ui_ed.cc:223
+#: ardour_ui_ed.cc:226
 msgid "Stop + Forget Capture"
 msgstr ""
 
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:229
 #, fuzzy
 msgid "Play Loop Range"
 msgstr "Jouer l'intervalle de boucle"
 
-#: ardour_ui_ed.cc:229
+#: ardour_ui_ed.cc:232
 #, fuzzy
 msgid "Play Selection"
 msgstr "Jouer l'emplacement sélectionné"
 
-#: ardour_ui_ed.cc:233
+#: ardour_ui_ed.cc:236
 #, fuzzy
 msgid "Enable Record"
 msgstr "Enregistrer"
 
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:239
 #, fuzzy
 msgid "Rewind"
 msgstr "Région"
 
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:242
 msgid "Rewind (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:242
+#: ardour_ui_ed.cc:245
 msgid "Rewind (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:245
+#: ardour_ui_ed.cc:248
 #, fuzzy
 msgid "Forward"
 msgstr "décaler vers l'avant"
 
-#: ardour_ui_ed.cc:248
+#: ardour_ui_ed.cc:251
 msgid "Forward (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:251
+#: ardour_ui_ed.cc:254
 msgid "Forward (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:254
+#: ardour_ui_ed.cc:257
 msgid "Goto Zero"
 msgstr ""
 
-#: ardour_ui_ed.cc:257
+#: ardour_ui_ed.cc:260
 #, fuzzy
 msgid "Goto Start"
 msgstr "Début :"
 
-#: ardour_ui_ed.cc:260
+#: ardour_ui_ed.cc:263
 msgid "Goto End"
 msgstr ""
 
@@ -1135,7 +1113,7 @@ msgstr ""
 #. that proxies for these action to be more compact. It would be nice to find a way to override the action
 #. name appearance on the buttons.
 #.
-#: ardour_ui_ed.cc:269
+#: ardour_ui_ed.cc:272
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1144,7 +1122,7 @@ msgstr ""
 "punch\n"
 "in"
 
-#: ardour_ui_ed.cc:272
+#: ardour_ui_ed.cc:275
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1153,11 +1131,11 @@ msgstr ""
 "punch\n"
 "out"
 
-#: ardour_ui_ed.cc:275 option_editor.cc:128
+#: ardour_ui_ed.cc:278 option_editor.cc:129
 msgid "Click"
 msgstr "Clic"
 
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:281
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1166,7 +1144,7 @@ msgstr ""
 "entrée\n"
 "auto."
 
-#: ardour_ui_ed.cc:281
+#: ardour_ui_ed.cc:284
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1175,7 +1153,7 @@ msgstr ""
 "lecture\n"
 "auto."
 
-#: ardour_ui_ed.cc:284
+#: ardour_ui_ed.cc:287
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1184,285 +1162,285 @@ msgstr ""
 "retour\n"
 "auto"
 
-#: ardour_ui_ed.cc:288
+#: ardour_ui_ed.cc:291
 #, fuzzy
 msgid ""
 "Time\n"
 "master"
 msgstr "JACK horloge maître"
 
-#: ardour_ui_ed.cc:291
+#: ardour_ui_ed.cc:294
 msgid "Toggle Record Enable Track1"
 msgstr ""
 
-#: ardour_ui_ed.cc:293
+#: ardour_ui_ed.cc:296
 msgid "Toggle Record Enable Track2"
 msgstr ""
 
-#: ardour_ui_ed.cc:295
+#: ardour_ui_ed.cc:298
 msgid "Toggle Record Enable Track3"
 msgstr ""
 
-#: ardour_ui_ed.cc:297
+#: ardour_ui_ed.cc:300
 msgid "Toggle Record Enable Track4"
 msgstr ""
 
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:302
 msgid "Toggle Record Enable Track5"
 msgstr ""
 
-#: ardour_ui_ed.cc:301
+#: ardour_ui_ed.cc:304
 msgid "Toggle Record Enable Track6"
 msgstr ""
 
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:306
 msgid "Toggle Record Enable Track7"
 msgstr ""
 
-#: ardour_ui_ed.cc:305
+#: ardour_ui_ed.cc:308
 msgid "Toggle Record Enable Track8"
 msgstr ""
 
-#: ardour_ui_ed.cc:307
+#: ardour_ui_ed.cc:310
 msgid "Toggle Record Enable Track9"
 msgstr ""
 
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:312
 msgid "Toggle Record Enable Track10"
 msgstr ""
 
-#: ardour_ui_ed.cc:311
+#: ardour_ui_ed.cc:314
 msgid "Toggle Record Enable Track11"
 msgstr ""
 
-#: ardour_ui_ed.cc:313
+#: ardour_ui_ed.cc:316
 msgid "Toggle Record Enable Track12"
 msgstr ""
 
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:318
 msgid "Toggle Record Enable Track13"
 msgstr ""
 
-#: ardour_ui_ed.cc:317
+#: ardour_ui_ed.cc:320
 msgid "Toggle Record Enable Track14"
 msgstr ""
 
-#: ardour_ui_ed.cc:319
+#: ardour_ui_ed.cc:322
 msgid "Toggle Record Enable Track15"
 msgstr ""
 
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:324
 msgid "Toggle Record Enable Track16"
 msgstr ""
 
-#: ardour_ui_ed.cc:323
+#: ardour_ui_ed.cc:326
 msgid "Toggle Record Enable Track17"
 msgstr ""
 
-#: ardour_ui_ed.cc:325
+#: ardour_ui_ed.cc:328
 msgid "Toggle Record Enable Track18"
 msgstr ""
 
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:330
 msgid "Toggle Record Enable Track19"
 msgstr ""
 
-#: ardour_ui_ed.cc:329
+#: ardour_ui_ed.cc:332
 msgid "Toggle Record Enable Track20"
 msgstr ""
 
-#: ardour_ui_ed.cc:331
+#: ardour_ui_ed.cc:334
 msgid "Toggle Record Enable Track21"
 msgstr ""
 
-#: ardour_ui_ed.cc:333
+#: ardour_ui_ed.cc:336
 msgid "Toggle Record Enable Track22"
 msgstr ""
 
-#: ardour_ui_ed.cc:335
+#: ardour_ui_ed.cc:338
 msgid "Toggle Record Enable Track23"
 msgstr ""
 
-#: ardour_ui_ed.cc:337
+#: ardour_ui_ed.cc:340
 msgid "Toggle Record Enable Track24"
 msgstr ""
 
-#: ardour_ui_ed.cc:339
+#: ardour_ui_ed.cc:342
 msgid "Toggle Record Enable Track25"
 msgstr ""
 
-#: ardour_ui_ed.cc:341
+#: ardour_ui_ed.cc:344
 msgid "Toggle Record Enable Track26"
 msgstr ""
 
-#: ardour_ui_ed.cc:343
+#: ardour_ui_ed.cc:346
 msgid "Toggle Record Enable Track27"
 msgstr ""
 
-#: ardour_ui_ed.cc:345
+#: ardour_ui_ed.cc:348
 msgid "Toggle Record Enable Track28"
 msgstr ""
 
-#: ardour_ui_ed.cc:347
+#: ardour_ui_ed.cc:350
 msgid "Toggle Record Enable Track29"
 msgstr ""
 
-#: ardour_ui_ed.cc:349
+#: ardour_ui_ed.cc:352
 msgid "Toggle Record Enable Track30"
 msgstr ""
 
-#: ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:354
 msgid "Toggle Record Enable Track31"
 msgstr ""
 
-#: ardour_ui_ed.cc:353
+#: ardour_ui_ed.cc:356
 msgid "Toggle Record Enable Track32"
 msgstr ""
 
-#: ardour_ui_ed.cc:358
+#: ardour_ui_ed.cc:361
 msgid "Percentage"
 msgstr "Pourcentage"
 
-#: ardour_ui_ed.cc:359
+#: ardour_ui_ed.cc:362
 msgid "Semitones"
 msgstr "Demi-tons"
 
-#: ardour_ui_ed.cc:363
+#: ardour_ui_ed.cc:366
 msgid "Send MTC"
 msgstr "Envoyer MTC"
 
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:368
 msgid "Send MMC"
 msgstr "Envoyer MMC"
 
-#: ardour_ui_ed.cc:367
+#: ardour_ui_ed.cc:370
 #, fuzzy
 msgid "Use MMC"
 msgstr "Envoyer MMC"
 
-#: ardour_ui_ed.cc:369
+#: ardour_ui_ed.cc:372
 #, fuzzy
 msgid "Send MIDI feedback"
 msgstr "Envoyer le retour de paramètre MIDI"
 
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:374
 #, fuzzy
 msgid "Use MIDI control"
 msgstr "Port MMC"
 
-#: ardour_ui_ed.cc:374
+#: ardour_ui_ed.cc:377
 #, fuzzy
-msgid "Connect newtrack inputs to hardware"
+msgid "Connect new track inputs to hardware"
 msgstr "Auto-connexion des nouvelles pistes"
 
-#: ardour_ui_ed.cc:392
+#: ardour_ui_ed.cc:396
 #, fuzzy
 msgid "Connect new track outputs to hardware"
 msgstr "Auto-connexion des nouvelles pistes"
 
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:398
 #, fuzzy
 msgid "Connect new track outputs to master"
 msgstr "connecter les sorties de piste aux sorties maître automatiquement"
 
-#: ardour_ui_ed.cc:396
+#: ardour_ui_ed.cc:400
 #, fuzzy
 msgid "Manually connect new track outputs"
 msgstr "connecter les sorties de piste manuellement"
 
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:405
 #, fuzzy
 msgid "Hardware monitoring"
 msgstr "Utiliser la pré-écoute matérielle"
 
-#: ardour_ui_ed.cc:402
+#: ardour_ui_ed.cc:406
 #, fuzzy
 msgid "Software monitoring"
 msgstr "Utiliser la pré-écoute logicielle"
 
-#: ardour_ui_ed.cc:403
+#: ardour_ui_ed.cc:407
 #, fuzzy
 msgid "External monitoring"
 msgstr "Utiliser la pré-écoute matérielle"
 
 #. Configuration object options (i.e. not session specific)
-#: ardour_ui_ed.cc:407
+#: ardour_ui_ed.cc:411
 msgid "Stop plugins with transport"
 msgstr "Arrêter les greffons avec le transport"
 
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:412
 #, fuzzy
 msgid "Verify remove last capture"
 msgstr "Enlever la dernière capture"
 
-#: ardour_ui_ed.cc:409
+#: ardour_ui_ed.cc:413
 msgid "Stop recording on xrun"
 msgstr "Arrêter l'enregistrement en cas de xrun"
 
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:414
 #, fuzzy
 msgid "Stop transport at session end"
 msgstr "Arrêter le transport à la fin de la session"
 
-#: ardour_ui_ed.cc:411
+#: ardour_ui_ed.cc:415
 msgid "-12dB gain reduce ffwd/rewind"
 msgstr ""
 
-#: ardour_ui_ed.cc:412
+#: ardour_ui_ed.cc:416
 msgid "Rec-enable stays engaged at stop"
 msgstr ""
 
 #. session options
-#: ardour_ui_ed.cc:416
+#: ardour_ui_ed.cc:420
 #, fuzzy
 msgid "Do not run plugins while recording"
 msgstr "Activer les greffons durant l'enregistrement"
 
-#: ardour_ui_ed.cc:419
+#: ardour_ui_ed.cc:423
 #, fuzzy
 msgid "Latched solo"
 msgstr "Solo collé"
 
-#: ardour_ui_ed.cc:424
+#: ardour_ui_ed.cc:428
 #, fuzzy
 msgid "Solo in-place"
 msgstr "Solo-safe"
 
-#: ardour_ui_ed.cc:426
+#: ardour_ui_ed.cc:430
 msgid "Solo via bus"
 msgstr "Solo via le bus"
 
-#: ardour_ui_ed.cc:429
+#: ardour_ui_ed.cc:433
 msgid "Automatically create crossfades"
 msgstr "Créer des fondus enchaînés automatiquement"
 
-#: ardour_ui_ed.cc:431
+#: ardour_ui_ed.cc:435
 #, fuzzy
 msgid "Unmute new full crossfades"
 msgstr "Montrer tous les fondus enchaînés"
 
-#: ardour_ui_options.cc:379 ardour_ui_options.cc:389 ardour_ui_options.cc:456
+#: ardour_ui_options.cc:406 ardour_ui_options.cc:416 ardour_ui_options.cc:483
 msgid "Internal"
 msgstr "Interne"
 
-#: ardour_ui_options.cc:380 ardour_ui_options.cc:459
+#: ardour_ui_options.cc:407 ardour_ui_options.cc:486
 #, fuzzy
 msgid "MTC"
 msgstr "TOC"
 
-#: audio_clock.cc:1719 editor.cc:185
+#: audio_clock.cc:1742 editor.cc:188
 msgid "SMPTE"
 msgstr "SMPTE"
 
-#: audio_clock.cc:1720 editor.cc:184 editor_rulers.cc:359
+#: audio_clock.cc:1743 editor.cc:187 editor_rulers.cc:360
 msgid "Bars:Beats"
 msgstr "Mesures:Temps"
 
-#: audio_clock.cc:1721
+#: audio_clock.cc:1744
 msgid "Minutes:Seconds"
 msgstr "Minutes:Secondes"
 
-#: audio_clock.cc:1722
+#: audio_clock.cc:1745
 msgid "Audio Frames"
 msgstr "Trames audio"
 
@@ -1470,294 +1448,315 @@ msgstr "Trames audio"
 #. Slowest = 6.6dB/sec falloff at update rate of 40ms
 #. Slow    = 6.8dB/sec falloff at update rate of 40ms
 #.
-#: audio_clock.cc:1723 editor_actions.cc:374 editor_actions.cc:382
+#: audio_clock.cc:1746 editor_actions.cc:375 editor_actions.cc:383
+#: gain_meter.cc:172 panner_ui.cc:89 plugin_ui.cc:392 plugin_ui.cc:635
 msgid "Off"
 msgstr "Arrêt"
 
-#: audio_clock.cc:1725
+#: audio_clock.cc:1748
 msgid "Mode"
 msgstr "Mode"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:458
+#: audio_time_axis.cc:91
 msgid "m"
 msgstr "m"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:459
+#: audio_time_axis.cc:91
 msgid "s"
 msgstr "s"
 
-#: audio_time_axis.cc:90
+#: audio_time_axis.cc:91
 msgid "r"
 msgstr "r"
 
-#: audio_time_axis.cc:94
+#: audio_time_axis.cc:95
 msgid "g"
 msgstr "g"
 
 #. group
-#: audio_time_axis.cc:95
+#: audio_time_axis.cc:96
 msgid "p"
 msgstr "p"
 
-#: audio_time_axis.cc:96 automation_time_axis.cc:31 visual_time_axis.cc:73
+#: audio_time_axis.cc:97 automation_time_axis.cc:32 visual_time_axis.cc:74
 msgid "h"
 msgstr "h"
 
 #. height
-#: audio_time_axis.cc:97
+#: audio_time_axis.cc:98
 msgid "a"
 msgstr "a"
 
-#: audio_time_axis.cc:98 visual_time_axis.cc:72
+#: audio_time_axis.cc:99 visual_time_axis.cc:73
 msgid "v"
 msgstr "v"
 
-#: audio_time_axis.cc:173
+#: audio_time_axis.cc:168 mixer_strip.cc:86
 msgid "Record"
 msgstr "Enregistrer"
 
-#: audio_time_axis.cc:174 editor_actions.cc:36
+#: audio_time_axis.cc:169 editor_actions.cc:37 mixer_strip.cc:86
 msgid "Solo"
 msgstr "Solo"
 
-#: audio_time_axis.cc:175 editor.cc:1767 editor.cc:1866 panner_ui.cc:385
+#: audio_time_axis.cc:170 editor.cc:1760 editor.cc:1859 mixer_strip.cc:86
+#: panner_ui.cc:427
 msgid "Mute"
 msgstr "Muet"
 
-#: audio_time_axis.cc:176
+#: audio_time_axis.cc:171
 msgid "Edit Group"
 msgstr "Groupe d'édition"
 
-#: audio_time_axis.cc:177 visual_time_axis.cc:91
+#: audio_time_axis.cc:172 visual_time_axis.cc:92
 msgid "Display Height"
 msgstr "Hauteur de l'affichage"
 
-#: audio_time_axis.cc:178
+#: audio_time_axis.cc:173
 msgid "Playlist"
 msgstr "Liste de lecture"
 
-#: audio_time_axis.cc:179 audio_time_axis.cc:743
+#: audio_time_axis.cc:174 audio_time_axis.cc:741
 msgid "Automation"
 msgstr "Automatisation"
 
-#: audio_time_axis.cc:180 visual_time_axis.cc:92
+#: audio_time_axis.cc:175 visual_time_axis.cc:93
 msgid "Visual options"
 msgstr "Options d'affichage"
 
-#: audio_time_axis.cc:181 visual_time_axis.cc:93
+#: audio_time_axis.cc:176 visual_time_axis.cc:94
 msgid "Hide this track"
 msgstr "Cacher cette piste"
 
-#: audio_time_axis.cc:337
+#: audio_time_axis.cc:333 mixer_strip.cc:927
 msgid "No group"
 msgstr "Pas de groupe"
 
-#: audio_time_axis.cc:704 automation_time_axis.cc:448
-#: imageframe_time_axis.cc:256 marker_time_axis.cc:210
+#: audio_time_axis.cc:702 automation_time_axis.cc:450
+#: imageframe_time_axis.cc:255 marker_time_axis.cc:211
 msgid "Height"
 msgstr "Hauteur"
 
-#: audio_time_axis.cc:705 color_manager.cc:40 imageframe_time_axis.cc:257
-#: marker_time_axis.cc:211
+#: audio_time_axis.cc:703 color_manager.cc:41 imageframe_time_axis.cc:256
+#: marker_time_axis.cc:212
 msgid "Color"
 msgstr "Couleur"
 
-#: audio_time_axis.cc:709
+#: audio_time_axis.cc:707
 #, fuzzy
 msgid "Hide all crossfades"
 msgstr "Cacher tous les fondus enchaînés"
 
-#: audio_time_axis.cc:710
+#: audio_time_axis.cc:708
 #, fuzzy
 msgid "Show all crossfades"
 msgstr "Montrer tous les fondus enchaînés"
 
-#: audio_time_axis.cc:714 mixer_strip.cc:1236
+#: audio_time_axis.cc:712 mixer_strip.cc:1011
 #, fuzzy
 msgid "Remote Control ID"
 msgstr "Enlever le point de contrôle"
 
-#: audio_time_axis.cc:720
-msgid "show all automation"
+#: audio_time_axis.cc:718
+#, fuzzy
+msgid "Show all automation"
 msgstr "montrer toute l'automatisation"
 
-#: audio_time_axis.cc:723
-msgid "show existing automation"
+#: audio_time_axis.cc:721
+#, fuzzy
+msgid "Show existing automation"
 msgstr "montrer l'automatisation existante"
 
-#: audio_time_axis.cc:726
-msgid "hide all automation"
+#: audio_time_axis.cc:724
+#, fuzzy
+msgid "Hide all automation"
 msgstr "cacher toute l'automatisation"
 
-#: audio_time_axis.cc:731 audio_time_axis.cc:1169 editor.cc:215
-msgid "gain"
-msgstr "gain"
+#: audio_time_axis.cc:729
+#, fuzzy
+msgid "Fader"
+msgstr "Fondu"
 
-#: audio_time_axis.cc:736 audio_time_axis.cc:1209
-msgid "pan"
+#: audio_time_axis.cc:734
+#, fuzzy
+msgid "Pan"
 msgstr "panoramique"
 
-#: audio_time_axis.cc:741
+#: audio_time_axis.cc:739
 msgid "Plugins"
 msgstr "Greffons"
 
-#: audio_time_axis.cc:749
+#: audio_time_axis.cc:747
 msgid "Show waveforms"
 msgstr "Montrer les formes d'onde"
 
-#: audio_time_axis.cc:757
+#: audio_time_axis.cc:755
 msgid "Traditional"
 msgstr "Traditionnel"
 
-#: audio_time_axis.cc:760
+#: audio_time_axis.cc:758
 msgid "Rectified"
 msgstr "Rectifié"
 
-#: audio_time_axis.cc:763
+#: audio_time_axis.cc:761
 msgid "Waveform"
 msgstr "Forme d'onde"
 
-#: audio_time_axis.cc:773
-msgid "align with existing material"
+#: audio_time_axis.cc:771
+msgid "Align with existing material"
 msgstr ""
 
-#: audio_time_axis.cc:778
-msgid "align with capture time"
+#: audio_time_axis.cc:776
+msgid "Align with capture time"
 msgstr ""
 
-#: audio_time_axis.cc:784
+#: audio_time_axis.cc:782
 #, fuzzy
 msgid "Alignment"
 msgstr "Aligner"
 
-#: audio_time_axis.cc:790 editor.cc:523 editor_actions.cc:59
-#: mixer_strip.cc:1225
+#: audio_time_axis.cc:788 editor.cc:527 editor_actions.cc:60
+#: mixer_strip.cc:1000 mixer_ui.cc:111
 msgid "Active"
 msgstr "Actif"
 
-#: audio_time_axis.cc:795 editor.cc:1929 editor_actions.cc:319
-#: editor_markers.cc:507 imageframe_time_axis.cc:260 location_ui.cc:56
-#: marker_time_axis.cc:214 mixer_strip.cc:1239
+#: audio_time_axis.cc:793 editor.cc:1922 editor_actions.cc:320
+#: editor_markers.cc:508 imageframe_time_axis.cc:259 location_ui.cc:57
+#: marker_time_axis.cc:215 mixer_strip.cc:1014
 msgid "Remove"
 msgstr "Enlever"
 
-#: audio_time_axis.cc:835
+#: audio_time_axis.cc:833
 msgid "Name for playlist"
 msgstr "Nom de la liste de lecture"
 
-#: audio_time_axis.cc:837 audio_time_axis.cc:1853 editor_markers.cc:826
-#: editor_mouse.cc:4609 imageframe_time_axis.cc:249 marker_time_axis.cc:207
-#: meter_bridge_strip.cc:223 mixer_strip.cc:1223 redirect_box.cc:749
-#: redirect_box.cc:1063 route_ui.cc:732 visual_time_axis.cc:325
+#: audio_time_axis.cc:835 audio_time_axis.cc:1851 editor_markers.cc:827
+#: editor_mouse.cc:4673 imageframe_time_axis.cc:248 marker_time_axis.cc:208
+#: meter_bridge_strip.cc:224 mixer_strip.cc:998 redirect_box.cc:751
+#: redirect_box.cc:1065 route_ui.cc:739 visual_time_axis.cc:326
 msgid "Rename"
 msgstr "Renommer"
 
-#: audio_time_axis.cc:870 audio_time_axis.cc:910
+#: audio_time_axis.cc:868 audio_time_axis.cc:908
 #, fuzzy
 msgid "Name for Playlist"
 msgstr "Nom de la liste de lecture"
 
-#: audio_time_axis.cc:1128 visual_time_axis.cc:382
+#: audio_time_axis.cc:1126 visual_time_axis.cc:383
 msgid "a track already exists with that name"
 msgstr "une piste avec le même nom existe déjà"
 
-#: audio_time_axis.cc:1412 editor.cc:1490 selection.cc:622
+#: audio_time_axis.cc:1167 editor.cc:218
+msgid "gain"
+msgstr "gain"
+
+#: audio_time_axis.cc:1207
+msgid "pan"
+msgstr "panoramique"
+
+#: audio_time_axis.cc:1410 editor.cc:1483 selection.cc:634
 msgid "programming error: "
 msgstr "erreur de programmation : "
 
-#: audio_time_axis.cc:1850
+#: audio_time_axis.cc:1848
 msgid "Current: %1"
 msgstr "Courant : %1"
 
-#: audio_time_axis.cc:1857
+#: audio_time_axis.cc:1855
 msgid "New Copy"
 msgstr "Nouvelle copie"
 
-#: audio_time_axis.cc:1859
+#: audio_time_axis.cc:1857
 #, fuzzy
 msgid "Clear Current"
 msgstr "Effacer courante"
 
-#: audio_time_axis.cc:1861 editor.cc:2031 editor.cc:2107
+#: audio_time_axis.cc:1859 editor.cc:2024 editor.cc:2100
 msgid "Select"
 msgstr "Sélectionner"
 
-#: automation_line.cc:883
+#: automation_line.cc:884
 #, fuzzy
 msgid "automation event move"
 msgstr "déplacement d'évenement d'automatisation"
 
-#: automation_line.cc:885
+#: automation_line.cc:886
 #, fuzzy
 msgid "automation range drag"
 msgstr "déplacement d'intervalle d'automatisation"
 
-#: automation_line.cc:1014 region_gain_line.cc:61
+#: automation_line.cc:1015 region_gain_line.cc:62
 #, fuzzy
 msgid "remove control point"
 msgstr "Enlever le point de contrôle"
 
-#: automation_time_axis.cc:32 editor_ops.cc:2813
+#: automation_time_axis.cc:33 editor_ops.cc:2885
 msgid "clear"
 msgstr "effacer"
 
-#: automation_time_axis.cc:74
+#: automation_time_axis.cc:75
 msgid "track height"
 msgstr ""
 
-#: automation_time_axis.cc:75
+#: automation_time_axis.cc:76
 #, fuzzy
 msgid "automation state"
 msgstr "état de l'automatisation de panoramique"
 
-#: automation_time_axis.cc:76
+#: automation_time_axis.cc:77
 #, fuzzy
 msgid "clear track"
 msgstr "effacer les intervalles"
 
-#: automation_time_axis.cc:77
+#: automation_time_axis.cc:78
 #, fuzzy
 msgid "hide track"
 msgstr "décaler la piste"
 
-#: automation_time_axis.cc:185 automation_time_axis.cc:223
-#: automation_time_axis.cc:463 mixer_strip.cc:176 mixer_strip.cc:188
-#: plugin_ui.cc:394 plugin_ui.cc:636 region_editor.cc:53
-msgid "play"
-msgstr "jouer"
+#: automation_time_axis.cc:184 automation_time_axis.cc:213
+#: automation_time_axis.cc:461
+msgid "Manual"
+msgstr ""
+
+#: automation_time_axis.cc:186 automation_time_axis.cc:224
+#: automation_time_axis.cc:465 editor.cc:2001 editor.cc:2082 gain_meter.cc:174
+#: panner_ui.cc:91 plugin_ui.cc:395 plugin_ui.cc:637 sfdb_ui.cc:56
+msgid "Play"
+msgstr "Jouer"
 
-#: automation_time_axis.cc:187 automation_time_axis.cc:234
-#: automation_time_axis.cc:467 mixer_strip.cc:178 mixer_strip.cc:190
-#: plugin_ui.cc:397 plugin_ui.cc:638
-msgid "write"
+#: automation_time_axis.cc:188 automation_time_axis.cc:235
+#: automation_time_axis.cc:469 gain_meter.cc:176 panner_ui.cc:93
+#: plugin_ui.cc:398 plugin_ui.cc:639
+#, fuzzy
+msgid "Write"
 msgstr "écrire"
 
-#: automation_time_axis.cc:189 automation_time_axis.cc:245
-#: automation_time_axis.cc:471 mixer_strip.cc:180 mixer_strip.cc:192
-#: mixer_strip.cc:887 plugin_ui.cc:400 plugin_ui.cc:640
+#: automation_time_axis.cc:190 automation_time_axis.cc:246
+#: automation_time_axis.cc:473 gain_meter.cc:178 panner_ui.cc:95
+#: plugin_ui.cc:401 plugin_ui.cc:641
 #, fuzzy
-msgid "touch"
+msgid "Touch"
 msgstr "toucher"
 
-#: automation_time_axis.cc:256 option_editor.cc:182 option_editor.cc:188
-#: plugin_ui.cc:403
+#: automation_time_axis.cc:257 option_editor.cc:183 option_editor.cc:189
+#: plugin_ui.cc:404
 msgid "???"
 msgstr "???"
 
-#: automation_time_axis.cc:270
+#: automation_time_axis.cc:271
 #, fuzzy
 msgid "clear automation"
 msgstr "effacer l'automatisation"
 
-#: automation_time_axis.cc:450 editor_actions.cc:317
+#: automation_time_axis.cc:452 editor_actions.cc:318
 msgid "Hide"
 msgstr "Cacher"
 
-#: automation_time_axis.cc:452 crossfade_edit.cc:76 redirect_box.cc:1055
+#: automation_time_axis.cc:454 crossfade_edit.cc:78 redirect_box.cc:1057
 msgid "Clear"
 msgstr "Effacer"
 
-#: automation_time_axis.cc:475
+#: automation_time_axis.cc:477
 msgid "State"
 msgstr "État"
 
@@ -1904,822 +1903,809 @@ msgstr ""
 msgid "color of fill"
 msgstr ""
 
-#: color_manager.cc:39
+#: color_manager.cc:40
 #, fuzzy
 msgid "Object"
 msgstr "objet"
 
-#: color_manager.cc:77
+#: color_manager.cc:78
 #, fuzzy
 msgid "cannot open color definition file %1: %2"
 msgstr "impossible d'ouvrir l'image de l'écran de démarrage \"%1\""
 
-#: crossfade_edit.cc:73
+#: crossfade_edit.cc:75
 msgid "ardour: x-fade edit"
 msgstr "ardour : édition fondu enchaîné"
 
-#: crossfade_edit.cc:77 panner_ui.cc:401
+#: crossfade_edit.cc:79 panner_ui.cc:443
 msgid "Reset"
 msgstr "Réinitialiser"
 
-#: crossfade_edit.cc:78
+#: crossfade_edit.cc:80
 msgid "Fade"
 msgstr "Fondu"
 
-#: crossfade_edit.cc:79
+#: crossfade_edit.cc:81
 #, fuzzy
 msgid "Out (dry)"
 msgstr "Sortie (sec)"
 
-#: crossfade_edit.cc:80
+#: crossfade_edit.cc:82
 #, fuzzy
 msgid "Out"
 msgstr "Sortie"
 
-#: crossfade_edit.cc:81
+#: crossfade_edit.cc:83
 #, fuzzy
 msgid "In (dry)"
 msgstr "Entrée (sec)"
 
-#: crossfade_edit.cc:82
+#: crossfade_edit.cc:84
 msgid "In"
 msgstr "Entrée"
 
-#: crossfade_edit.cc:84
+#: crossfade_edit.cc:86
 #, fuzzy
 msgid "With Pre-roll"
 msgstr "Avec pré-roll"
 
-#: crossfade_edit.cc:85
+#: crossfade_edit.cc:87
 #, fuzzy
 msgid "With Post-roll"
 msgstr "Avec post-roll"
 
-#: crossfade_edit.cc:93
+#: crossfade_edit.cc:95
 msgid "Fade In"
 msgstr "Fondu d'ouverture"
 
-#: crossfade_edit.cc:94
+#: crossfade_edit.cc:96
 msgid "Fade Out"
 msgstr "Fondu de fermeture"
 
-#: crossfade_edit.cc:170 editor.cc:1842 editor_actions.cc:315
-#: option_editor.cc:129
+#: crossfade_edit.cc:172 editor.cc:1835 editor_actions.cc:316
+#: option_editor.cc:130
 msgid "Audition"
 msgstr "Audition"
 
-#: editor.cc:101 editor.cc:3588
+#: editor.cc:104 editor.cc:3616
 msgid "Slide"
 msgstr "Curseur"
 
-#: editor.cc:102 editor.cc:3586
+#: editor.cc:105 editor.cc:3614
 msgid "Splice"
 msgstr "Réunion"
 
-#: editor.cc:107 editor.cc:3643 export_dialog.cc:78 export_dialog.cc:92
-#: export_dialog.cc:893 export_dialog.cc:1225
+#. note that this menu list starts at zero, not 1, because zero
+#. is a valid, if useless, ID.
+#.
+#. leave some breathing room
+#: editor.cc:110 editor.cc:3671 export_dialog.cc:78 export_dialog.cc:92
+#: export_dialog.cc:893 export_dialog.cc:1225 route_ui.cc:437
 msgid "None"
 msgstr "Aucun"
 
-#: editor.cc:108 editor.cc:3631
+#: editor.cc:111 editor.cc:3659
 #, fuzzy
 msgid "CD Frames"
 msgstr "Trames CD"
 
-#: editor.cc:109 editor.cc:3633
+#: editor.cc:112 editor.cc:3661
 #, fuzzy
 msgid "SMPTE Frames"
 msgstr "Trames SMPTE"
 
-#: editor.cc:110 editor.cc:3635
+#: editor.cc:113 editor.cc:3663
 msgid "SMPTE Seconds"
 msgstr "Secondes SMPTE"
 
-#: editor.cc:111 editor.cc:3637
+#: editor.cc:114 editor.cc:3665
 msgid "SMPTE Minutes"
 msgstr "Minutes SMPTE"
 
-#: editor.cc:112 editor.cc:3639
+#: editor.cc:115 editor.cc:3667
 msgid "Seconds"
 msgstr "Secondes"
 
-#: editor.cc:113 editor.cc:3641
+#: editor.cc:116 editor.cc:3669
 msgid "Minutes"
 msgstr "Minutes"
 
-#: editor.cc:114 editor.cc:3613
+#: editor.cc:117 editor.cc:3641
 msgid "Beats/32"
 msgstr "Temps/32"
 
-#: editor.cc:115 editor.cc:3611
+#: editor.cc:118 editor.cc:3639
 msgid "Beats/16"
 msgstr "Temps/16"
 
-#: editor.cc:116 editor.cc:3609
+#: editor.cc:119 editor.cc:3637
 msgid "Beats/8"
 msgstr "Temps/8"
 
-#: editor.cc:117 editor.cc:3607
+#: editor.cc:120 editor.cc:3635
 msgid "Beats/4"
 msgstr "Temps/4"
 
-#: editor.cc:118 editor.cc:3605
+#: editor.cc:121 editor.cc:3633
 msgid "Beats/3"
 msgstr "Temps/3"
 
-#: editor.cc:119 editor.cc:3615
+#: editor.cc:122 editor.cc:3643
 msgid "Beats"
 msgstr "Temps"
 
-#: editor.cc:120 editor.cc:3617
+#: editor.cc:123 editor.cc:3645
 msgid "Bars"
 msgstr "Mesures"
 
-#: editor.cc:121 editor.cc:3619
+#: editor.cc:124 editor.cc:3647
 msgid "Marks"
 msgstr "Marques"
 
-#: editor.cc:122 editor.cc:141 editor.cc:3621 editor.cc:3687
+#: editor.cc:125 editor.cc:144 editor.cc:3649 editor.cc:3715
 msgid "Edit Cursor"
 msgstr "Curseur d'édition"
 
-#: editor.cc:123 editor.cc:3623
+#: editor.cc:126 editor.cc:3651
 #, fuzzy
 msgid "Region starts"
 msgstr "Débuts de régions"
 
-#: editor.cc:124 editor.cc:3625
+#: editor.cc:127 editor.cc:3653
 #, fuzzy
 msgid "Region ends"
 msgstr "Fins de régions"
 
-#: editor.cc:125 editor.cc:3629
+#: editor.cc:128 editor.cc:3657
 #, fuzzy
 msgid "Region syncs"
 msgstr "Syncro. de régions"
 
-#: editor.cc:126 editor.cc:3627
+#: editor.cc:129 editor.cc:3655
 #, fuzzy
 msgid "Region bounds"
 msgstr "Limites de régions"
 
-#: editor.cc:132 editor.cc:3662
+#: editor.cc:135 editor.cc:3690
 msgid "Magnetic"
 msgstr "Magnétique"
 
-#: editor.cc:137 editor.cc:3679 export_dialog.cc:140 export_dialog.cc:156
+#: editor.cc:140 editor.cc:3707 export_dialog.cc:140 export_dialog.cc:156
 #: export_dialog.cc:1068 export_dialog.cc:1072
 msgid "Left"
 msgstr "Gauche"
 
-#: editor.cc:138 editor.cc:3681 export_dialog.cc:141 export_dialog.cc:157
+#: editor.cc:141 editor.cc:3709 export_dialog.cc:141 export_dialog.cc:157
 msgid "Right"
 msgstr "Droite"
 
-#: editor.cc:139 editor.cc:3683
+#: editor.cc:142 editor.cc:3711
 msgid "Center"
 msgstr "Centre"
 
-#: editor.cc:140 editor.cc:3685
+#: editor.cc:143 editor.cc:3713
 msgid "Playhead"
 msgstr "Tête de lecture"
 
 #. time display buttons
-#: editor.cc:183
+#: editor.cc:186
 msgid "Mins:Secs"
 msgstr "Mins:Secs"
 
-#: editor.cc:186 editor_rulers.cc:353
+#: editor.cc:189 editor_rulers.cc:354
 msgid "Frames"
 msgstr "Trames"
 
-#: editor.cc:187 editor_rulers.cc:373
+#: editor.cc:190 editor_rulers.cc:374
 msgid "Tempo"
 msgstr "Tempo"
 
-#: editor.cc:188 editor_rulers.cc:367
+#: editor.cc:191 editor_rulers.cc:368
 msgid "Meter"
 msgstr "Vu-mètre"
 
-#: editor.cc:189 editor_rulers.cc:379
+#: editor.cc:192 editor_rulers.cc:380
 msgid "Location Markers"
 msgstr "Marqueurs d'emplacements"
 
-#: editor.cc:190 editor_rulers.cc:385
+#: editor.cc:193 editor_rulers.cc:386
 msgid "Range Markers"
 msgstr "Marqueurs d'intervalle"
 
-#: editor.cc:191 editor_rulers.cc:391
+#: editor.cc:194 editor_rulers.cc:392
 msgid "Loop/Punch Ranges"
 msgstr "Intervalles de boucle/punch"
 
-#: editor.cc:213
+#: editor.cc:216
 msgid "range"
 msgstr "intervalle"
 
-#: editor.cc:214
+#: editor.cc:217
 msgid "object"
 msgstr "objet"
 
-#: editor.cc:216
+#: editor.cc:219
 msgid "zoom"
 msgstr "zoom"
 
-#: editor.cc:217
+#: editor.cc:220
 #, fuzzy
 msgid "timefx"
 msgstr "Effet temporel"
 
-#: editor.cc:218
+#: editor.cc:221
 msgid "listen"
 msgstr "écouter"
 
-#: editor.cc:220
+#: editor.cc:223
 msgid "mode"
 msgstr "mode"
 
-#: editor.cc:221
+#: editor.cc:224
 msgid "automation"
 msgstr "automatisation"
 
-#: editor.cc:223
+#: editor.cc:226
 msgid "Edit Mode"
 msgstr "Mode d'édition"
 
-#: editor.cc:224 editor_actions.cc:283
+#: editor.cc:227 editor_actions.cc:284
 #, fuzzy
 msgid "Snap To"
 msgstr "Snap to"
 
-#: editor.cc:225
+#: editor.cc:228
 #, fuzzy
 msgid "Snap Mode"
 msgstr "Snap mode"
 
-#: editor.cc:226
+#: editor.cc:229
 msgid "Zoom Focus"
 msgstr "Focus du zoom"
 
 #. </CMT Additions>
 #. nudge
-#: editor.cc:234 editor.cc:1907 editor.cc:2073 editor.cc:2129
+#: editor.cc:237 editor.cc:1900 editor.cc:2066 editor.cc:2122
 msgid "Nudge"
 msgstr "Décaler"
 
-#: editor.cc:466
+#: editor.cc:470
 msgid "Zoom in"
 msgstr "Zoom avant"
 
-#: editor.cc:467
+#: editor.cc:471
 msgid "Zoom out"
 msgstr "Zoom arrière"
 
-#: editor.cc:470
+#: editor.cc:474
 msgid "Zoom to session"
 msgstr "Zoomer vers la session"
 
-#: editor.cc:485
+#: editor.cc:489
 #, fuzzy
 msgid "Zoom Span"
 msgstr "Largeur du zoom"
 
-#: editor.cc:498 editor.cc:524 editor_actions.cc:61 mixer_ui.cc:85
+#: editor.cc:502 editor.cc:528 editor_actions.cc:62 mixer_ui.cc:86
+#: mixer_ui.cc:112
 #, fuzzy
 msgid "Visible"
 msgstr "visible"
 
-#: editor.cc:499 editor.cc:522
+#: editor.cc:503 editor.cc:526
 #, fuzzy
 msgid "Name"
 msgstr "Trames"
 
-#: editor.cc:595 editor.cc:661
+#: editor.cc:602 editor.cc:669
 #, fuzzy
 msgid "Regions"
 msgstr "Région"
 
-#: editor.cc:634 editor.cc:673
+#: editor.cc:642 editor.cc:681
 msgid "Chunks"
 msgstr "Fragments"
 
-#: editor.cc:664
+#: editor.cc:672
 #, fuzzy
 msgid "Tracks/Busses"
 msgstr "Pistes/Bus"
 
-#: editor.cc:667
+#: editor.cc:675
 msgid "Snapshots"
 msgstr "Instantanés"
 
-#: editor.cc:670
+#: editor.cc:678
 msgid "Edit Groups"
 msgstr "Groupes d'édition"
 
-#: editor.cc:719
+#: editor.cc:727
 msgid "Nudge region/selection forwards"
 msgstr "Décaller région/sélection vers l'avant"
 
-#: editor.cc:720
+#: editor.cc:728
 msgid "Nudge region/selection backwards"
 msgstr "Décaller région/sélection vers l'arrière"
 
-#: editor.cc:727 editor_mixer.cc:298
+#: editor.cc:735 editor_mixer.cc:299
 msgid "ardour: editor"
 msgstr "ardour : éditeur"
 
-#: editor.cc:728
+#: editor.cc:736
 msgid "ardour_editor"
 msgstr "ardour_éditeur"
 
-#: editor.cc:1190
+#: editor.cc:1183
 msgid "ardour: editor: "
 msgstr "ardour : éditeur : "
 
 #. force name
-#: editor.cc:1275 editor.cc:1284 editor_markers.cc:869
+#: editor.cc:1268 editor.cc:1277 editor_markers.cc:870
 msgid "Loop"
 msgstr "Boucle"
 
 #. force name
-#: editor.cc:1289 editor.cc:1298 editor_markers.cc:895
+#: editor.cc:1282 editor.cc:1291 editor_markers.cc:896
 msgid "Punch"
 msgstr "Insérer"
 
-#: editor.cc:1446 editor_mouse.cc:1721
+#: editor.cc:1439 editor_mouse.cc:1742
 msgid "programming error: fade in canvas item has no regionview data pointer!"
 msgstr "programming error: fade in canvas item has no regionview data pointer!"
 
-#: editor.cc:1458 editor.cc:1475 redirect_box.cc:1071
+#: editor.cc:1451 editor.cc:1468 redirect_box.cc:1073
 msgid "Deactivate"
 msgstr "Désactiver"
 
 #. activation
-#: editor.cc:1460 editor.cc:1477 redirect_box.cc:1069
+#: editor.cc:1453 editor.cc:1470 redirect_box.cc:1071
 msgid "Activate"
 msgstr "Activer"
 
-#: editor.cc:1465 editor.cc:1482
+#: editor.cc:1458 editor.cc:1475
 msgid "Linear"
 msgstr "Linéaire"
 
-#: editor.cc:1466 editor.cc:1483 editor_actions.cc:375
+#: editor.cc:1459 editor.cc:1476 editor_actions.cc:376
 msgid "Slowest"
 msgstr "Plus lent"
 
-#: editor.cc:1467 editor.cc:1484 editor_actions.cc:376
+#: editor.cc:1460 editor.cc:1477 editor_actions.cc:377
 msgid "Slow"
 msgstr "Lent"
 
-#: editor.cc:1468 editor.cc:1485 editor_actions.cc:378
+#: editor.cc:1461 editor.cc:1478 editor_actions.cc:379
 msgid "Fast"
 msgstr "Rapide"
 
-#: editor.cc:1469 editor.cc:1486 editor_actions.cc:380
+#: editor.cc:1462 editor.cc:1479 editor_actions.cc:381
 msgid "Fastest"
 msgstr "Plus rapide"
 
-#: editor.cc:1596 editor.cc:1604
+#: editor.cc:1589 editor.cc:1597
 msgid "Freeze"
 msgstr "Bloquer"
 
-#: editor.cc:1600
+#: editor.cc:1593
 msgid "Unfreeze"
 msgstr "Débloquer"
 
-#: editor.cc:1769 editor.cc:1864
+#: editor.cc:1762 editor.cc:1857
 #, fuzzy
 msgid "Unmute"
 msgstr "Non muet"
 
 #. non-operative menu items for menu bar
 #. show editors
-#: editor.cc:1773 editor.cc:2053 editor.cc:2755 editor_actions.cc:26
-#: editor_markers.cc:506 mixer_strip.cc:512 mixer_strip.cc:572
-#: redirect_box.cc:1077
+#: editor.cc:1766 editor.cc:2046 editor.cc:2748 editor_actions.cc:27
+#: editor_markers.cc:507 mixer_strip.cc:495 mixer_strip.cc:563
+#: redirect_box.cc:1079
 msgid "Edit"
 msgstr "Édition"
 
-#: editor.cc:1778
+#: editor.cc:1771
 msgid "Convert to short"
 msgstr "Convertir en court"
 
-#: editor.cc:1780
+#: editor.cc:1773
 msgid "Convert to full"
 msgstr "Convertir en complet"
 
-#: editor.cc:1791
+#: editor.cc:1784
 #, fuzzy
 msgid "Crossfade"
 msgstr "Modèle de fondu enchaîné"
 
-#: editor.cc:1834
+#: editor.cc:1827
 msgid "Popup region editor"
 msgstr "Ouvrir l'éditeur de région"
 
-#: editor.cc:1835
+#: editor.cc:1828
 msgid "Raise to top layer"
 msgstr "Monter vers la couche du haut"
 
-#: editor.cc:1836
+#: editor.cc:1829
 msgid "Lower to bottom layer"
 msgstr "Descendre vers la couche du bas"
 
-#: editor.cc:1838
+#: editor.cc:1831
 msgid "Define sync point"
 msgstr "Définir le point de synchronisation"
 
-#: editor.cc:1839
+#: editor.cc:1832
 msgid "Remove sync point"
 msgstr "Enlever le point de synchronisation"
 
-#: editor.cc:1844
+#: editor.cc:1837
 msgid "Bounce"
 msgstr "Bounce"
 
-#: editor.cc:1847
+#: editor.cc:1840
 #, fuzzy
 msgid "Analyze region"
 msgstr "Jouer la région"
 
-#: editor.cc:1859
+#: editor.cc:1852
 msgid "Lock"
 msgstr "Verrouiller"
 
-#: editor.cc:1860
+#: editor.cc:1853
 msgid "Unlock"
 msgstr "Déverrouiller"
 
-#: editor.cc:1870
+#: editor.cc:1863
 msgid "Original position"
 msgstr "Position d'origine"
 
-#: editor.cc:1876
+#: editor.cc:1869
 msgid "Toggle envelope visibility"
 msgstr ""
 
-#: editor.cc:1877
+#: editor.cc:1870
 #, fuzzy
 msgid "Toggle envelope active"
 msgstr "Activer"
 
-#: editor.cc:1881
+#: editor.cc:1874
 msgid "DeNormalize"
 msgstr "Dénormaliser"
 
-#: editor.cc:1883
+#: editor.cc:1876
 msgid "Normalize"
 msgstr "Normaliser"
 
-#: editor.cc:1886
+#: editor.cc:1879
 #, fuzzy
 msgid "Reverse"
 msgstr "Retourner"
 
 #. range related stuff
-#: editor.cc:1892
+#: editor.cc:1885
 #, fuzzy
 msgid "Add Range Markers"
 msgstr "Marqueurs d'intervalle"
 
-#: editor.cc:1893
+#: editor.cc:1886
 #, fuzzy
 msgid "Set Range"
 msgstr "Séparer l'intervalle"
 
-#: editor.cc:1902
+#: editor.cc:1895
 msgid "Nudge fwd"
 msgstr "Décaler vers l'avant"
 
-#: editor.cc:1903
+#: editor.cc:1896
 #, fuzzy
 msgid "Nudge bwd"
 msgstr "Décaler vers l'arrière"
 
-#: editor.cc:1904
+#: editor.cc:1897
 msgid "Nudge fwd by capture offset"
 msgstr "Décaler vers l'avant du décalage de la capture"
 
-#: editor.cc:1905
+#: editor.cc:1898
 msgid "Nudge bwd by capture offset"
 msgstr "Décaler vers l'arrière du décallage de la capture"
 
-#: editor.cc:1914
+#: editor.cc:1907
 msgid "Start to edit cursor"
 msgstr "Démarrer depuis le curseur d'édition"
 
-#: editor.cc:1915
+#: editor.cc:1908
 msgid "Edit cursor to end"
 msgstr "Curseur d'édition à la fin"
 
-#: editor.cc:1917
+#: editor.cc:1910 gain_meter.cc:181 gain_meter.cc:813 panner_ui.cc:98
+#: panner_ui.cc:803
 msgid "Trim"
 msgstr "Élaguer"
 
-#: editor.cc:1920
+#: editor.cc:1913
 msgid "Split"
 msgstr "Séparer"
 
-#: editor.cc:1923
+#: editor.cc:1916
 msgid "Make mono regions"
 msgstr "Créer des régions mono"
 
-#: editor.cc:1926
+#: editor.cc:1919
 msgid "Duplicate"
 msgstr "Dupliquer"
 
-#: editor.cc:1927
+#: editor.cc:1920
 msgid "Fill Track"
 msgstr "Remplir la piste"
 
-#: editor.cc:1931
+#: editor.cc:1924
 msgid "Destroy"
 msgstr "Détruire"
 
-#: editor.cc:1961
+#: editor.cc:1954
 msgid "Play range"
 msgstr "Jouer l'intervalle"
 
-#: editor.cc:1962
+#: editor.cc:1955
 msgid "Loop range"
 msgstr "Boucler sur l'intervalle"
 
-#: editor.cc:1966
+#: editor.cc:1959
 #, fuzzy
 msgid "Analyze range"
 msgstr "Jouer l'intervalle"
 
-#: editor.cc:1970
+#: editor.cc:1963
 #, fuzzy
 msgid "Separate range to track"
 msgstr "Séparer l'intervalle"
 
-#: editor.cc:1971
+#: editor.cc:1964
 #, fuzzy
 msgid "Separate range to region list"
 msgstr "définir les régions sélectionnées"
 
-#: editor.cc:1974
+#: editor.cc:1967
 #, fuzzy
 msgid "Select all in range"
 msgstr "Tout sélectionner dans la piste"
 
-#: editor.cc:1976 editor.cc:2021
+#: editor.cc:1969 editor.cc:2014
 #, fuzzy
 msgid "Set range to loop range"
 msgstr "Sélectionner l'intervalle de boucle"
 
-#: editor.cc:1977 editor.cc:2022
+#: editor.cc:1970 editor.cc:2015
 #, fuzzy
 msgid "Set range to punch range"
 msgstr "Sélectionner l'intervalle d'insertion"
 
-#: editor.cc:1979
+#: editor.cc:1972
 #, fuzzy
 msgid "Crop region to range"
 msgstr "Découper la région vers l'intervalle"
 
-#: editor.cc:1980
+#: editor.cc:1973
 #, fuzzy
 msgid "Fill range with region"
 msgstr "Remplir l'intervalle avec une région"
 
-#: editor.cc:1981
+#: editor.cc:1974
 #, fuzzy
 msgid "Duplicate range"
 msgstr "Dupliquer"
 
-#: editor.cc:1982
+#: editor.cc:1975
 msgid "Create chunk from range"
 msgstr "Nouveau fragment à partir de l'intervalle"
 
-#: editor.cc:1984
+#: editor.cc:1977
 #, fuzzy
 msgid "Bounce range"
 msgstr "Bounce intervalle"
 
-#: editor.cc:1985
+#: editor.cc:1978
 #, fuzzy
 msgid "Export range"
 msgstr "Région"
 
-#: editor.cc:1987
+#: editor.cc:1980
 msgid "Range"
 msgstr "Intervalle"
 
-#: editor.cc:2002 editor.cc:2087
+#: editor.cc:1995 editor.cc:2080
 msgid "Play from edit cursor"
 msgstr "Jouer à partir du curseur d'édition"
 
-#: editor.cc:2003 editor.cc:2088
+#: editor.cc:1996 editor.cc:2081
 msgid "Play from start"
 msgstr "Jouer depuis le début"
 
-#: editor.cc:2004
+#: editor.cc:1997
 msgid "Play region"
 msgstr "Jouer la région"
 
-#: editor.cc:2006
+#: editor.cc:1999
 msgid "Loop Region"
 msgstr "Boucler sur la région"
 
-#: editor.cc:2008 editor.cc:2089 sfdb_ui.cc:56
-msgid "Play"
-msgstr "Jouer"
-
-#: editor.cc:2016 editor.cc:2097
+#: editor.cc:2009 editor.cc:2090
 msgid "Select All in track"
 msgstr "Tout sélectionner dans la piste"
 
-#: editor.cc:2017 editor.cc:2098 redirect_box.cc:1065
+#: editor.cc:2010 editor.cc:2091 redirect_box.cc:1067
 msgid "Select All"
 msgstr "Tout sélectionner"
 
-#: editor.cc:2018 editor.cc:2099
+#: editor.cc:2011 editor.cc:2092
 #, fuzzy
 msgid "Invert selection in track"
 msgstr "Inverser dans la piste"
 
-#: editor.cc:2019 editor.cc:2100
+#: editor.cc:2012 editor.cc:2093
 #, fuzzy
 msgid "Invert selection"
 msgstr "déplacer la sélection"
 
-#: editor.cc:2024 editor.cc:2102
+#: editor.cc:2017 editor.cc:2095
 #, fuzzy
 msgid "Select all after edit cursor"
 msgstr "Démarrer depuis le curseur d'édition"
 
-#: editor.cc:2025 editor.cc:2103
+#: editor.cc:2018 editor.cc:2096
 #, fuzzy
 msgid "Select all before edit cursor"
 msgstr "Démarrer depuis le curseur d'édition"
 
-#: editor.cc:2026 editor.cc:2104
+#: editor.cc:2019 editor.cc:2097
 #, fuzzy
 msgid "Select all after playhead"
 msgstr "Jouer depuis la tête de lecture"
 
-#: editor.cc:2027 editor.cc:2105
+#: editor.cc:2020 editor.cc:2098
 #, fuzzy
 msgid "Select all before playhead"
 msgstr "Jouer depuis la tête de lecture"
 
-#: editor.cc:2028
+#: editor.cc:2021
 #, fuzzy
 msgid "Select all between cursors"
 msgstr "Démarrer depuis le curseur d'édition"
 
 #. standard editing stuff
-#: editor.cc:2039 editor.cc:2115 editor.cc:3455 editor_actions.cc:213
-#: redirect_box.cc:1058
+#: editor.cc:2032 editor.cc:2108 editor.cc:3483 editor_actions.cc:214
+#: redirect_box.cc:1060
 msgid "Cut"
 msgstr "Couper"
 
-#: editor.cc:2040 editor.cc:2116 editor.cc:3457 editor_actions.cc:218
-#: redirect_box.cc:1060
+#: editor.cc:2033 editor.cc:2109 editor.cc:3485 editor_actions.cc:219
+#: redirect_box.cc:1062
 msgid "Copy"
 msgstr "Copier"
 
-#: editor.cc:2041
+#: editor.cc:2034
 msgid "Paste at edit cursor"
 msgstr "Coller au curseur d'édition"
 
-#: editor.cc:2042
+#: editor.cc:2035
 msgid "Paste at mouse"
 msgstr "Coller au pointeur de la souris"
 
-#: editor.cc:2046 editor.cc:3462
+#: editor.cc:2039 editor.cc:3490
 msgid "Align"
 msgstr "Aligner"
 
-#: editor.cc:2047 editor.cc:3464
+#: editor.cc:2040 editor.cc:3492
 msgid "Align Relative"
 msgstr "Aligner relativement"
 
-#: editor.cc:2051
+#: editor.cc:2044
 msgid "Insert chunk"
 msgstr "Insérer un fragment"
 
-#: editor.cc:2058
+#: editor.cc:2051
 #, fuzzy
 msgid "Insert Selected Region"
 msgstr "définir les régions sélectionnées"
 
-#: editor.cc:2059
+#: editor.cc:2052
 msgid "Insert Existing Audio"
 msgstr ""
 
-#: editor.cc:2068 editor.cc:2124
+#: editor.cc:2061 editor.cc:2117
 msgid "Nudge entire track fwd"
 msgstr "Décaler la piste entière en avant"
 
-#: editor.cc:2069 editor.cc:2125
+#: editor.cc:2062 editor.cc:2118
 msgid "Nudge track after edit cursor fwd"
 msgstr "Décaler la piste vers l'avant après le curseur d'édition"
 
-#: editor.cc:2070 editor.cc:2126
+#: editor.cc:2063 editor.cc:2119
 msgid "Nudge entire track bwd"
 msgstr "Décaler la piste entière vers l'arrière"
 
-#: editor.cc:2071 editor.cc:2127
+#: editor.cc:2064 editor.cc:2120
 msgid "Nudge track after edit cursor bwd"
 msgstr "Décaler la piste vers l'arrière après le curseur d'édition"
 
-#: editor.cc:2117 editor.cc:3459 editor_actions.cc:220 redirect_box.cc:1062
+#: editor.cc:2110 editor.cc:3487 editor_actions.cc:221 redirect_box.cc:1064
 msgid "Paste"
 msgstr "Coller"
 
-#: editor.cc:2637
+#: editor.cc:2630
 msgid "select/move objects"
 msgstr "sélectionner/déplacer des objets"
 
-#: editor.cc:2638
+#: editor.cc:2631
 msgid "select/move ranges"
 msgstr "sélectionner/déplacer des intervalles"
 
-#: editor.cc:2639
+#: editor.cc:2632
 msgid "draw gain automation"
 msgstr "dessiner l'automatisation du gain"
 
-#: editor.cc:2640
+#: editor.cc:2633
 msgid "select zoom range"
 msgstr "sélectionner la plage de zoom"
 
-#: editor.cc:2641
+#: editor.cc:2634
 msgid "stretch/shrink regions"
 msgstr "étirer/rétrécir les régions"
 
-#: editor.cc:2642
+#: editor.cc:2635
 #, fuzzy
 msgid "listen to specific regions"
 msgstr "Écouter des régions spécifiques"
 
-#: editor.cc:2753
+#: editor.cc:2746
 msgid "Start:"
 msgstr "Début :"
 
-#: editor.cc:2754
+#: editor.cc:2747
 msgid "End:"
 msgstr "Fin :"
 
-#: editor.cc:3097
+#: editor.cc:3362 editor.cc:3402
 #, fuzzy
-msgid "set selected trackview"
-msgstr "définir la vue de piste sélectionnée"
+msgid "set selected regions"
+msgstr "définir les régions sélectionnées"
 
-#: editor.cc:3137
-#, fuzzy
-msgid "set selected control point"
-msgstr "Enlever le point de contrôle"
-
-#: editor.cc:3246
-#, fuzzy
-msgid "set selected regionview"
-msgstr "définir la vue de région sélectionnée"
-
-#: editor.cc:3334 editor.cc:3374
-#, fuzzy
-msgid "set selected regions"
-msgstr "définir les régions sélectionnées"
-
-#: editor.cc:3430 editor_actions.cc:203
+#: editor.cc:3458 editor_actions.cc:204
 msgid "Undo"
 msgstr "Annuler"
 
-#: editor.cc:3432
+#: editor.cc:3460
 msgid "Undo (%1)"
 msgstr "Annuler (%1)"
 
-#: editor.cc:3442 editor_actions.cc:205
+#: editor.cc:3470 editor_actions.cc:206
 msgid "Redo"
 msgstr "Refaire"
 
-#: editor.cc:3444
+#: editor.cc:3472
 msgid "Redo (%1)"
 msgstr "Refaire (%1)"
 
-#: editor.cc:3478
+#: editor.cc:3506
 msgid "... as new track"
 msgstr ""
 
-#: editor.cc:3479
+#: editor.cc:3507
 #, fuzzy
 msgid "... as new region"
 msgstr "aligner la région"
 
-#: editor.cc:3481
+#: editor.cc:3509
 msgid "Import audio (copy)"
 msgstr "Importer audio (copie)"
 
-#: editor.cc:3484
+#: editor.cc:3512
 msgid "Remove last capture"
 msgstr "Enlever la dernière capture"
 
-#: editor.cc:3508
+#: editor.cc:3536
 msgid "Duplicate how many times?"
 msgstr "Dupliquer combien de fois ?"
 
-#: editor.cc:3994
+#: editor.cc:4022
 msgid ""
 "Playlist %1 is currently unused.\n"
 "If left alone, no audio files used by it will be cleaned.\n"
@@ -2729,766 +2715,766 @@ msgstr ""
 "Si vous la convervez, aucun fichier audio qu'elle utilise ne sera nettoyé.\n"
 "Si vous l'effacez, les fichiers audio qu'elle seule utilise seront nettoyés."
 
-#: editor.cc:4002
+#: editor.cc:4030
 msgid "Delete playlist"
 msgstr "Supprimer la playlist"
 
-#: editor.cc:4003
+#: editor.cc:4031
 msgid "Keep playlist"
 msgstr "Garder la playlist"
 
-#: editor.cc:4004 editor_audio_import.cc:237 editor_ops.cc:1976
-#: editor_timefx.cc:52 export_dialog.cc:971 io_selector.cc:58
-#: io_selector.cc:792 redirect_box.cc:901 tempo_dialog.cc:19
-#: tempo_dialog.cc:36 tempo_dialog.cc:152 tempo_dialog.cc:170
+#: editor.cc:4032 editor_audio_import.cc:236 editor_ops.cc:2048
+#: editor_timefx.cc:71 export_dialog.cc:971 io_selector.cc:59
+#: io_selector.cc:793 redirect_box.cc:903 tempo_dialog.cc:20
+#: tempo_dialog.cc:37 tempo_dialog.cc:202 tempo_dialog.cc:220
 msgid "Cancel"
 msgstr "Annuler"
 
-#: editor.cc:4171
+#: editor.cc:4199
 #, fuzzy
 msgid "new playlists"
 msgstr "Garder la playlist"
 
-#: editor.cc:4179
+#: editor.cc:4207
 #, fuzzy
 msgid "copy playlists"
 msgstr "Garder la playlist"
 
-#: editor.cc:4187
+#: editor.cc:4215
 #, fuzzy
 msgid "clear playlists"
 msgstr "effacer la liste de lecture"
 
-#: editor_actions.cc:27
+#: editor_actions.cc:28
 #, fuzzy
 msgid "Select regions"
 msgstr "sélectionner les régions"
 
-#: editor_actions.cc:28
+#: editor_actions.cc:29
 #, fuzzy
 msgid "Select range operations"
 msgstr "sélectionner les régions"
 
-#: editor_actions.cc:29
+#: editor_actions.cc:30
 #, fuzzy
 msgid "Move edit cursor"
 msgstr "Coller au curseur d'édition"
 
-#: editor_actions.cc:30
+#: editor_actions.cc:31
 #, fuzzy
 msgid "Region operations"
 msgstr "Régions/création"
 
-#: editor_actions.cc:31
+#: editor_actions.cc:32
 msgid "Tools"
 msgstr ""
 
-#: editor_actions.cc:32
+#: editor_actions.cc:33
 msgid "View"
 msgstr ""
 
-#: editor_actions.cc:33
+#: editor_actions.cc:34
 #, fuzzy
 msgid "ZoomFocus"
 msgstr "Focus du zoom"
 
-#: editor_actions.cc:34
+#: editor_actions.cc:35
 #, fuzzy
 msgid "Meter hold"
 msgstr "Maintien du pic de vu-mètre"
 
-#: editor_actions.cc:35
+#: editor_actions.cc:36
 #, fuzzy
 msgid "Meter falloff"
 msgstr "Temps de chute du vu-mètre"
 
-#: editor_actions.cc:37
+#: editor_actions.cc:38
 #, fuzzy
 msgid "Crossfades"
 msgstr "Modèle de fondu enchaîné"
 
-#: editor_actions.cc:38
+#: editor_actions.cc:39
 #, fuzzy
 msgid "Monitoring"
 msgstr "Utiliser la pré-écoute matérielle"
 
-#: editor_actions.cc:39
+#: editor_actions.cc:40
 #, fuzzy
 msgid "Autoconnect"
 msgstr "Reconnecter"
 
-#: editor_actions.cc:40
+#: editor_actions.cc:41
 #, fuzzy
 msgid "Layering"
 msgstr "Couche"
 
-#: editor_actions.cc:41
+#: editor_actions.cc:42
 #, fuzzy
 msgid "Metering"
 msgstr "Vu-mètre"
 
-#: editor_actions.cc:42
+#: editor_actions.cc:43
 msgid "Fall off rate"
 msgstr ""
 
-#: editor_actions.cc:43
+#: editor_actions.cc:44
 msgid "Hold Time"
 msgstr ""
 
-#: editor_actions.cc:44
+#: editor_actions.cc:45
 msgid "Add Existing Audio"
 msgstr ""
 
 #. add named actions for the editor
-#: editor_actions.cc:49
+#: editor_actions.cc:50
 #, fuzzy
 msgid "Show Editor Mixer"
 msgstr "Montrer toutes les tranches de mixage de piste audio"
 
-#: editor_actions.cc:54
+#: editor_actions.cc:55
 #, fuzzy
 msgid "Span Entire Overlap"
 msgstr "Mesurer le recouvrement de régions en entier"
 
-#: editor_actions.cc:56 editor_actions.cc:383
+#: editor_actions.cc:57 editor_actions.cc:384
 msgid "Short"
 msgstr "Court"
 
-#: editor_actions.cc:63
+#: editor_actions.cc:64
 msgid "Created Automatically"
 msgstr ""
 
-#: editor_actions.cc:66
+#: editor_actions.cc:67
 msgid "Playhead to Next Region Start"
 msgstr ""
 
-#: editor_actions.cc:68
+#: editor_actions.cc:69
 msgid "Playhead to Next Region End"
 msgstr ""
 
-#: editor_actions.cc:70
+#: editor_actions.cc:71
 msgid "Playhead to Next Region Sync"
 msgstr ""
 
-#: editor_actions.cc:73
+#: editor_actions.cc:74
 msgid "Playhead to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:75
+#: editor_actions.cc:76
 msgid "Playhead to Previous Region End"
 msgstr ""
 
-#: editor_actions.cc:77
+#: editor_actions.cc:78
 msgid "Playhead to Previous Region Sync"
 msgstr ""
 
-#: editor_actions.cc:80
+#: editor_actions.cc:81
 #, fuzzy
 msgid "Edit Cursor to Next Region Start"
 msgstr "Curseur d'édition à la fin"
 
-#: editor_actions.cc:82
+#: editor_actions.cc:83
 #, fuzzy
 msgid "Edit Cursor to Next Region End"
 msgstr "Curseur d'édition à la fin"
 
-#: editor_actions.cc:84
+#: editor_actions.cc:85
 #, fuzzy
 msgid "Edit Cursor to Next Region Sync"
 msgstr "Curseur d'édition à la fin"
 
-#: editor_actions.cc:87
+#: editor_actions.cc:88
 msgid "Edit Cursor to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:89
+#: editor_actions.cc:90
 #, fuzzy
 msgid "Edit Cursor to Previous Region End"
 msgstr "Curseur d'édition à la fin"
 
-#: editor_actions.cc:91
+#: editor_actions.cc:92
 #, fuzzy
 msgid "Edit Cursor to Previous Region Sync"
 msgstr "Curseur d'édition à la fin"
 
-#: editor_actions.cc:94
+#: editor_actions.cc:95
 msgid "Playhead to Range Start"
 msgstr ""
 
-#: editor_actions.cc:96
+#: editor_actions.cc:97
 #, fuzzy
 msgid "Playhead to Range End"
 msgstr "Jouer l'intervalle de boucle"
 
-#: editor_actions.cc:99
+#: editor_actions.cc:100
 #, fuzzy
 msgid "Edit Cursor to Range Start"
 msgstr "Curseur d'édition à la fin"
 
-#: editor_actions.cc:101
+#: editor_actions.cc:102
 #, fuzzy
 msgid "Edit Cursor to Range End"
 msgstr "Curseur d'édition à la fin"
 
-#: editor_actions.cc:104 editor_ops.cc:1300
+#: editor_actions.cc:105 editor_ops.cc:1363
 #, fuzzy
 msgid "select all"
 msgstr "Tout sélectionner"
 
-#: editor_actions.cc:106
+#: editor_actions.cc:107
 #, fuzzy
 msgid "Select All After Edit Cursor"
 msgstr "définir la synchro. au curseur d'édition"
 
-#: editor_actions.cc:108
+#: editor_actions.cc:109
 msgid "Select All Before Edit Cursor"
 msgstr ""
 
-#: editor_actions.cc:111
+#: editor_actions.cc:112
 #, fuzzy
 msgid "Select All After Playhead"
 msgstr "Jouer depuis la tête de lecture"
 
-#: editor_actions.cc:113
+#: editor_actions.cc:114
 #, fuzzy
 msgid "Select All Before Playhead"
 msgstr "Jouer depuis la tête de lecture"
 
-#: editor_actions.cc:115
+#: editor_actions.cc:116
 #, fuzzy
 msgid "Select All Between Cursors"
 msgstr "définir la synchro. au curseur d'édition"
 
-#: editor_actions.cc:118
+#: editor_actions.cc:119
 #, fuzzy
 msgid "Select All in Punch Range"
 msgstr "Définir l'intervalle d'insertion"
 
-#: editor_actions.cc:120
+#: editor_actions.cc:121
 #, fuzzy
 msgid "Select All in Loop Range"
 msgstr "Sélectionner l'intervalle de boucle"
 
-#: editor_actions.cc:123
+#: editor_actions.cc:124
 msgid "Jump Forward to Mark"
 msgstr ""
 
-#: editor_actions.cc:125
+#: editor_actions.cc:126
 msgid "Jump Backward to Mark"
 msgstr ""
 
-#: editor_actions.cc:127
+#: editor_actions.cc:128
 #, fuzzy
 msgid "Add Location from Playhead"
 msgstr "Jouer depuis la tête de lecture"
 
-#: editor_actions.cc:130
+#: editor_actions.cc:131
 #, fuzzy
 msgid "Nudge Forward"
 msgstr "décaler vers l'avant"
 
-#: editor_actions.cc:132
+#: editor_actions.cc:133
 #, fuzzy
 msgid "Nudge Next Forward"
 msgstr "décaler vers l'avant"
 
-#: editor_actions.cc:134
+#: editor_actions.cc:135
 #, fuzzy
 msgid "Nudge Backward"
 msgstr "Décaler vers l'arrière"
 
-#: editor_actions.cc:136
+#: editor_actions.cc:137
 #, fuzzy
 msgid "Nudge Next Backward"
 msgstr "Décaler la piste entière en avant"
 
-#: editor_actions.cc:139
+#: editor_actions.cc:140
 #, fuzzy
 msgid "Zoom Out"
 msgstr "Zoom arrière"
 
-#: editor_actions.cc:141
+#: editor_actions.cc:142
 #, fuzzy
 msgid "Zoom In"
 msgstr "Zoom avant"
 
-#: editor_actions.cc:143
+#: editor_actions.cc:144
 #, fuzzy
 msgid "Zoom to Session"
 msgstr "Zoomer vers la session"
 
-#: editor_actions.cc:146
+#: editor_actions.cc:147
 #, fuzzy
 msgid "Scroll Tracks Up"
 msgstr "Remplir la piste"
 
-#: editor_actions.cc:148
+#: editor_actions.cc:149
 msgid "Scroll Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:150
+#: editor_actions.cc:151
 #, fuzzy
 msgid "Step Tracks Up"
 msgstr "décaler la piste"
 
-#: editor_actions.cc:152
+#: editor_actions.cc:153
 msgid "Step Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:155
+#: editor_actions.cc:156
 msgid "Scroll Backward"
 msgstr ""
 
-#: editor_actions.cc:157
+#: editor_actions.cc:158
 msgid "Scroll Forward"
 msgstr ""
 
-#: editor_actions.cc:159
+#: editor_actions.cc:160
 msgid "goto"
 msgstr ""
 
-#: editor_actions.cc:161
+#: editor_actions.cc:162
 #, fuzzy
 msgid "Center Playhead"
 msgstr "Tête de lecture"
 
-#: editor_actions.cc:163
+#: editor_actions.cc:164
 #, fuzzy
 msgid "Center Edit Cursor"
 msgstr "Curseur d'édition"
 
-#: editor_actions.cc:165
+#: editor_actions.cc:166
 #, fuzzy
 msgid "Playhead Forward"
 msgstr "Tête de lecture"
 
-#: editor_actions.cc:167
+#: editor_actions.cc:168
 #, fuzzy
 msgid "Playhead Backward"
 msgstr "Tête de lecture"
 
-#: editor_actions.cc:169
+#: editor_actions.cc:170
 #, fuzzy
 msgid "Playhead to Edit"
 msgstr "Tête de lecture"
 
-#: editor_actions.cc:171
+#: editor_actions.cc:172
 #, fuzzy
 msgid "Edit to Playhead"
 msgstr "Jouer depuis la tête de lecture"
 
-#: editor_actions.cc:174
+#: editor_actions.cc:175
 #, fuzzy
 msgid "Align Regions Start"
 msgstr "Débuts de régions"
 
-#: editor_actions.cc:176
+#: editor_actions.cc:177
 #, fuzzy
 msgid "Align Regions Start Relative"
 msgstr "Aligner la sélection (relativement)"
 
-#: editor_actions.cc:178
+#: editor_actions.cc:179
 #, fuzzy
 msgid "Align Regions End"
 msgstr "aligner la région"
 
-#: editor_actions.cc:180
+#: editor_actions.cc:181
 #, fuzzy
 msgid "Align Regions End Relative"
 msgstr "Aligner relativement"
 
-#: editor_actions.cc:183
+#: editor_actions.cc:184
 #, fuzzy
 msgid "Align Regions Sync"
 msgstr "aligner la région"
 
-#: editor_actions.cc:185
+#: editor_actions.cc:186
 #, fuzzy
 msgid "Align Regions Sync Relative"
 msgstr "Aligner relativement"
 
-#: editor_actions.cc:188
+#: editor_actions.cc:189
 #, fuzzy
 msgid "Audition at Mouse"
 msgstr "Audition"
 
-#: editor_actions.cc:190
+#: editor_actions.cc:191
 #, fuzzy
 msgid "Brush at Mouse"
 msgstr "Coller au pointeur de la souris"
 
-#: editor_actions.cc:192
+#: editor_actions.cc:193
 #, fuzzy
 msgid "Set Edit Cursor"
 msgstr "Curseur d'édition"
 
-#: editor_actions.cc:194
+#: editor_actions.cc:195
 #, fuzzy
 msgid "Mute/Unmute Region"
 msgstr "Créer une région"
 
-#: editor_actions.cc:196
+#: editor_actions.cc:197
 #, fuzzy
 msgid "Set Playhead"
 msgstr "Tête de lecture"
 
-#: editor_actions.cc:198
+#: editor_actions.cc:199
 #, fuzzy
 msgid "Split Region"
 msgstr "Séparer la région"
 
-#: editor_actions.cc:200
+#: editor_actions.cc:201
 #, fuzzy
 msgid "Set Region Sync Position"
 msgstr "Par position de région"
 
-#: editor_actions.cc:208
+#: editor_actions.cc:209
 #, fuzzy
 msgid "Export Session"
 msgstr "Région"
 
-#: editor_actions.cc:210
+#: editor_actions.cc:211
 #, fuzzy
 msgid "Export Range"
 msgstr "Séparer l'intervalle"
 
 #. Note: for now, editor-delete does the exact same thing as editor-cut
-#: editor_actions.cc:216
+#: editor_actions.cc:217
 msgid "Delete"
 msgstr "Supprimer"
 
-#: editor_actions.cc:222
+#: editor_actions.cc:223
 #, fuzzy
 msgid "Duplicate Region"
 msgstr "dupliquer la région"
 
-#: editor_actions.cc:224
+#: editor_actions.cc:225
 #, fuzzy
 msgid "Duplicate Range"
 msgstr "Dupliquer"
 
-#: editor_actions.cc:226
+#: editor_actions.cc:227
 msgid "Insert Region"
 msgstr "Insérer une région"
 
-#: editor_actions.cc:228
+#: editor_actions.cc:229
 #, fuzzy
 msgid "Reverse Region"
 msgstr "inverser les régions"
 
-#: editor_actions.cc:230
+#: editor_actions.cc:231
 #, fuzzy
 msgid "Normalize Region"
 msgstr "Normaliser"
 
-#: editor_actions.cc:232
+#: editor_actions.cc:233
 #, fuzzy
 msgid "crop"
 msgstr "copier"
 
-#: editor_actions.cc:234
+#: editor_actions.cc:235
 #, fuzzy
 msgid "Insert Chunk"
 msgstr "Insérer un fragment"
 
-#: editor_actions.cc:237
+#: editor_actions.cc:238
 #, fuzzy
 msgid "Split at edit cursor"
 msgstr "Démarrer depuis le curseur d'édition"
 
-#: editor_actions.cc:240
+#: editor_actions.cc:241
 #, fuzzy
 msgid "Start Range"
 msgstr "Séparer l'intervalle"
 
-#: editor_actions.cc:242
+#: editor_actions.cc:243
 msgid "Finish Range"
 msgstr ""
 
-#: editor_actions.cc:244
+#: editor_actions.cc:245
 msgid "Finish add Range"
 msgstr ""
 
-#: editor_actions.cc:247
+#: editor_actions.cc:248
 msgid "Extend Range to End of Region"
 msgstr ""
 
-#: editor_actions.cc:249
+#: editor_actions.cc:250
 #, fuzzy
 msgid "Extend Range to Start of Region"
 msgstr "Aller au début de la session"
 
-#: editor_actions.cc:252
+#: editor_actions.cc:253
 #, fuzzy
 msgid "Follow Playhead"
 msgstr "Suivre la tête de lecture"
 
-#: editor_actions.cc:260
+#: editor_actions.cc:261
 #, fuzzy
 msgid "Zoom Focus Left"
 msgstr "Focus du zoom"
 
-#: editor_actions.cc:262
+#: editor_actions.cc:263
 #, fuzzy
 msgid "Zoom Focus Right"
 msgstr "Focus du zoom"
 
-#: editor_actions.cc:264
+#: editor_actions.cc:265
 #, fuzzy
 msgid "Zoom Focus Center"
 msgstr "Focus du zoom"
 
-#: editor_actions.cc:266
+#: editor_actions.cc:267
 #, fuzzy
 msgid "Zoom Focus Playhead"
 msgstr "Focus du zoom"
 
-#: editor_actions.cc:268
+#: editor_actions.cc:269
 #, fuzzy
 msgid "Zoom Focus Edit"
 msgstr "Focus du zoom"
 
-#: editor_actions.cc:274
+#: editor_actions.cc:275
 msgid "Object Tool"
 msgstr ""
 
-#: editor_actions.cc:275
+#: editor_actions.cc:276
 #, fuzzy
 msgid "Range Tool"
 msgstr "Intervalle"
 
-#: editor_actions.cc:276
+#: editor_actions.cc:277
 msgid "Gain Tool"
 msgstr ""
 
-#: editor_actions.cc:277
+#: editor_actions.cc:278
 #, fuzzy
 msgid "Zoom Tool"
 msgstr "Zoom arrière"
 
-#: editor_actions.cc:278
+#: editor_actions.cc:279
 msgid "Timefx Tool"
 msgstr ""
 
-#: editor_actions.cc:285
+#: editor_actions.cc:286
 #, fuzzy
 msgid "Snap to frame"
 msgstr "Snap mode"
 
-#: editor_actions.cc:286
+#: editor_actions.cc:287
 #, fuzzy
 msgid "Snap to cd frame"
 msgstr "Snap mode"
 
-#: editor_actions.cc:287
+#: editor_actions.cc:288
 #, fuzzy
 msgid "Snap to SMPTE frame"
 msgstr "Trames SMPTE"
 
-#: editor_actions.cc:288
+#: editor_actions.cc:289
 #, fuzzy
 msgid "Snap to SMPTE seconds"
 msgstr "Secondes SMPTE"
 
-#: editor_actions.cc:289
+#: editor_actions.cc:290
 #, fuzzy
 msgid "Snap to SMPTE minutes"
 msgstr "Minutes SMPTE"
 
-#: editor_actions.cc:290
+#: editor_actions.cc:291
 #, fuzzy
 msgid "Snap to seconds"
 msgstr "3 secondes"
 
-#: editor_actions.cc:291
+#: editor_actions.cc:292
 msgid "Snap to minutes"
 msgstr ""
 
-#: editor_actions.cc:292
+#: editor_actions.cc:293
 #, fuzzy
 msgid "Snap to thirtyseconds"
 msgstr "trente-deuxième (32)"
 
-#: editor_actions.cc:293
+#: editor_actions.cc:294
 msgid "Snap to asixteenthbeat"
 msgstr ""
 
-#: editor_actions.cc:294
+#: editor_actions.cc:295
 msgid "Snap to eighths"
 msgstr ""
 
-#: editor_actions.cc:295
+#: editor_actions.cc:296
 msgid "Snap to quarters"
 msgstr ""
 
-#: editor_actions.cc:296
+#: editor_actions.cc:297
 #, fuzzy
 msgid "Snap to thirds"
 msgstr "Snap mode"
 
-#: editor_actions.cc:297
+#: editor_actions.cc:298
 #, fuzzy
 msgid "Snap to beat"
 msgstr "Snap mode"
 
-#: editor_actions.cc:298
+#: editor_actions.cc:299
 #, fuzzy
 msgid "Snap to bar"
 msgstr "Snap to"
 
-#: editor_actions.cc:299
+#: editor_actions.cc:300
 #, fuzzy
 msgid "Snap to mark"
 msgstr "ajouter un marqueur de tempo"
 
-#: editor_actions.cc:300
+#: editor_actions.cc:301
 #, fuzzy
 msgid "Snap to edit cursor"
 msgstr "Démarrer depuis le curseur d'édition"
 
-#: editor_actions.cc:301
+#: editor_actions.cc:302
 #, fuzzy
 msgid "Snap to region start"
 msgstr "Débuts de régions"
 
-#: editor_actions.cc:302
+#: editor_actions.cc:303
 #, fuzzy
 msgid "Snap to region end"
 msgstr "Fins de régions"
 
-#: editor_actions.cc:303
+#: editor_actions.cc:304
 #, fuzzy
 msgid "Snap to region sync"
 msgstr "Syncro. de régions"
 
-#: editor_actions.cc:304
+#: editor_actions.cc:305
 #, fuzzy
 msgid "Snap to region boundary"
 msgstr "Limites de régions"
 
 #. the region list popup menu
-#: editor_actions.cc:313
+#: editor_actions.cc:314
 #, fuzzy
 msgid "Sort"
 msgstr "Court"
 
-#: editor_actions.cc:321
+#: editor_actions.cc:322
 msgid "Show all"
 msgstr "Tout montrer"
 
-#: editor_actions.cc:322
+#: editor_actions.cc:323
 #, fuzzy
 msgid "Show automatic regions"
 msgstr "montrer toute l'automatisation"
 
-#: editor_actions.cc:324
+#: editor_actions.cc:325
 msgid "Ascending"
 msgstr "Montant"
 
-#: editor_actions.cc:326
+#: editor_actions.cc:327
 msgid "Descending"
 msgstr "Descendant"
 
-#: editor_actions.cc:329
+#: editor_actions.cc:330
 msgid "By Region Name"
 msgstr "Par nom de région"
 
-#: editor_actions.cc:331
+#: editor_actions.cc:332
 msgid "By Region Length"
 msgstr "Par longueur de région"
 
-#: editor_actions.cc:333
+#: editor_actions.cc:334
 msgid "By Region Position"
 msgstr "Par position de région"
 
-#: editor_actions.cc:335
+#: editor_actions.cc:336
 msgid "By Region Timestamp"
 msgstr "Par date de région"
 
-#: editor_actions.cc:337
+#: editor_actions.cc:338
 msgid "By Region Start in File"
 msgstr "Par début de région dans le fichier"
 
-#: editor_actions.cc:339
+#: editor_actions.cc:340
 msgid "By Region End in File"
 msgstr "Par fin de région dans le fichier"
 
-#: editor_actions.cc:341
+#: editor_actions.cc:342
 msgid "By Source File Name"
 msgstr "Par nom de fichier source"
 
-#: editor_actions.cc:343
+#: editor_actions.cc:344
 msgid "By Source File Length"
 msgstr "Par longueur de fichier source"
 
-#: editor_actions.cc:345
+#: editor_actions.cc:346
 msgid "By Source File Creation Date"
 msgstr "Par date de création du fichier source"
 
-#: editor_actions.cc:347
+#: editor_actions.cc:348
 msgid "By Source Filesystem"
 msgstr "Par système de fichier source"
 
 #. the next two are duplicate items with different names for use in two different contexts
-#: editor_actions.cc:353
+#: editor_actions.cc:354
 #, fuzzy
 msgid "Add External Audio"
 msgstr "Ajouter à la liste des régions externes"
 
-#: editor_actions.cc:355
+#: editor_actions.cc:356
 #, fuzzy
 msgid "as Region(s)"
 msgstr "Déplacer la/les région(s)"
 
-#: editor_actions.cc:357
+#: editor_actions.cc:358
 #, fuzzy
 msgid "as Tracks"
 msgstr "Pistes"
 
-#: editor_actions.cc:359
+#: editor_actions.cc:360
 #, fuzzy
 msgid "to Tracks"
 msgstr "Pistes"
 
-#: editor_actions.cc:362
+#: editor_actions.cc:363
 #, fuzzy
 msgid "Show Waveforms"
 msgstr "Montrer les formes d'onde"
 
-#: editor_actions.cc:363
+#: editor_actions.cc:364
 #, fuzzy
 msgid "Show Waveforms While Recording"
 msgstr "Montrer les formes d'onde pendant l'enregistrement"
 
-#: editor_actions.cc:364
+#: editor_actions.cc:365
 #, fuzzy
 msgid "Show Measures"
 msgstr "Montrer les barres de mesures"
 
-#: editor_actions.cc:377 editor_actions.cc:384
+#: editor_actions.cc:378 editor_actions.cc:385
 msgid "Medium"
 msgstr "Moyen"
 
-#: editor_actions.cc:379
+#: editor_actions.cc:380
 msgid "Faster"
 msgstr "Plus rapide"
 
-#: editor_actions.cc:385
+#: editor_actions.cc:386
 msgid "Long"
 msgstr "Long"
 
-#: editor_actions.cc:389
+#: editor_actions.cc:390
 #, fuzzy
 msgid "Later is Higher"
 msgstr "Les dernières régions sont placées au-dessus"
 
-#: editor_actions.cc:390
+#: editor_actions.cc:391
 #, fuzzy
 msgid "Most Recently Moved/Added is Higher"
 msgstr ""
 "Les régions ajoutées/déplacées/élaguées en dernier sont placées au-dessus"
 
-#: editor_actions.cc:391
+#: editor_actions.cc:392
 #, fuzzy
 msgid "Most Recently Added is Higher"
 msgstr ""
@@ -3506,39 +3492,39 @@ msgstr ""
 msgid "Add existing audio to session"
 msgstr "montrer l'automatisation existante"
 
-#: editor_audio_import.cc:143
+#: editor_audio_import.cc:142
 msgid "ardour: importing %1"
 msgstr "ardour : importation de %1"
 
-#: editor_audio_import.cc:147
+#: editor_audio_import.cc:146
 msgid "Cancel Import"
 msgstr "Annuler l'importation"
 
-#: editor_audio_import.cc:225
+#: editor_audio_import.cc:224
 #, fuzzy
 msgid "Editor: cannot open file \"%1\", (%2)"
 msgstr "Éditeur : impossible d'ouvrir le fichier \"%1\" (%2)"
 
-#: editor_audio_import.cc:233
+#: editor_audio_import.cc:232
 #, fuzzy
 msgid "Cancel entire import"
 msgstr "Annuler l'importation"
 
-#: editor_audio_import.cc:234
+#: editor_audio_import.cc:233
 #, fuzzy
 msgid "Don't embed it"
 msgstr "Ne pas %1"
 
-#: editor_audio_import.cc:235
+#: editor_audio_import.cc:234
 msgid "Embed all without questions"
 msgstr ""
 
-#: editor_audio_import.cc:240
+#: editor_audio_import.cc:239
 #, fuzzy
 msgid "Embed it anyway"
 msgstr "le %1 quand même"
 
-#: editor_audio_import.cc:243
+#: editor_audio_import.cc:242
 msgid ""
 "%1\n"
 "This audiofile's sample rate doesn't match the session sample rate!"
@@ -3547,74 +3533,62 @@ msgstr ""
 "La fréquence d'échantillonage de ce fichier audio ne correspond pas à celle "
 "de la session !"
 
-#: editor_audio_import.cc:276
+#: editor_audio_import.cc:275
 msgid "could not open %1"
 msgstr "impossible d'ouvrir %1"
 
-#: editor_audio_import.cc:321
+#: editor_audio_import.cc:320
 msgid "insert sndfile"
 msgstr "Insérer un fichier son"
 
 #. stuff for the verbose canvas cursor
-#: editor_canvas.cc:117
+#: editor_canvas.cc:118
 msgid "VerboseCanvasCursor"
 msgstr "VerboseCanvasCursor"
 
-#: editor_canvas.cc:285
-msgid "Start a new session\n"
-msgstr "Commencer une nouvelle session\n"
-
-#: editor_canvas.cc:285
-msgid "via Session menu"
-msgstr "via le menu Session"
-
-#: editor_canvas.cc:288
-msgid "FirstActionMessage"
-msgstr "FirstActionCursor"
-
-#: editor_edit_groups.cc:52 mixer_ui.cc:732
+#: editor_edit_groups.cc:53 mixer_ui.cc:736
 #, fuzzy
 msgid "Activate All"
 msgstr "Activer"
 
-#: editor_edit_groups.cc:53 mixer_ui.cc:733
+#: editor_edit_groups.cc:54 mixer_ui.cc:737
 #, fuzzy
 msgid "Disable All"
 msgstr "Déconnecter tout"
 
-#: editor_edit_groups.cc:55 mixer_ui.cc:735
+#: editor_edit_groups.cc:56 mixer_ui.cc:739
 #, fuzzy
 msgid "Add group"
 msgstr "Pas de groupe"
 
-#: editor_edit_groups.cc:225 mixer_ui.cc:964
+#: editor_edit_groups.cc:229 mixer_ui.cc:970
 #, fuzzy
 msgid "unnamed"
 msgstr "Renommer"
 
-#: editor_edit_groups.cc:252 mixer_ui.cc:830
+#: editor_edit_groups.cc:258 mixer_ui.cc:834
 msgid "-all-"
 msgstr "-tout-"
 
-#: editor_export_audio.cc:64
+#: editor_export_audio.cc:65
 msgid ""
 "There is no selection to export.\n"
 "\n"
 "Select a selection using the range mouse mode"
 msgstr ""
 
-#: editor_export_audio.cc:109
+#: editor_export_audio.cc:110
 msgid ""
 "There are no ranges to export.\n"
 "\n"
 "Create 1 or more ranges by dragging the mouse in the range bar"
 msgstr ""
 
-#: editor_imageframe.cc:624 editor_imageframe.cc:654
+#: editor_imageframe.cc:625 editor_imageframe.cc:655
 msgid "programming error: no ImageFrameView selected"
 msgstr "erreur de programmation : aucun ImageFrameView selectionné"
 
-#: editor_imageframe.cc:847 editor_imageframe.cc:869
+#: editor_imageframe.cc:848 editor_imageframe.cc:870
 msgid "programming error: no MarkerView selected"
 msgstr "erreur de programmation : aucun MarkerView sélectionné"
 
@@ -3623,141 +3597,141 @@ msgstr "erreur de programmation : aucun MarkerView sélectionné"
 msgid "mute region"
 msgstr "Assourdir cette région"
 
-#: editor_keys.cc:45
+#: editor_keys.cc:46
 #, fuzzy
 msgid "keyboard selection"
 msgstr "étendre la sélection"
 
-#: editor_markers.cc:291 editor_ops.cc:1227 editor_ops.cc:1240
-#: editor_ops.cc:1258 location_ui.cc:773
+#: editor_markers.cc:292 editor_ops.cc:1290 editor_ops.cc:1303
+#: editor_ops.cc:1321 location_ui.cc:774
 msgid "add marker"
 msgstr "ajouter un marqueur"
 
-#: editor_markers.cc:306 editor_markers.cc:379 editor_markers.cc:551
-#: editor_markers.cc:569 editor_markers.cc:588 editor_markers.cc:607
-#: editor_markers.cc:637 editor_markers.cc:665 editor_markers.cc:693
-#: editor_markers.cc:731 editor_markers.cc:758 editor_markers.cc:781
-#: editor_markers.cc:800 editor_mouse.cc:1994 editor_mouse.cc:4237
+#: editor_markers.cc:307 editor_markers.cc:380 editor_markers.cc:552
+#: editor_markers.cc:570 editor_markers.cc:589 editor_markers.cc:608
+#: editor_markers.cc:638 editor_markers.cc:666 editor_markers.cc:694
+#: editor_markers.cc:732 editor_markers.cc:759 editor_markers.cc:782
+#: editor_markers.cc:801 editor_mouse.cc:2015 editor_mouse.cc:4275
 msgid "programming error: marker canvas item has no marker object pointer!"
 msgstr ""
 "erreur de programmation : objet canvas de marqueur sans pointeur d'objet "
 "marqueur !"
 
-#: editor_markers.cc:330 location_ui.cc:655
+#: editor_markers.cc:331 location_ui.cc:656
 msgid "remove marker"
 msgstr "enlever le marqueur"
 
-#: editor_markers.cc:457
+#: editor_markers.cc:458
 #, fuzzy
 msgid "Locate to Mark"
 msgstr "Locate to"
 
-#: editor_markers.cc:458
+#: editor_markers.cc:459
 #, fuzzy
 msgid "Play from Mark"
 msgstr "Jouer depuis le début"
 
-#: editor_markers.cc:459
+#: editor_markers.cc:460
 #, fuzzy
 msgid "Set Mark from Playhead"
 msgstr "Jouer depuis la tête de lecture"
 
-#: editor_markers.cc:463
+#: editor_markers.cc:464
 #, fuzzy
 msgid "Rename Mark"
 msgstr "Renommer la piste"
 
-#: editor_markers.cc:464
+#: editor_markers.cc:465
 #, fuzzy
 msgid "Hide Mark"
 msgstr "décaler la piste"
 
-#: editor_markers.cc:465
+#: editor_markers.cc:466
 #, fuzzy
 msgid "Remove Mark"
 msgstr "Enlever les marqueurs"
 
-#: editor_markers.cc:478 editor_markers.cc:534
+#: editor_markers.cc:479 editor_markers.cc:535
 #, fuzzy
 msgid "Locate to Range Mark"
 msgstr "Marqueurs d'emplacements"
 
-#: editor_markers.cc:479 editor_markers.cc:535
+#: editor_markers.cc:480 editor_markers.cc:536
 #, fuzzy
 msgid "Play from Range Mark"
 msgstr "Jouer l'intervalle de boucle"
 
-#: editor_markers.cc:480
+#: editor_markers.cc:481
 #, fuzzy
 msgid "Loop Range"
 msgstr "Boucler sur l'intervalle"
 
-#: editor_markers.cc:481 editor_markers.cc:536
+#: editor_markers.cc:482 editor_markers.cc:537
 #, fuzzy
 msgid "Set Range Mark from Playhead"
 msgstr "Jouer depuis la tête de lecture"
 
-#: editor_markers.cc:482 editor_markers.cc:537
+#: editor_markers.cc:483 editor_markers.cc:538
 #, fuzzy
 msgid "Set Range from Range Selection"
 msgstr "sélection d'intervalle"
 
-#: editor_markers.cc:486
+#: editor_markers.cc:487
 #, fuzzy
 msgid "Rename Range"
 msgstr "Renommer la piste"
 
-#: editor_markers.cc:487 editor_markers.cc:539
+#: editor_markers.cc:488 editor_markers.cc:540
 #, fuzzy
 msgid "Hide Range"
 msgstr "Ajouter un nouvel intervalle"
 
-#: editor_markers.cc:488
+#: editor_markers.cc:489
 #, fuzzy
 msgid "Remove Range"
 msgstr "Enlever une trame"
 
-#: editor_markers.cc:492 editor_markers.cc:541
+#: editor_markers.cc:493 editor_markers.cc:542
 #, fuzzy
 msgid "Separate Regions in Range"
 msgstr "Nouvelle région à partir de l'intervalle"
 
-#: editor_markers.cc:493 editor_markers.cc:542
+#: editor_markers.cc:494 editor_markers.cc:543
 #, fuzzy
 msgid "Select All in Range"
 msgstr "Tout sélectionner dans la piste"
 
-#: editor_markers.cc:519
+#: editor_markers.cc:520
 msgid "Set Loop Range"
 msgstr "Définir l'intervalle de boucle"
 
-#: editor_markers.cc:520
+#: editor_markers.cc:521
 msgid "Set Punch Range"
 msgstr "Définir l'intervalle d'insertion"
 
-#: editor_markers.cc:814
+#: editor_markers.cc:815
 #, fuzzy
 msgid "New Name:"
 msgstr "nouveau nom :"
 
-#: editor_markers.cc:817
+#: editor_markers.cc:818
 msgid "ardour: rename mark"
 msgstr "ardour : renommer le marqueur"
 
-#: editor_markers.cc:819
+#: editor_markers.cc:820
 msgid "ardour: rename range"
 msgstr "ardour : renommer l'intervalle"
 
-#: editor_markers.cc:839
+#: editor_markers.cc:840
 #, fuzzy
 msgid "rename marker"
 msgstr "enlever le marqueur"
 
-#: editor_markers.cc:864
+#: editor_markers.cc:865
 msgid "set loop range"
 msgstr "définir l'intervalle de boucle"
 
-#: editor_markers.cc:890
+#: editor_markers.cc:891
 msgid "set punch range"
 msgstr "définir l'intervalle d'insertion"
 
@@ -3765,76 +3739,81 @@ msgstr "définir l'intervalle d'insertion"
 msgid "Editor::event_frame() used on unhandled event type %1"
 msgstr "Editor::event_frame() utilisé sur un évènement non géré de type %1"
 
-#: editor_mouse.cc:1589
+#: editor_mouse.cc:313
+#, fuzzy
+msgid "select on click"
+msgstr "Utiliser comme clic"
+
+#: editor_mouse.cc:1590
 msgid "programming error: start_grab called without drag item"
 msgstr "erreur de programmation :  start_grab appelé sans objet a ramasser"
 
-#: editor_mouse.cc:1793
+#: editor_mouse.cc:1814
 msgid "change fade in length"
 msgstr "modifier la longueur du fondu d'ouverture"
 
-#: editor_mouse.cc:1811
+#: editor_mouse.cc:1832
 #, fuzzy
 msgid "programming error: fade out canvas item has no regionview data pointer!"
 msgstr ""
 "programming error: fade out canvas item has no regionview data pointer!"
 
-#: editor_mouse.cc:1885
+#: editor_mouse.cc:1906
 msgid "change fade out length"
 msgstr "modifier la longueur du fondu de fermeture"
 
-#: editor_mouse.cc:1904
+#: editor_mouse.cc:1925
 msgid "programming error: cursor canvas item has no cursor data pointer!"
 msgstr ""
 "erreur de programmation : objet canvas de curseur sans pointeur de données "
 "curseur"
 
-#: editor_mouse.cc:2119
+#: editor_mouse.cc:2142
 #, fuzzy
 msgid "move marker"
 msgstr "enlever le marqueur"
 
-#: editor_mouse.cc:2142 editor_mouse.cc:2173 editor_tempodisplay.cc:461
+#: editor_mouse.cc:2165 editor_mouse.cc:2196 editor_tempodisplay.cc:459
 msgid ""
 "programming error: meter marker canvas item has no marker object pointer!"
 msgstr ""
 "erreur de programmation: meter marker canvas item has no marker object "
 "pointer!"
 
-#: editor_mouse.cc:2241
+#: editor_mouse.cc:2264
 #, fuzzy
 msgid "copy meter mark"
 msgstr "déplacer le marqueur de vu-mètre"
 
-#: editor_mouse.cc:2251
+#: editor_mouse.cc:2274
 msgid "move meter mark"
 msgstr "déplacer le marqueur de vu-mètre"
 
-#: editor_mouse.cc:2266 editor_mouse.cc:2299 editor_tempodisplay.cc:327
-#: editor_tempodisplay.cc:411 editor_tempodisplay.cc:430
+#: editor_mouse.cc:2289 editor_mouse.cc:2322 editor_tempodisplay.cc:331
+#: editor_tempodisplay.cc:409 editor_tempodisplay.cc:428
 msgid ""
 "programming error: tempo marker canvas item has no marker object pointer!"
 msgstr ""
 "erreur de programmation : objet canvas de marqueur de tempo sans pointeur "
 "d'objet marqueur !"
 
-#: editor_mouse.cc:2271 editor_mouse.cc:2304 editor_tempodisplay.cc:332
-#: editor_tempodisplay.cc:416
+#: editor_mouse.cc:2294 editor_mouse.cc:2327 editor_tempodisplay.cc:336
+#: editor_tempodisplay.cc:414
 msgid "programming error: marker for tempo is not a tempo marker!"
 msgstr ""
 "erreur de programmation : le marqueur du tempo n'est pas un marqueur de "
 "tempo !"
 
-#: editor_mouse.cc:2371
+#: editor_mouse.cc:2394
 #, fuzzy
 msgid "copy tempo mark"
 msgstr "déplacer le marqueur de tempo"
 
-#: editor_mouse.cc:2381
+#: editor_mouse.cc:2404
 msgid "move tempo mark"
 msgstr "déplacer le marqueur de tempo"
 
-#: editor_mouse.cc:2395 editor_mouse.cc:2414 editor_mouse.cc:2427
+#: editor_mouse.cc:2418 editor_mouse.cc:2437 editor_mouse.cc:2450
 msgid ""
 "programming error: control point canvas item has no control point object "
 "pointer!"
@@ -3842,92 +3821,93 @@ msgstr ""
 "erreur de programmation : point de contrôle de l'objet canvas sans pointeur "
 "d'objet point de contrôle !"
 
-#: editor_mouse.cc:2525
+#: editor_mouse.cc:2555
 msgid "programming error: line canvas item has no line pointer!"
 msgstr ""
 "erreur de programmation : objet canvas de ligne sans pointeur de ligne !"
 
-#: editor_mouse.cc:2634
+#: editor_mouse.cc:2664
 #, fuzzy
 msgid "move region(s)"
 msgstr "enlever la région"
 
-#. this is committed in the grab finished callback.
-#: editor_mouse.cc:2646
-msgid "Drag region copy"
-msgstr "Déplacer la copie de la région"
-
-#: editor_mouse.cc:2758
+#: editor_mouse.cc:2727
 #, fuzzy
 msgid "Drag region brush"
 msgstr "Déplacer la/les région(s)"
 
+#. don't copy again
+#. this is committed in the grab finished callback.
+#: editor_mouse.cc:2751
+msgid "Drag region copy"
+msgstr "Déplacer la copie de la région"
+
 #. A selection grab currently creates two undo/redo operations, one for
 #. creating the new region and another for moving it.
 #.
-#: editor_mouse.cc:3574
+#: editor_mouse.cc:3609
 #, fuzzy
 msgid "selection grab"
 msgstr "attraper la sélection"
 
-#: editor_mouse.cc:3615
+#: editor_mouse.cc:3650
 #, fuzzy
 msgid "cancel selection"
 msgstr "sélection d'intervalle"
 
-#: editor_mouse.cc:3722
+#: editor_mouse.cc:3760
 msgid "range selection"
 msgstr "sélection d'intervalle"
 
-#: editor_mouse.cc:3738
+#: editor_mouse.cc:3776
 msgid "trim selection start"
 msgstr "élaguer le début de la sélection"
 
-#: editor_mouse.cc:3754
+#: editor_mouse.cc:3792
 msgid "trim selection end"
 msgstr "élaguer la fin de la sélection"
 
-#: editor_mouse.cc:3771
+#: editor_mouse.cc:3809
 msgid "move selection"
 msgstr "déplacer la sélection"
 
-#: editor_mouse.cc:4157
+#: editor_mouse.cc:4195
 msgid "Start point trim"
 msgstr "Point de départ d'élaguage"
 
-#: editor_mouse.cc:4185
+#: editor_mouse.cc:4223
 msgid "End point trim"
 msgstr "Point de fin d'élaguage"
 
-#: editor_mouse.cc:4224
+#: editor_mouse.cc:4262
 msgid "trimmed region"
 msgstr "région élaguée"
 
-#: editor_mouse.cc:4363
+#: editor_mouse.cc:4400
 msgid "new range marker"
 msgstr "nouveau marqueur d'intervalle"
 
-#: editor_mouse.cc:4578
+#: editor_mouse.cc:4642
 msgid "select regions"
 msgstr "sélectionner les régions"
 
-#: editor_mouse.cc:4607
+#: editor_mouse.cc:4671
 msgid "Name for region:"
 msgstr "Nom de la région :"
 
-#: editor_mouse.cc:4671
+#: editor_mouse.cc:4735
 msgid "timestretch"
 msgstr "déformation temporelle"
 
-#: editor_ops.cc:132
+#: editor_ops.cc:195
 msgid "split"
 msgstr "séparer"
 
-#: editor_ops.cc:168
+#: editor_ops.cc:231
 msgid "remove region"
 msgstr "enlever la région"
 
-#: editor_ops.cc:187
+#: editor_ops.cc:250
 msgid ""
 " This is destructive, will possibly delete audio files\n"
 "It cannot be undone\n"
@@ -3937,229 +3917,229 @@ msgstr ""
 "Cela ne pourra être annulé\n"
 "Voulez-vous vraiment détruire %1 ?"
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 msgid "these regions"
 msgstr "ces régions"
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 msgid "this region"
 msgstr "cette région"
 
-#: editor_ops.cc:193 editor_ops.cc:3229 route_ui.cc:700
-#: visual_time_axis.cc:277
+#: editor_ops.cc:256 editor_ops.cc:3318 route_ui.cc:707
+#: visual_time_axis.cc:278
 msgid "No, do nothing."
 msgstr "Non, ne rien faire."
 
-#: editor_ops.cc:196
+#: editor_ops.cc:259
 msgid "Yes, destroy them."
 msgstr "Oui, les détruire."
 
-#: editor_ops.cc:198 editor_ops.cc:3230
+#: editor_ops.cc:261 editor_ops.cc:3319
 msgid "Yes, destroy it."
 msgstr "Oui, la supprimer."
 
-#: editor_ops.cc:289 editor_ops.cc:317
+#: editor_ops.cc:352 editor_ops.cc:380
 msgid "extend selection"
 msgstr "étendre la sélection"
 
-#: editor_ops.cc:333 editor_ops.cc:367 editor_ops.cc:411 editor_ops.cc:437
+#: editor_ops.cc:396 editor_ops.cc:430 editor_ops.cc:474 editor_ops.cc:500
 msgid "nudge forward"
 msgstr "décaler vers l'avant"
 
-#: editor_ops.cc:501
+#: editor_ops.cc:564
 msgid "build_region_boundary_cache called with snap_type = %1"
 msgstr "build_region_boundary_cache appelé avec snap_type = %1"
 
-#: editor_ops.cc:1354
+#: editor_ops.cc:1420
 #, fuzzy
 msgid "select all within"
 msgstr "Tout sélectionner"
 
-#: editor_ops.cc:1380
+#: editor_ops.cc:1452
 #, fuzzy
 msgid "set selection from region"
 msgstr "définir la sélection à partir de l'intervalle"
 
-#: editor_ops.cc:1413
+#: editor_ops.cc:1485
 msgid "set selection from range"
 msgstr "définir la sélection à partir de l'intervalle"
 
-#: editor_ops.cc:1443
+#: editor_ops.cc:1515
 #, fuzzy
 msgid "select all from range"
 msgstr "sélectionner la plage de zoom"
 
-#: editor_ops.cc:1465
+#: editor_ops.cc:1537
 #, fuzzy
 msgid "select all from punch"
 msgstr "Tout sélectionner"
 
-#: editor_ops.cc:1487
+#: editor_ops.cc:1559
 #, fuzzy
 msgid "select all from loop"
 msgstr "Tout sélectionner"
 
-#: editor_ops.cc:1501
+#: editor_ops.cc:1573
 #, fuzzy
 msgid "select all after cursor"
 msgstr "Coller au curseur d'édition"
 
-#: editor_ops.cc:1506
+#: editor_ops.cc:1578
 #, fuzzy
 msgid "select all before cursor"
 msgstr "définir la synchro. au curseur d'édition"
 
-#: editor_ops.cc:1536
+#: editor_ops.cc:1608
 #, fuzzy
 msgid "select all between cursors"
 msgstr "définir la synchro. au curseur d'édition"
 
-#: editor_ops.cc:1667
+#: editor_ops.cc:1739
 msgid "clear markers"
 msgstr "effacer les marqueurs"
 
-#: editor_ops.cc:1679
+#: editor_ops.cc:1751
 msgid "clear ranges"
 msgstr "effacer les intervalles"
 
-#: editor_ops.cc:1698
+#: editor_ops.cc:1770
 msgid "clear locations"
 msgstr "effacer les emplacements"
 
-#: editor_ops.cc:1748
+#: editor_ops.cc:1820
 msgid "insert dragged region"
 msgstr "insérer la région déplacée"
 
-#: editor_ops.cc:1784
+#: editor_ops.cc:1856
 msgid "insert region"
 msgstr "insérer une région"
 
-#: editor_ops.cc:1975 io_selector.cc:57 io_selector.cc:791
+#: editor_ops.cc:2047 io_selector.cc:58 io_selector.cc:792
 msgid "OK"
 msgstr "OK"
 
-#: editor_ops.cc:1982
+#: editor_ops.cc:2054
 msgid "ardour: rename region"
 msgstr "ardour : renommer la région"
 
-#: editor_ops.cc:2205 editor_ops.cc:2254
+#: editor_ops.cc:2277 editor_ops.cc:2326
 msgid "separate"
 msgstr "séparer"
 
-#: editor_ops.cc:2316
+#: editor_ops.cc:2388
 msgid "trim to selection"
 msgstr "élaguer selon la sélection"
 
-#: editor_ops.cc:2356
+#: editor_ops.cc:2428
 msgid "region fill"
 msgstr "remplissage de la région"
 
-#: editor_ops.cc:2415
+#: editor_ops.cc:2487
 msgid "fill selection"
 msgstr "remplir la sélection"
 
-#: editor_ops.cc:2436
+#: editor_ops.cc:2508
 #, fuzzy
 msgid "Programming error. that region doesn't cover that position"
 msgstr ""
 "erreur de programmation : la carte d'emplacements/marqueurs ne contient pas "
 "d'emplacements !"
 
-#: editor_ops.cc:2439
+#: editor_ops.cc:2511
 #, fuzzy
 msgid "set region sync position"
 msgstr "Régions/position"
 
-#: editor_ops.cc:2454
+#: editor_ops.cc:2526
 msgid "Place the edit cursor at the desired sync point"
 msgstr "Placer le curseur d'édition au point de synchro. désiré"
 
-#: editor_ops.cc:2459
+#: editor_ops.cc:2531
 msgid "set sync from edit cursor"
 msgstr "définir la synchro. au curseur d'édition"
 
-#: editor_ops.cc:2471
+#: editor_ops.cc:2543
 msgid "remove sync"
 msgstr "enlever la synchro."
 
-#: editor_ops.cc:2485
+#: editor_ops.cc:2557
 msgid "naturalize"
 msgstr "normaliser"
 
-#: editor_ops.cc:2549
+#: editor_ops.cc:2621
 msgid "align selection (relative)"
 msgstr "Aligner la sélection (relativement)"
 
-#: editor_ops.cc:2577
+#: editor_ops.cc:2649
 msgid "align selection"
 msgstr "aligner la sélection"
 
-#: editor_ops.cc:2589
+#: editor_ops.cc:2661
 msgid "align region"
 msgstr "aligner la région"
 
-#: editor_ops.cc:2636 editor_ops.cc:2661
+#: editor_ops.cc:2708 editor_ops.cc:2733
 #, fuzzy
 msgid "trim to edit"
 msgstr "élaguer to edit"
 
-#: editor_ops.cc:2712
+#: editor_ops.cc:2784
 #, fuzzy
 msgid "ardour: freeze"
 msgstr "ardour :"
 
-#: editor_ops.cc:2717
+#: editor_ops.cc:2789
 #, fuzzy
 msgid "Cancel Freeze"
 msgstr "Annuler"
 
-#: editor_ops.cc:2754
+#: editor_ops.cc:2826
 #, fuzzy
 msgid "bounce range"
 msgstr "bounce intervalle"
 
-#: editor_ops.cc:2807
+#: editor_ops.cc:2879
 msgid "cut"
 msgstr "couper"
 
-#: editor_ops.cc:2810
+#: editor_ops.cc:2882
 msgid "copy"
 msgstr "copier"
 
-#: editor_ops.cc:2823
+#: editor_ops.cc:2895
 msgid " objects"
 msgstr " objets"
 
-#: editor_ops.cc:2849
+#: editor_ops.cc:2921
 msgid " range"
 msgstr " intervalle"
 
-#: editor_ops.cc:3006
+#: editor_ops.cc:3078
 msgid "paste"
 msgstr "coller"
 
-#: editor_ops.cc:3044
+#: editor_ops.cc:3116
 msgid "paste chunk"
 msgstr "coller le fragment"
 
 #. clear (below) will clear the argument list
-#: editor_ops.cc:3085
+#: editor_ops.cc:3157
 msgid "duplicate region"
 msgstr "dupliquer la région"
 
-#: editor_ops.cc:3130
+#: editor_ops.cc:3202
 msgid "duplicate selection"
 msgstr "dupliquer la sélection"
 
-#: editor_ops.cc:3170
+#: editor_ops.cc:3259
 msgid "clear playlist"
 msgstr "effacer la liste de lecture"
 
-#: editor_ops.cc:3199
+#: editor_ops.cc:3288
 msgid "nudge track"
 msgstr "décaler la piste"
 
-#: editor_ops.cc:3226
+#: editor_ops.cc:3315
 msgid ""
 "Do you really want to destroy the last capture?\n"
 "(This is destructive and cannot be undone)"
@@ -4167,159 +4147,156 @@ msgstr ""
 "Voulez-vous vraiment supprimer la dernière capture ?\n"
 "(cette opération est destructive et ne pourra pas être annulée)"
 
-#: editor_ops.cc:3254
+#: editor_ops.cc:3343
 msgid "normalize"
 msgstr "normaliser"
 
-#: editor_ops.cc:3301
+#: editor_ops.cc:3390
 msgid "reverse regions"
 msgstr "inverser les régions"
 
-#: editor_region_list.cc:93 editor_region_list.cc:98 editor_region_list.cc:101
-#: location_ui.cc:55
+#: editor_region_list.cc:98 editor_region_list.cc:103
+#: editor_region_list.cc:106 location_ui.cc:56
 msgid "Hidden"
 msgstr "Caché"
 
 #. added a new fresh one at the end
-#: editor_route_list.cc:101 editor_route_list.cc:102 editor_route_list.cc:246
+#: editor_route_list.cc:102 editor_route_list.cc:103 editor_route_list.cc:247
 msgid "editor"
 msgstr "éditeur"
 
-#: editor_route_list.cc:309 mixer_ui.cc:695
+#: editor_route_list.cc:310 mixer_ui.cc:699
 msgid "Show All"
 msgstr "Tout montrer"
 
-#: editor_route_list.cc:310 mixer_ui.cc:696
+#: editor_route_list.cc:311 mixer_ui.cc:700
 msgid "Hide All"
 msgstr "Tout cacher"
 
-#: editor_route_list.cc:311 mixer_ui.cc:697
+#: editor_route_list.cc:312 mixer_ui.cc:701
 #, fuzzy
 msgid "Show All Audio Tracks"
 msgstr "Montrer tous les BusAudio"
 
-#: editor_route_list.cc:312 mixer_ui.cc:698
+#: editor_route_list.cc:313 mixer_ui.cc:702
 #, fuzzy
 msgid "Hide All Audio Tracks"
 msgstr "Cacher tous les BusAudio"
 
-#: editor_route_list.cc:313 mixer_ui.cc:699
+#: editor_route_list.cc:314 mixer_ui.cc:703
 #, fuzzy
 msgid "Show All Audio Busses"
 msgstr "Montrer tous les BusAudio"
 
-#: editor_route_list.cc:314 mixer_ui.cc:700
+#: editor_route_list.cc:315 mixer_ui.cc:704
 #, fuzzy
 msgid "Hide All Audio Busses"
 msgstr "Cacher tous les BusAudio"
 
-#: editor_rulers.cc:311
+#: editor_rulers.cc:312
 msgid "New location marker"
 msgstr "Nouveau marqueur d'emplacement"
 
-#: editor_rulers.cc:312
+#: editor_rulers.cc:313
 msgid "Clear all locations"
 msgstr "Effacer tous les emplacements"
 
 #. ruler_items.push_back (MenuElem (_("New Range")));
-#: editor_rulers.cc:317
+#: editor_rulers.cc:318
 msgid "Clear all ranges"
 msgstr "Effacer tous les intervalles"
 
-#: editor_rulers.cc:326
+#: editor_rulers.cc:327
 msgid "New Tempo"
 msgstr "Nouveau tempo"
 
-#: editor_rulers.cc:327
+#: editor_rulers.cc:328
 msgid "Clear tempo"
 msgstr "Effacer le tempo"
 
-#: editor_rulers.cc:332
+#: editor_rulers.cc:333
 msgid "New Meter"
 msgstr "Nouveau vu-mètre"
 
-#: editor_rulers.cc:333
+#: editor_rulers.cc:334
 msgid "Clear meter"
 msgstr "Effacer les vu-mètre"
 
-#: editor_rulers.cc:341
+#: editor_rulers.cc:342
 msgid "Min:Secs"
 msgstr "Mins:Secs"
 
-#: editor_selection_list.cc:110
+#: editor_selection_list.cc:108
 #, fuzzy
 msgid "Name for Chunk:"
 msgstr "nom du fragment :"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 #, fuzzy
 msgid "Create Chunk"
 msgstr "Créer un fragment"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 msgid "Forget it"
 msgstr "Oublier"
 
-#: editor_tempodisplay.cc:249 editor_tempodisplay.cc:289
+#: editor_tempodisplay.cc:253 editor_tempodisplay.cc:293
 msgid "add"
 msgstr "ajouter"
 
-#: editor_tempodisplay.cc:271
+#: editor_tempodisplay.cc:275
 msgid "add tempo mark"
 msgstr "ajouter un marqueur de tempo"
 
-#: editor_tempodisplay.cc:311
+#: editor_tempodisplay.cc:315
 msgid "add meter mark"
 msgstr "ajouter un marqueur de vu-mètre"
 
-#: editor_tempodisplay.cc:344 editor_tempodisplay.cc:375
+#: editor_tempodisplay.cc:348 editor_tempodisplay.cc:376
 msgid "done"
 msgstr "terminé"
 
-#: editor_tempodisplay.cc:365 editor_tempodisplay.cc:396
+#: editor_tempodisplay.cc:366 editor_tempodisplay.cc:394
 msgid "replace tempo mark"
 msgstr "remplacer le marqueur de tempo"
 
-#: editor_tempodisplay.cc:435 editor_tempodisplay.cc:466
+#: editor_tempodisplay.cc:433 editor_tempodisplay.cc:464
 msgid "programming error: marker for meter is not a meter marker!"
 msgstr "erreur de programmation : marker for meter is not a meter marker!"
 
-#: editor_tempodisplay.cc:445 editor_tempodisplay.cc:478
+#: editor_tempodisplay.cc:443 editor_tempodisplay.cc:476
 msgid "remove tempo mark"
 msgstr "enlever le marqueur de tempo"
 
-#: editor_timefx.cc:50
+#: editor_timefx.cc:51
 msgid "Quick but Ugly"
 msgstr "Rapide mais sale"
 
-#: editor_timefx.cc:51
+#: editor_timefx.cc:52
 msgid "Skip Anti-aliasing"
 msgstr "Sauter l'anti-crénelage"
 
-#: editor_timefx.cc:53
-msgid "Stretch/Shrink it"
-msgstr "Étirer/Rétrécir"
-
-#: editor_timefx.cc:57
+#: editor_timefx.cc:56
 msgid "ardour: timestretch"
 msgstr "ardour : déformation temporelle"
 
-#: editor_timefx.cc:58
+#: editor_timefx.cc:57
 msgid "TimeStretchDialog"
 msgstr "TimeStretchDialog"
 
-#: editor_timefx.cc:80 editor_timefx.cc:81 editor_timefx.cc:82
-#: editor_timefx.cc:83
+#: editor_timefx.cc:70
+msgid "Stretch/Shrink it"
+msgstr "Étirer/Rétrécir"
+
+#: editor_timefx.cc:73 editor_timefx.cc:74
 msgid "TimeStretchButton"
 msgstr "TimeStretchButton"
 
-#: editor_timefx.cc:84
+#: editor_timefx.cc:75
 msgid "TimeStretchProgress"
 msgstr "TimeStretchProgress"
 
-#. GTK2FIX
-#. current_timestretch->close ();
-#: editor_timefx.cc:153
+#: editor_timefx.cc:139
 msgid "timestretch cannot be started - thread creation error"
 msgstr ""
 
@@ -4454,7 +4431,7 @@ msgstr ""
 msgid "Export to File"
 msgstr "Exporter sur CD"
 
-#: export_dialog.cc:113 option_editor.cc:82 option_editor.cc:83
+#: export_dialog.cc:113 option_editor.cc:83 option_editor.cc:84
 msgid "Browse"
 msgstr "Parcourir"
 
@@ -4470,7 +4447,8 @@ msgstr "ardour : exporter"
 msgid "ardour_export"
 msgstr "ardour_exporter"
 
-#: export_dialog.cc:139 export_dialog.cc:155
+#: export_dialog.cc:139 export_dialog.cc:155 mixer_strip.cc:124
+#: mixer_strip.cc:767
 msgid "Output"
 msgstr "Sortie"
 
@@ -4507,145 +4485,76 @@ msgstr ""
 msgid "File already exists, do you want to overwrite it?"
 msgstr ""
 
-#: export_dialog.cc:1159 export_range_markers_dialog.cc:154
+#: export_dialog.cc:1159 export_range_markers_dialog.cc:153
 msgid "Cannot write file in: "
 msgstr ""
 
 #. warning dialog
-#: export_range_markers_dialog.cc:136
+#: export_range_markers_dialog.cc:135
 msgid "Please enter a valid target directory."
 msgstr ""
 
-#: export_range_markers_dialog.cc:144
+#: export_range_markers_dialog.cc:143
 msgid ""
 "Please select an existing target directory. Files\n"
 "are not allowed!"
 msgstr ""
 
-#: gain_automation_time_axis.cc:61
+#: gain_automation_time_axis.cc:62
 #, fuzzy
 msgid "add gain automation event"
 msgstr "ajouter les évènements d'automatisation à "
 
-#: gain_meter.cc:66
+#: gain_meter.cc:67
 msgid "cannot find images for fader slider"
 msgstr ""
 
-#: gain_meter.cc:73
+#: gain_meter.cc:74
 msgid "cannot find images for fader rail"
 msgstr ""
 
-#: gain_meter.cc:88
-msgid "dbFS"
-msgstr ""
-
-#: gain_meter.cc:89 gain_meter.cc:143 gain_meter.cc:704
-msgid "pre"
-msgstr ""
-
-#: gain_meter.cc:139 gain_meter.cc:700
-#, fuzzy
-msgid "input"
-msgstr "entrée %1"
-
-#: gain_meter.cc:147 gain_meter.cc:708
-#, fuzzy
-msgid "post"
-msgstr "port"
-
-#. TRANSLATORS: this string should be longest of the strings
-#. used to describe meter points. In english, its "input".
-#.
-#: gain_meter.cc:155
-msgid "tupni"
-msgstr ""
-
-#: gain_meter.cc:174 gain_meter.cc:458 gain_meter.cc:480 gain_meter.cc:525
+#: gain_meter.cc:130 gain_meter.cc:339 gain_meter.cc:494 gain_meter.cc:539
 #, fuzzy
 msgid "-inf"
 msgstr "entrée"
 
-#: glade/new_session_dialog.glade.h:1
+#: gain_meter.cc:140
 #, fuzzy
-msgid "<b>Advanced</b>"
-msgstr "Avancé..."
-
-#: glade/new_session_dialog.glade.h:2
-msgid "<b>Input</b>"
-msgstr ""
+msgid "Fader automation mode"
+msgstr "mode d'automatisation de panoramique"
 
-#: glade/new_session_dialog.glade.h:3
+#: gain_meter.cc:141
 #, fuzzy
-msgid "<b>Output</b>"
-msgstr "Sortie"
+msgid "Fader automation type"
+msgstr "Type d'automatisation de panoramique"
 
-#: glade/new_session_dialog.glade.h:4
+#. XXX it might different in different languages
+#: gain_meter.cc:182 gain_meter.cc:817 panner_ui.cc:99 panner_ui.cc:807
 #, fuzzy
-msgid "Automatically connect inputs"
-msgstr "connecter les entrées de piste aux ports physiques automatiquement"
+msgid "Abs"
+msgstr "abs"
 
-#: glade/new_session_dialog.glade.h:5
+#: gain_meter.cc:472
 #, fuzzy
-msgid "Automatically connect outputs"
-msgstr "connecter les sorties de piste manuellement"
+msgid "-Inf"
+msgstr "entrée"
 
-#: glade/new_session_dialog.glade.h:6
+#: gain_meter.cc:781 mixer_strip.cc:770 panner_ui.cc:771
 #, fuzzy
-msgid "Channel Count"
-msgstr "Annuler l'importation"
+msgid "O"
+msgstr "OU"
 
-#: glade/new_session_dialog.glade.h:7
-msgid "Connect to Master Bus"
+#: gain_meter.cc:784 panner_ui.cc:774
+msgid "P"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:8
-msgid "Connect to physical outputs"
+#: gain_meter.cc:787 panner_ui.cc:777
+msgid "T"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:9
-#, fuzzy
-msgid "Create Control Bus"
-msgstr "Sorties de contrôle"
-
-#: glade/new_session_dialog.glade.h:10
-#, fuzzy
-msgid "Create Master Bus"
-msgstr "utiliser les sorties maître"
-
-#: glade/new_session_dialog.glade.h:11
-#, fuzzy
-msgid "New Session"
-msgstr "Session"
-
-#: glade/new_session_dialog.glade.h:12
-#, fuzzy
-msgid "Open Recent Session"
-msgstr "ouvrir session"
-
-#: glade/new_session_dialog.glade.h:13
-#, fuzzy
-msgid "Open Session"
-msgstr "ouvrir session"
-
-#: glade/new_session_dialog.glade.h:14
-#, fuzzy
-msgid "Port limit"
-msgstr "Oublier"
-
-#: glade/new_session_dialog.glade.h:15
-#, fuzzy
-msgid "Select a File"
-msgstr "Tout sélectionner"
-
-#: glade/new_session_dialog.glade.h:16
-#, fuzzy
-msgid "Select a Session"
-msgstr "sélectionner les régions"
-
-#: glade/new_session_dialog.glade.h:17
-#, fuzzy
-msgid "Track/Bus connection options"
-msgstr "Inspecteur de pistes/bus"
+#: gain_meter.cc:790 panner_ui.cc:780
+msgid "W"
+msgstr ""
 
 #: gtk-custom-ruler.c:126
 #, fuzzy
@@ -4692,113 +4601,113 @@ msgid "Draw current ruler position"
 msgstr ""
 
 #. end-of-file, other end closed or shutdown?
-#: imageframe_socket_handler.cc:126
+#: imageframe_socket_handler.cc:127
 msgid "Image Compositor Socket has been shutdown/closed"
 msgstr "La socket du compositeur d'image a été arrêtée/fermée"
 
-#: imageframe_time_axis.cc:287
+#: imageframe_time_axis.cc:286
 msgid "0.5 seconds"
 msgstr "0.5 secondes"
 
-#: imageframe_time_axis.cc:288 marker_time_axis.cc:241
+#: imageframe_time_axis.cc:287 marker_time_axis.cc:242
 msgid "1 seconds"
 msgstr "1 seconde"
 
-#: imageframe_time_axis.cc:289 marker_time_axis.cc:242
+#: imageframe_time_axis.cc:288 marker_time_axis.cc:243
 msgid "1.5 seconds"
 msgstr "1.5 secondes"
 
-#: imageframe_time_axis.cc:290 marker_time_axis.cc:243
+#: imageframe_time_axis.cc:289 marker_time_axis.cc:244
 msgid "2 seconds"
 msgstr "2 secondes"
 
-#: imageframe_time_axis.cc:291 marker_time_axis.cc:244
+#: imageframe_time_axis.cc:290 marker_time_axis.cc:245
 msgid "2.5 seconds"
 msgstr "2.5 secondes"
 
-#: imageframe_time_axis.cc:292 marker_time_axis.cc:245
+#: imageframe_time_axis.cc:291 marker_time_axis.cc:246
 msgid "3 seconds"
 msgstr "3 secondes"
 
 #. duration_items.push_back(SeparatorElem()) ;
 #. duration_items.push_back(MenuElem (_("custom"), mem_fun(*this, &ImageFrameTimeAxis::set_marker_duration_custom))) ;
-#: imageframe_time_axis.cc:297 marker_time_axis.cc:250
+#: imageframe_time_axis.cc:296 marker_time_axis.cc:251
 msgid "Duration (sec)"
 msgstr "Durée (s)"
 
-#: imageframe_time_axis.cc:302
+#: imageframe_time_axis.cc:301
 msgid "Remove Frame"
 msgstr "Enlever une trame"
 
-#: imageframe_time_axis.cc:305
+#: imageframe_time_axis.cc:304
 msgid "Image Frame"
 msgstr "Trame d'image"
 
-#: imageframe_time_axis.cc:306 marker_time_axis.cc:256
+#: imageframe_time_axis.cc:305 marker_time_axis.cc:257
 msgid "Rename Track"
 msgstr "Renommer la piste"
 
-#: io_selector.cc:59 io_selector.cc:793
+#: io_selector.cc:60 io_selector.cc:794
 msgid "Rescan"
 msgstr "Rafraîchir"
 
-#: io_selector.cc:67
+#: io_selector.cc:68
 msgid "%1 input"
 msgstr "entrée %1"
 
-#: io_selector.cc:69
+#: io_selector.cc:70
 msgid "%1 output"
 msgstr "sortie %1"
 
-#: io_selector.cc:141 route_params_ui.cc:106
+#: io_selector.cc:142 route_params_ui.cc:107
 msgid "Inputs"
 msgstr "Entrées"
 
-#: io_selector.cc:141 route_params_ui.cc:107
+#: io_selector.cc:142 route_params_ui.cc:108
 msgid "Outputs"
 msgstr "Sorties"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 msgid "Add Input"
 msgstr "Ajouter une entrée"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 msgid "Add Output"
 msgstr "Ajouter une sortie"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 msgid "Remove Input"
 msgstr "Enlever une entrée"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 msgid "Remove Output"
 msgstr "Enlever une sortie"
 
-#: io_selector.cc:144
+#: io_selector.cc:145
 msgid "Disconnect All"
 msgstr "Déconnecter tout"
 
-#: io_selector.cc:158
+#: io_selector.cc:159
 msgid "Available connections"
 msgstr "Connexions disponibles"
 
-#: io_selector.cc:554 io_selector.cc:573
+#: io_selector.cc:555 io_selector.cc:574
 msgid "There are no more JACK ports available."
 msgstr "Il n'y a plus de ports JACK disponibles"
 
-#: io_selector.cc:648 io_selector.cc:675 io_selector.cc:728
+#: io_selector.cc:649 io_selector.cc:676 io_selector.cc:729
 msgid "port"
 msgstr "port"
 
-#: io_selector.cc:797
+#: io_selector.cc:798
 msgid "ardour: "
 msgstr "ardour :"
 
-#: keyboard.cc:297
+#: keyboard.cc:299
 msgid "KeyboardTarget: keyname \"%1\" is unknown."
 msgstr "KeyboardTarget : nom de touche \"%1\" inconnue"
 
-#: keyboard.cc:523
+#: keyboard.cc:525
 msgid ""
 "Your system is completely broken - NumLock uses \"%1\"as its modifier. This "
 "is madness - see the man page for xmodmap to find out how to fix this."
@@ -4807,7 +4716,7 @@ msgstr ""
 "utilise \"%1\" comme modificateur. C'est n'importe quoi -- consultez la page "
 "de manuel de xmodmap pour trouver comment réparer ça."
 
-#: keyboard.cc:531
+#: keyboard.cc:533
 msgid ""
 "Your system generates \"%1\" when the NumLock key is pressed. This can cause "
 "problems when editing so Ardour will use %2 to mean Meta rather than %1"
@@ -4816,103 +4725,103 @@ msgstr ""
 "pressée. Cela peut causer des problèmes pendant l'édition, aussi Ardour "
 "utilisera %2 comme touche Meta plutôt que %1"
 
-#: keyboard.cc:592
+#: keyboard.cc:594
 msgid "You have %1 keys bound to \"mod1\""
 msgstr "Vous avez %1 touches affectées à \"mod1\""
 
-#: keyboard.cc:607
+#: keyboard.cc:609
 msgid "You have %1 keys bound to \"mod2\""
 msgstr "Vous avez %1 touches affectées à \"mod2\""
 
-#: keyboard.cc:622
+#: keyboard.cc:624
 msgid "You have %1 keys bound to \"mod3\""
 msgstr "Vous avez %1 touches affectées à \"mod3\""
 
-#: keyboard.cc:637
+#: keyboard.cc:639
 msgid "You have %1 keys bound to \"mod4\""
 msgstr "Vous avez %1 touches affectées à \"mod4\""
 
-#: keyboard.cc:652
+#: keyboard.cc:654
 msgid "You have %1 keys bound to \"mod5\""
 msgstr "Vous avez %1 touches affectées à \"mod5\""
 
-#: location_ui.cc:47 location_ui.cc:50
+#: location_ui.cc:48 location_ui.cc:51
 msgid "Set"
 msgstr "Définir"
 
-#: location_ui.cc:48 location_ui.cc:51
+#: location_ui.cc:49 location_ui.cc:52
 msgid "Go"
 msgstr "Aller"
 
-#: location_ui.cc:54
+#: location_ui.cc:55
 msgid "CD"
 msgstr "CD"
 
-#: location_ui.cc:57
+#: location_ui.cc:58
 msgid "SCMS"
 msgstr "SCMS"
 
-#: location_ui.cc:58
+#: location_ui.cc:59
 msgid "Pre-Emphasis"
 msgstr "Pré-emphase"
 
-#: location_ui.cc:569
+#: location_ui.cc:570
 msgid "Add New Location"
 msgstr "Ajouter un nouvel emplacement"
 
-#: location_ui.cc:570
+#: location_ui.cc:571
 msgid "Add New Range"
 msgstr "Ajouter un nouvel intervalle"
 
-#: location_ui.cc:574
+#: location_ui.cc:575
 msgid "ardour: locations"
 msgstr "ardour : emplacements"
 
-#: location_ui.cc:575
+#: location_ui.cc:576
 msgid "ardour_locations"
 msgstr "ardour_emplacements"
 
-#: location_ui.cc:603
+#: location_ui.cc:604
 #, fuzzy
 msgid "Location (CD Index) Markers"
 msgstr "Marqueurs d'emplacements (Index de CD)"
 
-#: location_ui.cc:623
+#: location_ui.cc:624
 #, fuzzy
 msgid "Range (CD Track) Markers"
 msgstr "Marqueurs d'intervalles (Piste de CD)"
 
-#: location_ui.cc:789
+#: location_ui.cc:790
 msgid "add range marker"
 msgstr "ajouter marqueur d'intervalle"
 
-#: main.cc:71
+#: main.cc:72
 msgid "ardour is killing itself for a clean exit\n"
 msgstr "ardour se termine lui-même pour une sortie propre\n"
 
-#: main.cc:80
+#: main.cc:81
 msgid "stopping user interface\n"
 msgstr "en train d'arrêter l'interface utilisateur\n"
 
 #. XXX its doubtful that snprintf() is async-safe
-#: main.cc:99
+#: main.cc:100
 #, c-format
 msgid "%d(%d): received signal %d\n"
 msgstr "%d(%d) : reçu le signal %d\n"
 
-#: main.cc:185
+#: main.cc:186
 msgid "cannot become new process group leader (%1)"
 msgstr ""
 
-#: main.cc:212
+#: main.cc:213
 msgid "cannot setup signal handling for %1"
 msgstr "impossible d'installer le gestionnaire de signaux pour %1"
 
-#: main.cc:223
+#: main.cc:224
 msgid "cannot set default signal mask (%1)"
 msgstr "impossible de définir le masque de signalisation"
 
-#: main.cc:253
+#: main.cc:254
 #, fuzzy
 msgid ""
 "Without a UI style file, ardour will look strange.\n"
@@ -4921,12 +4830,12 @@ msgstr ""
 "Sans un fichier de style pour son IHM, ardour aura une apparence bizarre.\n"
 "Veuillez faire pointer ARDOUR_UI_RC vers un fichier de style d'IHM valide"
 
-#: main.cc:273
+#: main.cc:276
 #, fuzzy
 msgid "Ardour could not connect to JACK."
 msgstr "Impossible de se reconnecter à JACK"
 
-#: main.cc:277
+#: main.cc:280
 #, fuzzy
 msgid ""
 "There are several possible reasons:\n"
@@ -4946,11 +4855,41 @@ msgstr ""
 "\n"
 "Veuillez étudier les possibilités, et peut-être (re)lancer JACK."
 
-#: main.cc:324
+#: main.cc:310
+msgid "could not load command line session \"%1\""
+msgstr "impossible de charger la session indiqué en ligne de commande \"%1\""
+
+#. it wasn't new, but we require a new session
+#: main.cc:330
+msgid ""
+"\n"
+"\n"
+"A session named \"%1\" already exists.\n"
+"To avoid this message, start ardour as \"ardour %1"
+msgstr ""
+"\n"
+"\n"
+"Une session nommé \"%1\" existe déjà.\n"
+"Pour éviter ce message, lancez ardour comme cela : \"ardour %1"
+
+#: main.cc:341
+msgid ""
+"\n"
+"\n"
+"No session named \"%1\" exists.\n"
+"To create it from the command line, start ardour as \"ardour --new %1"
+msgstr ""
+"\n"
+"\n"
+"Aucune session nommée \"%1\" n'existe.\n"
+"Pour la créer depuis la ligne de commande, lancez ardour comme cela : "
+"\"ardour --new %1"
+
+#: main.cc:405
 msgid "Ardour/GTK "
 msgstr "Ardour/GTK"
 
-#: main.cc:326
+#: main.cc:407
 msgid ""
 "\n"
 "   (built using "
@@ -4958,19 +4897,20 @@ msgstr ""
 "\n"
 "   (fonctionnant avec "
 
-#: main.cc:330
+#: main.cc:411
 msgid " with libardour "
 msgstr " avec libardour "
 
-#: main.cc:335
+#: main.cc:416
 msgid " and GCC version "
 msgstr ""
 
-#: main.cc:345
-msgid "Copyright (C) 1999-2005 Paul Davis"
+#: main.cc:426
+#, fuzzy
+msgid "Copyright (C) 1999-2006 Paul Davis"
 msgstr "Copyright (C) 1999-2005 Paul Davis"
 
-#: main.cc:346
+#: main.cc:427
 msgid ""
 "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker"
@@ -4978,366 +4918,425 @@ msgstr ""
 "Certaines parties Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker"
 
-#: main.cc:348
+#: main.cc:429
 msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
 msgstr "Ardour est distribué sans AUCUNE GARANTIE"
 
-#: main.cc:349
+#: main.cc:430
 msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 msgstr "ni même pour la COMMERCIALISATION ou pour UN BUT PARTICULIER."
 
-#: main.cc:350
+#: main.cc:431
 msgid "This is free software, and you are welcome to redistribute it "
 msgstr "Ceci est un logiciel libre, et vous êtes encouragé à le distribuer "
 
-#: main.cc:351
+#: main.cc:432
 msgid "under certain conditions; see the source for copying conditions."
 msgstr ""
 "sous certaines conditions ; voir le fichier source pour les conditions de "
 "distribution."
 
-#: main.cc:360
+#: main.cc:441
 msgid "could not create ARDOUR GUI"
 msgstr "impossible de créer l'interface utilisateur d'ARDOUR"
 
-#: main.cc:378
+#: main.cc:459
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr "Impossible de se connecter au serveur JACK en tant que \"%1\""
 
-#: main.cc:381
+#: main.cc:462
 msgid "could not initialize Ardour."
 msgstr "impossible d'initialiser Ardour."
 
-#: main.cc:392
-msgid "could not load command line session \"%1\""
-msgstr "impossible de charger la session indiqué en ligne de commande \"%1\""
-
-#. it wasn't new, but we require a new session
-#: main.cc:412
-msgid ""
-"\n"
-"\n"
-"A session named \"%1\" already exists.\n"
-"To avoid this message, start ardour as \"ardour %1"
-msgstr ""
-"\n"
-"\n"
-"Une session nommé \"%1\" existe déjà.\n"
-"Pour éviter ce message, lancez ardour comme cela : \"ardour %1"
-
-#: main.cc:423
-msgid ""
-"\n"
-"\n"
-"No session named \"%1\" exists.\n"
-"To create it from the command line, start ardour as \"ardour --new %1"
-msgstr ""
-"\n"
-"\n"
-"Aucune session nommée \"%1\" n'existe.\n"
-"Pour la créer depuis la ligne de commande, lancez ardour comme cela : "
-"\"ardour --new %1"
-
 #: marker.cc:244
 #, fuzzy
 msgid "MarkerText"
 msgstr "Marqueur"
 
-#: marker_time_axis.cc:253
+#: marker_time_axis.cc:254
 msgid "Remove Marker"
 msgstr "Enlever les marqueurs"
 
-#: marker_time_axis.cc:255
+#: marker_time_axis.cc:256
 msgid "Marker"
 msgstr "Marqueur"
 
-#: meter_bridge.cc:77
+#: meter_bridge.cc:78
 msgid "ardour: meter bridge"
 msgstr "ardour : bandeau de vu-mètre"
 
-#: meter_bridge.cc:78
+#: meter_bridge.cc:79
 msgid "ardour_meter_bridge"
 msgstr "ardour_bandeau_vu-mètre"
 
-#: meter_bridge_strip.cc:79 meter_bridge_strip.cc:93
+#: meter_bridge_strip.cc:80 meter_bridge_strip.cc:94
 #, c-format
 msgid "# of %u-sample overs"
 msgstr "# de %u-échantillons en dépassement"
 
-#: meter_bridge_strip.cc:221
+#: meter_bridge_strip.cc:222
 #, fuzzy
 msgid "New Name for Meter:"
 msgstr "Nouveau nom du vu-mètre :"
 
-#: mixer_strip.cc:85 mixer_strip.cc:437 region_editor.cc:46
-msgid "mute"
-msgstr "muet"
-
-#: mixer_strip.cc:85 mixer_strip.cc:438
-msgid "solo"
-msgstr "solo"
-
-#: mixer_strip.cc:85 mixer_strip.cc:436
-msgid "RECORD"
-msgstr "ENREGISTRER"
+#: mixer_strip.cc:95 mixer_strip.cc:140 mixer_strip.cc:1227
+msgid "pre"
+msgstr ""
 
-#: mixer_strip.cc:96 mixer_strip.cc:441 mixer_strip.cc:1064
+#: mixer_strip.cc:96 mixer_strip.cc:822
 #, fuzzy
 msgid "Comments"
 msgstr "commentaires"
 
-#: mixer_strip.cc:120 mixer_strip.cc:752
-msgid "INPUT"
-msgstr "ENTRÉE"
-
-#: mixer_strip.cc:125 mixer_strip.cc:773
-msgid "OUTPUT"
-msgstr "SORTIE"
-
-#: mixer_strip.cc:140
-msgid "Pan automation mode"
-msgstr "Mode d'automatisation de panoramique"
-
-#: mixer_strip.cc:141
-msgid "Gain automation mode"
-msgstr "Mode d'automatisation du gain"
-
-#: mixer_strip.cc:143
-msgid "Pan automation type"
-msgstr "Type d'automatisation de panoramique"
-
-#: mixer_strip.cc:144
-msgid "Gain automation type"
-msgstr "dessiner l'automatisation du gain"
-
-#: mixer_strip.cc:183 mixer_strip.cc:195 mixer_strip.cc:913
-msgid "trim"
-msgstr "élaguer"
-
-#. XXX it might different in different languages
-#: mixer_strip.cc:184 mixer_strip.cc:196 mixer_strip.cc:917
-msgid "abs"
-msgstr "abs"
-
-#: mixer_strip.cc:203
-msgid "gain automation mode"
-msgstr "mode d'automatisation du gain"
+#: mixer_strip.cc:119
+#, fuzzy
+msgid "Input"
+msgstr "Entrées"
 
-#: mixer_strip.cc:204
-msgid "pan automation mode"
-msgstr "mode d'automatisation de panoramique"
+#: mixer_strip.cc:136 mixer_strip.cc:1223
+#, fuzzy
+msgid "input"
+msgstr "entrée %1"
 
-#: mixer_strip.cc:205
-msgid "gain automation state"
-msgstr "état de l'automatisation du gain"
+#: mixer_strip.cc:144 mixer_strip.cc:1231
+#, fuzzy
+msgid "post"
+msgstr "port"
 
-#: mixer_strip.cc:206
-msgid "pan automation state"
-msgstr "état de l'automatisation de panoramique"
+#. TRANSLATORS: this string should be longest of the strings
+#. used to describe meter points. In english, its "input".
+#.
+#: mixer_strip.cc:152
+msgid "tupni"
+msgstr ""
 
-#: mixer_strip.cc:223
-msgid "varispeed"
+#: mixer_strip.cc:207
+#, fuzzy
+msgid "Varispeed"
 msgstr "varispeed"
 
-#: mixer_strip.cc:245 mixer_strip.cc:1078
+#: mixer_strip.cc:233 mixer_strip.cc:836
 #, fuzzy
 msgid "Click to Add/Edit Comments"
 msgstr "cliquer pour ajouter/éditer des commentaires"
 
-#: mixer_strip.cc:393
+#: mixer_strip.cc:374
 msgid "unknown strip width \"%1\" in XML GUI information"
 msgstr ""
 "largeur de tranche inconnue \"%1\" dans les données XML de l'interface "
 "utilisateur"
 
-#: mixer_strip.cc:443 mixer_strip.cc:1062
+#: mixer_strip.cc:417
 #, fuzzy
-msgid "*Comments*"
+msgid "record"
+msgstr "Enregistrer"
+
+#: mixer_strip.cc:418 region_editor.cc:47
+msgid "mute"
+msgstr "muet"
+
+#: mixer_strip.cc:419
+msgid "solo"
+msgstr "solo"
+
+#: mixer_strip.cc:422
+#, fuzzy
+msgid "comments"
 msgstr "commentaires"
 
-#: mixer_strip.cc:457
-msgid "REC"
-msgstr "ENR."
+#: mixer_strip.cc:424
+#, fuzzy
+msgid "*comments*"
+msgstr "commentaires"
+
+#: mixer_strip.cc:438
+#, fuzzy
+msgid "Rec"
+msgstr "Rafraîchir"
 
-#: mixer_strip.cc:462 mixer_strip.cc:1072
+#: mixer_strip.cc:439
+msgid "M"
+msgstr ""
+
+#: mixer_strip.cc:440
+msgid "S"
+msgstr ""
+
+#: mixer_strip.cc:443 mixer_strip.cc:830
 #, fuzzy
 msgid "Cmt"
 msgstr "cmt"
 
-#: mixer_strip.cc:464 mixer_strip.cc:1070
+#: mixer_strip.cc:445 mixer_strip.cc:828
 msgid "*Cmt*"
 msgstr ""
 
-#: mixer_strip.cc:503 mixer_strip.cc:562 redirect_box.cc:1004
+#: mixer_strip.cc:483 mixer_strip.cc:549 redirect_box.cc:1006
 msgid "Not connected to JACK - no I/O changes are possible"
 msgstr ""
 
-#: mixer_strip.cc:569
+#: mixer_strip.cc:560
 msgid "Track"
 msgstr "Piste"
 
-#: mixer_strip.cc:593 mixer_strip.cc:609
+#: mixer_strip.cc:588 mixer_strip.cc:604
 msgid "could not register new ports required for that connection"
 msgstr "impossible de définir les nouveaux ports requis pour cette connexion"
 
-#: mixer_strip.cc:755
-msgid "IN"
-msgstr "ENTRÉE"
-
-#: mixer_strip.cc:776
-msgid "OUT"
-msgstr "SORTIE"
+#: mixer_strip.cc:747
+#, fuzzy
+msgid " Input"
+msgstr "# entrées"
 
-#: mixer_strip.cc:884
+#: mixer_strip.cc:750
 #, fuzzy
-msgid "aplay"
-msgstr "aplay"
+msgid "I"
+msgstr "ENTRÉE"
 
-#: mixer_strip.cc:890
+#: mixer_strip.cc:820
 #, fuzzy
-msgid "awrite"
-msgstr "awrite"
+msgid "*Comments*"
+msgstr "commentaires"
 
-#: mixer_strip.cc:1095
+#: mixer_strip.cc:859
 msgid ": comment editor"
 msgstr ": éditeur de commentaires"
 
-#: mixer_strip.cc:1157 mixer_strip.cc:1178
-msgid "no group"
-msgstr "aucun groupe"
+#: mixer_strip.cc:953
+msgid "Grp"
+msgstr ""
 
-#: mixer_strip.cc:1181
+#: mixer_strip.cc:956
 msgid "~G"
 msgstr "~G"
 
-#: mixer_strip.cc:1229
+#: mixer_strip.cc:1004
 #, fuzzy
 msgid "Invert Polarity"
 msgstr "polarité"
 
-#: mixer_ui.cc:84
+#: mixer_ui.cc:85
 msgid "Strips"
 msgstr "Tranches"
 
-#: mixer_ui.cc:108
-msgid "groupname"
-msgstr ""
-
-#: mixer_ui.cc:109 region_editor.cc:48 region_editor.cc:191
-#: region_editor.cc:225
-msgid "active"
-msgstr "actif"
-
-#: mixer_ui.cc:110 region_editor.cc:49
-msgid "visible"
-msgstr "visible"
+#: mixer_ui.cc:110
+#, fuzzy
+msgid "Group"
+msgstr "Groupes de mixage"
 
-#: mixer_ui.cc:207 mixer_ui.cc:366
+#: mixer_ui.cc:211 mixer_ui.cc:370
 msgid "ardour: mixer"
 msgstr "ardour : console de mixage"
 
-#: mixer_ui.cc:208
+#: mixer_ui.cc:212
 msgid "ardour_mixer"
 msgstr "ardour_console_de_mixage"
 
-#: mixer_ui.cc:342
+#: mixer_ui.cc:346
 msgid "ardour: mixer: "
 msgstr "ardour : console de mixage :"
 
-#: mixer_ui.cc:569
+#: mixer_ui.cc:573
 msgid "signal"
 msgstr "signal"
 
-#: mixer_ui.cc:719
+#: mixer_ui.cc:723
 msgid "track display list item for renamed strip not found!"
 msgstr ""
 
-#: option_editor.cc:75
+#: new_session_dialog.cc:39
+#, fuzzy
+msgid "New Session Name :"
+msgstr "Nom de la session :"
+
+#: new_session_dialog.cc:41
+msgid "Create Session Directory In :"
+msgstr ""
+
+#: new_session_dialog.cc:43
+#, fuzzy
+msgid "Use Session Template :"
+msgstr "Modèle de session"
+
+#: new_session_dialog.cc:45
+#, fuzzy
+msgid "Channel Count"
+msgstr "Annuler l'importation"
+
+#: new_session_dialog.cc:46
+#, fuzzy
+msgid "Create Monitor Bus"
+msgstr "Sorties de contrôle"
+
+#: new_session_dialog.cc:53
+#, fuzzy
+msgid "Create Master Bus"
+msgstr "utiliser les sorties maître"
+
+#: new_session_dialog.cc:55
+#, fuzzy
+msgid "Automatically Connect Inputs"
+msgstr "connecter les entrées de piste aux ports physiques automatiquement"
+
+#: new_session_dialog.cc:56 new_session_dialog.cc:67
+#, fuzzy
+msgid "Port Limit"
+msgstr "Oublier"
+
+#: new_session_dialog.cc:64
+#, fuzzy
+msgid "<b>Track/Bus Inputs</b>"
+msgstr "Inspecteur de pistes/bus"
+
+#: new_session_dialog.cc:66
+#, fuzzy
+msgid "Automatically Connect Outputs"
+msgstr "connecter les sorties de piste manuellement"
+
+#: new_session_dialog.cc:75
+msgid "Connect to Master Bus"
+msgstr ""
+
+#: new_session_dialog.cc:76
+msgid "Connect to Physical Outputs"
+msgstr ""
+
+#: new_session_dialog.cc:80
+#, fuzzy
+msgid "<b>Track/Bus Outputs</b>"
+msgstr "Sortie"
+
+#: new_session_dialog.cc:83
+#, fuzzy
+msgid "Advanced Options"
+msgstr "Éditeur d'options"
+
+#: new_session_dialog.cc:91
+#, fuzzy
+msgid "Open Recent Session"
+msgstr "ouvrir session"
+
+#: new_session_dialog.cc:127
+#, fuzzy
+msgid "Open Session File :"
+msgstr "ouvrir session"
+
+#: new_session_dialog.cc:274
+#, fuzzy
+msgid "New Session"
+msgstr "Session"
+
+#: new_session_dialog.cc:276
+#, fuzzy
+msgid "Open Session"
+msgstr "ouvrir session"
+
+#: new_session_dialog.cc:281
+#, fuzzy
+msgid "ardour: session control"
+msgstr "ardour_nouvelle_session"
+
+#: new_session_dialog.cc:310
+#, fuzzy
+msgid "select template"
+msgstr "Pas de modèle"
+
+#: new_session_dialog.cc:316
+#, fuzzy
+msgid "select session file"
+msgstr "sélectionner les régions"
+
+#: new_session_dialog.cc:325
+#, fuzzy
+msgid "select directory"
+msgstr "sélectionner les régions"
+
+#: option_editor.cc:76
 #, fuzzy
 msgid "SMPTE offset is negative"
 msgstr "Décalage SMPTE"
 
-#: option_editor.cc:101
+#: option_editor.cc:102
 msgid "ardour: options editor"
 msgstr "ardour : éditeur d'options"
 
-#: option_editor.cc:102
+#: option_editor.cc:103
 msgid "ardour_option_editor"
 msgstr "ardour_éditeur_d_options"
 
-#: option_editor.cc:126
+#: option_editor.cc:127
 msgid "Paths/Files"
 msgstr "Chemins/Fichiers"
 
-#: option_editor.cc:127
+#: option_editor.cc:128
 msgid "Kbd/Mouse"
 msgstr "Clavier/Souris"
 
-#: option_editor.cc:130
+#: option_editor.cc:131
 msgid "Layers & Fades"
 msgstr "Couches & fondus"
 
-#: option_editor.cc:134
+#: option_editor.cc:135
 msgid "MIDI"
 msgstr "MIDI"
 
-#: option_editor.cc:176
+#: option_editor.cc:177
 msgid "24 FPS"
 msgstr "24 TPS"
 
-#: option_editor.cc:178
+#: option_editor.cc:179
 #, fuzzy
 msgid "25 FPS"
 msgstr "25 TPS"
 
-#: option_editor.cc:180
+#: option_editor.cc:181
 #, fuzzy
 msgid "30 FPS"
 msgstr "30 TPS drop"
 
-#: option_editor.cc:186
+#: option_editor.cc:187
 #, fuzzy
 msgid "30 FPS drop"
 msgstr "30 TPS drop"
 
-#: option_editor.cc:243
+#: option_editor.cc:244
 msgid "session RAID path"
 msgstr "chemin de session RAID"
 
-#: option_editor.cc:248
+#: option_editor.cc:249
 #, fuzzy
 msgid "Soundfile Search Paths"
 msgstr "Bibliothèque audio"
 
-#: option_editor.cc:253
+#: option_editor.cc:254
 #, fuzzy
 msgid "Paths"
 msgstr "Chemins/Fichiers"
 
-#: option_editor.cc:267 option_editor.cc:273 option_editor.cc:724
-#: option_editor.cc:751
+#: option_editor.cc:268 option_editor.cc:274 option_editor.cc:723
+#: option_editor.cc:750
 msgid "internal"
 msgstr "interne"
 
-#: option_editor.cc:286
+#: option_editor.cc:287
 msgid "Short crossfade length (msecs)"
 msgstr "fondu enchaîné court (ms)"
 
-#: option_editor.cc:298
+#: option_editor.cc:299
 #, fuzzy
 msgid "Destructive crossfade length (msecs)"
 msgstr "fondu enchaîné court (ms)"
 
-#: option_editor.cc:366
+#: option_editor.cc:367
 msgid "SMPTE Frames/second"
 msgstr "Trames SMPTE/seconde"
 
-#: option_editor.cc:367
+#: option_editor.cc:368
 msgid "SMPTE Offset"
 msgstr "Décalage SMPTE"
 
-#: option_editor.cc:461 option_editor.cc:468 option_editor.cc:471
-#: option_editor.cc:617
+#: option_editor.cc:462 option_editor.cc:469 option_editor.cc:472
+#: option_editor.cc:618
 #, fuzzy
 msgid "online"
 msgstr "linéaire"
@@ -5345,12 +5344,12 @@ msgstr "linéaire"
 #. remember, we have to handle the i18n case where the relative
 #. lengths of the strings in language N is different than in english.
 #.
-#: option_editor.cc:468 option_editor.cc:469 option_editor.cc:614
+#: option_editor.cc:469 option_editor.cc:470 option_editor.cc:615
 #, fuzzy
 msgid "offline"
 msgstr "linéaire"
 
-#: option_editor.cc:669
+#: option_editor.cc:670
 msgid "Choose Click"
 msgstr ""
 
@@ -5359,15 +5358,15 @@ msgstr ""
 msgid "Choose Click Emphasis"
 msgstr "Utiliser comme emphase de clic"
 
-#: option_editor.cc:804
+#: option_editor.cc:803
 msgid "Click audio file"
 msgstr "Fichier audio de clic"
 
-#: option_editor.cc:810
+#: option_editor.cc:809
 msgid "Click emphasis audiofile"
 msgstr "Fichier audio d'emphase de clic"
 
-#: option_editor.cc:847
+#: option_editor.cc:846
 msgid ""
 "The auditioner is a dedicated mixer strip used\n"
 "for listening to specific regions outside the context\n"
@@ -5379,36 +5378,36 @@ msgstr ""
 "du mixage global. Il peut être connecté tout comme n'importe\n"
 "quelle autre tranche de mixage."
 
-#: option_editor.cc:920
+#: option_editor.cc:919
 msgid "Edit using"
 msgstr "Édition en utilisant"
 
-#: option_editor.cc:927 option_editor.cc:954
+#: option_editor.cc:926 option_editor.cc:953
 msgid "+ button"
 msgstr "touche +"
 
-#: option_editor.cc:947
+#: option_editor.cc:946
 msgid "Delete using"
 msgstr "Effacer en utilisant"
 
-#: option_editor.cc:974
+#: option_editor.cc:973
 msgid "Ignore snap using"
 msgstr "Ignorer clac en utilisant"
 
-#: opts.cc:47
+#: opts.cc:46
 msgid "Usage: "
 msgstr "Usage :"
 
-#: opts.cc:48
+#: opts.cc:47
 msgid "  -v, --version                    Show version information\n"
 msgstr ""
 "  -v, --version                    Montre les informations de version\n"
 
-#: opts.cc:49
+#: opts.cc:48
 msgid "  -h, --help                       Print this message\n"
 msgstr "  -h, --help                       Affiche ce message\n"
 
-#: opts.cc:50
+#: opts.cc:49
 msgid ""
 "  -b, --bindings                   Print all possible keyboard binding "
 "names\n"
@@ -5416,11 +5415,11 @@ msgstr ""
 "  -b, --bindings                   Affiche tous raccourcis clavier "
 "possibles\n"
 
-#: opts.cc:51
+#: opts.cc:50
 msgid "  -n, --show-splash                Show splash screen\n"
 msgstr "  -n, --show-splash                  Afficher l'écran de démarrage\n"
 
-#: opts.cc:52
+#: opts.cc:51
 msgid ""
 "  -c, --name  name                 Use a specific jack client name, default "
 "is ardour\n"
@@ -5428,149 +5427,162 @@ msgstr ""
 "  -c, --name  nom                  Utiliser un nom de client jack "
 "spécifique, la valeur par défaut est ardour\n"
 
-#: opts.cc:53
+#: opts.cc:52
 msgid ""
 "  -N, --new session-name           Create a new session from the command "
 "line\n"
 msgstr "  -N, --new nom-de-session             Nom de la session à charger\n"
 
-#: opts.cc:54
+#: opts.cc:53
 msgid ""
 "  -o, --use-hw-optimizations        Try to use h/w specific optimizations\n"
 msgstr ""
 
-#: opts.cc:56
+#: opts.cc:55
 msgid "  -V, --novst                      Do not use VST support\n"
 msgstr ""
 
-#: opts.cc:58
+#: opts.cc:57
 msgid "  [session-name]                   Name of session to load\n"
 msgstr "  [nom-de-session]                     Nom de la session à charger\n"
 
-#: opts.cc:59
+#: opts.cc:58
 msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
 msgstr ""
 "  -C, --curvetest nom-de-fichier      Débogueur d'algorithme de courbe\n"
 
-#: opts.cc:60
+#: opts.cc:59
 #, fuzzy
 msgid "  -g, --gtktheme                   Allow GTK to load a theme\n"
 msgstr "  -h, --help                       Affiche ce message\n"
 
-#: pan_automation_time_axis.cc:59
+#: pan_automation_time_axis.cc:60
 msgid "You can't graphically edit panning of more than stream"
 msgstr ""
 
-#: pan_automation_time_axis.cc:79
+#: pan_automation_time_axis.cc:80
 #, fuzzy
 msgid "add pan automation event"
 msgstr "ajouter les évènements d'automatisation à "
 
-#: panner2d.cc:588 panner_ui.cc:393 plugin_ui.cc:833
+#: panner2d.cc:589 panner_ui.cc:435 plugin_ui.cc:834
 msgid "Bypass"
 msgstr "Bypass"
 
-#: panner_ui.cc:57 panner_ui.cc:187
+#: panner_ui.cc:58 panner_ui.cc:225
 #, fuzzy
 msgid "link"
 msgstr "entrée"
 
+#: panner_ui.cc:69
+msgid "Pan automation mode"
+msgstr "Mode d'automatisation de panoramique"
+
 #: panner_ui.cc:70
+msgid "Pan automation type"
+msgstr "Type d'automatisation de panoramique"
+
+#: panner_ui.cc:81
 msgid "panning link control"
 msgstr ""
 
-#: panner_ui.cc:72
+#: panner_ui.cc:83
 msgid "panning link direction"
 msgstr ""
 
-#: panner_ui.cc:197
+#: panner_ui.cc:235
 msgid "L"
 msgstr ""
 
-#: panner_ui.cc:296
+#: panner_ui.cc:335
+#, c-format
+msgid "panner for channel %lu"
+msgstr ""
+
+#: panner_ui.cc:337
 #, c-format
 msgid "panner for channel %u"
 msgstr ""
 
-#: panner_ui.cc:403
+#: panner_ui.cc:445
 #, fuzzy
 msgid "Reset all"
 msgstr "Réinitialiser"
 
-#: playlist_selector.cc:51
+#: playlist_selector.cc:52
 #, fuzzy
 msgid "ardour: playlists"
 msgstr "ardour : greffons"
 
-#: playlist_selector.cc:58
+#: playlist_selector.cc:59
 msgid "Playlists grouped by track"
 msgstr ""
 
-#: playlist_selector.cc:97
+#: playlist_selector.cc:98
 #, fuzzy
 msgid "ardour: playlist for "
 msgstr "ardour : éditeur : "
 
-#: playlist_selector.cc:113
+#: playlist_selector.cc:114
 #, fuzzy
 msgid "Other tracks"
 msgstr "décaler la piste"
 
-#: playlist_selector.cc:129
+#: playlist_selector.cc:130
 msgid "unassigned"
 msgstr ""
 
-#: plugin_selector.cc:42
+#: plugin_selector.cc:43
 msgid "ardour: plugins"
 msgstr "ardour : greffons"
 
-#: plugin_selector.cc:55
+#: plugin_selector.cc:56
 #, fuzzy
 msgid "Available LADSPA Plugins"
 msgstr "Greffons LADSPA disponibles"
 
-#: plugin_selector.cc:56
+#: plugin_selector.cc:57
 msgid "Type"
 msgstr "Type"
 
-#: plugin_selector.cc:57 plugin_selector.cc:80
+#: plugin_selector.cc:58 plugin_selector.cc:81
 msgid "# Inputs"
 msgstr "# entrées"
 
-#: plugin_selector.cc:58 plugin_selector.cc:81
+#: plugin_selector.cc:59 plugin_selector.cc:82
 msgid "# Outputs"
 msgstr "# sorties"
 
-#: plugin_selector.cc:67
+#: plugin_selector.cc:68
 msgid "Plugins to be Connected to Insert"
 msgstr ""
 
-#: plugin_selector.cc:79
+#: plugin_selector.cc:80
 #, fuzzy
 msgid "Available plugins"
 msgstr "Greffons VST disponibles"
 
-#: plugin_selector.cc:97
+#: plugin_selector.cc:98
 msgid "Add a plugin to the effect list"
 msgstr "Ajouter un greffon à la liste d'effets"
 
-#: plugin_selector.cc:99
+#: plugin_selector.cc:102
 msgid "Remove a plugin from the effect list"
 msgstr "Retirer un greffon à la liste d'effets"
 
-#: plugin_selector.cc:101
+#: plugin_selector.cc:104
 msgid "Update available plugins"
 msgstr "Rafraîchir les greffons disponibles"
 
-#: plugin_selector.cc:123
+#: plugin_selector.cc:126
 msgid "LADSPA"
 msgstr "LADSPA"
 
-#: plugin_selector.cc:126
+#: plugin_selector.cc:129
 msgid "VST"
 msgstr "VST"
 
-#: plugin_ui.cc:83
+#: plugin_ui.cc:84
 msgid ""
 "unknown type of editor-supplying plugin (note: no VST support in this "
 "version of ardour)"
@@ -5578,53 +5590,54 @@ msgstr ""
 "type de greffon éditeur inconnu (note : pas de support VST dans cette "
 "version d'ardour)"
 
-#: plugin_ui.cc:138
+#: plugin_ui.cc:139
 msgid "<span size=\"large\">Presets</span>"
 msgstr ""
 
-#: plugin_ui.cc:229
+#: plugin_ui.cc:230
 #, fuzzy
 msgid "Controls"
 msgstr "Sorties de contrôle"
 
-#: plugin_ui.cc:266
+#: plugin_ui.cc:267
 msgid "Plugin Editor: could not build control element for port %1"
 msgstr ""
 "Éditeur de greffon : impossible de construire l'élément de contrôle pour le "
 "port %1"
 
-#: plugin_ui.cc:357
-msgid "automation control"
+#: plugin_ui.cc:358
+#, fuzzy
+msgid "Automation control"
 msgstr "contrôle d'automatisation"
 
-#: plugin_ui.cc:853
+#: plugin_ui.cc:854
 #, fuzzy
 msgid "Plugin preset %1 not found"
 msgstr "Pré-réglage de greffon %1 non trouvé"
 
-#: plugin_ui.cc:863
+#: plugin_ui.cc:864
 #, fuzzy
 msgid "Name of New Preset:"
 msgstr "Nom de la nouvelle connexion :"
 
-#: redirect_automation_line.cc:53
+#: redirect_automation_line.cc:54
 msgid "redirect automation created for non-plugin"
 msgstr "rediriger l'automatisation créée pour le non-greffon"
 
-#: redirect_automation_time_axis.cc:93
+#: redirect_automation_time_axis.cc:94
 msgid "add automation event to "
 msgstr "ajouter les évènements d'automatisation à "
 
-#: redirect_box.cc:222
+#: redirect_box.cc:223
 msgid "New send"
 msgstr ""
 
-#: redirect_box.cc:223
+#: redirect_box.cc:224
 #, fuzzy
 msgid "Show send controls"
 msgstr "Contrôle de la vitesse avec molette"
 
-#: redirect_box.cc:377
+#: redirect_box.cc:383
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5635,7 +5648,7 @@ msgid ""
 "part of the signal."
 msgstr ""
 
-#: redirect_box.cc:389
+#: redirect_box.cc:395
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5647,7 +5660,7 @@ msgid ""
 "support this type of configuration."
 msgstr ""
 
-#: redirect_box.cc:402
+#: redirect_box.cc:408
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "\n"
@@ -5660,34 +5673,34 @@ msgid ""
 "Ardour does not understand what to do in such situations.\n"
 msgstr ""
 
-#: redirect_box.cc:493
+#: redirect_box.cc:495
 msgid "Pre-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:496
+#: redirect_box.cc:498
 msgid "Post-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:642
+#: redirect_box.cc:644
 msgid ""
 "You cannot reorder this set of redirects\n"
 "in that way because the inputs and\n"
 "outputs do not work correctly."
 msgstr ""
 
-#: redirect_box.cc:747
+#: redirect_box.cc:749
 #, fuzzy
 msgid "rename redirect"
 msgstr "ardour : renommer la région"
 
-#: redirect_box.cc:824 redirect_box.cc:872
+#: redirect_box.cc:826 redirect_box.cc:874
 msgid ""
 "Copying the set of redirects on the clipboard failed,\n"
 "probably because the I/O configuration of the plugins\n"
 "could not match the configuration of this track."
 msgstr ""
 
-#: redirect_box.cc:894
+#: redirect_box.cc:896
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this track?\n"
@@ -5696,7 +5709,7 @@ msgstr ""
 "Voulez-vous vraiment supprimer la piste \"%1\" ?\n"
 "(cela ne pourra pas être annulé)"
 
-#: redirect_box.cc:897
+#: redirect_box.cc:899
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this bus?\n"
@@ -5705,241 +5718,253 @@ msgstr ""
 "Voulez-vous vraiment supprimer la piste \"%1\" ?\n"
 "(cela ne pourra pas être annulé)"
 
-#: redirect_box.cc:902
+#: redirect_box.cc:904
 #, fuzzy
 msgid "Yes, remove them all"
 msgstr "Oui, le supprimer."
 
-#: redirect_box.cc:938
+#: redirect_box.cc:940
 #, fuzzy
 msgid "ardour: %1"
 msgstr "ardour :"
 
-#: redirect_box.cc:980
+#: redirect_box.cc:982
 #, fuzzy
 msgid "ardour: %1: %2 (by %3)"
 msgstr "ardour :"
 
 #. new stuff
-#: redirect_box.cc:1052
+#: redirect_box.cc:1054
 msgid "New Plugin ..."
 msgstr ""
 
-#: redirect_box.cc:1053
+#: redirect_box.cc:1055
 #, fuzzy
 msgid "New Insert"
 msgstr "Nouvelle entrée"
 
-#: redirect_box.cc:1054
+#: redirect_box.cc:1056
 msgid "New Send ..."
 msgstr ""
 
-#: redirect_box.cc:1066
+#: redirect_box.cc:1068
 #, fuzzy
 msgid "Deselect All"
 msgstr "Tout sélectionner"
 
-#: redirect_box.cc:1073
+#: redirect_box.cc:1075
 #, fuzzy
 msgid "Activate all"
 msgstr "Activer"
 
-#: redirect_box.cc:1074
+#: redirect_box.cc:1076
 #, fuzzy
 msgid "Deactivate all"
 msgstr "Désactiver"
 
-#: region_editor.cc:44
+#: region_editor.cc:45
 msgid "NAME:"
 msgstr "NOM :"
 
-#: region_editor.cc:45
+#: region_editor.cc:46
 msgid "lock"
 msgstr "verrouiller"
 
-#: region_editor.cc:47
+#: region_editor.cc:48
 msgid "opaque"
 msgstr "opaque"
 
-#: region_editor.cc:52
+#: region_editor.cc:49 region_editor.cc:192 region_editor.cc:226
+msgid "active"
+msgstr "actif"
+
+#: region_editor.cc:50
+msgid "visible"
+msgstr "visible"
+
+#: region_editor.cc:53
 msgid "Layer"
 msgstr "Couche"
 
-#: region_editor.cc:60
+#: region_editor.cc:54
+msgid "play"
+msgstr "jouer"
+
+#: region_editor.cc:61
 msgid "ENVELOPE"
 msgstr "ENVELOPPE"
 
-#: region_editor.cc:106
+#: region_editor.cc:107
 msgid "mute this region"
 msgstr "Assourdir cette région"
 
-#: region_editor.cc:107
+#: region_editor.cc:108
 msgid "regions underneath this one cannot be heard"
 msgstr "les régions en dessous de celle-ci ne peuvent être entendues"
 
-#: region_editor.cc:108
+#: region_editor.cc:109
 msgid "prevent any changes to this region"
 msgstr "empêche toute modification de cette région"
 
-#: region_editor.cc:109
+#: region_editor.cc:110
 msgid "use the gain envelope during playback"
 msgstr "utiliser l'enveloppe de gain pendant la lecture"
 
-#: region_editor.cc:110
+#: region_editor.cc:111
 msgid "show the gain envelope"
 msgstr "montrer l'enveloppe de gain"
 
-#: region_editor.cc:111
+#: region_editor.cc:112
 msgid "use fade in curve during playback"
 msgstr "utiliser une courbe de fondu d'ouverture durant la lecture"
 
-#: region_editor.cc:112
+#: region_editor.cc:113
 msgid "use fade out curve during playback"
 msgstr "utiliser une courbe de fondu de fermeture durant la lecture"
 
-#: region_editor.cc:113
+#: region_editor.cc:114
 msgid "audition this region"
 msgstr "écouter cette région"
 
-#: region_editor.cc:146
+#: region_editor.cc:147
 msgid "START:"
 msgstr "DÉBUT :"
 
-#: region_editor.cc:148
+#: region_editor.cc:149
 msgid "END:"
 msgstr "FIN :"
 
-#: region_editor.cc:150
+#: region_editor.cc:151
 msgid "LENGTH:"
 msgstr "LONGUEUR :"
 
-#: region_editor.cc:190
+#: region_editor.cc:191
 msgid "FADE IN"
 msgstr "FONDU D'OUVERTURE"
 
-#: region_editor.cc:192 region_editor.cc:226
+#: region_editor.cc:193 region_editor.cc:227
 msgid "msecs"
 msgstr "ms"
 
-#: region_editor.cc:224
+#: region_editor.cc:225
 msgid "FADE OUT"
 msgstr "FONDU DE FERMETURE"
 
-#: region_editor.cc:264
+#: region_editor.cc:265
 msgid "ardour: region "
 msgstr "ardour : région "
 
-#: region_editor.cc:401
+#: region_editor.cc:402
 msgid "fade in edit"
 msgstr "édition de fondu d'ouverture"
 
-#: region_editor.cc:413
+#: region_editor.cc:414
 msgid "fade out edit"
 msgstr "édition de fondu de fermeture"
 
-#: regionview.cc:1140
+#: regionview.cc:1146
 #, fuzzy
 msgid "add gain control point"
 msgstr "Enlever le point de contrôle"
 
-#: route_params_ui.cc:88
+#: route_params_ui.cc:89
 msgid "Tracks/Buses"
 msgstr "Pistes/Bus"
 
-#: route_params_ui.cc:108
+#: route_params_ui.cc:109
 msgid "Pre-fader Redirects"
 msgstr "Redirections pré-fader"
 
-#: route_params_ui.cc:109
+#: route_params_ui.cc:110
 msgid "Post-fader Redirects"
 msgstr "Redirections post-fader"
 
-#: route_params_ui.cc:141
+#: route_params_ui.cc:144
 msgid "ardour: track/bus inspector"
 msgstr "ardour : inspecteur de piste/bus"
 
-#: route_params_ui.cc:142
+#: route_params_ui.cc:145
 msgid "ardour_route_parameters"
 msgstr "ardour_paramètres_de_route"
 
-#: route_params_ui.cc:199
+#: route_params_ui.cc:202
 msgid "route display list item for renamed route not found!"
 msgstr ""
 
-#: route_params_ui.cc:451
+#: route_params_ui.cc:453
 msgid "NO TRACK"
 msgstr "PAS DE PISTE"
 
-#: route_params_ui.cc:693
+#: route_params_ui.cc:695
 msgid "ardour: track/bus inspector: "
 msgstr "ardour : inspecteur de piste/bus"
 
-#: route_params_ui.cc:697
+#: route_params_ui.cc:699
 msgid "No Route Selected"
 msgstr "Aucune route sélectionnée"
 
-#: route_params_ui.cc:698
+#: route_params_ui.cc:700
 msgid "ardour: track/bus/inspector: no route selected"
 msgstr "ardour : inspecteur de piste/bus : aucune route sélectionnée"
 
 #. ctrl-shift-click applies change to all routes
-#: route_ui.cc:133
+#: route_ui.cc:134
 msgid "mute change"
 msgstr "modification de la sourdine"
 
 #. ctrl-shift-click applies change to all routes
 #. ctrl-alt-click: exclusively solo this track, not a toggle */
-#: route_ui.cc:208 route_ui.cc:218
+#: route_ui.cc:209 route_ui.cc:219
 msgid "solo change"
 msgstr "modification du solo"
 
-#: route_ui.cc:281
+#: route_ui.cc:282
 #, fuzzy
 msgid "rec-enable change"
 msgstr "modification de rec-enable"
 
-#: route_ui.cc:472
+#: route_ui.cc:479
 #, fuzzy
 msgid "Solo-safe"
 msgstr "Solo-safe"
 
-#: route_ui.cc:480 route_ui.cc:523
+#: route_ui.cc:487 route_ui.cc:530
 msgid "MIDI Bind"
 msgstr "Assignement MIDI"
 
-#: route_ui.cc:494
+#: route_ui.cc:501
 msgid "Pre Fader"
 msgstr "Pré fader"
 
-#: route_ui.cc:501
+#: route_ui.cc:508
 msgid "Post Fader"
 msgstr "Post fader"
 
-#: route_ui.cc:508
+#: route_ui.cc:515
 msgid "Control Outs"
 msgstr "Sorties de contrôle"
 
-#: route_ui.cc:515
+#: route_ui.cc:522
 msgid "Main Outs"
 msgstr "Sorties principales"
 
-#: route_ui.cc:552
+#: route_ui.cc:559
 msgid "mix group solo  change"
 msgstr ""
 
-#: route_ui.cc:586
+#: route_ui.cc:593
 msgid "mix group mute change"
 msgstr ""
 
-#: route_ui.cc:602
+#: route_ui.cc:609
 msgid "mix group rec-enable change"
 msgstr ""
 
-#: route_ui.cc:619 visual_time_axis.cc:236
+#: route_ui.cc:626 visual_time_axis.cc:237
 msgid "ardour: color selection"
 msgstr "ardour : sélection de couleur"
 
-#: route_ui.cc:695
+#: route_ui.cc:702
 #, fuzzy
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
@@ -5951,7 +5976,7 @@ msgstr ""
 "Vous perdrez peut-être aussi la liste de lecture utilisée par cette piste"
 "(cela ne pourra pas être annulé)"
 
-#: route_ui.cc:697
+#: route_ui.cc:704
 msgid ""
 "Do you really want to remove bus \"%1\" ?\n"
 "(cannot be undone)"
@@ -5959,11 +5984,11 @@ msgstr ""
 "Voulez-vous vraiment supprimer le bus \"%1\" ?\n"
 "(cela ne pourra pas être annulé)"
 
-#: route_ui.cc:701 visual_time_axis.cc:278
+#: route_ui.cc:708 visual_time_axis.cc:279
 msgid "Yes, remove it."
 msgstr "Oui, le supprimer."
 
-#: route_ui.cc:730
+#: route_ui.cc:737
 #, fuzzy
 msgid "New Name: "
 msgstr "nouveau nom :"
@@ -6021,148 +6046,149 @@ msgstr "Impossible d'accéder au fichier son : "
 msgid "Name for Field"
 msgstr "Nom de la région :"
 
-#: sfdb_ui.cc:333
+#: sfdb_ui.cc:335
 msgid "Split Channels"
 msgstr "Séparer les voies"
 
-#: sfdb_ui.cc:340
+#: sfdb_ui.cc:342
 msgid "Create a region for each channel"
 msgstr ""
 
-#: sfdb_ui.cc:342
+#: sfdb_ui.cc:344
 msgid "Embed"
 msgstr ""
 
-#: sfdb_ui.cc:344
+#: sfdb_ui.cc:346
 #, fuzzy
 msgid "Link to an external file"
 msgstr "Insérer un fichier son externe"
 
-#: sfdb_ui.cc:346
+#: sfdb_ui.cc:348
 msgid "Import"
 msgstr "Importer"
 
-#: sfdb_ui.cc:348
+#: sfdb_ui.cc:350
 msgid "Copy a file to the session folder"
 msgstr ""
 
-#: sfdb_ui.cc:412
+#: sfdb_ui.cc:414
 #, fuzzy
 msgid "programming error: %1"
 msgstr "erreur de programmation : "
 
-#: tempo_dialog.cc:17 tempo_dialog.cc:34
+#: tempo_dialog.cc:18 tempo_dialog.cc:35
 msgid "Beats per minute"
 msgstr "Temps par minute"
 
-#: tempo_dialog.cc:20 tempo_dialog.cc:37 tempo_dialog.cc:153
-#: tempo_dialog.cc:171
+#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:203
+#: tempo_dialog.cc:221
 msgid "Bar"
 msgstr "Mesure"
 
-#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:154
-#: tempo_dialog.cc:172
+#: tempo_dialog.cc:22 tempo_dialog.cc:39 tempo_dialog.cc:204
+#: tempo_dialog.cc:222
 msgid "Beat"
 msgstr "Temps"
 
-#: tempo_dialog.cc:23 tempo_dialog.cc:40 tempo_dialog.cc:155
-#: tempo_dialog.cc:173
+#: tempo_dialog.cc:24 tempo_dialog.cc:41 tempo_dialog.cc:205
+#: tempo_dialog.cc:223
 msgid "Location"
 msgstr "Emplacement"
 
-#: tempo_dialog.cc:149 tempo_dialog.cc:167
+#: tempo_dialog.cc:199 tempo_dialog.cc:217
 msgid "Meter denominator"
 msgstr "Dénominateur du vu-mètre"
 
-#: tempo_dialog.cc:150 tempo_dialog.cc:168
+#: tempo_dialog.cc:200 tempo_dialog.cc:218
 msgid "Beats per bar"
 msgstr "Temps par mesure"
 
-#: tempo_dialog.cc:186 tempo_dialog.cc:197
+#: tempo_dialog.cc:236 tempo_dialog.cc:247
 msgid "whole (1)"
 msgstr "noire (1)"
 
-#: tempo_dialog.cc:187 tempo_dialog.cc:199
+#: tempo_dialog.cc:237 tempo_dialog.cc:249
 msgid "second (2)"
 msgstr "croche (2)"
 
-#: tempo_dialog.cc:188 tempo_dialog.cc:201
+#: tempo_dialog.cc:238 tempo_dialog.cc:251
 msgid "third (3)"
 msgstr "triolet (3)"
 
-#: tempo_dialog.cc:189 tempo_dialog.cc:203 tempo_dialog.cc:211
+#: tempo_dialog.cc:239 tempo_dialog.cc:253 tempo_dialog.cc:261
 msgid "quarter (4)"
 msgstr "double croche (4)"
 
-#: tempo_dialog.cc:190 tempo_dialog.cc:205
+#: tempo_dialog.cc:240 tempo_dialog.cc:255
 msgid "eighth (8)"
 msgstr "huitième (8)"
 
-#: tempo_dialog.cc:191 tempo_dialog.cc:207
+#: tempo_dialog.cc:241 tempo_dialog.cc:257
 msgid "sixteenth (16)"
 msgstr "seizième (16)"
 
-#: tempo_dialog.cc:192 tempo_dialog.cc:209
+#: tempo_dialog.cc:242 tempo_dialog.cc:259
 msgid "thirty-second (32)"
 msgstr "trente-deuxième (32)"
 
-#: tempo_dialog.cc:321
+#: tempo_dialog.cc:420
 msgid "garbaged note type entry (%1)"
 msgstr "entrée type de note endommagée (%1)"
 
-#: tempo_dialog.cc:331
+#: tempo_dialog.cc:430
 msgid "incomprehensible note type entry (%1)"
 msgstr "entrée type de note incompréhensible (%1)"
 
-#: time_axis_view.cc:111
+#: time_axis_view.cc:112
 msgid "gTortnam"
 msgstr "gTortnam"
 
-#: time_axis_view.cc:548
+#: time_axis_view.cc:549
 msgid "Largest"
 msgstr "Énorme"
 
-#: time_axis_view.cc:549
+#: time_axis_view.cc:550
 msgid "Large"
 msgstr "Grand"
 
-#: time_axis_view.cc:550
+#: time_axis_view.cc:551
 msgid "Larger"
 msgstr "Plus grand"
 
-#: time_axis_view.cc:552
+#: time_axis_view.cc:553
 msgid "Smaller"
 msgstr "Plus petit"
 
-#: time_axis_view.cc:553
+#: time_axis_view.cc:554
 msgid "Small"
 msgstr "Petit"
 
-#: time_axis_view.cc:869
+#: time_axis_view.cc:870
 msgid "unknown track height name \"%1\" in XML GUI information"
 msgstr "nom de hauteur de piste inconnu \"%1\" dans les données XML de l'IHM"
 
-#: time_axis_view_item.cc:71
+#. first constructed item sets up font info
+#: time_axis_view_item.cc:79
 msgid "TimeAxisViewItemName"
 msgstr ""
 
-#: time_axis_view_item.cc:271
+#: time_axis_view_item.cc:298
 msgid "new duration %1 frames is out of bounds for %2"
 msgstr "la nouvelle durée %1 trames est hors limite pour %2"
 
-#: time_selection.cc:40
+#: time_selection.cc:41
 msgid "programming error: request for non-existent audio range (%1)!"
 msgstr "programming error: request for non-existent audio range (%1)!"
 
-#: utils.cc:106 utils.cc:149
+#: utils.cc:107 utils.cc:150
 msgid "bad XPM header %1"
 msgstr "mauvais entête XPM %1"
 
-#: utils.cc:331
+#: utils.cc:332
 msgid "missing RGBA style for \"%1\""
 msgstr ""
 
-#: visual_time_axis.cc:275
+#: visual_time_axis.cc:276
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
 "(cannot be undone)"
@@ -6170,14 +6196,102 @@ msgstr ""
 "Voulez-vous vraiment supprimer la piste \"%1\" ?\n"
 "(cela ne pourra pas être annulé)"
 
-#: visual_time_axis.cc:324
+#: visual_time_axis.cc:325
 msgid "new name: "
 msgstr "nouveau nom :"
 
-#: visual_time_axis.cc:335
+#: visual_time_axis.cc:336
 msgid "A track already exists with that name"
 msgstr "Une piste portant le même nom existe déjà"
 
+#~ msgid ""
+#~ "You cannot record-enable\n"
+#~ "track %1\n"
+#~ "because it has no input connections.\n"
+#~ "You would be wasting space recording silence."
+#~ msgstr ""
+#~ "Vous ne pouvez activer\n"
+#~ "l'enregistrement de la piste %1\n"
+#~ "car elle n'a pas de connections en entrée.\n"
+#~ "Vous gacheriez de l'espace en enregistrant du silence."
+
+#, fuzzy
+#~ msgid "set selected trackview"
+#~ msgstr "définir la vue de piste sélectionnée"
+
+#, fuzzy
+#~ msgid "set selected control point"
+#~ msgstr "Enlever le point de contrôle"
+
+#, fuzzy
+#~ msgid "set selected regionview"
+#~ msgstr "définir la vue de région sélectionnée"
+
+#~ msgid "Start a new session\n"
+#~ msgstr "Commencer une nouvelle session\n"
+
+#~ msgid "via Session menu"
+#~ msgstr "via le menu Session"
+
+#~ msgid "FirstActionMessage"
+#~ msgstr "FirstActionCursor"
+
+#, fuzzy
+#~ msgid "<b>Advanced</b>"
+#~ msgstr "Avancé..."
+
+#, fuzzy
+#~ msgid "Select a File"
+#~ msgstr "Tout sélectionner"
+
+#, fuzzy
+#~ msgid "Track/Bus connection options"
+#~ msgstr "Inspecteur de pistes/bus"
+
+#~ msgid "RECORD"
+#~ msgstr "ENREGISTRER"
+
+#~ msgid "INPUT"
+#~ msgstr "ENTRÉE"
+
+#~ msgid "OUTPUT"
+#~ msgstr "SORTIE"
+
+#~ msgid "Gain automation mode"
+#~ msgstr "Mode d'automatisation du gain"
+
+#~ msgid "Gain automation type"
+#~ msgstr "dessiner l'automatisation du gain"
+
+#~ msgid "trim"
+#~ msgstr "élaguer"
+
+#~ msgid "gain automation mode"
+#~ msgstr "mode d'automatisation du gain"
+
+#~ msgid "gain automation state"
+#~ msgstr "état de l'automatisation du gain"
+
+#~ msgid "pan automation state"
+#~ msgstr "état de l'automatisation de panoramique"
+
+#~ msgid "REC"
+#~ msgstr "ENR."
+
+#~ msgid "OUT"
+#~ msgstr "SORTIE"
+
+#, fuzzy
+#~ msgid "aplay"
+#~ msgstr "aplay"
+
+#, fuzzy
+#~ msgid "awrite"
+#~ msgstr "awrite"
+
+#~ msgid "no group"
+#~ msgstr "aucun groupe"
+
 #, fuzzy
 #~ msgid "normal"
 #~ msgstr "Normal"
@@ -6528,9 +6642,6 @@ msgstr "Une piste portant le même nom existe déjà"
 #~ msgid "AND"
 #~ msgstr "ET"
 
-#~ msgid "OR"
-#~ msgstr "OU"
-
 #~ msgid "ardour: locate soundfiles"
 #~ msgstr "ardour : trouver fichiers audio"
 
@@ -6549,9 +6660,6 @@ msgstr "Une piste portant le même nom existe déjà"
 #~ msgid "***"
 #~ msgstr "***"
 
-#~ msgid "Mix Groups"
-#~ msgstr "Groupes de mixage"
-
 #~ msgid "Hide All AudioTrack MixerStrips"
 #~ msgstr "Cacher toutes les tranches de mixage de piste audio"
 
@@ -6564,9 +6672,6 @@ msgstr "Une piste portant le même nom existe déjà"
 #~ msgid "Name for new mix group"
 #~ msgstr "Nom pour le nouveau groupe de mixage"
 
-#~ msgid "Session name:"
-#~ msgstr "Nom de la session :"
-
 #~ msgid "Create"
 #~ msgstr "Créer"
 
@@ -6604,18 +6709,12 @@ msgstr "Une piste portant le même nom existe déjà"
 #~ "Si vous voulez utiliser une autre fréquence d'échantillonage\n"
 #~ "veuillez arrêter puis relancer JACK"
 
-#~ msgid "Session template"
-#~ msgstr "Modèle de session"
-
 #~ msgid "blank"
 #~ msgstr "vide"
 
 #~ msgid "No template - create tracks/busses manually"
 #~ msgstr "Pas de modèle -- créez les pistes/bus manuellement"
 
-#~ msgid "No template"
-#~ msgstr "Pas de modèle"
-
 #~ msgid "Slave to MTC"
 #~ msgstr "Esclave du MTC"
 
@@ -6661,9 +6760,6 @@ msgstr "Une piste portant le même nom existe déjà"
 #~ msgid "Native Format"
 #~ msgstr "Format natif"
 
-#~ msgid "Use as click"
-#~ msgstr "Utiliser comme clic"
-
 #~ msgid "--unknown--"
 #~ msgstr "--inconnu--"
 
index 44b2bd86a0da174a79e33e96578f87621c0878a3..f283f846da0eda7da62392779436762c7f4c5cb9 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ardour 0.354.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 18:09-0400\n"
 "PO-Revision-Date: 2003-05-20 13:03-0500\n"
 "Last-Translator: Filippo Pappalardo <filippo@email.it>\n"
 "Language-Team: Italian\n"
@@ -15,201 +15,201 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: about.cc:119
+#: about.cc:120
 msgid "Paul Davis"
 msgstr ""
 
-#: about.cc:120
+#: about.cc:121
 #, fuzzy
 msgid "Jesse Chappell"
 msgstr "azzera"
 
-#: about.cc:121
+#: about.cc:122
 msgid "Taybin Rutkin"
 msgstr ""
 
-#: about.cc:122
+#: about.cc:123
 msgid "Marcus Andersson"
 msgstr ""
 
-#: about.cc:123
+#: about.cc:124
 msgid "Jeremy Hall"
 msgstr ""
 
-#: about.cc:124
+#: about.cc:125
 msgid "Steve Harris"
 msgstr ""
 
-#: about.cc:125
+#: about.cc:126
 msgid "Tim Mayberry"
 msgstr ""
 
-#: about.cc:126
+#: about.cc:127
 msgid "Mark Stewart"
 msgstr ""
 
-#: about.cc:127
+#: about.cc:128
 msgid "Sam Chessman"
 msgstr ""
 
-#: about.cc:128
+#: about.cc:129
 msgid "Jack O'Quin"
 msgstr ""
 
-#: about.cc:129
+#: about.cc:130
 msgid "Matt Krai"
 msgstr ""
 
-#: about.cc:130
+#: about.cc:131
 msgid "Ben Bell"
 msgstr ""
 
-#: about.cc:131
+#: about.cc:132
 msgid "Gerard van Dongen"
 msgstr ""
 
-#: about.cc:132
+#: about.cc:133
 msgid "Thomas Charbonnel"
 msgstr ""
 
-#: about.cc:133
+#: about.cc:134
 msgid "Nick Mainsbridge"
 msgstr ""
 
-#: about.cc:134
+#: about.cc:135
 msgid "Colin Law"
 msgstr ""
 
-#: about.cc:135
+#: about.cc:136
 msgid "Sampo Savolainen"
 msgstr ""
 
-#: about.cc:136
+#: about.cc:137
 msgid "Joshua Leach"
 msgstr ""
 
-#: about.cc:137
+#: about.cc:138
 msgid "Rob Holland"
 msgstr ""
 
-#: about.cc:138
+#: about.cc:139
 msgid "Per Sigmond"
 msgstr ""
 
-#: about.cc:139
+#: about.cc:140
 msgid "Doug Mclain"
 msgstr ""
 
-#: about.cc:140
+#: about.cc:141
 msgid "Petter Sundlöf"
 msgstr ""
 
-#: about.cc:145
+#: about.cc:146
 msgid ""
 "French:\n"
 "\tAlain Fréhel <alain.frehel@free.fr>\n"
 msgstr ""
 
-#: about.cc:146
+#: about.cc:147
 msgid ""
 "German:\n"
 "\tKarsten Petersen <kapet@kapet.de>\n"
 msgstr ""
 
-#: about.cc:147
+#: about.cc:148
 msgid ""
 "Italian:\n"
 "\tFilippo Pappalardo <filippo@email.it>\n"
 msgstr ""
 
-#: about.cc:148
+#: about.cc:149
 msgid ""
 "Portuguese:\n"
 "\tRui Nuno Capela <rncbc@rncbc.org>\n"
 msgstr ""
 
-#: about.cc:149
+#: about.cc:150
 msgid ""
 "Brazilian Portuguese:\n"
 "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
 "\tChris Ross <chris@tebibyte.org>\n"
 msgstr ""
 
-#: about.cc:151
+#: about.cc:152
 msgid ""
 "Spanish:\n"
 "\t Alex Krohn <alexkrohn@fastmail.fm>\n"
 msgstr ""
 
-#: about.cc:152
+#: about.cc:153
 msgid ""
 "Russian:\n"
 "\t Igor Blinov <pitstop@nm.ru>\n"
 msgstr ""
 
-#: about.cc:180
+#: about.cc:181
 msgid "Copyright (C) 1999-2005 Paul Davis\n"
 msgstr ""
 
-#: about.cc:181
+#: about.cc:182
 msgid ""
 "Ardour comes with ABSOLUTELY NO WARRANTY\n"
 "This is free software, and you are welcome to redistribute it\n"
 "under certain conditions; see the file COPYING for details.\n"
 msgstr ""
 
-#: about.cc:187
+#: about.cc:188
 msgid ""
 "%1\n"
 "(built with ardour/gtk %2.%3.%4 libardour: %5.%6.%7)"
 msgstr ""
 
-#: actions.cc:260
+#: actions.cc:261
 #, fuzzy
 msgid "programmer error: %1 %2"
 msgstr "errore di programmazione: "
 
-#: add_route_dialog.cc:61
+#: add_route_dialog.cc:62
 msgid "ardour: add track/bus"
 msgstr "ardour: aggiungi traccia/bus"
 
 #. path = "1"
-#: add_route_dialog.cc:62 editor_route_list.cc:72
+#: add_route_dialog.cc:63 editor_route_list.cc:73
 msgid "Tracks"
 msgstr "Tracce"
 
 #. path = "0"
-#: add_route_dialog.cc:63 editor_route_list.cc:69
+#: add_route_dialog.cc:64 editor_route_list.cc:70
 msgid "Busses"
 msgstr "Bus"
 
-#: add_route_dialog.cc:95 plugin_ui.cc:832
+#: add_route_dialog.cc:96 plugin_ui.cc:833
 msgid "Add"
 msgstr "Aggiungi"
 
-#: add_route_dialog.cc:113
+#: add_route_dialog.cc:114
 msgid "Name (template)"
 msgstr "Nome (modello)"
 
-#: add_route_dialog.cc:119
+#: add_route_dialog.cc:120
 #, fuzzy
 msgid "Channel Configuration"
 msgstr "Annullare l'importazione"
 
-#: add_route_dialog.cc:176 editor.cc:131 editor.cc:3660 time_axis_view.cc:551
+#: add_route_dialog.cc:177 editor.cc:134 editor.cc:3688 time_axis_view.cc:552
 msgid "Normal"
 msgstr "Normale"
 
-#: add_route_dialog.cc:178
+#: add_route_dialog.cc:179
 #, fuzzy
 msgid "Tape"
 msgstr "Inizio:"
 
-#: add_route_dialog.cc:195
+#: add_route_dialog.cc:196
 msgid "Mono"
 msgstr ""
 
-#: add_route_dialog.cc:197
+#: add_route_dialog.cc:198
 msgid "Stereo"
 msgstr ""
 
@@ -280,27 +280,11 @@ msgstr ""
 msgid "SOLO"
 msgstr ""
 
-#: ardour_ui.cc:207
-msgid ""
-"You cannot record-enable\n"
-"track %1\n"
-"because it has no input connections.\n"
-"You would be wasting space recording silence."
-msgstr ""
-
-#: ardour_ui.cc:236
-msgid "no vertical meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:243
-msgid "no horizontal meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:410
+#: ardour_ui.cc:375
 msgid "quit"
 msgstr "Esci"
 
-#: ardour_ui.cc:419
+#: ardour_ui.cc:384
 msgid ""
 "Ardour was unable to save your session.\n"
 "\n"
@@ -309,33 +293,33 @@ msgid ""
 "\"Just quit\" option."
 msgstr ""
 
-#: ardour_ui.cc:438
+#: ardour_ui.cc:403
 msgid "ardour: save session?"
 msgstr "ardour: salvare la sessione?"
 
-#: ardour_ui.cc:445
+#: ardour_ui.cc:410
 msgid "Don't %1"
 msgstr "Non uscire"
 
-#: ardour_ui.cc:447
+#: ardour_ui.cc:412
 msgid "Just %1"
 msgstr "%1 e basta"
 
-#: ardour_ui.cc:449
+#: ardour_ui.cc:414
 msgid "Save and %1"
 msgstr "Salva ed esci"
 
-#: ardour_ui.cc:461
+#: ardour_ui.cc:426
 #, fuzzy
 msgid "session"
 msgstr "Sessione"
 
-#: ardour_ui.cc:463
+#: ardour_ui.cc:428
 #, fuzzy
 msgid "snapshot"
 msgstr "Istantanea"
 
-#: ardour_ui.cc:465
+#: ardour_ui.cc:430
 #, fuzzy
 msgid ""
 "The %1\"%2\"\n"
@@ -354,81 +338,81 @@ msgstr ""
 "\n"
 "Cosa vuoi fare?"
 
-#: ardour_ui.cc:479
+#: ardour_ui.cc:444
 msgid "Prompter"
 msgstr ""
 
-#: ardour_ui.cc:538
+#: ardour_ui.cc:503
 #, fuzzy, c-format
 msgid "disconnected"
 msgstr "Disconnetti"
 
-#: ardour_ui.cc:545
+#: ardour_ui.cc:510
 #, c-format
 msgid "SR: %.1f kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:549
+#: ardour_ui.cc:514
 #, c-format
 msgid "SR: %u kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:562
+#: ardour_ui.cc:527
 #, c-format
 msgid "DSP Load: %.1f%%"
 msgstr "Carico DSP: %.1f%%"
 
-#: ardour_ui.cc:572
+#: ardour_ui.cc:537
 #, c-format
 msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
 msgstr ""
 
-#: ardour_ui.cc:599
+#: ardour_ui.cc:564
 msgid "space: 24hrs+"
 msgstr "Spazio: 24hrs+"
 
-#: ardour_ui.cc:629
+#: ardour_ui.cc:594
 #, c-format
 msgid "space: %02dh:%02dm:%02ds"
 msgstr "Spazio: %02dh:%02dm:%02ds"
 
-#: ardour_ui.cc:668
+#: ardour_ui.cc:633
 msgid "programming error: impossible control method"
 msgstr "errore di programmazione: metodo di controllo impossibile"
 
-#: ardour_ui.cc:776 new_session_dialog.cc:89
+#: ardour_ui.cc:741 new_session_dialog.cc:294
 #, fuzzy
 msgid "Recent Sessions"
 msgstr "apri sessione"
 
 #. ardour sessions are folders
-#: ardour_ui.cc:867
+#: ardour_ui.cc:834
 msgid "open session"
 msgstr "apri sessione"
 
-#: ardour_ui.cc:873
+#: ardour_ui.cc:840
 #, fuzzy
 msgid "Ardour sessions"
 msgstr "ardour_nuova_sessione"
 
-#: ardour_ui.cc:906
+#: ardour_ui.cc:873
 msgid "Patience is a virtue.\n"
 msgstr "La pazienza è una virtù.\n"
 
-#: ardour_ui.cc:915
+#: ardour_ui.cc:882
 msgid "You cannot add a track without a session already loaded."
 msgstr ""
 "Non si può aggiungere una traccia senza prima aver caricato una sessione."
 
-#: ardour_ui.cc:922
+#: ardour_ui.cc:889
 msgid "could not create new audio track"
 msgstr "Impossibile creare una nuova traccia audio"
 
-#: ardour_ui.cc:926
+#: ardour_ui.cc:893
 msgid "could not create new audio bus"
 msgstr "Impossibile creare un nuovo bus audio"
 
-#: ardour_ui.cc:945
+#: ardour_ui.cc:912
 msgid ""
 "There are insufficient JACK ports available\n"
 "to create a new track or bus.\n"
@@ -436,14 +420,14 @@ msgid ""
 "restart JACK with more ports."
 msgstr ""
 
-#: ardour_ui.cc:1069
+#: ardour_ui.cc:1036
 msgid ""
 "Please create 1 or more track\n"
 "before trying to record.\n"
 "Check the Session menu."
 msgstr ""
 
-#: ardour_ui.cc:1298
+#: ardour_ui.cc:1265
 #, fuzzy
 msgid ""
 "JACK has either been shutdown or it\n"
@@ -456,57 +440,55 @@ msgstr ""
 "E' consigliato salvare la sessione e riavviare\n"
 "sia JACK che Ardour."
 
-#: ardour_ui.cc:1315
+#: ardour_ui.cc:1282
 msgid "Unable to create all required ports"
 msgstr ""
 
-#: ardour_ui.cc:1323
+#: ardour_ui.cc:1290
 #, fuzzy
 msgid "Unable to start the session running"
 msgstr "Vai all'inizio della sessione"
 
-#: ardour_ui.cc:1459
+#: ardour_ui.cc:1426
 msgid "No Stream"
 msgstr "Nessun flusso"
 
-#: ardour_ui.cc:1486 ardour_ui.cc:1505
+#: ardour_ui.cc:1453 ardour_ui.cc:1472
 msgid "none"
 msgstr "Nessuno"
 
-#: ardour_ui.cc:1495 ardour_ui.cc:1514 automation_time_axis.cc:183
-#: automation_time_axis.cc:212 automation_time_axis.cc:459 mixer_strip.cc:174
-#: mixer_strip.cc:186 mixer_strip.cc:881 plugin_ui.cc:391 plugin_ui.cc:634
+#: ardour_ui.cc:1462 ardour_ui.cc:1481
 msgid "off"
 msgstr "Off"
 
-#: ardour_ui.cc:1538
+#: ardour_ui.cc:1505
 #, fuzzy
 msgid "Name of New Snapshot"
 msgstr "Nome dell' istantanea"
 
-#: ardour_ui.cc:1684
+#: ardour_ui.cc:1651
 msgid "Name for mix template:"
 msgstr "Nome per il modello di mixaggio"
 
-#: ardour_ui.cc:1685
+#: ardour_ui.cc:1652
 msgid "-template"
 msgstr "-modello"
 
-#: ardour_ui.cc:1836
+#: ardour_ui.cc:1809
 msgid ""
 "You do not have write access to this session.\n"
 "This prevents the session from being loaded."
 msgstr ""
 
-#: ardour_ui.cc:1849 ardour_ui.cc:1904
+#: ardour_ui.cc:1822 ardour_ui.cc:1877
 msgid "Session \"%1 (snapshot %2)\" did not load successfully"
 msgstr "La sessione \"%1 (istantanea %2)\" non è stata caricata correttamente"
 
-#: ardour_ui.cc:1960
+#: ardour_ui.cc:1933
 msgid "No audio files were ready for cleanup"
 msgstr ""
 
-#: ardour_ui.cc:1964
+#: ardour_ui.cc:1937
 msgid ""
 "If this seems suprising, \n"
 "check for any existing snapshots.\n"
@@ -514,23 +496,23 @@ msgid ""
 "require some unused files to continue to exist."
 msgstr ""
 
-#: ardour_ui.cc:1973
+#: ardour_ui.cc:1946
 msgid "ardour: cleanup"
 msgstr "ardour: pulisci"
 
-#: ardour_ui.cc:2009 ardour_ui.cc:2015
+#: ardour_ui.cc:1982 ardour_ui.cc:1988
 msgid "files were"
 msgstr ""
 
-#: ardour_ui.cc:2011 ardour_ui.cc:2017
+#: ardour_ui.cc:1984 ardour_ui.cc:1990
 msgid "file was"
 msgstr ""
 
-#: ardour_ui.cc:2058
+#: ardour_ui.cc:2031
 msgid "Are you sure you want to cleanup?"
 msgstr ""
 
-#: ardour_ui.cc:2063
+#: ardour_ui.cc:2036
 msgid ""
 "Cleanup is a destructive operation.\n"
 "ALL undo/redo information will be lost if you cleanup.\n"
@@ -538,26 +520,26 @@ msgid ""
 "location."
 msgstr ""
 
-#: ardour_ui.cc:2069
+#: ardour_ui.cc:2042
 #, fuzzy
 msgid "Clean Up"
 msgstr "Pulisci"
 
-#: ardour_ui.cc:2072
+#: ardour_ui.cc:2045
 #, fuzzy
 msgid "CleanupDialog"
 msgstr "Pulisci"
 
-#: ardour_ui.cc:2073
+#: ardour_ui.cc:2046
 #, fuzzy
 msgid "ardour_cleanup"
 msgstr "ardour: pulisci"
 
-#: ardour_ui.cc:2092
+#: ardour_ui.cc:2065
 msgid "cleaned files"
 msgstr "files ripuliti"
 
-#: ardour_ui.cc:2093
+#: ardour_ui.cc:2066
 #, fuzzy
 msgid ""
 "The following %1 %2 not in use and \n"
@@ -572,12 +554,12 @@ msgstr ""
 "La prossima volta che il cestino verr svuotato\n"
 "Saranno liberati %2 megabytes di spazio su disco"
 
-#: ardour_ui.cc:2118
+#: ardour_ui.cc:2091
 #, fuzzy
 msgid "deleted file"
 msgstr "files eliminati"
 
-#: ardour_ui.cc:2119
+#: ardour_ui.cc:2092
 #, fuzzy
 msgid ""
 "The following %1 %2 deleted from\n"
@@ -587,11 +569,11 @@ msgstr ""
 "I seguenti %1 files sono stati eliminati, rilasciati %2 megabytes di spazio "
 "disco"
 
-#: ardour_ui.cc:2242
+#: ardour_ui.cc:2215
 msgid "Recording was stopped because your system could not keep up."
 msgstr "Registazione fermata perche' il sistema non ha retto"
 
-#: ardour_ui.cc:2265
+#: ardour_ui.cc:2238
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -600,7 +582,7 @@ msgid ""
 "quickly enough to keep up with recording.\n"
 msgstr ""
 
-#: ardour_ui.cc:2284
+#: ardour_ui.cc:2257
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -609,7 +591,7 @@ msgid ""
 "quickly enough to keep up with playback.\n"
 msgstr ""
 
-#: ardour_ui.cc:2310
+#: ardour_ui.cc:2283
 msgid ""
 "This session appears to have been in\n"
 "middle of recording when ardour or\n"
@@ -620,361 +602,361 @@ msgid ""
 "what you would like to do.\n"
 msgstr ""
 
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2293
 msgid "Recover from crash"
 msgstr ""
 
-#: ardour_ui.cc:2321
+#: ardour_ui.cc:2294
 msgid "Ignore crash data"
 msgstr ""
 
-#: ardour_ui.cc:2339
+#: ardour_ui.cc:2312
 msgid "Could not disconnect from JACK"
 msgstr ""
 
-#: ardour_ui.cc:2352
+#: ardour_ui.cc:2325
 msgid "Could not reconnect to JACK"
 msgstr ""
 
-#: ardour_ui2.cc:59
+#: ardour_ui2.cc:60
 msgid "UI: cannot setup editor"
 msgstr "IU: impossibile avviare l'editor"
 
-#: ardour_ui2.cc:64
+#: ardour_ui2.cc:65
 msgid "UI: cannot setup mixer"
 msgstr "IU: impossibile avviare il mixer"
 
-#: ardour_ui2.cc:90
+#: ardour_ui2.cc:91
 msgid "MMC + Local"
 msgstr ""
 
-#: ardour_ui2.cc:91
+#: ardour_ui2.cc:92
 msgid "MMC"
 msgstr ""
 
-#: ardour_ui2.cc:92
+#: ardour_ui2.cc:93
 msgid "Local"
 msgstr ""
 
-#: ardour_ui2.cc:109
+#: ardour_ui2.cc:110
 msgid "MMC ID"
 msgstr ""
 
-#: ardour_ui2.cc:290
+#: ardour_ui2.cc:291
 msgid "Play from playhead"
 msgstr "Suona dal cursore"
 
-#: ardour_ui2.cc:291
+#: ardour_ui2.cc:292
 msgid "Stop playback"
 msgstr "Ferma"
 
-#: ardour_ui2.cc:292
+#: ardour_ui2.cc:293
 msgid "Play range/selection"
 msgstr "Suona intervallo/selezione"
 
-#: ardour_ui2.cc:293
+#: ardour_ui2.cc:294
 msgid "Go to start of session"
 msgstr "Vai all'inizio della sessione"
 
-#: ardour_ui2.cc:294
+#: ardour_ui2.cc:295
 msgid "Go to end of session"
 msgstr "Vai alla fine della sessione"
 
-#: ardour_ui2.cc:295
+#: ardour_ui2.cc:296
 msgid "Play loop range"
 msgstr "Suona l'intervallo di loop"
 
-#: ardour_ui2.cc:296
+#: ardour_ui2.cc:297
 msgid "Return to last playback start when stopped"
 msgstr "Torna al punto d'inizio una volta fermato"
 
-#: ardour_ui2.cc:297
+#: ardour_ui2.cc:298
 msgid "Start playback after any locate"
 msgstr "Comincia a suonare dopo ogni posizione"
 
-#: ardour_ui2.cc:298
+#: ardour_ui2.cc:299
 msgid "Be sensible about input monitoring"
 msgstr "Monitorizza le entrate"
 
-#: ardour_ui2.cc:299
+#: ardour_ui2.cc:300
 msgid "Start recording at auto-punch start"
 msgstr "Comincia a registrare al'inizio dell'auto-punch"
 
-#: ardour_ui2.cc:300
+#: ardour_ui2.cc:301
 msgid "Stop recording at auto-punch end"
 msgstr "Ferma la registrazione alla fine dell'auto-punch"
 
-#: ardour_ui2.cc:301
+#: ardour_ui2.cc:302
 msgid "Enable/Disable audio click"
 msgstr "Abilita/Disabilita il click audio"
 
-#: ardour_ui2.cc:302
+#: ardour_ui2.cc:303
 msgid "Positional sync source"
 msgstr ""
 
-#: ardour_ui2.cc:303
+#: ardour_ui2.cc:304
 msgid "Does Ardour control the time?"
 msgstr ""
 
-#: ardour_ui2.cc:304
+#: ardour_ui2.cc:305
 msgid "Shuttle speed control"
 msgstr ""
 
-#: ardour_ui2.cc:305
+#: ardour_ui2.cc:306
 #, fuzzy, c-format
 msgid "Select semitones or %%-age for speed display"
 msgstr "Seleziona semitoni o percentuale di velocita' del display"
 
-#: ardour_ui2.cc:306
+#: ardour_ui2.cc:307
 msgid "Current transport speed"
 msgstr "Velocita' del trasporto attuale"
 
-#: ardour_ui2.cc:329
+#: ardour_ui2.cc:330
 msgid "Primary clock"
 msgstr "Orologio principale"
 
-#: ardour_ui2.cc:330
+#: ardour_ui2.cc:331
 msgid "secondary clock"
 msgstr "orologio secondario"
 
 #. XXX: this should really be saved in instant.xml or something similar and restored from there
 #. Combo's are stupid - they steal space from the entry for the button
-#: ardour_ui2.cc:387 ardour_ui2.cc:823 ardour_ui2.cc:836 ardour_ui2.cc:899
-#: ardour_ui2.cc:901
+#: ardour_ui2.cc:388 ardour_ui2.cc:833 ardour_ui2.cc:846 ardour_ui2.cc:909
+#: ardour_ui2.cc:911
 msgid "sprung"
 msgstr ""
 
-#: ardour_ui2.cc:388 ardour_ui2.cc:825 ardour_ui2.cc:847
+#: ardour_ui2.cc:389 ardour_ui2.cc:835 ardour_ui2.cc:857
 msgid "wheel"
 msgstr ""
 
-#: ardour_ui2.cc:450
+#: ardour_ui2.cc:451
 msgid "ardour: clock"
 msgstr "ardour: orologio"
 
-#: ardour_ui2.cc:595
+#: ardour_ui2.cc:596
 msgid "Maximum speed"
 msgstr ""
 
-#: ardour_ui2.cc:813
+#: ardour_ui2.cc:823
 msgid "st"
 msgstr ""
 
-#: ardour_ui2.cc:857 ardour_ui2.cc:880 ardour_ui2.cc:897
+#: ardour_ui2.cc:867 ardour_ui2.cc:890 ardour_ui2.cc:907
 msgid "stopped"
 msgstr "fermato"
 
-#: ardour_ui_dialogs.cc:152 playlist_selector.cc:69
+#: ardour_ui_dialogs.cc:153 playlist_selector.cc:70
 #, fuzzy
 msgid "close"
 msgstr "Chiudi"
 
-#: ardour_ui_dialogs.cc:359 ardour_ui_ed.cc:181
+#: ardour_ui_dialogs.cc:360 ardour_ui_ed.cc:184
 #, fuzzy
 msgid "Sound File Browser"
 msgstr "Libreria Audio"
 
 #. menus + submenus that need action items
-#: ardour_ui_ed.cc:69
+#: ardour_ui_ed.cc:72
 msgid "Session"
 msgstr "Sessione"
 
-#: ardour_ui_ed.cc:70 ardour_ui_ed.cc:127 editor.cc:1843 export_dialog.cc:350
+#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:130 editor.cc:1836 export_dialog.cc:350
 #: export_dialog.cc:1059 export_dialog.cc:1063
 msgid "Export"
 msgstr "Esporta"
 
-#: ardour_ui_ed.cc:71
+#: ardour_ui_ed.cc:74
 msgid "Cleanup"
 msgstr "Pulisci"
 
-#: ardour_ui_ed.cc:72 option_editor.cc:125
+#: ardour_ui_ed.cc:75 option_editor.cc:126
 msgid "Sync"
 msgstr ""
 
-#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:74
+#: ardour_ui_ed.cc:76 ardour_ui_ed.cc:77
 #, fuzzy
 msgid "Options"
 msgstr "Editor delle Opzioni"
 
-#: ardour_ui_ed.cc:75
+#: ardour_ui_ed.cc:78
 msgid "Help"
 msgstr ""
 
-#: ardour_ui_ed.cc:76
+#: ardour_ui_ed.cc:79
 msgid "KeyMouse Actions"
 msgstr ""
 
-#: ardour_ui_ed.cc:77
+#: ardour_ui_ed.cc:80
 #, fuzzy
 msgid "Audio File Format"
 msgstr "Formato Nativo"
 
-#: ardour_ui_ed.cc:78
+#: ardour_ui_ed.cc:81
 #, fuzzy
 msgid "Header"
 msgstr "smorzamento"
 
-#: ardour_ui_ed.cc:79
+#: ardour_ui_ed.cc:82
 msgid "Data"
 msgstr ""
 
-#: ardour_ui_ed.cc:80
+#: ardour_ui_ed.cc:83
 #, fuzzy
 msgid "Control Surfaces"
 msgstr "Uscite di Controllo"
 
 #. the real actions
-#: ardour_ui_ed.cc:84 audio_time_axis.cc:1856 new_session_dialog.cc:342
+#: ardour_ui_ed.cc:87 audio_time_axis.cc:1854 new_session_dialog.cc:529
 msgid "New"
 msgstr "Nuovo"
 
-#: ardour_ui_ed.cc:86 new_session_dialog.cc:334
+#: ardour_ui_ed.cc:89 new_session_dialog.cc:517
 msgid "Open"
 msgstr "Apri"
 
-#: ardour_ui_ed.cc:87
+#: ardour_ui_ed.cc:90
 msgid "Recent"
 msgstr "Recenti"
 
-#: ardour_ui_ed.cc:88 io_selector.cc:57 io_selector.cc:791
+#: ardour_ui_ed.cc:91 io_selector.cc:58 io_selector.cc:792
 msgid "Close"
 msgstr "Chiudi"
 
-#: ardour_ui_ed.cc:91 route_params_ui.cc:512
+#: ardour_ui_ed.cc:94 route_params_ui.cc:514
 msgid "Add Track/Bus"
 msgstr "Aggiungi Tracce/Bus"
 
-#: ardour_ui_ed.cc:102
+#: ardour_ui_ed.cc:105
 msgid "Connect"
 msgstr "Connetti"
 
 #. </CMT Additions>
-#: ardour_ui_ed.cc:110
+#: ardour_ui_ed.cc:113
 msgid "Snapshot"
 msgstr "Istantanea"
 
-#: ardour_ui_ed.cc:113
+#: ardour_ui_ed.cc:116
 msgid "Save Template..."
 msgstr "Salva Modello..."
 
-#: ardour_ui_ed.cc:116
+#: ardour_ui_ed.cc:119
 msgid "Export session to audiofile..."
 msgstr "Esporta la sessione come file audio..."
 
-#: ardour_ui_ed.cc:119
+#: ardour_ui_ed.cc:122
 #, fuzzy
 msgid "Export selection to audiofile..."
 msgstr "Esporta la sessione come file audio..."
 
-#: ardour_ui_ed.cc:123
+#: ardour_ui_ed.cc:126
 #, fuzzy
 msgid "Export range markers to audiofile..."
 msgstr "Esporta l'intervallo come file audio..."
 
-#: ardour_ui_ed.cc:130
+#: ardour_ui_ed.cc:133
 msgid "Cleanup unused sources"
 msgstr "Pulisci sorgenti inutilizzate"
 
-#: ardour_ui_ed.cc:132
+#: ardour_ui_ed.cc:135
 msgid "Flush wastebasket"
 msgstr "Svuota il cestino"
 
-#: ardour_ui_ed.cc:138 ardour_ui_options.cc:381 ardour_ui_options.cc:390
-#: ardour_ui_options.cc:462
+#: ardour_ui_ed.cc:141 ardour_ui_options.cc:408 ardour_ui_options.cc:417
+#: ardour_ui_options.cc:489
 msgid "JACK"
 msgstr ""
 
-#: ardour_ui_ed.cc:139
+#: ardour_ui_ed.cc:142
 msgid "Latency"
 msgstr ""
 
-#: ardour_ui_ed.cc:141
+#: ardour_ui_ed.cc:144
 #, fuzzy
 msgid "Reconnect"
 msgstr "Connetti"
 
-#: ardour_ui_ed.cc:144 mixer_strip.cc:514 mixer_strip.cc:574
+#: ardour_ui_ed.cc:147 mixer_strip.cc:497 mixer_strip.cc:565
 msgid "Disconnect"
 msgstr "Disconnetti"
 
-#: ardour_ui_ed.cc:171
+#: ardour_ui_ed.cc:174
 msgid "Windows"
 msgstr "Finestre"
 
-#: ardour_ui_ed.cc:172
+#: ardour_ui_ed.cc:175
 msgid "start prefix"
 msgstr ""
 
-#: ardour_ui_ed.cc:173
+#: ardour_ui_ed.cc:176
 msgid "Quit"
 msgstr "Esci"
 
 #. windows visibility actions
-#: ardour_ui_ed.cc:177
+#: ardour_ui_ed.cc:180
 msgid "Maximise Editor Space"
 msgstr ""
 
-#: ardour_ui_ed.cc:179
+#: ardour_ui_ed.cc:182
 #, fuzzy
 msgid "Show Editor"
 msgstr "Editor delle Opzioni"
 
-#: ardour_ui_ed.cc:180
+#: ardour_ui_ed.cc:183
 msgid "Show Mixer"
 msgstr ""
 
-#: ardour_ui_ed.cc:182
+#: ardour_ui_ed.cc:185
 msgid "Options Editor"
 msgstr "Editor delle Opzioni"
 
-#: ardour_ui_ed.cc:183
+#: ardour_ui_ed.cc:186
 #, fuzzy
 msgid "Track/Bus Inspector"
 msgstr "Tracce/Bus"
 
-#: ardour_ui_ed.cc:185
+#: ardour_ui_ed.cc:188
 msgid "Connections"
 msgstr "Connessioni"
 
-#: ardour_ui_ed.cc:187
+#: ardour_ui_ed.cc:190
 msgid "Locations"
 msgstr "Posizioni"
 
-#: ardour_ui_ed.cc:189
+#: ardour_ui_ed.cc:192
 msgid "Big Clock"
 msgstr "Orologio grande"
 
-#: ardour_ui_ed.cc:191
+#: ardour_ui_ed.cc:194
 msgid "About"
 msgstr "Circa"
 
-#: ardour_ui_ed.cc:192
+#: ardour_ui_ed.cc:195
 #, fuzzy
 msgid "Colors"
 msgstr "Colore"
 
-#: ardour_ui_ed.cc:194
+#: ardour_ui_ed.cc:197
 #, fuzzy
 msgid "Add Audio Track"
 msgstr "Aggiungi Tracce/Bus"
 
-#: ardour_ui_ed.cc:196
+#: ardour_ui_ed.cc:199
 #, fuzzy
 msgid "Add Audio Bus"
 msgstr "Nascondi tutti i Bus Audio"
 
-#: ardour_ui_ed.cc:198
+#: ardour_ui_ed.cc:201
 msgid "Save"
 msgstr "Salva"
 
-#: ardour_ui_ed.cc:200 editor_actions.cc:254
+#: ardour_ui_ed.cc:203 editor_actions.cc:255
 #, fuzzy
 msgid "Remove Last Capture"
 msgstr "Rimuovi l'ultima registrazione"
 
 #. do-nothing action for the "transport" menu bar item
-#: ardour_ui_ed.cc:207
+#: ardour_ui_ed.cc:210
 #, fuzzy
 msgid "Transport"
 msgstr "Traduttori"
@@ -982,73 +964,73 @@ msgstr "Traduttori"
 #. these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
 #. menus and via button proxies.
 #.
-#: ardour_ui_ed.cc:213 sfdb_ui.cc:57
+#: ardour_ui_ed.cc:216 sfdb_ui.cc:57
 msgid "Stop"
 msgstr ""
 
-#: ardour_ui_ed.cc:216
+#: ardour_ui_ed.cc:219
 msgid "Roll"
 msgstr ""
 
-#: ardour_ui_ed.cc:220
+#: ardour_ui_ed.cc:223
 #, fuzzy
 msgid "Start/Stop"
 msgstr "Inizio:"
 
-#: ardour_ui_ed.cc:223
+#: ardour_ui_ed.cc:226
 msgid "Stop + Forget Capture"
 msgstr ""
 
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:229
 #, fuzzy
 msgid "Play Loop Range"
 msgstr "Suona l'intervallo di loop"
 
-#: ardour_ui_ed.cc:229
+#: ardour_ui_ed.cc:232
 #, fuzzy
 msgid "Play Selection"
 msgstr "Suona la regione selezionata"
 
-#: ardour_ui_ed.cc:233
+#: ardour_ui_ed.cc:236
 #, fuzzy
 msgid "Enable Record"
 msgstr "Registra"
 
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:239
 #, fuzzy
 msgid "Rewind"
 msgstr "Regione"
 
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:242
 msgid "Rewind (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:242
+#: ardour_ui_ed.cc:245
 msgid "Rewind (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:245
+#: ardour_ui_ed.cc:248
 msgid "Forward"
 msgstr ""
 
-#: ardour_ui_ed.cc:248
+#: ardour_ui_ed.cc:251
 msgid "Forward (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:251
+#: ardour_ui_ed.cc:254
 msgid "Forward (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:254
+#: ardour_ui_ed.cc:257
 msgid "Goto Zero"
 msgstr ""
 
-#: ardour_ui_ed.cc:257
+#: ardour_ui_ed.cc:260
 #, fuzzy
 msgid "Goto Start"
 msgstr "Inizio:"
 
-#: ardour_ui_ed.cc:260
+#: ardour_ui_ed.cc:263
 msgid "Goto End"
 msgstr ""
 
@@ -1056,316 +1038,316 @@ msgstr ""
 #. that proxies for these action to be more compact. It would be nice to find a way to override the action
 #. name appearance on the buttons.
 #.
-#: ardour_ui_ed.cc:269
+#: ardour_ui_ed.cc:272
 msgid ""
 "Punch\n"
 "in"
 msgstr ""
 
-#: ardour_ui_ed.cc:272
+#: ardour_ui_ed.cc:275
 msgid ""
 "Punch\n"
 "out"
 msgstr ""
 
-#: ardour_ui_ed.cc:275 option_editor.cc:128
+#: ardour_ui_ed.cc:278 option_editor.cc:129
 msgid "Click"
 msgstr ""
 
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:281
 #, fuzzy
 msgid ""
 "Auto\n"
 "input"
 msgstr "entrata %1"
 
-#: ardour_ui_ed.cc:281
+#: ardour_ui_ed.cc:284
 #, fuzzy
 msgid ""
 "Auto\n"
 "play"
 msgstr "suona"
 
-#: ardour_ui_ed.cc:284
+#: ardour_ui_ed.cc:287
 msgid ""
 "Auto\n"
 "return"
 msgstr ""
 
-#: ardour_ui_ed.cc:288
+#: ardour_ui_ed.cc:291
 msgid ""
 "Time\n"
 "master"
 msgstr ""
 
-#: ardour_ui_ed.cc:291
+#: ardour_ui_ed.cc:294
 msgid "Toggle Record Enable Track1"
 msgstr ""
 
-#: ardour_ui_ed.cc:293
+#: ardour_ui_ed.cc:296
 msgid "Toggle Record Enable Track2"
 msgstr ""
 
-#: ardour_ui_ed.cc:295
+#: ardour_ui_ed.cc:298
 msgid "Toggle Record Enable Track3"
 msgstr ""
 
-#: ardour_ui_ed.cc:297
+#: ardour_ui_ed.cc:300
 msgid "Toggle Record Enable Track4"
 msgstr ""
 
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:302
 msgid "Toggle Record Enable Track5"
 msgstr ""
 
-#: ardour_ui_ed.cc:301
+#: ardour_ui_ed.cc:304
 msgid "Toggle Record Enable Track6"
 msgstr ""
 
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:306
 msgid "Toggle Record Enable Track7"
 msgstr ""
 
-#: ardour_ui_ed.cc:305
+#: ardour_ui_ed.cc:308
 msgid "Toggle Record Enable Track8"
 msgstr ""
 
-#: ardour_ui_ed.cc:307
+#: ardour_ui_ed.cc:310
 msgid "Toggle Record Enable Track9"
 msgstr ""
 
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:312
 msgid "Toggle Record Enable Track10"
 msgstr ""
 
-#: ardour_ui_ed.cc:311
+#: ardour_ui_ed.cc:314
 msgid "Toggle Record Enable Track11"
 msgstr ""
 
-#: ardour_ui_ed.cc:313
+#: ardour_ui_ed.cc:316
 msgid "Toggle Record Enable Track12"
 msgstr ""
 
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:318
 msgid "Toggle Record Enable Track13"
 msgstr ""
 
-#: ardour_ui_ed.cc:317
+#: ardour_ui_ed.cc:320
 msgid "Toggle Record Enable Track14"
 msgstr ""
 
-#: ardour_ui_ed.cc:319
+#: ardour_ui_ed.cc:322
 msgid "Toggle Record Enable Track15"
 msgstr ""
 
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:324
 msgid "Toggle Record Enable Track16"
 msgstr ""
 
-#: ardour_ui_ed.cc:323
+#: ardour_ui_ed.cc:326
 msgid "Toggle Record Enable Track17"
 msgstr ""
 
-#: ardour_ui_ed.cc:325
+#: ardour_ui_ed.cc:328
 msgid "Toggle Record Enable Track18"
 msgstr ""
 
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:330
 msgid "Toggle Record Enable Track19"
 msgstr ""
 
-#: ardour_ui_ed.cc:329
+#: ardour_ui_ed.cc:332
 msgid "Toggle Record Enable Track20"
 msgstr ""
 
-#: ardour_ui_ed.cc:331
+#: ardour_ui_ed.cc:334
 msgid "Toggle Record Enable Track21"
 msgstr ""
 
-#: ardour_ui_ed.cc:333
+#: ardour_ui_ed.cc:336
 msgid "Toggle Record Enable Track22"
 msgstr ""
 
-#: ardour_ui_ed.cc:335
+#: ardour_ui_ed.cc:338
 msgid "Toggle Record Enable Track23"
 msgstr ""
 
-#: ardour_ui_ed.cc:337
+#: ardour_ui_ed.cc:340
 msgid "Toggle Record Enable Track24"
 msgstr ""
 
-#: ardour_ui_ed.cc:339
+#: ardour_ui_ed.cc:342
 msgid "Toggle Record Enable Track25"
 msgstr ""
 
-#: ardour_ui_ed.cc:341
+#: ardour_ui_ed.cc:344
 msgid "Toggle Record Enable Track26"
 msgstr ""
 
-#: ardour_ui_ed.cc:343
+#: ardour_ui_ed.cc:346
 msgid "Toggle Record Enable Track27"
 msgstr ""
 
-#: ardour_ui_ed.cc:345
+#: ardour_ui_ed.cc:348
 msgid "Toggle Record Enable Track28"
 msgstr ""
 
-#: ardour_ui_ed.cc:347
+#: ardour_ui_ed.cc:350
 msgid "Toggle Record Enable Track29"
 msgstr ""
 
-#: ardour_ui_ed.cc:349
+#: ardour_ui_ed.cc:352
 msgid "Toggle Record Enable Track30"
 msgstr ""
 
-#: ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:354
 msgid "Toggle Record Enable Track31"
 msgstr ""
 
-#: ardour_ui_ed.cc:353
+#: ardour_ui_ed.cc:356
 msgid "Toggle Record Enable Track32"
 msgstr ""
 
-#: ardour_ui_ed.cc:358
+#: ardour_ui_ed.cc:361
 msgid "Percentage"
 msgstr "Percentuale"
 
-#: ardour_ui_ed.cc:359
+#: ardour_ui_ed.cc:362
 msgid "Semitones"
 msgstr "Semitoni"
 
-#: ardour_ui_ed.cc:363
+#: ardour_ui_ed.cc:366
 msgid "Send MTC"
 msgstr "Invia MTC"
 
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:368
 msgid "Send MMC"
 msgstr "Invia MMC"
 
-#: ardour_ui_ed.cc:367
+#: ardour_ui_ed.cc:370
 #, fuzzy
 msgid "Use MMC"
 msgstr "Invia MMC"
 
-#: ardour_ui_ed.cc:369
+#: ardour_ui_ed.cc:372
 msgid "Send MIDI feedback"
 msgstr ""
 
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:374
 #, fuzzy
 msgid "Use MIDI control"
 msgstr "Porta MMC"
 
-#: ardour_ui_ed.cc:374
+#: ardour_ui_ed.cc:377
 #, fuzzy
-msgid "Connect newtrack inputs to hardware"
+msgid "Connect new track inputs to hardware"
 msgstr "Connetti automaticamente nuove tracce"
 
-#: ardour_ui_ed.cc:392
+#: ardour_ui_ed.cc:396
 #, fuzzy
 msgid "Connect new track outputs to hardware"
 msgstr "Connetti automaticamente nuove tracce"
 
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:398
 #, fuzzy
 msgid "Connect new track outputs to master"
 msgstr "autoconnetti le uscite delle tracce alle uscite master"
 
-#: ardour_ui_ed.cc:396
+#: ardour_ui_ed.cc:400
 #, fuzzy
 msgid "Manually connect new track outputs"
 msgstr "connetti manualmente le uscite delle tracce"
 
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:405
 #, fuzzy
 msgid "Hardware monitoring"
 msgstr "Usa il Monitoraggio Hardware"
 
-#: ardour_ui_ed.cc:402
+#: ardour_ui_ed.cc:406
 #, fuzzy
 msgid "Software monitoring"
 msgstr "Usa il Monitoraggio Software"
 
-#: ardour_ui_ed.cc:403
+#: ardour_ui_ed.cc:407
 #, fuzzy
 msgid "External monitoring"
 msgstr "Usa il Monitoraggio Hardware"
 
 #. Configuration object options (i.e. not session specific)
-#: ardour_ui_ed.cc:407
+#: ardour_ui_ed.cc:411
 msgid "Stop plugins with transport"
 msgstr "Ferma i plugin durante il transport"
 
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:412
 #, fuzzy
 msgid "Verify remove last capture"
 msgstr "Rimuovi l'ultima registrazione"
 
-#: ardour_ui_ed.cc:409
+#: ardour_ui_ed.cc:413
 msgid "Stop recording on xrun"
 msgstr "Ferma la registrazione in caso di xrun"
 
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:414
 #, fuzzy
 msgid "Stop transport at session end"
 msgstr "Ferma il transport a fine sessione"
 
-#: ardour_ui_ed.cc:411
+#: ardour_ui_ed.cc:415
 msgid "-12dB gain reduce ffwd/rewind"
 msgstr ""
 
-#: ardour_ui_ed.cc:412
+#: ardour_ui_ed.cc:416
 msgid "Rec-enable stays engaged at stop"
 msgstr ""
 
 #. session options
-#: ardour_ui_ed.cc:416
+#: ardour_ui_ed.cc:420
 #, fuzzy
 msgid "Do not run plugins while recording"
 msgstr "Avvia i plugin durante la registrazione"
 
-#: ardour_ui_ed.cc:419
+#: ardour_ui_ed.cc:423
 msgid "Latched solo"
 msgstr ""
 
-#: ardour_ui_ed.cc:424
+#: ardour_ui_ed.cc:428
 msgid "Solo in-place"
 msgstr ""
 
-#: ardour_ui_ed.cc:426
+#: ardour_ui_ed.cc:430
 msgid "Solo via bus"
 msgstr ""
 
-#: ardour_ui_ed.cc:429
+#: ardour_ui_ed.cc:433
 #, fuzzy
 msgid "Automatically create crossfades"
 msgstr "Smorzamento incrociato automatico in caso sovrapposizione"
 
-#: ardour_ui_ed.cc:431
+#: ardour_ui_ed.cc:435
 msgid "Unmute new full crossfades"
 msgstr ""
 
-#: ardour_ui_options.cc:379 ardour_ui_options.cc:389 ardour_ui_options.cc:456
+#: ardour_ui_options.cc:406 ardour_ui_options.cc:416 ardour_ui_options.cc:483
 msgid "Internal"
 msgstr "interno"
 
-#: ardour_ui_options.cc:380 ardour_ui_options.cc:459
+#: ardour_ui_options.cc:407 ardour_ui_options.cc:486
 msgid "MTC"
 msgstr ""
 
-#: audio_clock.cc:1719 editor.cc:185
+#: audio_clock.cc:1742 editor.cc:188
 msgid "SMPTE"
 msgstr ""
 
-#: audio_clock.cc:1720 editor.cc:184 editor_rulers.cc:359
+#: audio_clock.cc:1743 editor.cc:187 editor_rulers.cc:360
 msgid "Bars:Beats"
 msgstr "Battuta:Battiti"
 
-#: audio_clock.cc:1721
+#: audio_clock.cc:1744
 msgid "Minutes:Seconds"
 msgstr "Minuti:Secondi"
 
-#: audio_clock.cc:1722
+#: audio_clock.cc:1745
 msgid "Audio Frames"
 msgstr ""
 
@@ -1373,290 +1355,311 @@ msgstr ""
 #. Slowest = 6.6dB/sec falloff at update rate of 40ms
 #. Slow    = 6.8dB/sec falloff at update rate of 40ms
 #.
-#: audio_clock.cc:1723 editor_actions.cc:374 editor_actions.cc:382
+#: audio_clock.cc:1746 editor_actions.cc:375 editor_actions.cc:383
+#: gain_meter.cc:172 panner_ui.cc:89 plugin_ui.cc:392 plugin_ui.cc:635
 msgid "Off"
 msgstr ""
 
-#: audio_clock.cc:1725
+#: audio_clock.cc:1748
 msgid "Mode"
 msgstr "Modo"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:458
+#: audio_time_axis.cc:91
 msgid "m"
 msgstr ""
 
-#: audio_time_axis.cc:90 mixer_strip.cc:459
+#: audio_time_axis.cc:91
 msgid "s"
 msgstr ""
 
-#: audio_time_axis.cc:90
+#: audio_time_axis.cc:91
 msgid "r"
 msgstr ""
 
-#: audio_time_axis.cc:94
+#: audio_time_axis.cc:95
 msgid "g"
 msgstr ""
 
 #. group
-#: audio_time_axis.cc:95
+#: audio_time_axis.cc:96
 msgid "p"
 msgstr ""
 
-#: audio_time_axis.cc:96 automation_time_axis.cc:31 visual_time_axis.cc:73
+#: audio_time_axis.cc:97 automation_time_axis.cc:32 visual_time_axis.cc:74
 msgid "h"
 msgstr ""
 
 #. height
-#: audio_time_axis.cc:97
+#: audio_time_axis.cc:98
 msgid "a"
 msgstr ""
 
-#: audio_time_axis.cc:98 visual_time_axis.cc:72
+#: audio_time_axis.cc:99 visual_time_axis.cc:73
 msgid "v"
 msgstr ""
 
-#: audio_time_axis.cc:173
+#: audio_time_axis.cc:168 mixer_strip.cc:86
 msgid "Record"
 msgstr "Registra"
 
-#: audio_time_axis.cc:174 editor_actions.cc:36
+#: audio_time_axis.cc:169 editor_actions.cc:37 mixer_strip.cc:86
 msgid "Solo"
 msgstr ""
 
-#: audio_time_axis.cc:175 editor.cc:1767 editor.cc:1866 panner_ui.cc:385
+#: audio_time_axis.cc:170 editor.cc:1760 editor.cc:1859 mixer_strip.cc:86
+#: panner_ui.cc:427
 msgid "Mute"
 msgstr "Muto"
 
-#: audio_time_axis.cc:176
+#: audio_time_axis.cc:171
 msgid "Edit Group"
 msgstr "Modifica Gruppo"
 
-#: audio_time_axis.cc:177 visual_time_axis.cc:91
+#: audio_time_axis.cc:172 visual_time_axis.cc:92
 msgid "Display Height"
 msgstr "Altezza"
 
-#: audio_time_axis.cc:178
+#: audio_time_axis.cc:173
 msgid "Playlist"
 msgstr ""
 
-#: audio_time_axis.cc:179 audio_time_axis.cc:743
+#: audio_time_axis.cc:174 audio_time_axis.cc:741
 msgid "Automation"
 msgstr "Automazione"
 
-#: audio_time_axis.cc:180 visual_time_axis.cc:92
+#: audio_time_axis.cc:175 visual_time_axis.cc:93
 msgid "Visual options"
 msgstr "Opzioni di visualizzazione"
 
-#: audio_time_axis.cc:181 visual_time_axis.cc:93
+#: audio_time_axis.cc:176 visual_time_axis.cc:94
 msgid "Hide this track"
 msgstr "Nascondi traccia"
 
-#: audio_time_axis.cc:337
+#: audio_time_axis.cc:333 mixer_strip.cc:927
 msgid "No group"
 msgstr "nessun gruppo"
 
-#: audio_time_axis.cc:704 automation_time_axis.cc:448
-#: imageframe_time_axis.cc:256 marker_time_axis.cc:210
+#: audio_time_axis.cc:702 automation_time_axis.cc:450
+#: imageframe_time_axis.cc:255 marker_time_axis.cc:211
 msgid "Height"
 msgstr "Altezza"
 
-#: audio_time_axis.cc:705 color_manager.cc:40 imageframe_time_axis.cc:257
-#: marker_time_axis.cc:211
+#: audio_time_axis.cc:703 color_manager.cc:41 imageframe_time_axis.cc:256
+#: marker_time_axis.cc:212
 msgid "Color"
 msgstr "Colore"
 
-#: audio_time_axis.cc:709
+#: audio_time_axis.cc:707
 msgid "Hide all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:710
+#: audio_time_axis.cc:708
 msgid "Show all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:714 mixer_strip.cc:1236
+#: audio_time_axis.cc:712 mixer_strip.cc:1011
 #, fuzzy
 msgid "Remote Control ID"
 msgstr "Rimuovi il punto di sincronizzazione"
 
-#: audio_time_axis.cc:720
-msgid "show all automation"
+#: audio_time_axis.cc:718
+#, fuzzy
+msgid "Show all automation"
 msgstr "mostra tutte le automazioni"
 
-#: audio_time_axis.cc:723
-msgid "show existing automation"
+#: audio_time_axis.cc:721
+#, fuzzy
+msgid "Show existing automation"
 msgstr "mostra le automazioni esistenti"
 
-#: audio_time_axis.cc:726
-msgid "hide all automation"
+#: audio_time_axis.cc:724
+#, fuzzy
+msgid "Hide all automation"
 msgstr "nascondi tutte le automazioni"
 
-#: audio_time_axis.cc:731 audio_time_axis.cc:1169 editor.cc:215
-msgid "gain"
-msgstr ""
+#: audio_time_axis.cc:729
+#, fuzzy
+msgid "Fader"
+msgstr "Smorzamenti"
 
-#: audio_time_axis.cc:736 audio_time_axis.cc:1209
-msgid "pan"
+#: audio_time_axis.cc:734
+msgid "Pan"
 msgstr ""
 
-#: audio_time_axis.cc:741
+#: audio_time_axis.cc:739
 msgid "Plugins"
 msgstr ""
 
-#: audio_time_axis.cc:749
+#: audio_time_axis.cc:747
 msgid "Show waveforms"
 msgstr "Mostra le forme Wave"
 
-#: audio_time_axis.cc:757
+#: audio_time_axis.cc:755
 msgid "Traditional"
 msgstr "Tradizionale"
 
-#: audio_time_axis.cc:760
+#: audio_time_axis.cc:758
 msgid "Rectified"
 msgstr "Rettificato"
 
-#: audio_time_axis.cc:763
+#: audio_time_axis.cc:761
 msgid "Waveform"
 msgstr "Forme wave"
 
-#: audio_time_axis.cc:773
+#: audio_time_axis.cc:771
 #, fuzzy
-msgid "align with existing material"
+msgid "Align with existing material"
 msgstr "Materiale esistente"
 
-#: audio_time_axis.cc:778
+#: audio_time_axis.cc:776
 #, fuzzy
-msgid "align with capture time"
+msgid "Align with capture time"
 msgstr "Tempo di registrazione"
 
-#: audio_time_axis.cc:784
+#: audio_time_axis.cc:782
 #, fuzzy
 msgid "Alignment"
 msgstr "Allinea"
 
-#: audio_time_axis.cc:790 editor.cc:523 editor_actions.cc:59
-#: mixer_strip.cc:1225
+#: audio_time_axis.cc:788 editor.cc:527 editor_actions.cc:60
+#: mixer_strip.cc:1000 mixer_ui.cc:111
 msgid "Active"
 msgstr "Attivo"
 
-#: audio_time_axis.cc:795 editor.cc:1929 editor_actions.cc:319
-#: editor_markers.cc:507 imageframe_time_axis.cc:260 location_ui.cc:56
-#: marker_time_axis.cc:214 mixer_strip.cc:1239
+#: audio_time_axis.cc:793 editor.cc:1922 editor_actions.cc:320
+#: editor_markers.cc:508 imageframe_time_axis.cc:259 location_ui.cc:57
+#: marker_time_axis.cc:215 mixer_strip.cc:1014
 msgid "Remove"
 msgstr "Rimuovi"
 
-#: audio_time_axis.cc:835
+#: audio_time_axis.cc:833
 #, fuzzy
 msgid "Name for playlist"
 msgstr "Nome dell' istantanea"
 
-#: audio_time_axis.cc:837 audio_time_axis.cc:1853 editor_markers.cc:826
-#: editor_mouse.cc:4609 imageframe_time_axis.cc:249 marker_time_axis.cc:207
-#: meter_bridge_strip.cc:223 mixer_strip.cc:1223 redirect_box.cc:749
-#: redirect_box.cc:1063 route_ui.cc:732 visual_time_axis.cc:325
+#: audio_time_axis.cc:835 audio_time_axis.cc:1851 editor_markers.cc:827
+#: editor_mouse.cc:4673 imageframe_time_axis.cc:248 marker_time_axis.cc:208
+#: meter_bridge_strip.cc:224 mixer_strip.cc:998 redirect_box.cc:751
+#: redirect_box.cc:1065 route_ui.cc:739 visual_time_axis.cc:326
 msgid "Rename"
 msgstr "Rinomina"
 
-#: audio_time_axis.cc:870 audio_time_axis.cc:910
+#: audio_time_axis.cc:868 audio_time_axis.cc:908
 #, fuzzy
 msgid "Name for Playlist"
 msgstr "Nome dell' istantanea"
 
-#: audio_time_axis.cc:1128 visual_time_axis.cc:382
+#: audio_time_axis.cc:1126 visual_time_axis.cc:383
 msgid "a track already exists with that name"
 msgstr "esiste già una traccia con quel nome"
 
-#: audio_time_axis.cc:1412 editor.cc:1490 selection.cc:622
+#: audio_time_axis.cc:1167 editor.cc:218
+msgid "gain"
+msgstr ""
+
+#: audio_time_axis.cc:1207
+msgid "pan"
+msgstr ""
+
+#: audio_time_axis.cc:1410 editor.cc:1483 selection.cc:634
 msgid "programming error: "
 msgstr "errore di programmazione: "
 
-#: audio_time_axis.cc:1850
+#: audio_time_axis.cc:1848
 msgid "Current: %1"
 msgstr "Corrente %1"
 
-#: audio_time_axis.cc:1857
+#: audio_time_axis.cc:1855
 msgid "New Copy"
 msgstr "Nuova Copia"
 
-#: audio_time_axis.cc:1859
+#: audio_time_axis.cc:1857
 msgid "Clear Current"
 msgstr "Pulisci Corrente"
 
-#: audio_time_axis.cc:1861 editor.cc:2031 editor.cc:2107
+#: audio_time_axis.cc:1859 editor.cc:2024 editor.cc:2100
 msgid "Select"
 msgstr "Seleziona"
 
-#: automation_line.cc:883
+#: automation_line.cc:884
 msgid "automation event move"
 msgstr ""
 
-#: automation_line.cc:885
+#: automation_line.cc:886
 msgid "automation range drag"
 msgstr ""
 
-#: automation_line.cc:1014 region_gain_line.cc:61
+#: automation_line.cc:1015 region_gain_line.cc:62
 #, fuzzy
 msgid "remove control point"
 msgstr "Rimuovi il punto di sincronizzazione"
 
-#: automation_time_axis.cc:32 editor_ops.cc:2813
+#: automation_time_axis.cc:33 editor_ops.cc:2885
 msgid "clear"
 msgstr "pulisci"
 
-#: automation_time_axis.cc:74
+#: automation_time_axis.cc:75
 msgid "track height"
 msgstr ""
 
-#: automation_time_axis.cc:75
+#: automation_time_axis.cc:76
 #, fuzzy
 msgid "automation state"
 msgstr "stato dell'automazione pan"
 
-#: automation_time_axis.cc:76
+#: automation_time_axis.cc:77
 #, fuzzy
 msgid "clear track"
 msgstr "azzera gli intervalli"
 
-#: automation_time_axis.cc:77
+#: automation_time_axis.cc:78
 #, fuzzy
 msgid "hide track"
 msgstr "Nascondi traccia"
 
-#: automation_time_axis.cc:185 automation_time_axis.cc:223
-#: automation_time_axis.cc:463 mixer_strip.cc:176 mixer_strip.cc:188
-#: plugin_ui.cc:394 plugin_ui.cc:636 region_editor.cc:53
-msgid "play"
-msgstr "suona"
+#: automation_time_axis.cc:184 automation_time_axis.cc:213
+#: automation_time_axis.cc:461
+msgid "Manual"
+msgstr ""
+
+#: automation_time_axis.cc:186 automation_time_axis.cc:224
+#: automation_time_axis.cc:465 editor.cc:2001 editor.cc:2082 gain_meter.cc:174
+#: panner_ui.cc:91 plugin_ui.cc:395 plugin_ui.cc:637 sfdb_ui.cc:56
+msgid "Play"
+msgstr "Suona"
 
-#: automation_time_axis.cc:187 automation_time_axis.cc:234
-#: automation_time_axis.cc:467 mixer_strip.cc:178 mixer_strip.cc:190
-#: plugin_ui.cc:397 plugin_ui.cc:638
-msgid "write"
+#: automation_time_axis.cc:188 automation_time_axis.cc:235
+#: automation_time_axis.cc:469 gain_meter.cc:176 panner_ui.cc:93
+#: plugin_ui.cc:398 plugin_ui.cc:639
+#, fuzzy
+msgid "Write"
 msgstr "scrivi"
 
-#: automation_time_axis.cc:189 automation_time_axis.cc:245
-#: automation_time_axis.cc:471 mixer_strip.cc:180 mixer_strip.cc:192
-#: mixer_strip.cc:887 plugin_ui.cc:400 plugin_ui.cc:640
-msgid "touch"
+#: automation_time_axis.cc:190 automation_time_axis.cc:246
+#: automation_time_axis.cc:473 gain_meter.cc:178 panner_ui.cc:95
+#: plugin_ui.cc:401 plugin_ui.cc:641
+#, fuzzy
+msgid "Touch"
 msgstr "crea"
 
-#: automation_time_axis.cc:256 option_editor.cc:182 option_editor.cc:188
-#: plugin_ui.cc:403
+#: automation_time_axis.cc:257 option_editor.cc:183 option_editor.cc:189
+#: plugin_ui.cc:404
 msgid "???"
 msgstr ""
 
-#: automation_time_axis.cc:270
+#: automation_time_axis.cc:271
 msgid "clear automation"
 msgstr "pulisci l'automazione"
 
-#: automation_time_axis.cc:450 editor_actions.cc:317
+#: automation_time_axis.cc:452 editor_actions.cc:318
 msgid "Hide"
 msgstr "Nascondi"
 
-#: automation_time_axis.cc:452 crossfade_edit.cc:76 redirect_box.cc:1055
+#: automation_time_axis.cc:454 crossfade_edit.cc:78 redirect_box.cc:1057
 msgid "Clear"
 msgstr "Pulisci"
 
-#: automation_time_axis.cc:475
+#: automation_time_axis.cc:477
 #, fuzzy
 msgid "State"
 msgstr "Inizio:"
@@ -1803,1579 +1806,1566 @@ msgstr ""
 msgid "color of fill"
 msgstr ""
 
-#: color_manager.cc:39
+#: color_manager.cc:40
 #, fuzzy
 msgid "Object"
 msgstr "oggetto"
 
-#: color_manager.cc:77
+#: color_manager.cc:78
 #, fuzzy
 msgid "cannot open color definition file %1: %2"
 msgstr "Editor: impossibile l'immagine per lo splash \"%1\" (%2)"
 
-#: crossfade_edit.cc:73
+#: crossfade_edit.cc:75
 msgid "ardour: x-fade edit"
 msgstr "ardour: modifica lo smorzamento incrociato"
 
-#: crossfade_edit.cc:77 panner_ui.cc:401
+#: crossfade_edit.cc:79 panner_ui.cc:443
 #, fuzzy
 msgid "Reset"
 msgstr "azzera"
 
-#: crossfade_edit.cc:78
+#: crossfade_edit.cc:80
 #, fuzzy
 msgid "Fade"
 msgstr "Smorzamenti"
 
-#: crossfade_edit.cc:79
+#: crossfade_edit.cc:81
 msgid "Out (dry)"
 msgstr ""
 
-#: crossfade_edit.cc:80
+#: crossfade_edit.cc:82
 #, fuzzy
 msgid "Out"
 msgstr "Uscite"
 
-#: crossfade_edit.cc:81
+#: crossfade_edit.cc:83
 msgid "In (dry)"
 msgstr ""
 
-#: crossfade_edit.cc:82
+#: crossfade_edit.cc:84
 msgid "In"
 msgstr ""
 
-#: crossfade_edit.cc:84
+#: crossfade_edit.cc:86
 #, fuzzy
 msgid "With Pre-roll"
 msgstr "con pre-roll"
 
-#: crossfade_edit.cc:85
+#: crossfade_edit.cc:87
 #, fuzzy
 msgid "With Post-roll"
 msgstr "con post-roll"
 
-#: crossfade_edit.cc:93
+#: crossfade_edit.cc:95
 msgid "Fade In"
 msgstr "SMORZA Entrata"
 
-#: crossfade_edit.cc:94
+#: crossfade_edit.cc:96
 msgid "Fade Out"
 msgstr "SMORZA Uscita"
 
-#: crossfade_edit.cc:170 editor.cc:1842 editor_actions.cc:315
-#: option_editor.cc:129
+#: crossfade_edit.cc:172 editor.cc:1835 editor_actions.cc:316
+#: option_editor.cc:130
 msgid "Audition"
 msgstr ""
 
-#: editor.cc:101 editor.cc:3588
+#: editor.cc:104 editor.cc:3616
 msgid "Slide"
 msgstr ""
 
-#: editor.cc:102 editor.cc:3586
+#: editor.cc:105 editor.cc:3614
 msgid "Splice"
 msgstr ""
 
-#: editor.cc:107 editor.cc:3643 export_dialog.cc:78 export_dialog.cc:92
-#: export_dialog.cc:893 export_dialog.cc:1225
+#. note that this menu list starts at zero, not 1, because zero
+#. is a valid, if useless, ID.
+#.
+#. leave some breathing room
+#: editor.cc:110 editor.cc:3671 export_dialog.cc:78 export_dialog.cc:92
+#: export_dialog.cc:893 export_dialog.cc:1225 route_ui.cc:437
 msgid "None"
 msgstr "Nessuno"
 
-#: editor.cc:108 editor.cc:3631
+#: editor.cc:111 editor.cc:3659
 msgid "CD Frames"
 msgstr ""
 
-#: editor.cc:109 editor.cc:3633
+#: editor.cc:112 editor.cc:3661
 msgid "SMPTE Frames"
 msgstr ""
 
-#: editor.cc:110 editor.cc:3635
+#: editor.cc:113 editor.cc:3663
 msgid "SMPTE Seconds"
 msgstr ""
 
-#: editor.cc:111 editor.cc:3637
+#: editor.cc:114 editor.cc:3665
 msgid "SMPTE Minutes"
 msgstr ""
 
-#: editor.cc:112 editor.cc:3639
+#: editor.cc:115 editor.cc:3667
 msgid "Seconds"
 msgstr "Secondi"
 
-#: editor.cc:113 editor.cc:3641
+#: editor.cc:116 editor.cc:3669
 msgid "Minutes"
 msgstr "Minuti"
 
-#: editor.cc:114 editor.cc:3613
+#: editor.cc:117 editor.cc:3641
 msgid "Beats/32"
 msgstr "Battiti/32"
 
-#: editor.cc:115 editor.cc:3611
+#: editor.cc:118 editor.cc:3639
 msgid "Beats/16"
 msgstr "Battiti/16"
 
-#: editor.cc:116 editor.cc:3609
+#: editor.cc:119 editor.cc:3637
 msgid "Beats/8"
 msgstr "Battiti/8"
 
-#: editor.cc:117 editor.cc:3607
+#: editor.cc:120 editor.cc:3635
 msgid "Beats/4"
 msgstr "Battiti/4"
 
-#: editor.cc:118 editor.cc:3605
+#: editor.cc:121 editor.cc:3633
 msgid "Beats/3"
 msgstr "Battiti/3"
 
-#: editor.cc:119 editor.cc:3615
+#: editor.cc:122 editor.cc:3643
 msgid "Beats"
 msgstr "Battiti"
 
-#: editor.cc:120 editor.cc:3617
+#: editor.cc:123 editor.cc:3645
 msgid "Bars"
 msgstr "Battute"
 
-#: editor.cc:121 editor.cc:3619
+#: editor.cc:124 editor.cc:3647
 msgid "Marks"
 msgstr "Marcatori"
 
-#: editor.cc:122 editor.cc:141 editor.cc:3621 editor.cc:3687
+#: editor.cc:125 editor.cc:144 editor.cc:3649 editor.cc:3715
 msgid "Edit Cursor"
 msgstr "Cursore di modifica"
 
-#: editor.cc:123 editor.cc:3623
+#: editor.cc:126 editor.cc:3651
 msgid "Region starts"
 msgstr "Regioni/inizio"
 
-#: editor.cc:124 editor.cc:3625
+#: editor.cc:127 editor.cc:3653
 msgid "Region ends"
 msgstr "Regioni/fine"
 
-#: editor.cc:125 editor.cc:3629
+#: editor.cc:128 editor.cc:3657
 msgid "Region syncs"
 msgstr "Regioni/sincronizzazione"
 
-#: editor.cc:126 editor.cc:3627
+#: editor.cc:129 editor.cc:3655
 msgid "Region bounds"
 msgstr "Regioni/confini"
 
-#: editor.cc:132 editor.cc:3662
+#: editor.cc:135 editor.cc:3690
 msgid "Magnetic"
 msgstr "Magnetico"
 
-#: editor.cc:137 editor.cc:3679 export_dialog.cc:140 export_dialog.cc:156
+#: editor.cc:140 editor.cc:3707 export_dialog.cc:140 export_dialog.cc:156
 #: export_dialog.cc:1068 export_dialog.cc:1072
 msgid "Left"
 msgstr "Sinistra"
 
-#: editor.cc:138 editor.cc:3681 export_dialog.cc:141 export_dialog.cc:157
+#: editor.cc:141 editor.cc:3709 export_dialog.cc:141 export_dialog.cc:157
 msgid "Right"
 msgstr "Destra"
 
-#: editor.cc:139 editor.cc:3683
+#: editor.cc:142 editor.cc:3711
 msgid "Center"
 msgstr "Centro"
 
-#: editor.cc:140 editor.cc:3685
+#: editor.cc:143 editor.cc:3713
 msgid "Playhead"
 msgstr "Inizio"
 
 #. time display buttons
-#: editor.cc:183
+#: editor.cc:186
 msgid "Mins:Secs"
 msgstr "Min:Sec"
 
-#: editor.cc:186 editor_rulers.cc:353
+#: editor.cc:189 editor_rulers.cc:354
 msgid "Frames"
 msgstr ""
 
-#: editor.cc:187 editor_rulers.cc:373
+#: editor.cc:190 editor_rulers.cc:374
 msgid "Tempo"
 msgstr ""
 
-#: editor.cc:188 editor_rulers.cc:367
+#: editor.cc:191 editor_rulers.cc:368
 msgid "Meter"
 msgstr ""
 
-#: editor.cc:189 editor_rulers.cc:379
+#: editor.cc:192 editor_rulers.cc:380
 msgid "Location Markers"
 msgstr "Marcatori di posizione"
 
-#: editor.cc:190 editor_rulers.cc:385
+#: editor.cc:193 editor_rulers.cc:386
 msgid "Range Markers"
 msgstr "Marcatori di intervallo"
 
-#: editor.cc:191 editor_rulers.cc:391
+#: editor.cc:194 editor_rulers.cc:392
 msgid "Loop/Punch Ranges"
 msgstr "Intervalli di Loop/Punch"
 
-#: editor.cc:213
+#: editor.cc:216
 msgid "range"
 msgstr "intervallo"
 
-#: editor.cc:214
+#: editor.cc:217
 msgid "object"
 msgstr "oggetto"
 
-#: editor.cc:216
+#: editor.cc:219
 msgid "zoom"
 msgstr ""
 
-#: editor.cc:217
+#: editor.cc:220
 msgid "timefx"
 msgstr ""
 
-#: editor.cc:218
+#: editor.cc:221
 msgid "listen"
 msgstr ""
 
-#: editor.cc:220
+#: editor.cc:223
 msgid "mode"
 msgstr "modo"
 
-#: editor.cc:221
+#: editor.cc:224
 msgid "automation"
 msgstr "automazione"
 
-#: editor.cc:223
+#: editor.cc:226
 msgid "Edit Mode"
 msgstr "Modalità di modifica"
 
-#: editor.cc:224 editor_actions.cc:283
+#: editor.cc:227 editor_actions.cc:284
 msgid "Snap To"
 msgstr "Allinea a"
 
-#: editor.cc:225
+#: editor.cc:228
 msgid "Snap Mode"
 msgstr "Modalita' di Allineamento"
 
-#: editor.cc:226
+#: editor.cc:229
 msgid "Zoom Focus"
 msgstr ""
 
 #. </CMT Additions>
 #. nudge
-#: editor.cc:234 editor.cc:1907 editor.cc:2073 editor.cc:2129
+#: editor.cc:237 editor.cc:1900 editor.cc:2066 editor.cc:2122
 msgid "Nudge"
 msgstr "Sposta"
 
-#: editor.cc:466
+#: editor.cc:470
 msgid "Zoom in"
 msgstr "Zoom avanti"
 
-#: editor.cc:467
+#: editor.cc:471
 msgid "Zoom out"
 msgstr "Zoom indietro"
 
-#: editor.cc:470
+#: editor.cc:474
 msgid "Zoom to session"
 msgstr "Zoom alla selezione"
 
-#: editor.cc:485
+#: editor.cc:489
 msgid "Zoom Span"
 msgstr ""
 
-#: editor.cc:498 editor.cc:524 editor_actions.cc:61 mixer_ui.cc:85
+#: editor.cc:502 editor.cc:528 editor_actions.cc:62 mixer_ui.cc:86
+#: mixer_ui.cc:112
 #, fuzzy
 msgid "Visible"
 msgstr "visibile"
 
-#: editor.cc:499 editor.cc:522
+#: editor.cc:503 editor.cc:526
 #, fuzzy
 msgid "Name"
 msgstr "Rinomina"
 
-#: editor.cc:595 editor.cc:661
+#: editor.cc:602 editor.cc:669
 #, fuzzy
 msgid "Regions"
 msgstr "Regione"
 
-#: editor.cc:634 editor.cc:673
+#: editor.cc:642 editor.cc:681
 msgid "Chunks"
 msgstr "Spezzoni"
 
-#: editor.cc:664
+#: editor.cc:672
 #, fuzzy
 msgid "Tracks/Busses"
 msgstr "Tracce/Bus"
 
-#: editor.cc:667
+#: editor.cc:675
 msgid "Snapshots"
 msgstr "Istantanee"
 
-#: editor.cc:670
+#: editor.cc:678
 msgid "Edit Groups"
 msgstr "Modifica Gruppi"
 
-#: editor.cc:719
+#: editor.cc:727
 msgid "Nudge region/selection forwards"
 msgstr "Sposta regione/selezione in avanti"
 
-#: editor.cc:720
+#: editor.cc:728
 msgid "Nudge region/selection backwards"
 msgstr "Sposta regione/selezione indietro"
 
-#: editor.cc:727 editor_mixer.cc:298
+#: editor.cc:735 editor_mixer.cc:299
 msgid "ardour: editor"
 msgstr ""
 
-#: editor.cc:728
+#: editor.cc:736
 msgid "ardour_editor"
 msgstr ""
 
-#: editor.cc:1190
+#: editor.cc:1183
 msgid "ardour: editor: "
 msgstr ""
 
 #. force name
-#: editor.cc:1275 editor.cc:1284 editor_markers.cc:869
+#: editor.cc:1268 editor.cc:1277 editor_markers.cc:870
 msgid "Loop"
 msgstr ""
 
 #. force name
-#: editor.cc:1289 editor.cc:1298 editor_markers.cc:895
+#: editor.cc:1282 editor.cc:1291 editor_markers.cc:896
 msgid "Punch"
 msgstr ""
 
-#: editor.cc:1446 editor_mouse.cc:1721
+#: editor.cc:1439 editor_mouse.cc:1742
 msgid "programming error: fade in canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor.cc:1458 editor.cc:1475 redirect_box.cc:1071
+#: editor.cc:1451 editor.cc:1468 redirect_box.cc:1073
 msgid "Deactivate"
 msgstr "Disattiva"
 
 #. activation
-#: editor.cc:1460 editor.cc:1477 redirect_box.cc:1069
+#: editor.cc:1453 editor.cc:1470 redirect_box.cc:1071
 msgid "Activate"
 msgstr "Attiva"
 
-#: editor.cc:1465 editor.cc:1482
+#: editor.cc:1458 editor.cc:1475
 msgid "Linear"
 msgstr "Lineare"
 
-#: editor.cc:1466 editor.cc:1483 editor_actions.cc:375
+#: editor.cc:1459 editor.cc:1476 editor_actions.cc:376
 msgid "Slowest"
 msgstr "Piu' Lento"
 
-#: editor.cc:1467 editor.cc:1484 editor_actions.cc:376
+#: editor.cc:1460 editor.cc:1477 editor_actions.cc:377
 msgid "Slow"
 msgstr "Lento"
 
-#: editor.cc:1468 editor.cc:1485 editor_actions.cc:378
+#: editor.cc:1461 editor.cc:1478 editor_actions.cc:379
 msgid "Fast"
 msgstr "Veloce"
 
-#: editor.cc:1469 editor.cc:1486 editor_actions.cc:380
+#: editor.cc:1462 editor.cc:1479 editor_actions.cc:381
 msgid "Fastest"
 msgstr "Più Veloce"
 
-#: editor.cc:1596 editor.cc:1604
+#: editor.cc:1589 editor.cc:1597
 msgid "Freeze"
 msgstr ""
 
-#: editor.cc:1600
+#: editor.cc:1593
 msgid "Unfreeze"
 msgstr ""
 
-#: editor.cc:1769 editor.cc:1864
+#: editor.cc:1762 editor.cc:1857
 #, fuzzy
 msgid "Unmute"
 msgstr "muto"
 
 #. non-operative menu items for menu bar
 #. show editors
-#: editor.cc:1773 editor.cc:2053 editor.cc:2755 editor_actions.cc:26
-#: editor_markers.cc:506 mixer_strip.cc:512 mixer_strip.cc:572
-#: redirect_box.cc:1077
+#: editor.cc:1766 editor.cc:2046 editor.cc:2748 editor_actions.cc:27
+#: editor_markers.cc:507 mixer_strip.cc:495 mixer_strip.cc:563
+#: redirect_box.cc:1079
 msgid "Edit"
 msgstr "Modifica"
 
-#: editor.cc:1778
+#: editor.cc:1771
 msgid "Convert to short"
 msgstr ""
 
-#: editor.cc:1780
+#: editor.cc:1773
 msgid "Convert to full"
 msgstr ""
 
-#: editor.cc:1791
+#: editor.cc:1784
 #, fuzzy
 msgid "Crossfade"
 msgstr "Smorzamento Incrociato"
 
-#: editor.cc:1834
+#: editor.cc:1827
 msgid "Popup region editor"
 msgstr "Mostra l'editor di regione"
 
-#: editor.cc:1835
+#: editor.cc:1828
 #, fuzzy
 msgid "Raise to top layer"
 msgstr "Porta la regione al primo livello"
 
-#: editor.cc:1836
+#: editor.cc:1829
 #, fuzzy
 msgid "Lower to bottom layer"
 msgstr "Porta la regione all'ultimo livello"
 
-#: editor.cc:1838
+#: editor.cc:1831
 msgid "Define sync point"
 msgstr "Definisci il punto di sincronizzazione"
 
-#: editor.cc:1839
+#: editor.cc:1832
 msgid "Remove sync point"
 msgstr "Rimuovi il punto di sincronizzazione"
 
-#: editor.cc:1844
+#: editor.cc:1837
 #, fuzzy
 msgid "Bounce"
 msgstr "Fai il Bounce dell'intervallo"
 
-#: editor.cc:1847
+#: editor.cc:1840
 #, fuzzy
 msgid "Analyze region"
 msgstr "Suona la Regione"
 
-#: editor.cc:1859
+#: editor.cc:1852
 msgid "Lock"
 msgstr "Blocca"
 
-#: editor.cc:1860
+#: editor.cc:1853
 msgid "Unlock"
 msgstr "Sblocca"
 
-#: editor.cc:1870
+#: editor.cc:1863
 msgid "Original position"
 msgstr "Posizione originale"
 
-#: editor.cc:1876
+#: editor.cc:1869
 msgid "Toggle envelope visibility"
 msgstr ""
 
-#: editor.cc:1877
+#: editor.cc:1870
 #, fuzzy
 msgid "Toggle envelope active"
 msgstr "attivo/passivo"
 
-#: editor.cc:1881
+#: editor.cc:1874
 #, fuzzy
 msgid "DeNormalize"
 msgstr "Normalizza"
 
-#: editor.cc:1883
+#: editor.cc:1876
 msgid "Normalize"
 msgstr "Normalizza"
 
-#: editor.cc:1886
+#: editor.cc:1879
 msgid "Reverse"
 msgstr ""
 
 #. range related stuff
-#: editor.cc:1892
+#: editor.cc:1885
 #, fuzzy
 msgid "Add Range Markers"
 msgstr "Marcatori di intervallo"
 
-#: editor.cc:1893
+#: editor.cc:1886
 #, fuzzy
 msgid "Set Range"
 msgstr "Separa l'intervallo"
 
-#: editor.cc:1902
+#: editor.cc:1895
 #, fuzzy
 msgid "Nudge fwd"
 msgstr "Sposta"
 
-#: editor.cc:1903
+#: editor.cc:1896
 #, fuzzy
 msgid "Nudge bwd"
 msgstr "Sposta"
 
-#: editor.cc:1904
+#: editor.cc:1897
 msgid "Nudge fwd by capture offset"
 msgstr ""
 
-#: editor.cc:1905
+#: editor.cc:1898
 msgid "Nudge bwd by capture offset"
 msgstr ""
 
-#: editor.cc:1914
+#: editor.cc:1907
 msgid "Start to edit cursor"
 msgstr "Inizio al cursore di modifica"
 
-#: editor.cc:1915
+#: editor.cc:1908
 msgid "Edit cursor to end"
 msgstr "Cursore di modifica alla fine"
 
-#: editor.cc:1917
+#: editor.cc:1910 gain_meter.cc:181 gain_meter.cc:813 panner_ui.cc:98
+#: panner_ui.cc:803
 msgid "Trim"
 msgstr ""
 
-#: editor.cc:1920
+#: editor.cc:1913
 msgid "Split"
 msgstr "Dividi"
 
-#: editor.cc:1923
+#: editor.cc:1916
 msgid "Make mono regions"
 msgstr "Crea regioni mono"
 
-#: editor.cc:1926
+#: editor.cc:1919
 msgid "Duplicate"
 msgstr "Duplica"
 
-#: editor.cc:1927
+#: editor.cc:1920
 msgid "Fill Track"
 msgstr "Riempi Traccia"
 
-#: editor.cc:1931
+#: editor.cc:1924
 msgid "Destroy"
 msgstr "Distruggi"
 
-#: editor.cc:1961
+#: editor.cc:1954
 msgid "Play range"
 msgstr "Suona l'intervallo"
 
-#: editor.cc:1962
+#: editor.cc:1955
 msgid "Loop range"
 msgstr "Intervallo di loop"
 
-#: editor.cc:1966
+#: editor.cc:1959
 #, fuzzy
 msgid "Analyze range"
 msgstr "Suona l'intervallo"
 
-#: editor.cc:1970
+#: editor.cc:1963
 #, fuzzy
 msgid "Separate range to track"
 msgstr "Separa l'intervallo"
 
-#: editor.cc:1971
+#: editor.cc:1964
 #, fuzzy
 msgid "Separate range to region list"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor.cc:1974
+#: editor.cc:1967
 #, fuzzy
 msgid "Select all in range"
 msgstr "Seleziona tutto nella traccia"
 
-#: editor.cc:1976 editor.cc:2021
+#: editor.cc:1969 editor.cc:2014
 #, fuzzy
 msgid "Set range to loop range"
 msgstr "Seleziona l'intervallo di loop"
 
-#: editor.cc:1977 editor.cc:2022
+#: editor.cc:1970 editor.cc:2015
 #, fuzzy
 msgid "Set range to punch range"
 msgstr "Seleziona l'intervallo di punch"
 
-#: editor.cc:1979
+#: editor.cc:1972
 #, fuzzy
 msgid "Crop region to range"
 msgstr "Ridimensiona la Regione alla selezione"
 
-#: editor.cc:1980
+#: editor.cc:1973
 #, fuzzy
 msgid "Fill range with region"
 msgstr "Riempi intervallo con Regione"
 
-#: editor.cc:1981
+#: editor.cc:1974
 #, fuzzy
 msgid "Duplicate range"
 msgstr "Duplica"
 
-#: editor.cc:1982
+#: editor.cc:1975
 msgid "Create chunk from range"
 msgstr "Crea uno spezzone dall'intervallo"
 
-#: editor.cc:1984
+#: editor.cc:1977
 msgid "Bounce range"
 msgstr "Fai il Bounce dell'intervallo"
 
-#: editor.cc:1985
+#: editor.cc:1978
 #, fuzzy
 msgid "Export range"
 msgstr "Esporta regione"
 
-#: editor.cc:1987
+#: editor.cc:1980
 msgid "Range"
 msgstr "Intervallo"
 
-#: editor.cc:2002 editor.cc:2087
+#: editor.cc:1995 editor.cc:2080
 msgid "Play from edit cursor"
 msgstr "Suona dal cursore di modifica"
 
-#: editor.cc:2003 editor.cc:2088
+#: editor.cc:1996 editor.cc:2081
 msgid "Play from start"
 msgstr "Suona dall'inizio"
 
-#: editor.cc:2004
+#: editor.cc:1997
 #, fuzzy
 msgid "Play region"
 msgstr "Suona la Regione"
 
-#: editor.cc:2006
+#: editor.cc:1999
 msgid "Loop Region"
 msgstr "Regione in loop"
 
-#: editor.cc:2008 editor.cc:2089 sfdb_ui.cc:56
-msgid "Play"
-msgstr "Suona"
-
-#: editor.cc:2016 editor.cc:2097
+#: editor.cc:2009 editor.cc:2090
 msgid "Select All in track"
 msgstr "Seleziona tutto nella traccia"
 
-#: editor.cc:2017 editor.cc:2098 redirect_box.cc:1065
+#: editor.cc:2010 editor.cc:2091 redirect_box.cc:1067
 msgid "Select All"
 msgstr "Seleziona tutto"
 
-#: editor.cc:2018 editor.cc:2099
+#: editor.cc:2011 editor.cc:2092
 #, fuzzy
 msgid "Invert selection in track"
 msgstr "Inerti nella traccia"
 
-#: editor.cc:2019 editor.cc:2100
+#: editor.cc:2012 editor.cc:2093
 #, fuzzy
 msgid "Invert selection"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor.cc:2024 editor.cc:2102
+#: editor.cc:2017 editor.cc:2095
 #, fuzzy
 msgid "Select all after edit cursor"
 msgstr "Inizio al cursore di modifica"
 
-#: editor.cc:2025 editor.cc:2103
+#: editor.cc:2018 editor.cc:2096
 #, fuzzy
 msgid "Select all before edit cursor"
 msgstr "Inizio al cursore di modifica"
 
-#: editor.cc:2026 editor.cc:2104
+#: editor.cc:2019 editor.cc:2097
 #, fuzzy
 msgid "Select all after playhead"
 msgstr "Imposta dall'inizio"
 
-#: editor.cc:2027 editor.cc:2105
+#: editor.cc:2020 editor.cc:2098
 #, fuzzy
 msgid "Select all before playhead"
 msgstr "Imposta dall'inizio"
 
-#: editor.cc:2028
+#: editor.cc:2021
 #, fuzzy
 msgid "Select all between cursors"
 msgstr "Inizio al cursore di modifica"
 
 #. standard editing stuff
-#: editor.cc:2039 editor.cc:2115 editor.cc:3455 editor_actions.cc:213
-#: redirect_box.cc:1058
+#: editor.cc:2032 editor.cc:2108 editor.cc:3483 editor_actions.cc:214
+#: redirect_box.cc:1060
 msgid "Cut"
 msgstr "Taglia"
 
-#: editor.cc:2040 editor.cc:2116 editor.cc:3457 editor_actions.cc:218
-#: redirect_box.cc:1060
+#: editor.cc:2033 editor.cc:2109 editor.cc:3485 editor_actions.cc:219
+#: redirect_box.cc:1062
 msgid "Copy"
 msgstr "Copia"
 
-#: editor.cc:2041
+#: editor.cc:2034
 #, fuzzy
 msgid "Paste at edit cursor"
 msgstr "Inizio al cursore di modifica"
 
-#: editor.cc:2042
+#: editor.cc:2035
 #, fuzzy
 msgid "Paste at mouse"
 msgstr "utilizza le uscite master"
 
-#: editor.cc:2046 editor.cc:3462
+#: editor.cc:2039 editor.cc:3490
 msgid "Align"
 msgstr "Allinea"
 
-#: editor.cc:2047 editor.cc:3464
+#: editor.cc:2040 editor.cc:3492
 msgid "Align Relative"
 msgstr "Allinea Realtivo"
 
-#: editor.cc:2051
+#: editor.cc:2044
 msgid "Insert chunk"
 msgstr "Inserisci lo Spezzone"
 
-#: editor.cc:2058
+#: editor.cc:2051
 #, fuzzy
 msgid "Insert Selected Region"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor.cc:2059
+#: editor.cc:2052
 msgid "Insert Existing Audio"
 msgstr ""
 
-#: editor.cc:2068 editor.cc:2124
+#: editor.cc:2061 editor.cc:2117
 msgid "Nudge entire track fwd"
 msgstr "Sposta l'intera traccia in avanti"
 
-#: editor.cc:2069 editor.cc:2125
+#: editor.cc:2062 editor.cc:2118
 msgid "Nudge track after edit cursor fwd"
 msgstr "Avanza la traccia dopo il cursore di modifica"
 
-#: editor.cc:2070 editor.cc:2126
+#: editor.cc:2063 editor.cc:2119
 msgid "Nudge entire track bwd"
 msgstr "Arretra l'intera traccia"
 
-#: editor.cc:2071 editor.cc:2127
+#: editor.cc:2064 editor.cc:2120
 msgid "Nudge track after edit cursor bwd"
 msgstr "Arretra la traccia dopo il cursore di modifica"
 
-#: editor.cc:2117 editor.cc:3459 editor_actions.cc:220 redirect_box.cc:1062
+#: editor.cc:2110 editor.cc:3487 editor_actions.cc:221 redirect_box.cc:1064
 msgid "Paste"
 msgstr "Incolla"
 
-#: editor.cc:2637
+#: editor.cc:2630
 msgid "select/move objects"
 msgstr "seleziona/muovi gli oggetti"
 
-#: editor.cc:2638
+#: editor.cc:2631
 msgid "select/move ranges"
 msgstr "seleziona/muovi range"
 
-#: editor.cc:2639
+#: editor.cc:2632
 msgid "draw gain automation"
 msgstr "disegna l'automazione gain"
 
-#: editor.cc:2640
+#: editor.cc:2633
 msgid "select zoom range"
 msgstr "seleziona l'intervallo di zoom"
 
-#: editor.cc:2641
+#: editor.cc:2634
 msgid "stretch/shrink regions"
 msgstr "allunga/restringi le regioni"
 
-#: editor.cc:2642
+#: editor.cc:2635
 #, fuzzy
 msgid "listen to specific regions"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor.cc:2753
+#: editor.cc:2746
 msgid "Start:"
 msgstr "Inizio:"
 
-#: editor.cc:2754
+#: editor.cc:2747
 msgid "End:"
 msgstr "Fine:"
 
-#: editor.cc:3097
+#: editor.cc:3362 editor.cc:3402
 #, fuzzy
-msgid "set selected trackview"
-msgstr "Inserisci selezione"
+msgid "set selected regions"
+msgstr "Esegui la regione selezionata come loop"
 
-#: editor.cc:3137
-#, fuzzy
-msgid "set selected control point"
-msgstr "Rimuovi il punto di sincronizzazione"
-
-#: editor.cc:3246
-#, fuzzy
-msgid "set selected regionview"
-msgstr "Esegui la regione selezionata come loop"
-
-#: editor.cc:3334 editor.cc:3374
-#, fuzzy
-msgid "set selected regions"
-msgstr "Esegui la regione selezionata come loop"
-
-#: editor.cc:3430 editor_actions.cc:203
+#: editor.cc:3458 editor_actions.cc:204
 msgid "Undo"
 msgstr "Annulla"
 
-#: editor.cc:3432
+#: editor.cc:3460
 msgid "Undo (%1)"
 msgstr "Annulla (%1)"
 
-#: editor.cc:3442 editor_actions.cc:205
+#: editor.cc:3470 editor_actions.cc:206
 msgid "Redo"
 msgstr "Ripristina"
 
-#: editor.cc:3444
+#: editor.cc:3472
 msgid "Redo (%1)"
 msgstr "Ripristina (%1)"
 
-#: editor.cc:3478
+#: editor.cc:3506
 msgid "... as new track"
 msgstr ""
 
-#: editor.cc:3479
+#: editor.cc:3507
 #, fuzzy
 msgid "... as new region"
 msgstr "Sposta Regione/i"
 
-#: editor.cc:3481
+#: editor.cc:3509
 msgid "Import audio (copy)"
 msgstr "Importa audio (copia)"
 
-#: editor.cc:3484
+#: editor.cc:3512
 msgid "Remove last capture"
 msgstr "Rimuovi l'ultima registrazione"
 
-#: editor.cc:3508
+#: editor.cc:3536
 msgid "Duplicate how many times?"
 msgstr "Quante volte duplico?"
 
-#: editor.cc:3994
+#: editor.cc:4022
 msgid ""
 "Playlist %1 is currently unused.\n"
 "If left alone, no audio files used by it will be cleaned.\n"
 "If deleted, audio files used by it alone by will cleaned."
 msgstr ""
 
-#: editor.cc:4002
+#: editor.cc:4030
 msgid "Delete playlist"
 msgstr ""
 
-#: editor.cc:4003
+#: editor.cc:4031
 msgid "Keep playlist"
 msgstr ""
 
-#: editor.cc:4004 editor_audio_import.cc:237 editor_ops.cc:1976
-#: editor_timefx.cc:52 export_dialog.cc:971 io_selector.cc:58
-#: io_selector.cc:792 redirect_box.cc:901 tempo_dialog.cc:19
-#: tempo_dialog.cc:36 tempo_dialog.cc:152 tempo_dialog.cc:170
+#: editor.cc:4032 editor_audio_import.cc:236 editor_ops.cc:2048
+#: editor_timefx.cc:71 export_dialog.cc:971 io_selector.cc:59
+#: io_selector.cc:793 redirect_box.cc:903 tempo_dialog.cc:20
+#: tempo_dialog.cc:37 tempo_dialog.cc:202 tempo_dialog.cc:220
 msgid "Cancel"
 msgstr "Cancella"
 
-#: editor.cc:4171
+#: editor.cc:4199
 #, fuzzy
 msgid "new playlists"
 msgstr "azzera le posizioni"
 
-#: editor.cc:4179
+#: editor.cc:4207
 #, fuzzy
 msgid "copy playlists"
 msgstr "azzera le posizioni"
 
-#: editor.cc:4187
+#: editor.cc:4215
 #, fuzzy
 msgid "clear playlists"
 msgstr "azzera le posizioni"
 
-#: editor_actions.cc:27
+#: editor_actions.cc:28
 #, fuzzy
 msgid "Select regions"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor_actions.cc:28
+#: editor_actions.cc:29
 #, fuzzy
 msgid "Select range operations"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor_actions.cc:29
+#: editor_actions.cc:30
 #, fuzzy
 msgid "Move edit cursor"
 msgstr "Inizio al cursore di modifica"
 
-#: editor_actions.cc:30
+#: editor_actions.cc:31
 #, fuzzy
 msgid "Region operations"
 msgstr "Regioni/creazione"
 
-#: editor_actions.cc:31
+#: editor_actions.cc:32
 msgid "Tools"
 msgstr ""
 
-#: editor_actions.cc:32
+#: editor_actions.cc:33
 msgid "View"
 msgstr ""
 
-#: editor_actions.cc:33
+#: editor_actions.cc:34
 #, fuzzy
 msgid "ZoomFocus"
 msgstr "Zoom indietro"
 
-#: editor_actions.cc:34
+#: editor_actions.cc:35
 msgid "Meter hold"
 msgstr ""
 
-#: editor_actions.cc:35
+#: editor_actions.cc:36
 msgid "Meter falloff"
 msgstr ""
 
-#: editor_actions.cc:37
+#: editor_actions.cc:38
 #, fuzzy
 msgid "Crossfades"
 msgstr "Smorzamento Incrociato"
 
-#: editor_actions.cc:38
+#: editor_actions.cc:39
 #, fuzzy
 msgid "Monitoring"
 msgstr "Usa il Monitoraggio Hardware"
 
-#: editor_actions.cc:39
+#: editor_actions.cc:40
 #, fuzzy
 msgid "Autoconnect"
 msgstr "Connetti"
 
-#: editor_actions.cc:40
+#: editor_actions.cc:41
 #, fuzzy
 msgid "Layering"
 msgstr "Livello"
 
-#: editor_actions.cc:41
+#: editor_actions.cc:42
 #, fuzzy
 msgid "Metering"
 msgstr "Usa il Monitoraggio Hardware"
 
-#: editor_actions.cc:42
+#: editor_actions.cc:43
 msgid "Fall off rate"
 msgstr ""
 
-#: editor_actions.cc:43
+#: editor_actions.cc:44
 msgid "Hold Time"
 msgstr ""
 
-#: editor_actions.cc:44
+#: editor_actions.cc:45
 msgid "Add Existing Audio"
 msgstr ""
 
 #. add named actions for the editor
-#: editor_actions.cc:49
+#: editor_actions.cc:50
 #, fuzzy
 msgid "Show Editor Mixer"
 msgstr "Mostra tutte le Tracce del Mixer"
 
-#: editor_actions.cc:54
+#: editor_actions.cc:55
 #, fuzzy
 msgid "Span Entire Overlap"
 msgstr "Porta la regione su di un livello"
 
-#: editor_actions.cc:56 editor_actions.cc:383
+#: editor_actions.cc:57 editor_actions.cc:384
 #, fuzzy
 msgid "Short"
 msgstr "entrata"
 
-#: editor_actions.cc:63
+#: editor_actions.cc:64
 msgid "Created Automatically"
 msgstr ""
 
-#: editor_actions.cc:66
+#: editor_actions.cc:67
 msgid "Playhead to Next Region Start"
 msgstr ""
 
-#: editor_actions.cc:68
+#: editor_actions.cc:69
 msgid "Playhead to Next Region End"
 msgstr ""
 
-#: editor_actions.cc:70
+#: editor_actions.cc:71
 msgid "Playhead to Next Region Sync"
 msgstr ""
 
-#: editor_actions.cc:73
+#: editor_actions.cc:74
 msgid "Playhead to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:75
+#: editor_actions.cc:76
 msgid "Playhead to Previous Region End"
 msgstr ""
 
-#: editor_actions.cc:77
+#: editor_actions.cc:78
 msgid "Playhead to Previous Region Sync"
 msgstr ""
 
-#: editor_actions.cc:80
+#: editor_actions.cc:81
 #, fuzzy
 msgid "Edit Cursor to Next Region Start"
 msgstr "Cursore di modifica alla fine"
 
-#: editor_actions.cc:82
+#: editor_actions.cc:83
 #, fuzzy
 msgid "Edit Cursor to Next Region End"
 msgstr "Cursore di modifica alla fine"
 
-#: editor_actions.cc:84
+#: editor_actions.cc:85
 #, fuzzy
 msgid "Edit Cursor to Next Region Sync"
 msgstr "Cursore di modifica alla fine"
 
-#: editor_actions.cc:87
+#: editor_actions.cc:88
 msgid "Edit Cursor to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:89
+#: editor_actions.cc:90
 #, fuzzy
 msgid "Edit Cursor to Previous Region End"
 msgstr "Cursore di modifica alla fine"
 
-#: editor_actions.cc:91
+#: editor_actions.cc:92
 #, fuzzy
 msgid "Edit Cursor to Previous Region Sync"
 msgstr "Cursore di modifica alla fine"
 
-#: editor_actions.cc:94
+#: editor_actions.cc:95
 msgid "Playhead to Range Start"
 msgstr ""
 
-#: editor_actions.cc:96
+#: editor_actions.cc:97
 #, fuzzy
 msgid "Playhead to Range End"
 msgstr "Suona l'intervallo di loop"
 
-#: editor_actions.cc:99
+#: editor_actions.cc:100
 #, fuzzy
 msgid "Edit Cursor to Range Start"
 msgstr "Cursore di modifica alla fine"
 
-#: editor_actions.cc:101
+#: editor_actions.cc:102
 #, fuzzy
 msgid "Edit Cursor to Range End"
 msgstr "Cursore di modifica alla fine"
 
-#: editor_actions.cc:104 editor_ops.cc:1300
+#: editor_actions.cc:105 editor_ops.cc:1363
 #, fuzzy
 msgid "select all"
 msgstr "Seleziona tutto"
 
-#: editor_actions.cc:106
+#: editor_actions.cc:107
 #, fuzzy
 msgid "Select All After Edit Cursor"
 msgstr "Suona dal cursore di modifica"
 
-#: editor_actions.cc:108
+#: editor_actions.cc:109
 msgid "Select All Before Edit Cursor"
 msgstr ""
 
-#: editor_actions.cc:111
+#: editor_actions.cc:112
 #, fuzzy
 msgid "Select All After Playhead"
 msgstr "Imposta dall'inizio"
 
-#: editor_actions.cc:113
+#: editor_actions.cc:114
 #, fuzzy
 msgid "Select All Before Playhead"
 msgstr "Imposta dall'inizio"
 
-#: editor_actions.cc:115
+#: editor_actions.cc:116
 #, fuzzy
 msgid "Select All Between Cursors"
 msgstr "Suona dal cursore di modifica"
 
-#: editor_actions.cc:118
+#: editor_actions.cc:119
 #, fuzzy
 msgid "Select All in Punch Range"
 msgstr "Imposta l'intervallo di Punch"
 
-#: editor_actions.cc:120
+#: editor_actions.cc:121
 #, fuzzy
 msgid "Select All in Loop Range"
 msgstr "Seleziona l'intervallo di loop"
 
-#: editor_actions.cc:123
+#: editor_actions.cc:124
 msgid "Jump Forward to Mark"
 msgstr ""
 
-#: editor_actions.cc:125
+#: editor_actions.cc:126
 msgid "Jump Backward to Mark"
 msgstr ""
 
-#: editor_actions.cc:127
+#: editor_actions.cc:128
 #, fuzzy
 msgid "Add Location from Playhead"
 msgstr "Imposta dall'inizio"
 
-#: editor_actions.cc:130
+#: editor_actions.cc:131
 #, fuzzy
 msgid "Nudge Forward"
 msgstr "Sposta"
 
-#: editor_actions.cc:132
+#: editor_actions.cc:133
 #, fuzzy
 msgid "Nudge Next Forward"
 msgstr "Sposta regione/selezione in avanti"
 
-#: editor_actions.cc:134
+#: editor_actions.cc:135
 #, fuzzy
 msgid "Nudge Backward"
 msgstr "Sposta"
 
-#: editor_actions.cc:136
+#: editor_actions.cc:137
 #, fuzzy
 msgid "Nudge Next Backward"
 msgstr "Sposta l'intera traccia in avanti"
 
-#: editor_actions.cc:139
+#: editor_actions.cc:140
 #, fuzzy
 msgid "Zoom Out"
 msgstr "Zoom indietro"
 
-#: editor_actions.cc:141
+#: editor_actions.cc:142
 #, fuzzy
 msgid "Zoom In"
 msgstr "Zoom avanti"
 
-#: editor_actions.cc:143
+#: editor_actions.cc:144
 #, fuzzy
 msgid "Zoom to Session"
 msgstr "Zoom alla selezione"
 
-#: editor_actions.cc:146
+#: editor_actions.cc:147
 #, fuzzy
 msgid "Scroll Tracks Up"
 msgstr "Riempi Traccia"
 
-#: editor_actions.cc:148
+#: editor_actions.cc:149
 msgid "Scroll Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:150
+#: editor_actions.cc:151
 #, fuzzy
 msgid "Step Tracks Up"
 msgstr "Nascondi traccia"
 
-#: editor_actions.cc:152
+#: editor_actions.cc:153
 msgid "Step Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:155
+#: editor_actions.cc:156
 msgid "Scroll Backward"
 msgstr ""
 
-#: editor_actions.cc:157
+#: editor_actions.cc:158
 msgid "Scroll Forward"
 msgstr ""
 
-#: editor_actions.cc:159
+#: editor_actions.cc:160
 msgid "goto"
 msgstr ""
 
-#: editor_actions.cc:161
+#: editor_actions.cc:162
 #, fuzzy
 msgid "Center Playhead"
 msgstr "Inizio"
 
-#: editor_actions.cc:163
+#: editor_actions.cc:164
 #, fuzzy
 msgid "Center Edit Cursor"
 msgstr "Cursore di modifica"
 
-#: editor_actions.cc:165
+#: editor_actions.cc:166
 #, fuzzy
 msgid "Playhead Forward"
 msgstr "Inizio"
 
-#: editor_actions.cc:167
+#: editor_actions.cc:168
 #, fuzzy
 msgid "Playhead Backward"
 msgstr "Inizio"
 
-#: editor_actions.cc:169
+#: editor_actions.cc:170
 #, fuzzy
 msgid "Playhead to Edit"
 msgstr "Inizio"
 
-#: editor_actions.cc:171
+#: editor_actions.cc:172
 #, fuzzy
 msgid "Edit to Playhead"
 msgstr "Imposta dall'inizio"
 
-#: editor_actions.cc:174
+#: editor_actions.cc:175
 #, fuzzy
 msgid "Align Regions Start"
 msgstr "Regioni/inizio"
 
-#: editor_actions.cc:176
+#: editor_actions.cc:177
 #, fuzzy
 msgid "Align Regions Start Relative"
 msgstr "Allinea Realtivo"
 
-#: editor_actions.cc:178
+#: editor_actions.cc:179
 #, fuzzy
 msgid "Align Regions End"
 msgstr "Sposta Regione/i"
 
-#: editor_actions.cc:180
+#: editor_actions.cc:181
 #, fuzzy
 msgid "Align Regions End Relative"
 msgstr "Allinea Realtivo"
 
-#: editor_actions.cc:183
+#: editor_actions.cc:184
 #, fuzzy
 msgid "Align Regions Sync"
 msgstr "Sposta Regione/i"
 
-#: editor_actions.cc:185
+#: editor_actions.cc:186
 #, fuzzy
 msgid "Align Regions Sync Relative"
 msgstr "Allinea Realtivo"
 
-#: editor_actions.cc:188
+#: editor_actions.cc:189
 msgid "Audition at Mouse"
 msgstr ""
 
-#: editor_actions.cc:190
+#: editor_actions.cc:191
 #, fuzzy
 msgid "Brush at Mouse"
 msgstr "utilizza le uscite master"
 
-#: editor_actions.cc:192
+#: editor_actions.cc:193
 #, fuzzy
 msgid "Set Edit Cursor"
 msgstr "Cursore di modifica"
 
-#: editor_actions.cc:194
+#: editor_actions.cc:195
 #, fuzzy
 msgid "Mute/Unmute Region"
 msgstr "Crea una Regione"
 
-#: editor_actions.cc:196
+#: editor_actions.cc:197
 #, fuzzy
 msgid "Set Playhead"
 msgstr "Inizio"
 
-#: editor_actions.cc:198
+#: editor_actions.cc:199
 #, fuzzy
 msgid "Split Region"
 msgstr "Separa la Regione"
 
-#: editor_actions.cc:200
+#: editor_actions.cc:201
 #, fuzzy
 msgid "Set Region Sync Position"
 msgstr "Per Posizione della Regione"
 
-#: editor_actions.cc:208
+#: editor_actions.cc:209
 #, fuzzy
 msgid "Export Session"
 msgstr "Esporta regione"
 
-#: editor_actions.cc:210
+#: editor_actions.cc:211
 #, fuzzy
 msgid "Export Range"
 msgstr "Separa l'intervallo"
 
 #. Note: for now, editor-delete does the exact same thing as editor-cut
-#: editor_actions.cc:216
+#: editor_actions.cc:217
 #, fuzzy
 msgid "Delete"
 msgstr "Elimina"
 
-#: editor_actions.cc:222
+#: editor_actions.cc:223
 #, fuzzy
 msgid "Duplicate Region"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor_actions.cc:224
+#: editor_actions.cc:225
 #, fuzzy
 msgid "Duplicate Range"
 msgstr "Duplica"
 
-#: editor_actions.cc:226
+#: editor_actions.cc:227
 msgid "Insert Region"
 msgstr "Inserisci la Regione"
 
-#: editor_actions.cc:228
+#: editor_actions.cc:229
 #, fuzzy
 msgid "Reverse Region"
 msgstr "fai il Reverse della regione"
 
-#: editor_actions.cc:230
+#: editor_actions.cc:231
 #, fuzzy
 msgid "Normalize Region"
 msgstr "Normalizza"
 
-#: editor_actions.cc:232
+#: editor_actions.cc:233
 #, fuzzy
 msgid "crop"
 msgstr "copia"
 
-#: editor_actions.cc:234
+#: editor_actions.cc:235
 #, fuzzy
 msgid "Insert Chunk"
 msgstr "Inserisci lo Spezzone"
 
-#: editor_actions.cc:237
+#: editor_actions.cc:238
 #, fuzzy
 msgid "Split at edit cursor"
 msgstr "Inizio al cursore di modifica"
 
-#: editor_actions.cc:240
+#: editor_actions.cc:241
 #, fuzzy
 msgid "Start Range"
 msgstr "Separa l'intervallo"
 
-#: editor_actions.cc:242
+#: editor_actions.cc:243
 msgid "Finish Range"
 msgstr ""
 
-#: editor_actions.cc:244
+#: editor_actions.cc:245
 msgid "Finish add Range"
 msgstr ""
 
-#: editor_actions.cc:247
+#: editor_actions.cc:248
 msgid "Extend Range to End of Region"
 msgstr ""
 
-#: editor_actions.cc:249
+#: editor_actions.cc:250
 #, fuzzy
 msgid "Extend Range to Start of Region"
 msgstr "Vai all'inizio della sessione"
 
-#: editor_actions.cc:252
+#: editor_actions.cc:253
 #, fuzzy
 msgid "Follow Playhead"
 msgstr "Segui il cursore"
 
-#: editor_actions.cc:260
+#: editor_actions.cc:261
 #, fuzzy
 msgid "Zoom Focus Left"
 msgstr "Zoom indietro"
 
-#: editor_actions.cc:262
+#: editor_actions.cc:263
 #, fuzzy
 msgid "Zoom Focus Right"
 msgstr "Zoom indietro"
 
-#: editor_actions.cc:264
+#: editor_actions.cc:265
 #, fuzzy
 msgid "Zoom Focus Center"
 msgstr "Zoom indietro"
 
-#: editor_actions.cc:266
+#: editor_actions.cc:267
 msgid "Zoom Focus Playhead"
 msgstr ""
 
-#: editor_actions.cc:268
+#: editor_actions.cc:269
 #, fuzzy
 msgid "Zoom Focus Edit"
 msgstr "Zoom indietro"
 
-#: editor_actions.cc:274
+#: editor_actions.cc:275
 msgid "Object Tool"
 msgstr ""
 
-#: editor_actions.cc:275
+#: editor_actions.cc:276
 #, fuzzy
 msgid "Range Tool"
 msgstr "Intervallo"
 
-#: editor_actions.cc:276
+#: editor_actions.cc:277
 msgid "Gain Tool"
 msgstr ""
 
-#: editor_actions.cc:277
+#: editor_actions.cc:278
 #, fuzzy
 msgid "Zoom Tool"
 msgstr "Zoom indietro"
 
-#: editor_actions.cc:278
+#: editor_actions.cc:279
 msgid "Timefx Tool"
 msgstr ""
 
-#: editor_actions.cc:285
+#: editor_actions.cc:286
 #, fuzzy
 msgid "Snap to frame"
 msgstr "Modalita' di Allineamento"
 
-#: editor_actions.cc:286
+#: editor_actions.cc:287
 #, fuzzy
 msgid "Snap to cd frame"
 msgstr "Modalita' di Allineamento"
 
-#: editor_actions.cc:287
+#: editor_actions.cc:288
 msgid "Snap to SMPTE frame"
 msgstr ""
 
-#: editor_actions.cc:288
+#: editor_actions.cc:289
 msgid "Snap to SMPTE seconds"
 msgstr ""
 
-#: editor_actions.cc:289
+#: editor_actions.cc:290
 msgid "Snap to SMPTE minutes"
 msgstr ""
 
-#: editor_actions.cc:290
+#: editor_actions.cc:291
 #, fuzzy
 msgid "Snap to seconds"
 msgstr "Secondi"
 
-#: editor_actions.cc:291
+#: editor_actions.cc:292
 msgid "Snap to minutes"
 msgstr ""
 
-#: editor_actions.cc:292
+#: editor_actions.cc:293
 #, fuzzy
 msgid "Snap to thirtyseconds"
 msgstr "trentaduesimo (32)"
 
-#: editor_actions.cc:293
+#: editor_actions.cc:294
 msgid "Snap to asixteenthbeat"
 msgstr ""
 
-#: editor_actions.cc:294
+#: editor_actions.cc:295
 msgid "Snap to eighths"
 msgstr ""
 
-#: editor_actions.cc:295
+#: editor_actions.cc:296
 msgid "Snap to quarters"
 msgstr ""
 
-#: editor_actions.cc:296
+#: editor_actions.cc:297
 #, fuzzy
 msgid "Snap to thirds"
 msgstr "Modalita' di Allineamento"
 
-#: editor_actions.cc:297
+#: editor_actions.cc:298
 #, fuzzy
 msgid "Snap to beat"
 msgstr "Modalita' di Allineamento"
 
-#: editor_actions.cc:298
+#: editor_actions.cc:299
 #, fuzzy
 msgid "Snap to bar"
 msgstr "Allinea a"
 
-#: editor_actions.cc:299
+#: editor_actions.cc:300
 #, fuzzy
 msgid "Snap to mark"
 msgstr "agggiungi marcatore di intervallo"
 
-#: editor_actions.cc:300
+#: editor_actions.cc:301
 #, fuzzy
 msgid "Snap to edit cursor"
 msgstr "Inizio al cursore di modifica"
 
-#: editor_actions.cc:301
+#: editor_actions.cc:302
 #, fuzzy
 msgid "Snap to region start"
 msgstr "Regioni/inizio"
 
-#: editor_actions.cc:302
+#: editor_actions.cc:303
 #, fuzzy
 msgid "Snap to region end"
 msgstr "Regioni/fine"
 
-#: editor_actions.cc:303
+#: editor_actions.cc:304
 #, fuzzy
 msgid "Snap to region sync"
 msgstr "Regioni/sincronizzazione"
 
-#: editor_actions.cc:304
+#: editor_actions.cc:305
 #, fuzzy
 msgid "Snap to region boundary"
 msgstr "Regioni/confini"
 
 #. the region list popup menu
-#: editor_actions.cc:313
+#: editor_actions.cc:314
 #, fuzzy
 msgid "Sort"
 msgstr "entrata"
 
-#: editor_actions.cc:321
+#: editor_actions.cc:322
 msgid "Show all"
 msgstr "Mostra tutto"
 
-#: editor_actions.cc:322
+#: editor_actions.cc:323
 #, fuzzy
 msgid "Show automatic regions"
 msgstr "mostra tutte le automazioni"
 
-#: editor_actions.cc:324
+#: editor_actions.cc:325
 msgid "Ascending"
 msgstr "Ascendente"
 
-#: editor_actions.cc:326
+#: editor_actions.cc:327
 msgid "Descending"
 msgstr "Discendente"
 
-#: editor_actions.cc:329
+#: editor_actions.cc:330
 msgid "By Region Name"
 msgstr "Per Nome di Regione"
 
-#: editor_actions.cc:331
+#: editor_actions.cc:332
 msgid "By Region Length"
 msgstr "Per Lunghezza di Regione"
 
-#: editor_actions.cc:333
+#: editor_actions.cc:334
 msgid "By Region Position"
 msgstr "Per Posizione della Regione"
 
-#: editor_actions.cc:335
+#: editor_actions.cc:336
 msgid "By Region Timestamp"
 msgstr "Per Data di Regione"
 
-#: editor_actions.cc:337
+#: editor_actions.cc:338
 msgid "By Region Start in File"
 msgstr "Per Inizio di Regione nel file"
 
-#: editor_actions.cc:339
+#: editor_actions.cc:340
 msgid "By Region End in File"
 msgstr "Per Fine di Regione nel file"
 
-#: editor_actions.cc:341
+#: editor_actions.cc:342
 msgid "By Source File Name"
 msgstr "Per Nome di sorgente del file"
 
-#: editor_actions.cc:343
+#: editor_actions.cc:344
 msgid "By Source File Length"
 msgstr "Per Lunghezza di sorgente del file"
 
-#: editor_actions.cc:345
+#: editor_actions.cc:346
 msgid "By Source File Creation Date"
 msgstr "Per Data di creazione di sorgente del file"
 
-#: editor_actions.cc:347
+#: editor_actions.cc:348
 msgid "By Source Filesystem"
 msgstr "Per Filesystem di sorgente"
 
 #. the next two are duplicate items with different names for use in two different contexts
-#: editor_actions.cc:353
+#: editor_actions.cc:354
 #, fuzzy
 msgid "Add External Audio"
 msgstr "Aggiungi alla lista di Regioni Esterne"
 
-#: editor_actions.cc:355
+#: editor_actions.cc:356
 #, fuzzy
 msgid "as Region(s)"
 msgstr "Sposta Regione/i"
 
-#: editor_actions.cc:357
+#: editor_actions.cc:358
 #, fuzzy
 msgid "as Tracks"
 msgstr "Tracce"
 
-#: editor_actions.cc:359
+#: editor_actions.cc:360
 #, fuzzy
 msgid "to Tracks"
 msgstr "Tracce"
 
-#: editor_actions.cc:362
+#: editor_actions.cc:363
 #, fuzzy
 msgid "Show Waveforms"
 msgstr "Mostra le forme Wave"
 
-#: editor_actions.cc:363
+#: editor_actions.cc:364
 #, fuzzy
 msgid "Show Waveforms While Recording"
 msgstr "Mostra le forme Wave in registrazione"
 
-#: editor_actions.cc:364
+#: editor_actions.cc:365
 #, fuzzy
 msgid "Show Measures"
 msgstr "Mostra le linee delle Misure"
 
-#: editor_actions.cc:377 editor_actions.cc:384
+#: editor_actions.cc:378 editor_actions.cc:385
 msgid "Medium"
 msgstr ""
 
-#: editor_actions.cc:379
+#: editor_actions.cc:380
 #, fuzzy
 msgid "Faster"
 msgstr "Veloce"
 
-#: editor_actions.cc:385
+#: editor_actions.cc:386
 msgid "Long"
 msgstr ""
 
-#: editor_actions.cc:389
+#: editor_actions.cc:390
 #, fuzzy
 msgid "Later is Higher"
 msgstr "Porta la regione giù di un livello"
 
-#: editor_actions.cc:390
+#: editor_actions.cc:391
 #, fuzzy
 msgid "Most Recently Moved/Added is Higher"
 msgstr "Porta la regione giù di un livello"
 
-#: editor_actions.cc:391
+#: editor_actions.cc:392
 #, fuzzy
 msgid "Most Recently Added is Higher"
 msgstr "Porta la regione giù di un livello"
@@ -3391,114 +3381,102 @@ msgstr ""
 msgid "Add existing audio to session"
 msgstr "mostra le automazioni esistenti"
 
-#: editor_audio_import.cc:143
+#: editor_audio_import.cc:142
 msgid "ardour: importing %1"
 msgstr "ardour: importazione di %1"
 
-#: editor_audio_import.cc:147
+#: editor_audio_import.cc:146
 msgid "Cancel Import"
 msgstr "Annullare l'importazione"
 
-#: editor_audio_import.cc:225
+#: editor_audio_import.cc:224
 #, fuzzy
 msgid "Editor: cannot open file \"%1\", (%2)"
 msgstr "Editor: impossibile aprire il file \"%1\" (%2)"
 
-#: editor_audio_import.cc:233
+#: editor_audio_import.cc:232
 #, fuzzy
 msgid "Cancel entire import"
 msgstr "Annullare l'importazione"
 
-#: editor_audio_import.cc:234
+#: editor_audio_import.cc:233
 #, fuzzy
 msgid "Don't embed it"
 msgstr "Non uscire"
 
-#: editor_audio_import.cc:235
+#: editor_audio_import.cc:234
 msgid "Embed all without questions"
 msgstr ""
 
-#: editor_audio_import.cc:240
+#: editor_audio_import.cc:239
 #, fuzzy
 msgid "Embed it anyway"
 msgstr "%1 comunque"
 
-#: editor_audio_import.cc:243
+#: editor_audio_import.cc:242
 #, fuzzy
 msgid ""
 "%1\n"
 "This audiofile's sample rate doesn't match the session sample rate!"
 msgstr "Il sample rate del file audio non corrisponde a quello della sessione!"
 
-#: editor_audio_import.cc:276
+#: editor_audio_import.cc:275
 msgid "could not open %1"
 msgstr "impossibile aprire %1"
 
-#: editor_audio_import.cc:321
+#: editor_audio_import.cc:320
 #, fuzzy
 msgid "insert sndfile"
 msgstr "Inserisci un file audio esterno"
 
 #. stuff for the verbose canvas cursor
-#: editor_canvas.cc:117
+#: editor_canvas.cc:118
 msgid "VerboseCanvasCursor"
 msgstr ""
 
-#: editor_canvas.cc:285
-msgid "Start a new session\n"
-msgstr "Inizia una nuova sessione\n"
-
-#: editor_canvas.cc:285
-msgid "via Session menu"
-msgstr "tramite il menu Sessione"
-
-#: editor_canvas.cc:288
-msgid "FirstActionMessage"
-msgstr ""
-
-#: editor_edit_groups.cc:52 mixer_ui.cc:732
+#: editor_edit_groups.cc:53 mixer_ui.cc:736
 #, fuzzy
 msgid "Activate All"
 msgstr "Attiva"
 
-#: editor_edit_groups.cc:53 mixer_ui.cc:733
+#: editor_edit_groups.cc:54 mixer_ui.cc:737
 #, fuzzy
 msgid "Disable All"
 msgstr "Disconnetti"
 
-#: editor_edit_groups.cc:55 mixer_ui.cc:735
+#: editor_edit_groups.cc:56 mixer_ui.cc:739
 #, fuzzy
 msgid "Add group"
 msgstr "nessun gruppo"
 
-#: editor_edit_groups.cc:225 mixer_ui.cc:964
+#: editor_edit_groups.cc:229 mixer_ui.cc:970
 #, fuzzy
 msgid "unnamed"
 msgstr "Rinomina"
 
-#: editor_edit_groups.cc:252 mixer_ui.cc:830
+#: editor_edit_groups.cc:258 mixer_ui.cc:834
 msgid "-all-"
 msgstr "-tutto-"
 
-#: editor_export_audio.cc:64
+#: editor_export_audio.cc:65
 msgid ""
 "There is no selection to export.\n"
 "\n"
 "Select a selection using the range mouse mode"
 msgstr ""
 
-#: editor_export_audio.cc:109
+#: editor_export_audio.cc:110
 msgid ""
 "There are no ranges to export.\n"
 "\n"
 "Create 1 or more ranges by dragging the mouse in the range bar"
 msgstr ""
 
-#: editor_imageframe.cc:624 editor_imageframe.cc:654
+#: editor_imageframe.cc:625 editor_imageframe.cc:655
 msgid "programming error: no ImageFrameView selected"
 msgstr ""
 
-#: editor_imageframe.cc:847 editor_imageframe.cc:869
+#: editor_imageframe.cc:848 editor_imageframe.cc:870
 msgid "programming error: no MarkerView selected"
 msgstr ""
 
@@ -3507,141 +3485,141 @@ msgstr ""
 msgid "mute region"
 msgstr "Metti in muto questa regione"
 
-#: editor_keys.cc:45
+#: editor_keys.cc:46
 #, fuzzy
 msgid "keyboard selection"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor_markers.cc:291 editor_ops.cc:1227 editor_ops.cc:1240
-#: editor_ops.cc:1258 location_ui.cc:773
+#: editor_markers.cc:292 editor_ops.cc:1290 editor_ops.cc:1303
+#: editor_ops.cc:1321 location_ui.cc:774
 msgid "add marker"
 msgstr "aggiungi marcatore"
 
-#: editor_markers.cc:306 editor_markers.cc:379 editor_markers.cc:551
-#: editor_markers.cc:569 editor_markers.cc:588 editor_markers.cc:607
-#: editor_markers.cc:637 editor_markers.cc:665 editor_markers.cc:693
-#: editor_markers.cc:731 editor_markers.cc:758 editor_markers.cc:781
-#: editor_markers.cc:800 editor_mouse.cc:1994 editor_mouse.cc:4237
+#: editor_markers.cc:307 editor_markers.cc:380 editor_markers.cc:552
+#: editor_markers.cc:570 editor_markers.cc:589 editor_markers.cc:608
+#: editor_markers.cc:638 editor_markers.cc:666 editor_markers.cc:694
+#: editor_markers.cc:732 editor_markers.cc:759 editor_markers.cc:782
+#: editor_markers.cc:801 editor_mouse.cc:2015 editor_mouse.cc:4275
 msgid "programming error: marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_markers.cc:330 location_ui.cc:655
+#: editor_markers.cc:331 location_ui.cc:656
 msgid "remove marker"
 msgstr "rimuovi marcatore"
 
-#: editor_markers.cc:457
+#: editor_markers.cc:458
 #, fuzzy
 msgid "Locate to Mark"
 msgstr "Posiziona a"
 
-#: editor_markers.cc:458
+#: editor_markers.cc:459
 #, fuzzy
 msgid "Play from Mark"
 msgstr "Suona dall'inizio"
 
-#: editor_markers.cc:459
+#: editor_markers.cc:460
 #, fuzzy
 msgid "Set Mark from Playhead"
 msgstr "Imposta dall'inizio"
 
-#: editor_markers.cc:463
+#: editor_markers.cc:464
 #, fuzzy
 msgid "Rename Mark"
 msgstr "Rinomina"
 
-#: editor_markers.cc:464
+#: editor_markers.cc:465
 #, fuzzy
 msgid "Hide Mark"
 msgstr "Nascondi traccia"
 
-#: editor_markers.cc:465
+#: editor_markers.cc:466
 #, fuzzy
 msgid "Remove Mark"
 msgstr "rimuovi marcatore"
 
-#: editor_markers.cc:478 editor_markers.cc:534
+#: editor_markers.cc:479 editor_markers.cc:535
 #, fuzzy
 msgid "Locate to Range Mark"
 msgstr "Marcatori di posizione"
 
-#: editor_markers.cc:479 editor_markers.cc:535
+#: editor_markers.cc:480 editor_markers.cc:536
 #, fuzzy
 msgid "Play from Range Mark"
 msgstr "Suona l'intervallo di loop"
 
-#: editor_markers.cc:480
+#: editor_markers.cc:481
 #, fuzzy
 msgid "Loop Range"
 msgstr "Intervallo di loop"
 
-#: editor_markers.cc:481 editor_markers.cc:536
+#: editor_markers.cc:482 editor_markers.cc:537
 #, fuzzy
 msgid "Set Range Mark from Playhead"
 msgstr "Imposta dall'inizio"
 
-#: editor_markers.cc:482 editor_markers.cc:537
+#: editor_markers.cc:483 editor_markers.cc:538
 #, fuzzy
 msgid "Set Range from Range Selection"
 msgstr "Suona intervallo/selezione"
 
-#: editor_markers.cc:486
+#: editor_markers.cc:487
 #, fuzzy
 msgid "Rename Range"
 msgstr "Rinomina"
 
-#: editor_markers.cc:487 editor_markers.cc:539
+#: editor_markers.cc:488 editor_markers.cc:540
 #, fuzzy
 msgid "Hide Range"
 msgstr "Aggiungi un nuovo Intervallo"
 
-#: editor_markers.cc:488
+#: editor_markers.cc:489
 #, fuzzy
 msgid "Remove Range"
 msgstr "Rimuovi Campo"
 
-#: editor_markers.cc:492 editor_markers.cc:541
+#: editor_markers.cc:493 editor_markers.cc:542
 #, fuzzy
 msgid "Separate Regions in Range"
 msgstr "Nuova Regione dall'intervallo"
 
-#: editor_markers.cc:493 editor_markers.cc:542
+#: editor_markers.cc:494 editor_markers.cc:543
 #, fuzzy
 msgid "Select All in Range"
 msgstr "Seleziona tutto nella traccia"
 
-#: editor_markers.cc:519
+#: editor_markers.cc:520
 msgid "Set Loop Range"
 msgstr "Imposta l'intervallo di loop"
 
-#: editor_markers.cc:520
+#: editor_markers.cc:521
 msgid "Set Punch Range"
 msgstr "Imposta l'intervallo di Punch"
 
-#: editor_markers.cc:814
+#: editor_markers.cc:815
 #, fuzzy
 msgid "New Name:"
 msgstr "nuovo nome: "
 
-#: editor_markers.cc:817
+#: editor_markers.cc:818
 msgid "ardour: rename mark"
 msgstr "ardour: rinomina il marcatore"
 
-#: editor_markers.cc:819
+#: editor_markers.cc:820
 #, fuzzy
 msgid "ardour: rename range"
 msgstr "ardour: rinomina la regione"
 
-#: editor_markers.cc:839
+#: editor_markers.cc:840
 #, fuzzy
 msgid "rename marker"
 msgstr "rimuovi marcatore"
 
-#: editor_markers.cc:864
+#: editor_markers.cc:865
 #, fuzzy
 msgid "set loop range"
 msgstr "Seleziona l'intervallo di loop"
 
-#: editor_markers.cc:890
+#: editor_markers.cc:891
 #, fuzzy
 msgid "set punch range"
 msgstr "Seleziona l'intervallo di punch"
@@ -3650,418 +3628,424 @@ msgstr "Seleziona l'intervallo di punch"
 msgid "Editor::event_frame() used on unhandled event type %1"
 msgstr ""
 
-#: editor_mouse.cc:1589
+#: editor_mouse.cc:313
+#, fuzzy
+msgid "select on click"
+msgstr "Usa come click"
+
+#: editor_mouse.cc:1590
 msgid "programming error: start_grab called without drag item"
 msgstr ""
 
-#: editor_mouse.cc:1793
+#: editor_mouse.cc:1814
 msgid "change fade in length"
 msgstr "modifica la lunghezza dello smorzamento in entrata"
 
-#: editor_mouse.cc:1811
+#: editor_mouse.cc:1832
 msgid "programming error: fade out canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:1885
+#: editor_mouse.cc:1906
 msgid "change fade out length"
 msgstr "cambia la durata dello smorzamento in uscita"
 
-#: editor_mouse.cc:1904
+#: editor_mouse.cc:1925
 msgid "programming error: cursor canvas item has no cursor data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2119
+#: editor_mouse.cc:2142
 #, fuzzy
 msgid "move marker"
 msgstr "rimuovi marcatore"
 
-#: editor_mouse.cc:2142 editor_mouse.cc:2173 editor_tempodisplay.cc:461
+#: editor_mouse.cc:2165 editor_mouse.cc:2196 editor_tempodisplay.cc:459
 msgid ""
 "programming error: meter marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2241
+#: editor_mouse.cc:2264
 #, fuzzy
 msgid "copy meter mark"
 msgstr "rimuovi marcatore"
 
-#: editor_mouse.cc:2251
+#: editor_mouse.cc:2274
 #, fuzzy
 msgid "move meter mark"
 msgstr "rimuovi marcatore"
 
-#: editor_mouse.cc:2266 editor_mouse.cc:2299 editor_tempodisplay.cc:327
-#: editor_tempodisplay.cc:411 editor_tempodisplay.cc:430
+#: editor_mouse.cc:2289 editor_mouse.cc:2322 editor_tempodisplay.cc:331
+#: editor_tempodisplay.cc:409 editor_tempodisplay.cc:428
 msgid ""
 "programming error: tempo marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2271 editor_mouse.cc:2304 editor_tempodisplay.cc:332
-#: editor_tempodisplay.cc:416
+#: editor_mouse.cc:2294 editor_mouse.cc:2327 editor_tempodisplay.cc:336
+#: editor_tempodisplay.cc:414
 msgid "programming error: marker for tempo is not a tempo marker!"
 msgstr ""
 
-#: editor_mouse.cc:2371
+#: editor_mouse.cc:2394
 #, fuzzy
 msgid "copy tempo mark"
 msgstr "rimuovi marcatore"
 
-#: editor_mouse.cc:2381
+#: editor_mouse.cc:2404
 #, fuzzy
 msgid "move tempo mark"
 msgstr "rimuovi marcatore"
 
-#: editor_mouse.cc:2395 editor_mouse.cc:2414 editor_mouse.cc:2427
+#: editor_mouse.cc:2418 editor_mouse.cc:2437 editor_mouse.cc:2450
 msgid ""
 "programming error: control point canvas item has no control point object "
 "pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2525
+#: editor_mouse.cc:2555
 msgid "programming error: line canvas item has no line pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2634
+#: editor_mouse.cc:2664
 #, fuzzy
 msgid "move region(s)"
 msgstr "fai il Reverse della regione"
 
-#. this is committed in the grab finished callback.
-#: editor_mouse.cc:2646
-msgid "Drag region copy"
-msgstr ""
-
-#: editor_mouse.cc:2758
+#: editor_mouse.cc:2727
 #, fuzzy
 msgid "Drag region brush"
 msgstr "Sposta Regione/i"
 
+#. don't copy again
+#. this is committed in the grab finished callback.
+#: editor_mouse.cc:2751
+msgid "Drag region copy"
+msgstr ""
+
 #. A selection grab currently creates two undo/redo operations, one for
 #. creating the new region and another for moving it.
 #.
-#: editor_mouse.cc:3574
+#: editor_mouse.cc:3609
 #, fuzzy
 msgid "selection grab"
 msgstr "seleziona l'intervallo di zoom"
 
-#: editor_mouse.cc:3615
+#: editor_mouse.cc:3650
 #, fuzzy
 msgid "cancel selection"
 msgstr "Suona intervallo/selezione"
 
-#: editor_mouse.cc:3722
+#: editor_mouse.cc:3760
 #, fuzzy
 msgid "range selection"
 msgstr "Suona intervallo/selezione"
 
-#: editor_mouse.cc:3738
+#: editor_mouse.cc:3776
 #, fuzzy
 msgid "trim selection start"
 msgstr "Regioni/inizio"
 
-#: editor_mouse.cc:3754
+#: editor_mouse.cc:3792
 #, fuzzy
 msgid "trim selection end"
 msgstr "Importa selezione"
 
-#: editor_mouse.cc:3771
+#: editor_mouse.cc:3809
 #, fuzzy
 msgid "move selection"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor_mouse.cc:4157
+#: editor_mouse.cc:4195
 #, fuzzy
 msgid "Start point trim"
 msgstr "Inizio al cursore di modifica"
 
-#: editor_mouse.cc:4185
+#: editor_mouse.cc:4223
 msgid "End point trim"
 msgstr ""
 
-#: editor_mouse.cc:4224
+#: editor_mouse.cc:4262
 msgid "trimmed region"
 msgstr ""
 
-#: editor_mouse.cc:4363
+#: editor_mouse.cc:4400
 #, fuzzy
 msgid "new range marker"
 msgstr "agggiungi marcatore di intervallo"
 
-#: editor_mouse.cc:4578
+#: editor_mouse.cc:4642
 #, fuzzy
 msgid "select regions"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor_mouse.cc:4607
+#: editor_mouse.cc:4671
 msgid "Name for region:"
 msgstr "Nome per la Regione"
 
-#: editor_mouse.cc:4671
+#: editor_mouse.cc:4735
 msgid "timestretch"
 msgstr ""
 
-#: editor_ops.cc:132
+#: editor_ops.cc:195
 #, fuzzy
 msgid "split"
 msgstr "Dividi"
 
-#: editor_ops.cc:168
+#: editor_ops.cc:231
 #, fuzzy
 msgid "remove region"
 msgstr "fai il Reverse della regione"
 
-#: editor_ops.cc:187
+#: editor_ops.cc:250
 msgid ""
 " This is destructive, will possibly delete audio files\n"
 "It cannot be undone\n"
 "Do you really want to destroy %1 ?"
 msgstr ""
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "these regions"
 msgstr "fai il Reverse della regione"
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "this region"
 msgstr "Metti in muto questa regione"
 
-#: editor_ops.cc:193 editor_ops.cc:3229 route_ui.cc:700
-#: visual_time_axis.cc:277
+#: editor_ops.cc:256 editor_ops.cc:3318 route_ui.cc:707
+#: visual_time_axis.cc:278
 msgid "No, do nothing."
 msgstr "No, non fare niente."
 
-#: editor_ops.cc:196
+#: editor_ops.cc:259
 #, fuzzy
 msgid "Yes, destroy them."
 msgstr "Si, rimuovi."
 
-#: editor_ops.cc:198 editor_ops.cc:3230
+#: editor_ops.cc:261 editor_ops.cc:3319
 msgid "Yes, destroy it."
 msgstr "Si, rimuovi."
 
-#: editor_ops.cc:289 editor_ops.cc:317
+#: editor_ops.cc:352 editor_ops.cc:380
 msgid "extend selection"
 msgstr ""
 
-#: editor_ops.cc:333 editor_ops.cc:367 editor_ops.cc:411 editor_ops.cc:437
+#: editor_ops.cc:396 editor_ops.cc:430 editor_ops.cc:474 editor_ops.cc:500
 msgid "nudge forward"
 msgstr ""
 
-#: editor_ops.cc:501
+#: editor_ops.cc:564
 msgid "build_region_boundary_cache called with snap_type = %1"
 msgstr ""
 
-#: editor_ops.cc:1354
+#: editor_ops.cc:1420
 #, fuzzy
 msgid "select all within"
 msgstr "Seleziona tutto"
 
-#: editor_ops.cc:1380
+#: editor_ops.cc:1452
 #, fuzzy
 msgid "set selection from region"
 msgstr "Nuova Regione dall'intervallo"
 
-#: editor_ops.cc:1413
+#: editor_ops.cc:1485
 #, fuzzy
 msgid "set selection from range"
 msgstr "Nuova Regione dall'intervallo"
 
-#: editor_ops.cc:1443
+#: editor_ops.cc:1515
 #, fuzzy
 msgid "select all from range"
 msgstr "seleziona l'intervallo di zoom"
 
-#: editor_ops.cc:1465
+#: editor_ops.cc:1537
 #, fuzzy
 msgid "select all from punch"
 msgstr "Seleziona tutto"
 
-#: editor_ops.cc:1487
+#: editor_ops.cc:1559
 #, fuzzy
 msgid "select all from loop"
 msgstr "Seleziona tutto"
 
-#: editor_ops.cc:1501
+#: editor_ops.cc:1573
 #, fuzzy
 msgid "select all after cursor"
 msgstr "Inizio al cursore di modifica"
 
-#: editor_ops.cc:1506
+#: editor_ops.cc:1578
 #, fuzzy
 msgid "select all before cursor"
 msgstr "Suona dal cursore di modifica"
 
-#: editor_ops.cc:1536
+#: editor_ops.cc:1608
 #, fuzzy
 msgid "select all between cursors"
 msgstr "Suona dal cursore di modifica"
 
-#: editor_ops.cc:1667
+#: editor_ops.cc:1739
 msgid "clear markers"
 msgstr "azzera i marcatori"
 
-#: editor_ops.cc:1679
+#: editor_ops.cc:1751
 msgid "clear ranges"
 msgstr "azzera gli intervalli"
 
-#: editor_ops.cc:1698
+#: editor_ops.cc:1770
 msgid "clear locations"
 msgstr "azzera le posizioni"
 
-#: editor_ops.cc:1748
+#: editor_ops.cc:1820
 #, fuzzy
 msgid "insert dragged region"
 msgstr "Inserisci la Regione"
 
-#: editor_ops.cc:1784
+#: editor_ops.cc:1856
 #, fuzzy
 msgid "insert region"
 msgstr "Inserisci la Regione"
 
-#: editor_ops.cc:1975 io_selector.cc:57 io_selector.cc:791
+#: editor_ops.cc:2047 io_selector.cc:58 io_selector.cc:792
 msgid "OK"
 msgstr ""
 
-#: editor_ops.cc:1982
+#: editor_ops.cc:2054
 msgid "ardour: rename region"
 msgstr "ardour: rinomina la regione"
 
-#: editor_ops.cc:2205 editor_ops.cc:2254
+#: editor_ops.cc:2277 editor_ops.cc:2326
 #, fuzzy
 msgid "separate"
 msgstr "Separa l'intervallo"
 
-#: editor_ops.cc:2316
+#: editor_ops.cc:2388
 #, fuzzy
 msgid "trim to selection"
 msgstr "ardour: selezione del colore"
 
-#: editor_ops.cc:2356
+#: editor_ops.cc:2428
 msgid "region fill"
 msgstr ""
 
-#: editor_ops.cc:2415
+#: editor_ops.cc:2487
 #, fuzzy
 msgid "fill selection"
 msgstr "Suona intervallo/selezione"
 
-#: editor_ops.cc:2436
+#: editor_ops.cc:2508
 #, fuzzy
 msgid "Programming error. that region doesn't cover that position"
 msgstr ""
 "errore di programmazione: la mappa di posizioni/marcatori non contiene "
 "alcuna posizione!"
 
-#: editor_ops.cc:2439
+#: editor_ops.cc:2511
 #, fuzzy
 msgid "set region sync position"
 msgstr "Regioni/posizione"
 
-#: editor_ops.cc:2454
+#: editor_ops.cc:2526
 msgid "Place the edit cursor at the desired sync point"
 msgstr ""
 "Posiziona il cursore di modifica al punto di sincronizzazione desiderato"
 
-#: editor_ops.cc:2459
+#: editor_ops.cc:2531
 #, fuzzy
 msgid "set sync from edit cursor"
 msgstr "Suona dal cursore di modifica"
 
-#: editor_ops.cc:2471
+#: editor_ops.cc:2543
 #, fuzzy
 msgid "remove sync"
 msgstr "Rimuovi il punto di sincronizzazione"
 
-#: editor_ops.cc:2485
+#: editor_ops.cc:2557
 #, fuzzy
 msgid "naturalize"
 msgstr "Normalizza"
 
-#: editor_ops.cc:2549
+#: editor_ops.cc:2621
 #, fuzzy
 msgid "align selection (relative)"
 msgstr "Allinea Realtivo"
 
-#: editor_ops.cc:2577
+#: editor_ops.cc:2649
 #, fuzzy
 msgid "align selection"
 msgstr "ardour: selezione del colore"
 
-#: editor_ops.cc:2589
+#: editor_ops.cc:2661
 #, fuzzy
 msgid "align region"
 msgstr "Sposta Regione/i"
 
-#: editor_ops.cc:2636 editor_ops.cc:2661
+#: editor_ops.cc:2708 editor_ops.cc:2733
 #, fuzzy
 msgid "trim to edit"
 msgstr "Inizio al cursore di modifica"
 
-#: editor_ops.cc:2712
+#: editor_ops.cc:2784
 #, fuzzy
 msgid "ardour: freeze"
 msgstr "ardour: rinomina la regione"
 
-#: editor_ops.cc:2717
+#: editor_ops.cc:2789
 #, fuzzy
 msgid "Cancel Freeze"
 msgstr "Cancella"
 
-#: editor_ops.cc:2754
+#: editor_ops.cc:2826
 #, fuzzy
 msgid "bounce range"
 msgstr "Fai il Bounce dell'intervallo"
 
-#: editor_ops.cc:2807
+#: editor_ops.cc:2879
 msgid "cut"
 msgstr "taglia"
 
-#: editor_ops.cc:2810
+#: editor_ops.cc:2882
 msgid "copy"
 msgstr "copia"
 
-#: editor_ops.cc:2823
+#: editor_ops.cc:2895
 msgid " objects"
 msgstr "oggetti"
 
-#: editor_ops.cc:2849
+#: editor_ops.cc:2921
 msgid " range"
 msgstr " intervallo"
 
-#: editor_ops.cc:3006
+#: editor_ops.cc:3078
 #, fuzzy
 msgid "paste"
 msgstr "Incolla"
 
-#: editor_ops.cc:3044
+#: editor_ops.cc:3116
 #, fuzzy
 msgid "paste chunk"
 msgstr "Crea uno Spezzone"
 
 #. clear (below) will clear the argument list
-#: editor_ops.cc:3085
+#: editor_ops.cc:3157
 #, fuzzy
 msgid "duplicate region"
 msgstr "Esegui la regione selezionata come loop"
 
-#: editor_ops.cc:3130
+#: editor_ops.cc:3202
 #, fuzzy
 msgid "duplicate selection"
 msgstr "ardour: selezione del colore"
 
-#: editor_ops.cc:3170
+#: editor_ops.cc:3259
 #, fuzzy
 msgid "clear playlist"
 msgstr "azzera le posizioni"
 
-#: editor_ops.cc:3199
+#: editor_ops.cc:3288
 #, fuzzy
 msgid "nudge track"
 msgstr "Nascondi traccia"
 
-#: editor_ops.cc:3226
+#: editor_ops.cc:3315
 msgid ""
 "Do you really want to destroy the last capture?\n"
 "(This is destructive and cannot be undone)"
@@ -4069,163 +4053,160 @@ msgstr ""
 "Si vuole realmente rimuovere l'ultima registrazione?\n"
 "(questa azione non potrà essere annullata)"
 
-#: editor_ops.cc:3254
+#: editor_ops.cc:3343
 #, fuzzy
 msgid "normalize"
 msgstr "Normalizza"
 
-#: editor_ops.cc:3301
+#: editor_ops.cc:3390
 msgid "reverse regions"
 msgstr "fai il Reverse della regione"
 
-#: editor_region_list.cc:93 editor_region_list.cc:98 editor_region_list.cc:101
-#: location_ui.cc:55
+#: editor_region_list.cc:98 editor_region_list.cc:103
+#: editor_region_list.cc:106 location_ui.cc:56
 msgid "Hidden"
 msgstr "Nascosto"
 
 #. added a new fresh one at the end
-#: editor_route_list.cc:101 editor_route_list.cc:102 editor_route_list.cc:246
+#: editor_route_list.cc:102 editor_route_list.cc:103 editor_route_list.cc:247
 msgid "editor"
 msgstr ""
 
-#: editor_route_list.cc:309 mixer_ui.cc:695
+#: editor_route_list.cc:310 mixer_ui.cc:699
 msgid "Show All"
 msgstr "Mostra Tutto"
 
-#: editor_route_list.cc:310 mixer_ui.cc:696
+#: editor_route_list.cc:311 mixer_ui.cc:700
 msgid "Hide All"
 msgstr "Nascondi tutto"
 
-#: editor_route_list.cc:311 mixer_ui.cc:697
+#: editor_route_list.cc:312 mixer_ui.cc:701
 #, fuzzy
 msgid "Show All Audio Tracks"
 msgstr "Mostra tutti i Bus Audio"
 
-#: editor_route_list.cc:312 mixer_ui.cc:698
+#: editor_route_list.cc:313 mixer_ui.cc:702
 #, fuzzy
 msgid "Hide All Audio Tracks"
 msgstr "Nascondi tutti i Bus Audio"
 
-#: editor_route_list.cc:313 mixer_ui.cc:699
+#: editor_route_list.cc:314 mixer_ui.cc:703
 #, fuzzy
 msgid "Show All Audio Busses"
 msgstr "Mostra tutti i Bus Audio"
 
-#: editor_route_list.cc:314 mixer_ui.cc:700
+#: editor_route_list.cc:315 mixer_ui.cc:704
 #, fuzzy
 msgid "Hide All Audio Busses"
 msgstr "Nascondi tutti i Bus Audio"
 
-#: editor_rulers.cc:311
+#: editor_rulers.cc:312
 msgid "New location marker"
 msgstr "Marcatore di nuova posizione"
 
-#: editor_rulers.cc:312
+#: editor_rulers.cc:313
 msgid "Clear all locations"
 msgstr "Pulisci tutte le posizioni"
 
 #. ruler_items.push_back (MenuElem (_("New Range")));
-#: editor_rulers.cc:317
+#: editor_rulers.cc:318
 msgid "Clear all ranges"
 msgstr "Pulisci tutti gli intervalli"
 
-#: editor_rulers.cc:326
+#: editor_rulers.cc:327
 msgid "New Tempo"
 msgstr "Nuovo tempo"
 
-#: editor_rulers.cc:327
+#: editor_rulers.cc:328
 msgid "Clear tempo"
 msgstr "Pulisci tempo"
 
-#: editor_rulers.cc:332
+#: editor_rulers.cc:333
 msgid "New Meter"
 msgstr "Nuovo Meter"
 
-#: editor_rulers.cc:333
+#: editor_rulers.cc:334
 msgid "Clear meter"
 msgstr "Pulisci Meter"
 
-#: editor_rulers.cc:341
+#: editor_rulers.cc:342
 msgid "Min:Secs"
 msgstr "Min:Sec"
 
-#: editor_selection_list.cc:110
+#: editor_selection_list.cc:108
 #, fuzzy
 msgid "Name for Chunk:"
 msgstr "Nome dello Spezzone"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 #, fuzzy
 msgid "Create Chunk"
 msgstr "Crea uno Spezzone"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 msgid "Forget it"
 msgstr "Annulla"
 
-#: editor_tempodisplay.cc:249 editor_tempodisplay.cc:289
+#: editor_tempodisplay.cc:253 editor_tempodisplay.cc:293
 msgid "add"
 msgstr "Aggiungi"
 
-#: editor_tempodisplay.cc:271
+#: editor_tempodisplay.cc:275
 #, fuzzy
 msgid "add tempo mark"
 msgstr "agggiungi marcatore di intervallo"
 
-#: editor_tempodisplay.cc:311
+#: editor_tempodisplay.cc:315
 #, fuzzy
 msgid "add meter mark"
 msgstr "agggiungi marcatore di intervallo"
 
-#: editor_tempodisplay.cc:344 editor_tempodisplay.cc:375
+#: editor_tempodisplay.cc:348 editor_tempodisplay.cc:376
 msgid "done"
 msgstr "fatto"
 
-#: editor_tempodisplay.cc:365 editor_tempodisplay.cc:396
+#: editor_tempodisplay.cc:366 editor_tempodisplay.cc:394
 msgid "replace tempo mark"
 msgstr ""
 
-#: editor_tempodisplay.cc:435 editor_tempodisplay.cc:466
+#: editor_tempodisplay.cc:433 editor_tempodisplay.cc:464
 msgid "programming error: marker for meter is not a meter marker!"
 msgstr ""
 
-#: editor_tempodisplay.cc:445 editor_tempodisplay.cc:478
+#: editor_tempodisplay.cc:443 editor_tempodisplay.cc:476
 #, fuzzy
 msgid "remove tempo mark"
 msgstr "rimuovi marcatore"
 
-#: editor_timefx.cc:50
+#: editor_timefx.cc:51
 msgid "Quick but Ugly"
 msgstr "Rapido ma inaccurato"
 
-#: editor_timefx.cc:51
+#: editor_timefx.cc:52
 msgid "Skip Anti-aliasing"
 msgstr "Salta l'Anti-aliasing"
 
-#: editor_timefx.cc:53
-msgid "Stretch/Shrink it"
-msgstr "Allunga/Restringi"
-
-#: editor_timefx.cc:57
+#: editor_timefx.cc:56
 msgid "ardour: timestretch"
 msgstr ""
 
-#: editor_timefx.cc:58
+#: editor_timefx.cc:57
 msgid "TimeStretchDialog"
 msgstr ""
 
-#: editor_timefx.cc:80 editor_timefx.cc:81 editor_timefx.cc:82
-#: editor_timefx.cc:83
+#: editor_timefx.cc:70
+msgid "Stretch/Shrink it"
+msgstr "Allunga/Restringi"
+
+#: editor_timefx.cc:73 editor_timefx.cc:74
 msgid "TimeStretchButton"
 msgstr ""
 
-#: editor_timefx.cc:84
+#: editor_timefx.cc:75
 msgid "TimeStretchProgress"
 msgstr ""
 
-#. GTK2FIX
-#. current_timestretch->close ();
-#: editor_timefx.cc:153
+#: editor_timefx.cc:139
 msgid "timestretch cannot be started - thread creation error"
 msgstr ""
 
@@ -4359,7 +4340,7 @@ msgstr ""
 msgid "Export to File"
 msgstr "Esporta a CD"
 
-#: export_dialog.cc:113 option_editor.cc:82 option_editor.cc:83
+#: export_dialog.cc:113 option_editor.cc:83 option_editor.cc:84
 msgid "Browse"
 msgstr "Naviga"
 
@@ -4376,7 +4357,8 @@ msgstr "ardour: esportazione"
 msgid "ardour_export"
 msgstr "ardour: esportazione"
 
-#: export_dialog.cc:139 export_dialog.cc:155
+#: export_dialog.cc:139 export_dialog.cc:155 mixer_strip.cc:124
+#: mixer_strip.cc:767
 #, fuzzy
 msgid "Output"
 msgstr "Uscite"
@@ -4415,145 +4397,74 @@ msgstr ""
 msgid "File already exists, do you want to overwrite it?"
 msgstr ""
 
-#: export_dialog.cc:1159 export_range_markers_dialog.cc:154
+#: export_dialog.cc:1159 export_range_markers_dialog.cc:153
 msgid "Cannot write file in: "
 msgstr ""
 
 #. warning dialog
-#: export_range_markers_dialog.cc:136
+#: export_range_markers_dialog.cc:135
 msgid "Please enter a valid target directory."
 msgstr ""
 
-#: export_range_markers_dialog.cc:144
+#: export_range_markers_dialog.cc:143
 msgid ""
 "Please select an existing target directory. Files\n"
 "are not allowed!"
 msgstr ""
 
-#: gain_automation_time_axis.cc:61
+#: gain_automation_time_axis.cc:62
 #, fuzzy
 msgid "add gain automation event"
 msgstr "aggiungi evento di automazione a "
 
-#: gain_meter.cc:66
+#: gain_meter.cc:67
 msgid "cannot find images for fader slider"
 msgstr ""
 
-#: gain_meter.cc:73
+#: gain_meter.cc:74
 msgid "cannot find images for fader rail"
 msgstr ""
 
-#: gain_meter.cc:88
-msgid "dbFS"
-msgstr ""
-
-#: gain_meter.cc:89 gain_meter.cc:143 gain_meter.cc:704
-msgid "pre"
+#: gain_meter.cc:130 gain_meter.cc:339 gain_meter.cc:494 gain_meter.cc:539
+msgid "-inf"
 msgstr ""
 
-#: gain_meter.cc:139 gain_meter.cc:700
+#: gain_meter.cc:140
 #, fuzzy
-msgid "input"
-msgstr "entrata %1"
+msgid "Fader automation mode"
+msgstr "modalita' di automazione pan"
 
-#: gain_meter.cc:147 gain_meter.cc:708
+#: gain_meter.cc:141
 #, fuzzy
-msgid "post"
-msgstr "entrata"
+msgid "Fader automation type"
+msgstr "Tipo di automazione pan"
 
-#. TRANSLATORS: this string should be longest of the strings
-#. used to describe meter points. In english, its "input".
-#.
-#: gain_meter.cc:155
-msgid "tupni"
+#. XXX it might different in different languages
+#: gain_meter.cc:182 gain_meter.cc:817 panner_ui.cc:99 panner_ui.cc:807
+msgid "Abs"
 msgstr ""
 
-#: gain_meter.cc:174 gain_meter.cc:458 gain_meter.cc:480 gain_meter.cc:525
-msgid "-inf"
+#: gain_meter.cc:472
+msgid "-Inf"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:1
+#: gain_meter.cc:781 mixer_strip.cc:770 panner_ui.cc:771
 #, fuzzy
-msgid "<b>Advanced</b>"
-msgstr "Avanzate..."
+msgid "O"
+msgstr "O"
 
-#: glade/new_session_dialog.glade.h:2
-msgid "<b>Input</b>"
+#: gain_meter.cc:784 panner_ui.cc:774
+msgid "P"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:3
-#, fuzzy
-msgid "<b>Output</b>"
-msgstr "Uscite"
-
-#: glade/new_session_dialog.glade.h:4
-#, fuzzy
-msgid "Automatically connect inputs"
-msgstr "autoconnetti le entrate delle tracce alle entrate fisiche"
-
-#: glade/new_session_dialog.glade.h:5
-#, fuzzy
-msgid "Automatically connect outputs"
-msgstr "connetti manualmente le uscite delle tracce"
-
-#: glade/new_session_dialog.glade.h:6
-#, fuzzy
-msgid "Channel Count"
-msgstr "Annullare l'importazione"
-
-#: glade/new_session_dialog.glade.h:7
-msgid "Connect to Master Bus"
+#: gain_meter.cc:787 panner_ui.cc:777
+msgid "T"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:8
-msgid "Connect to physical outputs"
+#: gain_meter.cc:790 panner_ui.cc:780
+msgid "W"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:9
-#, fuzzy
-msgid "Create Control Bus"
-msgstr "Uscite di Controllo"
-
-#: glade/new_session_dialog.glade.h:10
-#, fuzzy
-msgid "Create Master Bus"
-msgstr "utilizza le uscite master"
-
-#: glade/new_session_dialog.glade.h:11
-#, fuzzy
-msgid "New Session"
-msgstr "Sessione"
-
-#: glade/new_session_dialog.glade.h:12
-#, fuzzy
-msgid "Open Recent Session"
-msgstr "apri sessione"
-
-#: glade/new_session_dialog.glade.h:13
-#, fuzzy
-msgid "Open Session"
-msgstr "apri sessione"
-
-#: glade/new_session_dialog.glade.h:14
-#, fuzzy
-msgid "Port limit"
-msgstr "Annulla"
-
-#: glade/new_session_dialog.glade.h:15
-#, fuzzy
-msgid "Select a File"
-msgstr "Seleziona tutto"
-
-#: glade/new_session_dialog.glade.h:16
-#, fuzzy
-msgid "Select a Session"
-msgstr "Esegui la regione selezionata come loop"
-
-#: glade/new_session_dialog.glade.h:17
-#, fuzzy
-msgid "Track/Bus connection options"
-msgstr "Tracce/Bus"
-
 #: gtk-custom-ruler.c:126
 #, fuzzy
 msgid "Lower"
@@ -4599,236 +4510,236 @@ msgid "Draw current ruler position"
 msgstr ""
 
 #. end-of-file, other end closed or shutdown?
-#: imageframe_socket_handler.cc:126
+#: imageframe_socket_handler.cc:127
 msgid "Image Compositor Socket has been shutdown/closed"
 msgstr ""
 
-#: imageframe_time_axis.cc:287
+#: imageframe_time_axis.cc:286
 #, fuzzy
 msgid "0.5 seconds"
 msgstr "Secondi"
 
-#: imageframe_time_axis.cc:288 marker_time_axis.cc:241
+#: imageframe_time_axis.cc:287 marker_time_axis.cc:242
 #, fuzzy
 msgid "1 seconds"
 msgstr "Secondi"
 
-#: imageframe_time_axis.cc:289 marker_time_axis.cc:242
+#: imageframe_time_axis.cc:288 marker_time_axis.cc:243
 #, fuzzy
 msgid "1.5 seconds"
 msgstr "Secondi"
 
-#: imageframe_time_axis.cc:290 marker_time_axis.cc:243
+#: imageframe_time_axis.cc:289 marker_time_axis.cc:244
 #, fuzzy
 msgid "2 seconds"
 msgstr "Secondi"
 
-#: imageframe_time_axis.cc:291 marker_time_axis.cc:244
+#: imageframe_time_axis.cc:290 marker_time_axis.cc:245
 #, fuzzy
 msgid "2.5 seconds"
 msgstr "Secondi"
 
-#: imageframe_time_axis.cc:292 marker_time_axis.cc:245
+#: imageframe_time_axis.cc:291 marker_time_axis.cc:246
 #, fuzzy
 msgid "3 seconds"
 msgstr "Secondi"
 
 #. duration_items.push_back(SeparatorElem()) ;
 #. duration_items.push_back(MenuElem (_("custom"), mem_fun(*this, &ImageFrameTimeAxis::set_marker_duration_custom))) ;
-#: imageframe_time_axis.cc:297 marker_time_axis.cc:250
+#: imageframe_time_axis.cc:296 marker_time_axis.cc:251
 #, fuzzy
 msgid "Duration (sec)"
 msgstr "Sposta Regione/i"
 
-#: imageframe_time_axis.cc:302
+#: imageframe_time_axis.cc:301
 #, fuzzy
 msgid "Remove Frame"
 msgstr "Rimuovi Campo"
 
-#: imageframe_time_axis.cc:305
+#: imageframe_time_axis.cc:304
 msgid "Image Frame"
 msgstr ""
 
-#: imageframe_time_axis.cc:306 marker_time_axis.cc:256
+#: imageframe_time_axis.cc:305 marker_time_axis.cc:257
 #, fuzzy
 msgid "Rename Track"
 msgstr "Rinomina"
 
-#: io_selector.cc:59 io_selector.cc:793
+#: io_selector.cc:60 io_selector.cc:794
 #, fuzzy
 msgid "Rescan"
 msgstr "Aggiorna"
 
-#: io_selector.cc:67
+#: io_selector.cc:68
 msgid "%1 input"
 msgstr "entrata %1"
 
-#: io_selector.cc:69
+#: io_selector.cc:70
 msgid "%1 output"
 msgstr "uscita %1"
 
-#: io_selector.cc:141 route_params_ui.cc:106
+#: io_selector.cc:142 route_params_ui.cc:107
 msgid "Inputs"
 msgstr "Entrate"
 
-#: io_selector.cc:141 route_params_ui.cc:107
+#: io_selector.cc:142 route_params_ui.cc:108
 msgid "Outputs"
 msgstr "Uscite"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Input"
 msgstr "aggiungi una entrata"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Output"
 msgstr "aggiungi una uscita"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Input"
 msgstr "Rimuovi il punto di sincronizzazione"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Output"
 msgstr "# Uscite"
 
-#: io_selector.cc:144
+#: io_selector.cc:145
 #, fuzzy
 msgid "Disconnect All"
 msgstr "Disconnetti"
 
-#: io_selector.cc:158
+#: io_selector.cc:159
 msgid "Available connections"
 msgstr "Connessioni disponibili"
 
-#: io_selector.cc:554 io_selector.cc:573
+#: io_selector.cc:555 io_selector.cc:574
 msgid "There are no more JACK ports available."
 msgstr ""
 
-#: io_selector.cc:648 io_selector.cc:675 io_selector.cc:728
+#: io_selector.cc:649 io_selector.cc:676 io_selector.cc:729
 msgid "port"
 msgstr "entrata"
 
-#: io_selector.cc:797
+#: io_selector.cc:798
 msgid "ardour: "
 msgstr ""
 
-#: keyboard.cc:297
+#: keyboard.cc:299
 msgid "KeyboardTarget: keyname \"%1\" is unknown."
 msgstr "KeyboardTarget: il keyname \"%1\" è sconosciuto"
 
-#: keyboard.cc:523
+#: keyboard.cc:525
 msgid ""
 "Your system is completely broken - NumLock uses \"%1\"as its modifier. This "
 "is madness - see the man page for xmodmap to find out how to fix this."
 msgstr ""
 
-#: keyboard.cc:531
+#: keyboard.cc:533
 msgid ""
 "Your system generates \"%1\" when the NumLock key is pressed. This can cause "
 "problems when editing so Ardour will use %2 to mean Meta rather than %1"
 msgstr ""
 
-#: keyboard.cc:592
+#: keyboard.cc:594
 msgid "You have %1 keys bound to \"mod1\""
 msgstr ""
 
-#: keyboard.cc:607
+#: keyboard.cc:609
 msgid "You have %1 keys bound to \"mod2\""
 msgstr ""
 
-#: keyboard.cc:622
+#: keyboard.cc:624
 msgid "You have %1 keys bound to \"mod3\""
 msgstr ""
 
-#: keyboard.cc:637
+#: keyboard.cc:639
 msgid "You have %1 keys bound to \"mod4\""
 msgstr ""
 
-#: keyboard.cc:652
+#: keyboard.cc:654
 msgid "You have %1 keys bound to \"mod5\""
 msgstr ""
 
-#: location_ui.cc:47 location_ui.cc:50
+#: location_ui.cc:48 location_ui.cc:51
 msgid "Set"
 msgstr "Imposta"
 
-#: location_ui.cc:48 location_ui.cc:51
+#: location_ui.cc:49 location_ui.cc:52
 msgid "Go"
 msgstr "Vai"
 
-#: location_ui.cc:54
+#: location_ui.cc:55
 msgid "CD"
 msgstr ""
 
-#: location_ui.cc:57
+#: location_ui.cc:58
 msgid "SCMS"
 msgstr ""
 
-#: location_ui.cc:58
+#: location_ui.cc:59
 msgid "Pre-Emphasis"
 msgstr ""
 
-#: location_ui.cc:569
+#: location_ui.cc:570
 msgid "Add New Location"
 msgstr "Aggiungi una nuova Posizione"
 
-#: location_ui.cc:570
+#: location_ui.cc:571
 msgid "Add New Range"
 msgstr "Aggiungi un nuovo Intervallo"
 
-#: location_ui.cc:574
+#: location_ui.cc:575
 msgid "ardour: locations"
 msgstr "ardour: posizioni"
 
-#: location_ui.cc:575
+#: location_ui.cc:576
 msgid "ardour_locations"
 msgstr "ardour_posizioni"
 
-#: location_ui.cc:603
+#: location_ui.cc:604
 #, fuzzy
 msgid "Location (CD Index) Markers"
 msgstr "Marcatori di posizione"
 
-#: location_ui.cc:623
+#: location_ui.cc:624
 #, fuzzy
 msgid "Range (CD Track) Markers"
 msgstr "Marcatori di intervallo"
 
-#: location_ui.cc:789
+#: location_ui.cc:790
 msgid "add range marker"
 msgstr "agggiungi marcatore di intervallo"
 
-#: main.cc:71
+#: main.cc:72
 msgid "ardour is killing itself for a clean exit\n"
 msgstr "ardour sta forzando la chiusura per un'uscita pulita\n"
 
-#: main.cc:80
+#: main.cc:81
 msgid "stopping user interface\n"
 msgstr "chiusura dell'interfaccia\n"
 
 #. XXX its doubtful that snprintf() is async-safe
-#: main.cc:99
+#: main.cc:100
 #, fuzzy, c-format
 msgid "%d(%d): received signal %d\n"
 msgstr "%d: ricevuto segnale %d\n"
 
-#: main.cc:185
+#: main.cc:186
 msgid "cannot become new process group leader (%1)"
 msgstr ""
 
-#: main.cc:212
+#: main.cc:213
 msgid "cannot setup signal handling for %1"
 msgstr ""
 
-#: main.cc:223
+#: main.cc:224
 msgid "cannot set default signal mask (%1)"
 msgstr ""
 
-#: main.cc:253
+#: main.cc:254
 #, fuzzy
 msgid ""
 "Without a UI style file, ardour will look strange.\n"
@@ -4837,11 +4748,11 @@ msgstr ""
 "Senza uno Stile per l'Interfaccia, ardour apparirà strano\n"
 "Impostare la variabile ARDOUR_UI_RC per puntare ad uno Stile"
 
-#: main.cc:273
+#: main.cc:276
 msgid "Ardour could not connect to JACK."
 msgstr ""
 
-#: main.cc:277
+#: main.cc:280
 msgid ""
 "There are several possible reasons:\n"
 "\n"
@@ -4852,375 +4763,462 @@ msgid ""
 "Please consider the possibilities, and perhaps (re)start JACK."
 msgstr ""
 
-#: main.cc:324
+#: main.cc:310
+msgid "could not load command line session \"%1\""
+msgstr "Impossibile caricare la sessione \"%1\" da linea di comando"
+
+#. it wasn't new, but we require a new session
+#: main.cc:330
+msgid ""
+"\n"
+"\n"
+"A session named \"%1\" already exists.\n"
+"To avoid this message, start ardour as \"ardour %1"
+msgstr ""
+
+#: main.cc:341
+msgid ""
+"\n"
+"\n"
+"No session named \"%1\" exists.\n"
+"To create it from the command line, start ardour as \"ardour --new %1"
+msgstr ""
+
+#: main.cc:405
 msgid "Ardour/GTK "
 msgstr ""
 
-#: main.cc:326
+#: main.cc:407
 msgid ""
 "\n"
 "   (built using "
 msgstr ""
 
-#: main.cc:330
+#: main.cc:411
 #, fuzzy
 msgid " with libardour "
 msgstr " con libardour "
 
-#: main.cc:335
+#: main.cc:416
 msgid " and GCC version "
 msgstr ""
 
-#: main.cc:345
-msgid "Copyright (C) 1999-2005 Paul Davis"
+#: main.cc:426
+msgid "Copyright (C) 1999-2006 Paul Davis"
 msgstr ""
 
-#: main.cc:346
+#: main.cc:427
 msgid ""
 "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker"
 msgstr ""
 
-#: main.cc:348
+#: main.cc:429
 msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
 msgstr ""
 
-#: main.cc:349
+#: main.cc:430
 msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 msgstr ""
 
-#: main.cc:350
+#: main.cc:431
 msgid "This is free software, and you are welcome to redistribute it "
 msgstr ""
 
-#: main.cc:351
+#: main.cc:432
 msgid "under certain conditions; see the source for copying conditions."
 msgstr ""
 
-#: main.cc:360
+#: main.cc:441
 msgid "could not create ARDOUR GUI"
 msgstr "Impossibile creare l'interfaccia di Ardour"
 
-#: main.cc:378
+#: main.cc:459
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr ""
 
-#: main.cc:381
+#: main.cc:462
 msgid "could not initialize Ardour."
 msgstr "impossibile avviare Ardour"
 
-#: main.cc:392
-msgid "could not load command line session \"%1\""
-msgstr "Impossibile caricare la sessione \"%1\" da linea di comando"
+#: marker.cc:244
+#, fuzzy
+msgid "MarkerText"
+msgstr "Marcatori"
 
-#. it wasn't new, but we require a new session
-#: main.cc:412
-msgid ""
-"\n"
-"\n"
-"A session named \"%1\" already exists.\n"
-"To avoid this message, start ardour as \"ardour %1"
-msgstr ""
-
-#: main.cc:423
-msgid ""
-"\n"
-"\n"
-"No session named \"%1\" exists.\n"
-"To create it from the command line, start ardour as \"ardour --new %1"
-msgstr ""
-
-#: marker.cc:244
-#, fuzzy
-msgid "MarkerText"
-msgstr "Marcatori"
-
-#: marker_time_axis.cc:253
+#: marker_time_axis.cc:254
 #, fuzzy
 msgid "Remove Marker"
 msgstr "rimuovi marcatore"
 
-#: marker_time_axis.cc:255
+#: marker_time_axis.cc:256
 #, fuzzy
 msgid "Marker"
 msgstr "Marcatori"
 
-#: meter_bridge.cc:77
+#: meter_bridge.cc:78
 msgid "ardour: meter bridge"
 msgstr ""
 
-#: meter_bridge.cc:78
+#: meter_bridge.cc:79
 msgid "ardour_meter_bridge"
 msgstr ""
 
-#: meter_bridge_strip.cc:79 meter_bridge_strip.cc:93
+#: meter_bridge_strip.cc:80 meter_bridge_strip.cc:94
 #, c-format
 msgid "# of %u-sample overs"
 msgstr ""
 
-#: meter_bridge_strip.cc:221
+#: meter_bridge_strip.cc:222
 #, fuzzy
 msgid "New Name for Meter:"
 msgstr "Nuovo nome per il meter:"
 
-#: mixer_strip.cc:85 mixer_strip.cc:437 region_editor.cc:46
-msgid "mute"
-msgstr "muto"
-
-#: mixer_strip.cc:85 mixer_strip.cc:438
-msgid "solo"
+#: mixer_strip.cc:95 mixer_strip.cc:140 mixer_strip.cc:1227
+msgid "pre"
 msgstr ""
 
-#: mixer_strip.cc:85 mixer_strip.cc:436
-msgid "RECORD"
-msgstr "REGISTRA"
-
-#: mixer_strip.cc:96 mixer_strip.cc:441 mixer_strip.cc:1064
+#: mixer_strip.cc:96 mixer_strip.cc:822
 msgid "Comments"
 msgstr ""
 
-#: mixer_strip.cc:120 mixer_strip.cc:752
-msgid "INPUT"
-msgstr "ENTRATA"
-
-#: mixer_strip.cc:125 mixer_strip.cc:773
-msgid "OUTPUT"
-msgstr "USCITA"
-
-#: mixer_strip.cc:140
-msgid "Pan automation mode"
-msgstr "Modalita' automazione pan"
-
-#: mixer_strip.cc:141
-msgid "Gain automation mode"
-msgstr "Modalita' automazione gain"
+#: mixer_strip.cc:119
+#, fuzzy
+msgid "Input"
+msgstr "Entrate"
 
-#: mixer_strip.cc:143
-msgid "Pan automation type"
-msgstr "Tipo di automazione pan"
+#: mixer_strip.cc:136 mixer_strip.cc:1223
+#, fuzzy
+msgid "input"
+msgstr "entrata %1"
 
-#: mixer_strip.cc:144
-msgid "Gain automation type"
-msgstr "Tipo di automazione gain"
+#: mixer_strip.cc:144 mixer_strip.cc:1231
+#, fuzzy
+msgid "post"
+msgstr "entrata"
 
-#: mixer_strip.cc:183 mixer_strip.cc:195 mixer_strip.cc:913
-msgid "trim"
+#. TRANSLATORS: this string should be longest of the strings
+#. used to describe meter points. In english, its "input".
+#.
+#: mixer_strip.cc:152
+msgid "tupni"
 msgstr ""
 
-#. XXX it might different in different languages
-#: mixer_strip.cc:184 mixer_strip.cc:196 mixer_strip.cc:917
-msgid "abs"
+#: mixer_strip.cc:207
+msgid "Varispeed"
 msgstr ""
 
-#: mixer_strip.cc:203
-msgid "gain automation mode"
-msgstr "modalita' di automazione gain"
+#: mixer_strip.cc:233 mixer_strip.cc:836
+msgid "Click to Add/Edit Comments"
+msgstr ""
 
-#: mixer_strip.cc:204
-msgid "pan automation mode"
-msgstr "modalita' di automazione pan"
+#: mixer_strip.cc:374
+msgid "unknown strip width \"%1\" in XML GUI information"
+msgstr ""
 
-#: mixer_strip.cc:205
-msgid "gain automation state"
-msgstr "stato dell'automazione gain"
+#: mixer_strip.cc:417
+#, fuzzy
+msgid "record"
+msgstr "Registra"
 
-#: mixer_strip.cc:206
-msgid "pan automation state"
-msgstr "stato dell'automazione pan"
+#: mixer_strip.cc:418 region_editor.cc:47
+msgid "mute"
+msgstr "muto"
 
-#: mixer_strip.cc:223
-msgid "varispeed"
+#: mixer_strip.cc:419
+msgid "solo"
 msgstr ""
 
-#: mixer_strip.cc:245 mixer_strip.cc:1078
-msgid "Click to Add/Edit Comments"
+#: mixer_strip.cc:422
+msgid "comments"
 msgstr ""
 
-#: mixer_strip.cc:393
-msgid "unknown strip width \"%1\" in XML GUI information"
+#: mixer_strip.cc:424
+msgid "*comments*"
 msgstr ""
 
-#: mixer_strip.cc:443 mixer_strip.cc:1062
-msgid "*Comments*"
+#: mixer_strip.cc:438
+#, fuzzy
+msgid "Rec"
+msgstr "Aggiorna"
+
+#: mixer_strip.cc:439
+msgid "M"
 msgstr ""
 
-#: mixer_strip.cc:457
-msgid "REC"
+#: mixer_strip.cc:440
+msgid "S"
 msgstr ""
 
-#: mixer_strip.cc:462 mixer_strip.cc:1072
+#: mixer_strip.cc:443 mixer_strip.cc:830
 #, fuzzy
 msgid "Cmt"
 msgstr "taglia"
 
-#: mixer_strip.cc:464 mixer_strip.cc:1070
+#: mixer_strip.cc:445 mixer_strip.cc:828
 msgid "*Cmt*"
 msgstr ""
 
-#: mixer_strip.cc:503 mixer_strip.cc:562 redirect_box.cc:1004
+#: mixer_strip.cc:483 mixer_strip.cc:549 redirect_box.cc:1006
 msgid "Not connected to JACK - no I/O changes are possible"
 msgstr ""
 
-#: mixer_strip.cc:569
+#: mixer_strip.cc:560
 msgid "Track"
 msgstr "Traccia"
 
-#: mixer_strip.cc:593 mixer_strip.cc:609
+#: mixer_strip.cc:588 mixer_strip.cc:604
 msgid "could not register new ports required for that connection"
 msgstr ""
 
-#: mixer_strip.cc:755
-msgid "IN"
-msgstr ""
-
-#: mixer_strip.cc:776
-msgid "OUT"
-msgstr ""
+#: mixer_strip.cc:747
+#, fuzzy
+msgid " Input"
+msgstr "# Entrate"
 
-#: mixer_strip.cc:884
-msgid "aplay"
+#: mixer_strip.cc:750
+msgid "I"
 msgstr ""
 
-#: mixer_strip.cc:890
-msgid "awrite"
+#: mixer_strip.cc:820
+msgid "*Comments*"
 msgstr ""
 
-#: mixer_strip.cc:1095
+#: mixer_strip.cc:859
 #, fuzzy
 msgid ": comment editor"
 msgstr "IU: impossibile avviare l'editor"
 
-#: mixer_strip.cc:1157 mixer_strip.cc:1178
-msgid "no group"
-msgstr "nessun gruppo"
+#: mixer_strip.cc:953
+msgid "Grp"
+msgstr ""
 
-#: mixer_strip.cc:1181
+#: mixer_strip.cc:956
 msgid "~G"
 msgstr ""
 
-#: mixer_strip.cc:1229
+#: mixer_strip.cc:1004
 #, fuzzy
 msgid "Invert Polarity"
 msgstr "polarità"
 
-#: mixer_ui.cc:84
+#: mixer_ui.cc:85
 msgid "Strips"
 msgstr "Strisce"
 
-#: mixer_ui.cc:108
-msgid "groupname"
-msgstr ""
-
-#: mixer_ui.cc:109 region_editor.cc:48 region_editor.cc:191
-#: region_editor.cc:225
-msgid "active"
-msgstr "attivo"
-
-#: mixer_ui.cc:110 region_editor.cc:49
-msgid "visible"
-msgstr "visibile"
+#: mixer_ui.cc:110
+#, fuzzy
+msgid "Group"
+msgstr "Gruppi di mixaggio"
 
-#: mixer_ui.cc:207 mixer_ui.cc:366
+#: mixer_ui.cc:211 mixer_ui.cc:370
 msgid "ardour: mixer"
 msgstr ""
 
-#: mixer_ui.cc:208
+#: mixer_ui.cc:212
 msgid "ardour_mixer"
 msgstr ""
 
-#: mixer_ui.cc:342
+#: mixer_ui.cc:346
 msgid "ardour: mixer: "
 msgstr ""
 
-#: mixer_ui.cc:569
+#: mixer_ui.cc:573
 msgid "signal"
 msgstr "segnale"
 
-#: mixer_ui.cc:719
+#: mixer_ui.cc:723
 msgid "track display list item for renamed strip not found!"
 msgstr ""
 
-#: option_editor.cc:75
+#: new_session_dialog.cc:39
+#, fuzzy
+msgid "New Session Name :"
+msgstr "Nome della sessione:"
+
+#: new_session_dialog.cc:41
+msgid "Create Session Directory In :"
+msgstr ""
+
+#: new_session_dialog.cc:43
+#, fuzzy
+msgid "Use Session Template :"
+msgstr "usa un modello esistente"
+
+#: new_session_dialog.cc:45
+#, fuzzy
+msgid "Channel Count"
+msgstr "Annullare l'importazione"
+
+#: new_session_dialog.cc:46
+#, fuzzy
+msgid "Create Monitor Bus"
+msgstr "Uscite di Controllo"
+
+#: new_session_dialog.cc:53
+#, fuzzy
+msgid "Create Master Bus"
+msgstr "utilizza le uscite master"
+
+#: new_session_dialog.cc:55
+#, fuzzy
+msgid "Automatically Connect Inputs"
+msgstr "autoconnetti le entrate delle tracce alle entrate fisiche"
+
+#: new_session_dialog.cc:56 new_session_dialog.cc:67
+#, fuzzy
+msgid "Port Limit"
+msgstr "Annulla"
+
+#: new_session_dialog.cc:64
+#, fuzzy
+msgid "<b>Track/Bus Inputs</b>"
+msgstr "Tracce/Bus"
+
+#: new_session_dialog.cc:66
+#, fuzzy
+msgid "Automatically Connect Outputs"
+msgstr "connetti manualmente le uscite delle tracce"
+
+#: new_session_dialog.cc:75
+msgid "Connect to Master Bus"
+msgstr ""
+
+#: new_session_dialog.cc:76
+msgid "Connect to Physical Outputs"
+msgstr ""
+
+#: new_session_dialog.cc:80
+#, fuzzy
+msgid "<b>Track/Bus Outputs</b>"
+msgstr "Uscite"
+
+#: new_session_dialog.cc:83
+#, fuzzy
+msgid "Advanced Options"
+msgstr "Editor delle Opzioni"
+
+#: new_session_dialog.cc:91
+#, fuzzy
+msgid "Open Recent Session"
+msgstr "apri sessione"
+
+#: new_session_dialog.cc:127
+#, fuzzy
+msgid "Open Session File :"
+msgstr "apri sessione"
+
+#: new_session_dialog.cc:274
+#, fuzzy
+msgid "New Session"
+msgstr "Sessione"
+
+#: new_session_dialog.cc:276
+#, fuzzy
+msgid "Open Session"
+msgstr "apri sessione"
+
+#: new_session_dialog.cc:281
+#, fuzzy
+msgid "ardour: session control"
+msgstr "ardour_nuova_sessione"
+
+#: new_session_dialog.cc:310
+#, fuzzy
+msgid "select template"
+msgstr "-modello"
+
+#: new_session_dialog.cc:316
+#, fuzzy
+msgid "select session file"
+msgstr "Esegui la regione selezionata come loop"
+
+#: new_session_dialog.cc:325
+#, fuzzy
+msgid "select directory"
+msgstr "Esegui la regione selezionata come loop"
+
+#: option_editor.cc:76
 msgid "SMPTE offset is negative"
 msgstr ""
 
-#: option_editor.cc:101
+#: option_editor.cc:102
 msgid "ardour: options editor"
 msgstr "ardour: editor delle opzioni"
 
-#: option_editor.cc:102
+#: option_editor.cc:103
 msgid "ardour_option_editor"
 msgstr "ardour_editor_delle_opzioni"
 
-#: option_editor.cc:126
+#: option_editor.cc:127
 msgid "Paths/Files"
 msgstr "Percorsi/File"
 
-#: option_editor.cc:127
+#: option_editor.cc:128
 msgid "Kbd/Mouse"
 msgstr "Tastiera/Mouse"
 
-#: option_editor.cc:130
+#: option_editor.cc:131
 msgid "Layers & Fades"
 msgstr ""
 
-#: option_editor.cc:134
+#: option_editor.cc:135
 msgid "MIDI"
 msgstr ""
 
-#: option_editor.cc:176
+#: option_editor.cc:177
 msgid "24 FPS"
 msgstr ""
 
-#: option_editor.cc:178
+#: option_editor.cc:179
 msgid "25 FPS"
 msgstr ""
 
-#: option_editor.cc:180
+#: option_editor.cc:181
 msgid "30 FPS"
 msgstr ""
 
-#: option_editor.cc:186
+#: option_editor.cc:187
 msgid "30 FPS drop"
 msgstr ""
 
-#: option_editor.cc:243
+#: option_editor.cc:244
 msgid "session RAID path"
 msgstr "Percorso RAID della sessione"
 
-#: option_editor.cc:248
+#: option_editor.cc:249
 #, fuzzy
 msgid "Soundfile Search Paths"
 msgstr "Libreria Audio"
 
-#: option_editor.cc:253
+#: option_editor.cc:254
 #, fuzzy
 msgid "Paths"
 msgstr "Percorsi/File"
 
-#: option_editor.cc:267 option_editor.cc:273 option_editor.cc:724
-#: option_editor.cc:751
+#: option_editor.cc:268 option_editor.cc:274 option_editor.cc:723
+#: option_editor.cc:750
 msgid "internal"
 msgstr "interno"
 
-#: option_editor.cc:286
+#: option_editor.cc:287
 msgid "Short crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:298
+#: option_editor.cc:299
 msgid "Destructive crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:366
+#: option_editor.cc:367
 msgid "SMPTE Frames/second"
 msgstr ""
 
-#: option_editor.cc:367
+#: option_editor.cc:368
 msgid "SMPTE Offset"
 msgstr ""
 
-#: option_editor.cc:461 option_editor.cc:468 option_editor.cc:471
-#: option_editor.cc:617
+#: option_editor.cc:462 option_editor.cc:469 option_editor.cc:472
+#: option_editor.cc:618
 #, fuzzy
 msgid "online"
 msgstr "lineare"
@@ -5228,12 +5226,12 @@ msgstr "lineare"
 #. remember, we have to handle the i18n case where the relative
 #. lengths of the strings in language N is different than in english.
 #.
-#: option_editor.cc:468 option_editor.cc:469 option_editor.cc:614
+#: option_editor.cc:469 option_editor.cc:470 option_editor.cc:615
 #, fuzzy
 msgid "offline"
 msgstr "lineare"
 
-#: option_editor.cc:669
+#: option_editor.cc:670
 msgid "Choose Click"
 msgstr ""
 
@@ -5242,15 +5240,15 @@ msgstr ""
 msgid "Choose Click Emphasis"
 msgstr "Usa come enfasi del click"
 
-#: option_editor.cc:804
+#: option_editor.cc:803
 msgid "Click audio file"
 msgstr "File audio del click"
 
-#: option_editor.cc:810
+#: option_editor.cc:809
 msgid "Click emphasis audiofile"
 msgstr "Pecorso del file di enfasi click"
 
-#: option_editor.cc:847
+#: option_editor.cc:846
 msgid ""
 "The auditioner is a dedicated mixer strip used\n"
 "for listening to specific regions outside the context\n"
@@ -5262,35 +5260,35 @@ msgstr ""
 "del contesto del mixaggio. Può essere connessa proprio\n"
 "come ogni altra striscia del mixer."
 
-#: option_editor.cc:920
+#: option_editor.cc:919
 msgid "Edit using"
 msgstr "Modifica usando"
 
-#: option_editor.cc:927 option_editor.cc:954
+#: option_editor.cc:926 option_editor.cc:953
 msgid "+ button"
 msgstr "+ pulsante"
 
-#: option_editor.cc:947
+#: option_editor.cc:946
 msgid "Delete using"
 msgstr "Elimina usando"
 
-#: option_editor.cc:974
+#: option_editor.cc:973
 msgid "Ignore snap using"
 msgstr "Ignora l'allineamento automatico usando"
 
-#: opts.cc:47
+#: opts.cc:46
 msgid "Usage: "
 msgstr "Utilizzo: "
 
-#: opts.cc:48
+#: opts.cc:47
 msgid "  -v, --version                    Show version information\n"
 msgstr "  -v, --versione                    Mostra info sulla versione\n"
 
-#: opts.cc:49
+#: opts.cc:48
 msgid "  -h, --help                       Print this message\n"
 msgstr "  -h, --help                        Mostra questo messaggio\n"
 
-#: opts.cc:50
+#: opts.cc:49
 msgid ""
 "  -b, --bindings                   Print all possible keyboard binding "
 "names\n"
@@ -5298,13 +5296,13 @@ msgstr ""
 "  -b, --bindings                   Mostra tutte le possibili combinazioni di "
 "tasti\n"
 
-#: opts.cc:51
+#: opts.cc:50
 #, fuzzy
 msgid "  -n, --show-splash                Show splash screen\n"
 msgstr ""
 "  -n, --no-splash                   Non mostrare la schermata d'avvio\n"
 
-#: opts.cc:52
+#: opts.cc:51
 #, fuzzy
 msgid ""
 "  -c, --name  name                 Use a specific jack client name, default "
@@ -5313,152 +5311,165 @@ msgstr ""
 "  -c, --jack-client-name  name     Utilizza nome specifico per jack, "
 "predefinito e' ardour\n"
 
-#: opts.cc:53
+#: opts.cc:52
 #, fuzzy
 msgid ""
 "  -N, --new session-name           Create a new session from the command "
 "line\n"
 msgstr "  [nome sessione]                  Nome della sessione da caricare\n"
 
-#: opts.cc:54
+#: opts.cc:53
 msgid ""
 "  -o, --use-hw-optimizations        Try to use h/w specific optimizations\n"
 msgstr ""
 
-#: opts.cc:56
+#: opts.cc:55
 #, fuzzy
 msgid "  -V, --novst                      Do not use VST support\n"
 msgstr ""
 "  -n, --no-splash                   Non mostrare la schermata d'avvio\n"
 
-#: opts.cc:58
+#: opts.cc:57
 msgid "  [session-name]                   Name of session to load\n"
 msgstr "  [nome sessione]                  Nome della sessione da caricare\n"
 
-#: opts.cc:59
+#: opts.cc:58
 msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
 msgstr ""
 
-#: opts.cc:60
+#: opts.cc:59
 #, fuzzy
 msgid "  -g, --gtktheme                   Allow GTK to load a theme\n"
 msgstr "  -h, --help                        Mostra questo messaggio\n"
 
-#: pan_automation_time_axis.cc:59
+#: pan_automation_time_axis.cc:60
 msgid "You can't graphically edit panning of more than stream"
 msgstr ""
 
-#: pan_automation_time_axis.cc:79
+#: pan_automation_time_axis.cc:80
 #, fuzzy
 msgid "add pan automation event"
 msgstr "aggiungi evento di automazione a "
 
-#: panner2d.cc:588 panner_ui.cc:393 plugin_ui.cc:833
+#: panner2d.cc:589 panner_ui.cc:435 plugin_ui.cc:834
 #, fuzzy
 msgid "Bypass"
 msgstr "Battute"
 
-#: panner_ui.cc:57 panner_ui.cc:187
+#: panner_ui.cc:58 panner_ui.cc:225
 #, fuzzy
 msgid "link"
 msgstr "vuoto"
 
+#: panner_ui.cc:69
+msgid "Pan automation mode"
+msgstr "Modalita' automazione pan"
+
 #: panner_ui.cc:70
+msgid "Pan automation type"
+msgstr "Tipo di automazione pan"
+
+#: panner_ui.cc:81
 msgid "panning link control"
 msgstr ""
 
-#: panner_ui.cc:72
+#: panner_ui.cc:83
 msgid "panning link direction"
 msgstr ""
 
-#: panner_ui.cc:197
+#: panner_ui.cc:235
 msgid "L"
 msgstr ""
 
-#: panner_ui.cc:296
+#: panner_ui.cc:335
+#, c-format
+msgid "panner for channel %lu"
+msgstr ""
+
+#: panner_ui.cc:337
 #, c-format
 msgid "panner for channel %u"
 msgstr ""
 
-#: panner_ui.cc:403
+#: panner_ui.cc:445
 #, fuzzy
 msgid "Reset all"
 msgstr "azzera"
 
-#: playlist_selector.cc:51
+#: playlist_selector.cc:52
 #, fuzzy
 msgid "ardour: playlists"
 msgstr "azzera le posizioni"
 
-#: playlist_selector.cc:58
+#: playlist_selector.cc:59
 msgid "Playlists grouped by track"
 msgstr ""
 
-#: playlist_selector.cc:97
+#: playlist_selector.cc:98
 #, fuzzy
 msgid "ardour: playlist for "
 msgstr "ardour: editor delle opzioni"
 
-#: playlist_selector.cc:113
+#: playlist_selector.cc:114
 #, fuzzy
 msgid "Other tracks"
 msgstr "Nascondi traccia"
 
-#: playlist_selector.cc:129
+#: playlist_selector.cc:130
 msgid "unassigned"
 msgstr ""
 
-#: plugin_selector.cc:42
+#: plugin_selector.cc:43
 msgid "ardour: plugins"
 msgstr ""
 
-#: plugin_selector.cc:55
+#: plugin_selector.cc:56
 #, fuzzy
 msgid "Available LADSPA Plugins"
 msgstr "Plugin LADSPA disponibili"
 
-#: plugin_selector.cc:56
+#: plugin_selector.cc:57
 msgid "Type"
 msgstr "Tipo"
 
-#: plugin_selector.cc:57 plugin_selector.cc:80
+#: plugin_selector.cc:58 plugin_selector.cc:81
 msgid "# Inputs"
 msgstr "# Entrate"
 
-#: plugin_selector.cc:58 plugin_selector.cc:81
+#: plugin_selector.cc:59 plugin_selector.cc:82
 msgid "# Outputs"
 msgstr "# Uscite"
 
-#: plugin_selector.cc:67
+#: plugin_selector.cc:68
 msgid "Plugins to be Connected to Insert"
 msgstr ""
 
-#: plugin_selector.cc:79
+#: plugin_selector.cc:80
 #, fuzzy
 msgid "Available plugins"
 msgstr "Plugin VST disponibili"
 
-#: plugin_selector.cc:97
+#: plugin_selector.cc:98
 msgid "Add a plugin to the effect list"
 msgstr "Aggiungi un plugin alla lista degli effetti"
 
-#: plugin_selector.cc:99
+#: plugin_selector.cc:102
 msgid "Remove a plugin from the effect list"
 msgstr "Rimuovi un plugin dalla lista degli effetti"
 
-#: plugin_selector.cc:101
+#: plugin_selector.cc:104
 msgid "Update available plugins"
 msgstr "Aggiorna i plugin disponibili"
 
-#: plugin_selector.cc:123
+#: plugin_selector.cc:126
 msgid "LADSPA"
 msgstr ""
 
-#: plugin_selector.cc:126
+#: plugin_selector.cc:129
 msgid "VST"
 msgstr "VST"
 
-#: plugin_ui.cc:83
+#: plugin_ui.cc:84
 msgid ""
 "unknown type of editor-supplying plugin (note: no VST support in this "
 "version of ardour)"
@@ -5466,51 +5477,52 @@ msgstr ""
 "tipo di plugin fornito sconosciuto (nota: nessun supporto a VST in questa "
 "versione di ardour)"
 
-#: plugin_ui.cc:138
+#: plugin_ui.cc:139
 msgid "<span size=\"large\">Presets</span>"
 msgstr ""
 
-#: plugin_ui.cc:229
+#: plugin_ui.cc:230
 #, fuzzy
 msgid "Controls"
 msgstr "Uscite di Controllo"
 
-#: plugin_ui.cc:266
+#: plugin_ui.cc:267
 msgid "Plugin Editor: could not build control element for port %1"
 msgstr ""
 "Plugin Editor: impossibile creare elemento di controllo per la porta %1"
 
-#: plugin_ui.cc:357
-msgid "automation control"
+#: plugin_ui.cc:358
+#, fuzzy
+msgid "Automation control"
 msgstr "controllo di automazione"
 
-#: plugin_ui.cc:853
+#: plugin_ui.cc:854
 msgid "Plugin preset %1 not found"
 msgstr "Preset per plugin %1 non trovato"
 
-#: plugin_ui.cc:863
+#: plugin_ui.cc:864
 #, fuzzy
 msgid "Name of New Preset:"
 msgstr "Nome della nuova connessione"
 
-#: redirect_automation_line.cc:53
+#: redirect_automation_line.cc:54
 msgid "redirect automation created for non-plugin"
 msgstr "automazione di redirect creata per non-plugin"
 
-#: redirect_automation_time_axis.cc:93
+#: redirect_automation_time_axis.cc:94
 msgid "add automation event to "
 msgstr "aggiungi evento di automazione a "
 
-#: redirect_box.cc:222
+#: redirect_box.cc:223
 msgid "New send"
 msgstr ""
 
-#: redirect_box.cc:223
+#: redirect_box.cc:224
 #, fuzzy
 msgid "Show send controls"
 msgstr "utilizza le uscite di controllo"
 
-#: redirect_box.cc:377
+#: redirect_box.cc:383
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5521,7 +5533,7 @@ msgid ""
 "part of the signal."
 msgstr ""
 
-#: redirect_box.cc:389
+#: redirect_box.cc:395
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5533,7 +5545,7 @@ msgid ""
 "support this type of configuration."
 msgstr ""
 
-#: redirect_box.cc:402
+#: redirect_box.cc:408
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "\n"
@@ -5546,34 +5558,34 @@ msgid ""
 "Ardour does not understand what to do in such situations.\n"
 msgstr ""
 
-#: redirect_box.cc:493
+#: redirect_box.cc:495
 msgid "Pre-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:496
+#: redirect_box.cc:498
 msgid "Post-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:642
+#: redirect_box.cc:644
 msgid ""
 "You cannot reorder this set of redirects\n"
 "in that way because the inputs and\n"
 "outputs do not work correctly."
 msgstr ""
 
-#: redirect_box.cc:747
+#: redirect_box.cc:749
 #, fuzzy
 msgid "rename redirect"
 msgstr "ardour: rinomina la regione"
 
-#: redirect_box.cc:824 redirect_box.cc:872
+#: redirect_box.cc:826 redirect_box.cc:874
 msgid ""
 "Copying the set of redirects on the clipboard failed,\n"
 "probably because the I/O configuration of the plugins\n"
 "could not match the configuration of this track."
 msgstr ""
 
-#: redirect_box.cc:894
+#: redirect_box.cc:896
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this track?\n"
@@ -5582,7 +5594,7 @@ msgstr ""
 "Si vuole realmente rimuovere la traccia \"%1\" ?\n"
 "(questa azione non potrà essere annullata)"
 
-#: redirect_box.cc:897
+#: redirect_box.cc:899
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this bus?\n"
@@ -5591,246 +5603,258 @@ msgstr ""
 "Si vuole realmente rimuovere la traccia \"%1\" ?\n"
 "(questa azione non potrà essere annullata)"
 
-#: redirect_box.cc:902
+#: redirect_box.cc:904
 #, fuzzy
 msgid "Yes, remove them all"
 msgstr "Si, rimuovi."
 
-#: redirect_box.cc:938
+#: redirect_box.cc:940
 #, fuzzy
 msgid "ardour: %1"
 msgstr "ardour: orologio"
 
-#: redirect_box.cc:980
+#: redirect_box.cc:982
 #, fuzzy
 msgid "ardour: %1: %2 (by %3)"
 msgstr "ardour: regione"
 
 #. new stuff
-#: redirect_box.cc:1052
+#: redirect_box.cc:1054
 msgid "New Plugin ..."
 msgstr ""
 
-#: redirect_box.cc:1053
+#: redirect_box.cc:1055
 #, fuzzy
 msgid "New Insert"
 msgstr "Nuova entrata"
 
-#: redirect_box.cc:1054
+#: redirect_box.cc:1056
 msgid "New Send ..."
 msgstr ""
 
-#: redirect_box.cc:1066
+#: redirect_box.cc:1068
 #, fuzzy
 msgid "Deselect All"
 msgstr "Seleziona tutto"
 
-#: redirect_box.cc:1073
+#: redirect_box.cc:1075
 #, fuzzy
 msgid "Activate all"
 msgstr "Attiva"
 
-#: redirect_box.cc:1074
+#: redirect_box.cc:1076
 #, fuzzy
 msgid "Deactivate all"
 msgstr "Disattiva"
 
-#: region_editor.cc:44
+#: region_editor.cc:45
 msgid "NAME:"
 msgstr "NOME:"
 
-#: region_editor.cc:45
+#: region_editor.cc:46
 msgid "lock"
 msgstr "blocca"
 
-#: region_editor.cc:47
+#: region_editor.cc:48
 msgid "opaque"
 msgstr "opaco"
 
-#: region_editor.cc:52
+#: region_editor.cc:49 region_editor.cc:192 region_editor.cc:226
+msgid "active"
+msgstr "attivo"
+
+#: region_editor.cc:50
+msgid "visible"
+msgstr "visibile"
+
+#: region_editor.cc:53
 msgid "Layer"
 msgstr "Livello"
 
-#: region_editor.cc:60
+#: region_editor.cc:54
+msgid "play"
+msgstr "suona"
+
+#: region_editor.cc:61
 msgid "ENVELOPE"
 msgstr ""
 
-#: region_editor.cc:106
+#: region_editor.cc:107
 msgid "mute this region"
 msgstr "Metti in muto questa regione"
 
-#: region_editor.cc:107
+#: region_editor.cc:108
 msgid "regions underneath this one cannot be heard"
 msgstr "le regioni al di sotto di questa non posssono essere udite"
 
-#: region_editor.cc:108
+#: region_editor.cc:109
 msgid "prevent any changes to this region"
 msgstr "impedisci qualsiasi cambio a questa regione"
 
-#: region_editor.cc:109
+#: region_editor.cc:110
 msgid "use the gain envelope during playback"
 msgstr "usa la curva di gain suonando"
 
-#: region_editor.cc:110
+#: region_editor.cc:111
 msgid "show the gain envelope"
 msgstr "mostra la curva di gain"
 
-#: region_editor.cc:111
+#: region_editor.cc:112
 msgid "use fade in curve during playback"
 msgstr "usa la curva di smorzamento in entrata, suonando"
 
-#: region_editor.cc:112
+#: region_editor.cc:113
 msgid "use fade out curve during playback"
 msgstr "usa la curva di smorzamento in uscita, suonando"
 
-#: region_editor.cc:113
+#: region_editor.cc:114
 msgid "audition this region"
 msgstr "fai l'audition di questa regione"
 
-#: region_editor.cc:146
+#: region_editor.cc:147
 msgid "START:"
 msgstr "INIZIO:"
 
-#: region_editor.cc:148
+#: region_editor.cc:149
 msgid "END:"
 msgstr "FINE"
 
-#: region_editor.cc:150
+#: region_editor.cc:151
 msgid "LENGTH:"
 msgstr "LUNGHEZZA"
 
-#: region_editor.cc:190
+#: region_editor.cc:191
 msgid "FADE IN"
 msgstr "SMORZA ENTRATA"
 
-#: region_editor.cc:192 region_editor.cc:226
+#: region_editor.cc:193 region_editor.cc:227
 msgid "msecs"
 msgstr "msec"
 
-#: region_editor.cc:224
+#: region_editor.cc:225
 msgid "FADE OUT"
 msgstr "SMORZA USCITA"
 
-#: region_editor.cc:264
+#: region_editor.cc:265
 msgid "ardour: region "
 msgstr "ardour: regione"
 
-#: region_editor.cc:401
+#: region_editor.cc:402
 msgid "fade in edit"
 msgstr "modifica lo smorzamento in entrata"
 
-#: region_editor.cc:413
+#: region_editor.cc:414
 msgid "fade out edit"
 msgstr "modifica lo smorzamento in uscita"
 
-#: regionview.cc:1140
+#: regionview.cc:1146
 #, fuzzy
 msgid "add gain control point"
 msgstr "Rimuovi il punto di sincronizzazione"
 
-#: route_params_ui.cc:88
+#: route_params_ui.cc:89
 msgid "Tracks/Buses"
 msgstr "Tracce/Bus"
 
-#: route_params_ui.cc:108
+#: route_params_ui.cc:109
 #, fuzzy
 msgid "Pre-fader Redirects"
 msgstr "Pre Redirezionamenti"
 
-#: route_params_ui.cc:109
+#: route_params_ui.cc:110
 #, fuzzy
 msgid "Post-fader Redirects"
 msgstr "Post Redirezionamenti"
 
-#: route_params_ui.cc:141
+#: route_params_ui.cc:144
 #, fuzzy
 msgid "ardour: track/bus inspector"
 msgstr "ardour: aggiungi traccia/bus"
 
-#: route_params_ui.cc:142
+#: route_params_ui.cc:145
 msgid "ardour_route_parameters"
 msgstr ""
 
-#: route_params_ui.cc:199
+#: route_params_ui.cc:202
 msgid "route display list item for renamed route not found!"
 msgstr ""
 
-#: route_params_ui.cc:451
+#: route_params_ui.cc:453
 msgid "NO TRACK"
 msgstr "NESSUNA TRACCIA"
 
-#: route_params_ui.cc:693
+#: route_params_ui.cc:695
 #, fuzzy
 msgid "ardour: track/bus inspector: "
 msgstr "ardour: aggiungi traccia/bus"
 
-#: route_params_ui.cc:697
+#: route_params_ui.cc:699
 msgid "No Route Selected"
 msgstr "Nessun Route Selezionato"
 
-#: route_params_ui.cc:698
+#: route_params_ui.cc:700
 #, fuzzy
 msgid "ardour: track/bus/inspector: no route selected"
 msgstr "ardour: parametri di route: nessun route selezionato"
 
 #. ctrl-shift-click applies change to all routes
-#: route_ui.cc:133
+#: route_ui.cc:134
 #, fuzzy
 msgid "mute change"
 msgstr "Imposta l'intervallo di Punch"
 
 #. ctrl-shift-click applies change to all routes
 #. ctrl-alt-click: exclusively solo this track, not a toggle */
-#: route_ui.cc:208 route_ui.cc:218
+#: route_ui.cc:209 route_ui.cc:219
 #, fuzzy
 msgid "solo change"
 msgstr "Intervallo di loop"
 
-#: route_ui.cc:281
+#: route_ui.cc:282
 msgid "rec-enable change"
 msgstr ""
 
-#: route_ui.cc:472
+#: route_ui.cc:479
 msgid "Solo-safe"
 msgstr ""
 
-#: route_ui.cc:480 route_ui.cc:523
+#: route_ui.cc:487 route_ui.cc:530
 msgid "MIDI Bind"
 msgstr ""
 
-#: route_ui.cc:494
+#: route_ui.cc:501
 msgid "Pre Fader"
 msgstr ""
 
-#: route_ui.cc:501
+#: route_ui.cc:508
 msgid "Post Fader"
 msgstr ""
 
-#: route_ui.cc:508
+#: route_ui.cc:515
 msgid "Control Outs"
 msgstr "Uscite di Controllo"
 
-#: route_ui.cc:515
+#: route_ui.cc:522
 msgid "Main Outs"
 msgstr "Uscite Principali"
 
-#: route_ui.cc:552
+#: route_ui.cc:559
 msgid "mix group solo  change"
 msgstr ""
 
-#: route_ui.cc:586
+#: route_ui.cc:593
 msgid "mix group mute change"
 msgstr ""
 
-#: route_ui.cc:602
+#: route_ui.cc:609
 msgid "mix group rec-enable change"
 msgstr ""
 
-#: route_ui.cc:619 visual_time_axis.cc:236
+#: route_ui.cc:626 visual_time_axis.cc:237
 msgid "ardour: color selection"
 msgstr "ardour: selezione del colore"
 
-#: route_ui.cc:695
+#: route_ui.cc:702
 #, fuzzy
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
@@ -5841,7 +5865,7 @@ msgstr ""
 "Si vuole realmente rimuovere la traccia \"%1\" ?\n"
 "(questa azione non potrà essere annullata)"
 
-#: route_ui.cc:697
+#: route_ui.cc:704
 msgid ""
 "Do you really want to remove bus \"%1\" ?\n"
 "(cannot be undone)"
@@ -5849,11 +5873,11 @@ msgstr ""
 "Si vuole realmente rimuovere il bus \"%1\" ?\n"
 "(questa azione non potrà essere annullata)"
 
-#: route_ui.cc:701 visual_time_axis.cc:278
+#: route_ui.cc:708 visual_time_axis.cc:279
 msgid "Yes, remove it."
 msgstr "Si, rimuovi."
 
-#: route_ui.cc:730
+#: route_ui.cc:737
 #, fuzzy
 msgid "New Name: "
 msgstr "nuovo nome: "
@@ -5911,148 +5935,149 @@ msgstr "Impossibile accedere al file audio"
 msgid "Name for Field"
 msgstr "Nome per la Regione"
 
-#: sfdb_ui.cc:333
+#: sfdb_ui.cc:335
 msgid "Split Channels"
 msgstr "Dividi i Canali"
 
-#: sfdb_ui.cc:340
+#: sfdb_ui.cc:342
 msgid "Create a region for each channel"
 msgstr ""
 
-#: sfdb_ui.cc:342
+#: sfdb_ui.cc:344
 msgid "Embed"
 msgstr ""
 
-#: sfdb_ui.cc:344
+#: sfdb_ui.cc:346
 #, fuzzy
 msgid "Link to an external file"
 msgstr "Inserisci un file audio esterno"
 
-#: sfdb_ui.cc:346
+#: sfdb_ui.cc:348
 msgid "Import"
 msgstr "Importa"
 
-#: sfdb_ui.cc:348
+#: sfdb_ui.cc:350
 msgid "Copy a file to the session folder"
 msgstr ""
 
-#: sfdb_ui.cc:412
+#: sfdb_ui.cc:414
 #, fuzzy
 msgid "programming error: %1"
 msgstr "errore di programmazione: "
 
-#: tempo_dialog.cc:17 tempo_dialog.cc:34
+#: tempo_dialog.cc:18 tempo_dialog.cc:35
 msgid "Beats per minute"
 msgstr "Battiti al minuto"
 
-#: tempo_dialog.cc:20 tempo_dialog.cc:37 tempo_dialog.cc:153
-#: tempo_dialog.cc:171
+#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:203
+#: tempo_dialog.cc:221
 msgid "Bar"
 msgstr "Battuta"
 
-#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:154
-#: tempo_dialog.cc:172
+#: tempo_dialog.cc:22 tempo_dialog.cc:39 tempo_dialog.cc:204
+#: tempo_dialog.cc:222
 msgid "Beat"
 msgstr "Battito"
 
-#: tempo_dialog.cc:23 tempo_dialog.cc:40 tempo_dialog.cc:155
-#: tempo_dialog.cc:173
+#: tempo_dialog.cc:24 tempo_dialog.cc:41 tempo_dialog.cc:205
+#: tempo_dialog.cc:223
 msgid "Location"
 msgstr "Posizione"
 
-#: tempo_dialog.cc:149 tempo_dialog.cc:167
+#: tempo_dialog.cc:199 tempo_dialog.cc:217
 msgid "Meter denominator"
 msgstr "Denominatore per il Meter"
 
-#: tempo_dialog.cc:150 tempo_dialog.cc:168
+#: tempo_dialog.cc:200 tempo_dialog.cc:218
 msgid "Beats per bar"
 msgstr "Battiti per battuta"
 
-#: tempo_dialog.cc:186 tempo_dialog.cc:197
+#: tempo_dialog.cc:236 tempo_dialog.cc:247
 msgid "whole (1)"
 msgstr "intero (1)"
 
-#: tempo_dialog.cc:187 tempo_dialog.cc:199
+#: tempo_dialog.cc:237 tempo_dialog.cc:249
 msgid "second (2)"
 msgstr "mezzo (2)"
 
-#: tempo_dialog.cc:188 tempo_dialog.cc:201
+#: tempo_dialog.cc:238 tempo_dialog.cc:251
 msgid "third (3)"
 msgstr "terzo (3)"
 
-#: tempo_dialog.cc:189 tempo_dialog.cc:203 tempo_dialog.cc:211
+#: tempo_dialog.cc:239 tempo_dialog.cc:253 tempo_dialog.cc:261
 msgid "quarter (4)"
 msgstr "quarto (4)"
 
-#: tempo_dialog.cc:190 tempo_dialog.cc:205
+#: tempo_dialog.cc:240 tempo_dialog.cc:255
 msgid "eighth (8)"
 msgstr "ottavo (8)"
 
-#: tempo_dialog.cc:191 tempo_dialog.cc:207
+#: tempo_dialog.cc:241 tempo_dialog.cc:257
 msgid "sixteenth (16)"
 msgstr "sedicesimo (16)"
 
-#: tempo_dialog.cc:192 tempo_dialog.cc:209
+#: tempo_dialog.cc:242 tempo_dialog.cc:259
 msgid "thirty-second (32)"
 msgstr "trentaduesimo (32)"
 
-#: tempo_dialog.cc:321
+#: tempo_dialog.cc:420
 msgid "garbaged note type entry (%1)"
 msgstr ""
 
-#: tempo_dialog.cc:331
+#: tempo_dialog.cc:430
 msgid "incomprehensible note type entry (%1)"
 msgstr ""
 
-#: time_axis_view.cc:111
+#: time_axis_view.cc:112
 msgid "gTortnam"
 msgstr ""
 
-#: time_axis_view.cc:548
+#: time_axis_view.cc:549
 msgid "Largest"
 msgstr "Ampissimo"
 
-#: time_axis_view.cc:549
+#: time_axis_view.cc:550
 msgid "Large"
 msgstr "Più ampio"
 
-#: time_axis_view.cc:550
+#: time_axis_view.cc:551
 msgid "Larger"
 msgstr "Ampio"
 
-#: time_axis_view.cc:552
+#: time_axis_view.cc:553
 msgid "Smaller"
 msgstr "Piccolo"
 
-#: time_axis_view.cc:553
+#: time_axis_view.cc:554
 msgid "Small"
 msgstr "Più piccolo"
 
-#: time_axis_view.cc:869
+#: time_axis_view.cc:870
 msgid "unknown track height name \"%1\" in XML GUI information"
 msgstr ""
 
-#: time_axis_view_item.cc:71
+#. first constructed item sets up font info
+#: time_axis_view_item.cc:79
 msgid "TimeAxisViewItemName"
 msgstr ""
 
-#: time_axis_view_item.cc:271
+#: time_axis_view_item.cc:298
 msgid "new duration %1 frames is out of bounds for %2"
 msgstr ""
 
-#: time_selection.cc:40
+#: time_selection.cc:41
 msgid "programming error: request for non-existent audio range (%1)!"
 msgstr ""
 
-#: utils.cc:106 utils.cc:149
+#: utils.cc:107 utils.cc:150
 msgid "bad XPM header %1"
 msgstr ""
 
-#: utils.cc:331
+#: utils.cc:332
 msgid "missing RGBA style for \"%1\""
 msgstr ""
 
-#: visual_time_axis.cc:275
+#: visual_time_axis.cc:276
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
 "(cannot be undone)"
@@ -6060,14 +6085,71 @@ msgstr ""
 "Si vuole realmente rimuovere la traccia \"%1\" ?\n"
 "(questa azione non potrà essere annullata)"
 
-#: visual_time_axis.cc:324
+#: visual_time_axis.cc:325
 msgid "new name: "
 msgstr "nuovo nome: "
 
-#: visual_time_axis.cc:335
+#: visual_time_axis.cc:336
 msgid "A track already exists with that name"
 msgstr "esiste già una traccia con quel nome"
 
+#, fuzzy
+#~ msgid "set selected trackview"
+#~ msgstr "Inserisci selezione"
+
+#, fuzzy
+#~ msgid "set selected control point"
+#~ msgstr "Rimuovi il punto di sincronizzazione"
+
+#, fuzzy
+#~ msgid "set selected regionview"
+#~ msgstr "Esegui la regione selezionata come loop"
+
+#~ msgid "Start a new session\n"
+#~ msgstr "Inizia una nuova sessione\n"
+
+#~ msgid "via Session menu"
+#~ msgstr "tramite il menu Sessione"
+
+#, fuzzy
+#~ msgid "<b>Advanced</b>"
+#~ msgstr "Avanzate..."
+
+#, fuzzy
+#~ msgid "Select a File"
+#~ msgstr "Seleziona tutto"
+
+#, fuzzy
+#~ msgid "Track/Bus connection options"
+#~ msgstr "Tracce/Bus"
+
+#~ msgid "RECORD"
+#~ msgstr "REGISTRA"
+
+#~ msgid "INPUT"
+#~ msgstr "ENTRATA"
+
+#~ msgid "OUTPUT"
+#~ msgstr "USCITA"
+
+#~ msgid "Gain automation mode"
+#~ msgstr "Modalita' automazione gain"
+
+#~ msgid "Gain automation type"
+#~ msgstr "Tipo di automazione gain"
+
+#~ msgid "gain automation mode"
+#~ msgstr "modalita' di automazione gain"
+
+#~ msgid "gain automation state"
+#~ msgstr "stato dell'automazione gain"
+
+#~ msgid "pan automation state"
+#~ msgstr "stato dell'automazione pan"
+
+#~ msgid "no group"
+#~ msgstr "nessun gruppo"
+
 #, fuzzy
 #~ msgid "normal"
 #~ msgstr "Normale"
@@ -6310,9 +6392,6 @@ msgstr "esiste già una traccia con quel nome"
 #~ msgid "AND"
 #~ msgstr "E"
 
-#~ msgid "OR"
-#~ msgstr "O"
-
 #~ msgid "ardour: locate soundfiles"
 #~ msgstr "ardour: localizza file audio"
 
@@ -6328,9 +6407,6 @@ msgstr "esiste già una traccia con quel nome"
 #~ msgid "Ardour: Search Results"
 #~ msgstr "Ardour: Risultati della Ricerca"
 
-#~ msgid "Mix Groups"
-#~ msgstr "Gruppi di mixaggio"
-
 #~ msgid "Hide All AudioTrack MixerStrips"
 #~ msgstr "Nascondi tutte le Tracce del Mixer"
 
@@ -6343,9 +6419,6 @@ msgstr "esiste già una traccia con quel nome"
 #~ msgid "Name for new mix group"
 #~ msgstr "Nome del nuovo gruppo di mixaggio"
 
-#~ msgid "Session name:"
-#~ msgstr "Nome della sessione:"
-
 #~ msgid "Create"
 #~ msgstr "Crea"
 
@@ -6378,17 +6451,9 @@ msgstr "esiste già una traccia con quel nome"
 #~ "Se si vuole utilizzare un sample rate differente\n"
 #~ "bisogna chiudere e riavviare JACK"
 
-#, fuzzy
-#~ msgid "Session template"
-#~ msgstr "usa un modello esistente"
-
 #~ msgid "blank"
 #~ msgstr "vuoto"
 
-#, fuzzy
-#~ msgid "No template"
-#~ msgstr "-modello"
-
 #, fuzzy
 #~ msgid "Slave to MTC"
 #~ msgstr "Invia MTC"
@@ -6402,9 +6467,6 @@ msgstr "esiste già una traccia con quel nome"
 #~ msgid "Display"
 #~ msgstr "Interfaccia"
 
-#~ msgid "Use as click"
-#~ msgstr "Usa come click"
-
 #~ msgid "--unknown--"
 #~ msgstr "--sconosciuto--"
 
index da0bb8b2e3aa9f99bde56d7e2b1748471143fe21..92c0d7934a024d0bd7be3a941ba52cd0dcbbf944 100644 (file)
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ardour 0.688.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 18:09-0400\n"
 "PO-Revision-Date: 2005-08-15 21:50-0000\n"
 "Last-Translator: Chris Ross, Alexander Franca & Leandro Marco\n"
 "Language-Team: Portuguese\n"
@@ -18,150 +18,150 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: about.cc:119
+#: about.cc:120
 msgid "Paul Davis"
 msgstr ""
 
-#: about.cc:120
+#: about.cc:121
 #, fuzzy
 msgid "Jesse Chappell"
 msgstr "reiniciar todos"
 
-#: about.cc:121
+#: about.cc:122
 msgid "Taybin Rutkin"
 msgstr ""
 
-#: about.cc:122
+#: about.cc:123
 msgid "Marcus Andersson"
 msgstr ""
 
-#: about.cc:123
+#: about.cc:124
 msgid "Jeremy Hall"
 msgstr ""
 
-#: about.cc:124
+#: about.cc:125
 msgid "Steve Harris"
 msgstr ""
 
-#: about.cc:125
+#: about.cc:126
 msgid "Tim Mayberry"
 msgstr ""
 
-#: about.cc:126
+#: about.cc:127
 msgid "Mark Stewart"
 msgstr ""
 
-#: about.cc:127
+#: about.cc:128
 msgid "Sam Chessman"
 msgstr ""
 
-#: about.cc:128
+#: about.cc:129
 msgid "Jack O'Quin"
 msgstr ""
 
-#: about.cc:129
+#: about.cc:130
 msgid "Matt Krai"
 msgstr ""
 
-#: about.cc:130
+#: about.cc:131
 msgid "Ben Bell"
 msgstr ""
 
-#: about.cc:131
+#: about.cc:132
 msgid "Gerard van Dongen"
 msgstr ""
 
-#: about.cc:132
+#: about.cc:133
 msgid "Thomas Charbonnel"
 msgstr ""
 
-#: about.cc:133
+#: about.cc:134
 msgid "Nick Mainsbridge"
 msgstr ""
 
-#: about.cc:134
+#: about.cc:135
 msgid "Colin Law"
 msgstr ""
 
-#: about.cc:135
+#: about.cc:136
 msgid "Sampo Savolainen"
 msgstr ""
 
-#: about.cc:136
+#: about.cc:137
 msgid "Joshua Leach"
 msgstr ""
 
-#: about.cc:137
+#: about.cc:138
 msgid "Rob Holland"
 msgstr ""
 
-#: about.cc:138
+#: about.cc:139
 msgid "Per Sigmond"
 msgstr ""
 
-#: about.cc:139
+#: about.cc:140
 msgid "Doug Mclain"
 msgstr ""
 
-#: about.cc:140
+#: about.cc:141
 msgid "Petter Sundlöf"
 msgstr ""
 
-#: about.cc:145
+#: about.cc:146
 msgid ""
 "French:\n"
 "\tAlain Fréhel <alain.frehel@free.fr>\n"
 msgstr ""
 
-#: about.cc:146
+#: about.cc:147
 msgid ""
 "German:\n"
 "\tKarsten Petersen <kapet@kapet.de>\n"
 msgstr ""
 
-#: about.cc:147
+#: about.cc:148
 msgid ""
 "Italian:\n"
 "\tFilippo Pappalardo <filippo@email.it>\n"
 msgstr ""
 
-#: about.cc:148
+#: about.cc:149
 msgid ""
 "Portuguese:\n"
 "\tRui Nuno Capela <rncbc@rncbc.org>\n"
 msgstr ""
 
-#: about.cc:149
+#: about.cc:150
 msgid ""
 "Brazilian Portuguese:\n"
 "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
 "\tChris Ross <chris@tebibyte.org>\n"
 msgstr ""
 
-#: about.cc:151
+#: about.cc:152
 msgid ""
 "Spanish:\n"
 "\t Alex Krohn <alexkrohn@fastmail.fm>\n"
 msgstr ""
 
-#: about.cc:152
+#: about.cc:153
 msgid ""
 "Russian:\n"
 "\t Igor Blinov <pitstop@nm.ru>\n"
 msgstr ""
 
-#: about.cc:180
+#: about.cc:181
 msgid "Copyright (C) 1999-2005 Paul Davis\n"
 msgstr ""
 
-#: about.cc:181
+#: about.cc:182
 msgid ""
 "Ardour comes with ABSOLUTELY NO WARRANTY\n"
 "This is free software, and you are welcome to redistribute it\n"
 "under certain conditions; see the file COPYING for details.\n"
 msgstr ""
 
-#: about.cc:187
+#: about.cc:188
 #, fuzzy
 msgid ""
 "%1\n"
@@ -170,52 +170,52 @@ msgstr ""
 "Ardour: %1\n"
 "(construído com ardour/gtk %2.%3.%4 libardour: %5.%6.%7)"
 
-#: actions.cc:260
+#: actions.cc:261
 msgid "programmer error: %1 %2"
 msgstr ""
 
-#: add_route_dialog.cc:61
+#: add_route_dialog.cc:62
 msgid "ardour: add track/bus"
 msgstr "ardour: adicionar trilhas/barramento"
 
 #. path = "1"
-#: add_route_dialog.cc:62 editor_route_list.cc:72
+#: add_route_dialog.cc:63 editor_route_list.cc:73
 msgid "Tracks"
 msgstr "Trilhas"
 
 #. path = "0"
-#: add_route_dialog.cc:63 editor_route_list.cc:69
+#: add_route_dialog.cc:64 editor_route_list.cc:70
 msgid "Busses"
 msgstr "Barramentos"
 
-#: add_route_dialog.cc:95 plugin_ui.cc:832
+#: add_route_dialog.cc:96 plugin_ui.cc:833
 msgid "Add"
 msgstr "Adicionar"
 
-#: add_route_dialog.cc:113
+#: add_route_dialog.cc:114
 msgid "Name (template)"
 msgstr "Nome (esquema)"
 
-#: add_route_dialog.cc:119
+#: add_route_dialog.cc:120
 #, fuzzy
 msgid "Channel Configuration"
 msgstr "Cancelar importação"
 
-#: add_route_dialog.cc:176 editor.cc:131 editor.cc:3660 time_axis_view.cc:551
+#: add_route_dialog.cc:177 editor.cc:134 editor.cc:3688 time_axis_view.cc:552
 msgid "Normal"
 msgstr "Normal"
 
-#: add_route_dialog.cc:178
+#: add_route_dialog.cc:179
 #, fuzzy
 msgid "Tape"
 msgstr "Estado"
 
-#: add_route_dialog.cc:195
+#: add_route_dialog.cc:196
 #, fuzzy
 msgid "Mono"
 msgstr "mono"
 
-#: add_route_dialog.cc:197
+#: add_route_dialog.cc:198
 #, fuzzy
 msgid "Stereo"
 msgstr "estéreo"
@@ -301,31 +301,11 @@ msgstr "AUDIÇÃO"
 msgid "SOLO"
 msgstr "SOLO"
 
-#: ardour_ui.cc:207
-msgid ""
-"You cannot record-enable\n"
-"track %1\n"
-"because it has no input connections.\n"
-"You would be wasting space recording silence."
-msgstr ""
-"Vocãonão pode habilitar para gravaãoo\n"
-"a trilha %1\n"
-"porque ela não tem conexãos de entrada.\n"
-"Você estaria desperdiçando espaço gravando silêncio."
-
-#: ardour_ui.cc:236
-msgid "no vertical meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:243
-msgid "no horizontal meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:410
+#: ardour_ui.cc:375
 msgid "quit"
 msgstr "sair"
 
-#: ardour_ui.cc:419
+#: ardour_ui.cc:384
 msgid ""
 "Ardour was unable to save your session.\n"
 "\n"
@@ -338,31 +318,31 @@ msgstr ""
 "Se mesmo assim você deseja sair, por favor utilize\n"
 "a opção \"Apenas Sair\"."
 
-#: ardour_ui.cc:438
+#: ardour_ui.cc:403
 msgid "ardour: save session?"
 msgstr "ardour: salvar sessão?"
 
-#: ardour_ui.cc:445
+#: ardour_ui.cc:410
 msgid "Don't %1"
 msgstr "Não %1"
 
-#: ardour_ui.cc:447
+#: ardour_ui.cc:412
 msgid "Just %1"
 msgstr "Apenas %1"
 
-#: ardour_ui.cc:449
+#: ardour_ui.cc:414
 msgid "Save and %1"
 msgstr "Salvar e %1"
 
-#: ardour_ui.cc:461
+#: ardour_ui.cc:426
 msgid "session"
 msgstr "sessão"
 
-#: ardour_ui.cc:463
+#: ardour_ui.cc:428
 msgid "snapshot"
 msgstr "capturar instantâneo"
 
-#: ardour_ui.cc:465
+#: ardour_ui.cc:430
 #, fuzzy
 msgid ""
 "The %1\"%2\"\n"
@@ -382,83 +362,83 @@ msgstr ""
 "\n"
 "O que você quer fazer?"
 
-#: ardour_ui.cc:479
+#: ardour_ui.cc:444
 msgid "Prompter"
 msgstr ""
 
-#: ardour_ui.cc:538
+#: ardour_ui.cc:503
 #, c-format
 msgid "disconnected"
 msgstr "desconectado"
 
-#: ardour_ui.cc:545
+#: ardour_ui.cc:510
 #, c-format
 msgid "SR: %.1f kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:549
+#: ardour_ui.cc:514
 #, c-format
 msgid "SR: %u kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:562
+#: ardour_ui.cc:527
 #, c-format
 msgid "DSP Load: %.1f%%"
 msgstr "DSP Carregada: %.1f%%"
 
-#: ardour_ui.cc:572
+#: ardour_ui.cc:537
 #, c-format
 msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
 msgstr ""
 
-#: ardour_ui.cc:599
+#: ardour_ui.cc:564
 msgid "space: 24hrs+"
 msgstr "espaço: 24hrs+"
 
-#: ardour_ui.cc:629
+#: ardour_ui.cc:594
 #, c-format
 msgid "space: %02dh:%02dm:%02ds"
 msgstr "espaço: %02dh:%02dm:%02ds"
 
-#: ardour_ui.cc:668
+#: ardour_ui.cc:633
 msgid "programming error: impossible control method"
 msgstr ""
 
 #
-#: ardour_ui.cc:776 new_session_dialog.cc:89
+#: ardour_ui.cc:741 new_session_dialog.cc:294
 #, fuzzy
 msgid "Recent Sessions"
 msgstr "abrir sessão"
 
 #
 #. ardour sessions are folders
-#: ardour_ui.cc:867
+#: ardour_ui.cc:834
 msgid "open session"
 msgstr "abrir sessão"
 
-#: ardour_ui.cc:873
+#: ardour_ui.cc:840
 #, fuzzy
 msgid "Ardour sessions"
 msgstr "ardour: salvar sessão?"
 
-#: ardour_ui.cc:906
+#: ardour_ui.cc:873
 msgid "Patience is a virtue.\n"
 msgstr "Paciência é uma virtude.\n"
 
-#: ardour_ui.cc:915
+#: ardour_ui.cc:882
 msgid "You cannot add a track without a session already loaded."
 msgstr ""
 "Você não pode adicionar uma trilha se uma sessão não estiver carregada."
 
-#: ardour_ui.cc:922
+#: ardour_ui.cc:889
 msgid "could not create new audio track"
 msgstr "não pôde criar uma nova trilha de áudio"
 
-#: ardour_ui.cc:926
+#: ardour_ui.cc:893
 msgid "could not create new audio bus"
 msgstr "não foi possível criar um novo barramento de áudio"
 
-#: ardour_ui.cc:945
+#: ardour_ui.cc:912
 msgid ""
 "There are insufficient JACK ports available\n"
 "to create a new track or bus.\n"
@@ -470,7 +450,7 @@ msgstr ""
 "Você deve salvar Ardour, sair e\n"
 "reiniciar o JACK com mais portas."
 
-#: ardour_ui.cc:1069
+#: ardour_ui.cc:1036
 msgid ""
 "Please create 1 or more track\n"
 "before trying to record.\n"
@@ -480,7 +460,7 @@ msgstr ""
 "antes de tentar gravar.\n"
 "Vir o menu de Sessão."
 
-#: ardour_ui.cc:1298
+#: ardour_ui.cc:1265
 msgid ""
 "JACK has either been shutdown or it\n"
 "disconnected Ardour because Ardour\n"
@@ -493,42 +473,40 @@ msgstr ""
 "A sessão corrente deverá ser salva e\n"
 "o serviço JACK reiniciado, tal como o Ardour."
 
-#: ardour_ui.cc:1315
+#: ardour_ui.cc:1282
 msgid "Unable to create all required ports"
 msgstr "Impossível criar todas as portas solicitadas"
 
-#: ardour_ui.cc:1323
+#: ardour_ui.cc:1290
 msgid "Unable to start the session running"
 msgstr "Impossível iniciar a sessão"
 
-#: ardour_ui.cc:1459
+#: ardour_ui.cc:1426
 msgid "No Stream"
 msgstr "Sem fluxo"
 
-#: ardour_ui.cc:1486 ardour_ui.cc:1505
+#: ardour_ui.cc:1453 ardour_ui.cc:1472
 msgid "none"
 msgstr "nenhum"
 
-#: ardour_ui.cc:1495 ardour_ui.cc:1514 automation_time_axis.cc:183
-#: automation_time_axis.cc:212 automation_time_axis.cc:459 mixer_strip.cc:174
-#: mixer_strip.cc:186 mixer_strip.cc:881 plugin_ui.cc:391 plugin_ui.cc:634
+#: ardour_ui.cc:1462 ardour_ui.cc:1481
 msgid "off"
 msgstr "desligado"
 
-#: ardour_ui.cc:1538
+#: ardour_ui.cc:1505
 #, fuzzy
 msgid "Name of New Snapshot"
 msgstr "Nome para a imagem capturada"
 
-#: ardour_ui.cc:1684
+#: ardour_ui.cc:1651
 msgid "Name for mix template:"
 msgstr "Nome para o esquema de mixer"
 
-#: ardour_ui.cc:1685
+#: ardour_ui.cc:1652
 msgid "-template"
 msgstr "-esquema/template"
 
-#: ardour_ui.cc:1836
+#: ardour_ui.cc:1809
 msgid ""
 "You do not have write access to this session.\n"
 "This prevents the session from being loaded."
@@ -536,15 +514,15 @@ msgstr ""
 "Você não tem permissão de escrita nesta sessão\n"
 "Isto impede que a sessão seja aberta."
 
-#: ardour_ui.cc:1849 ardour_ui.cc:1904
+#: ardour_ui.cc:1822 ardour_ui.cc:1877
 msgid "Session \"%1 (snapshot %2)\" did not load successfully"
 msgstr "A sessão \"%1 (instantâneo %2)\" não pôde ser carregada"
 
-#: ardour_ui.cc:1960
+#: ardour_ui.cc:1933
 msgid "No audio files were ready for cleanup"
 msgstr ""
 
-#: ardour_ui.cc:1964
+#: ardour_ui.cc:1937
 #, fuzzy
 msgid ""
 "If this seems suprising, \n"
@@ -557,23 +535,23 @@ msgstr ""
 "Eles podem conter regiões que requeiram a existência\n"
 "de arquivos não utlizados."
 
-#: ardour_ui.cc:1973
+#: ardour_ui.cc:1946
 msgid "ardour: cleanup"
 msgstr "ardour: limpar"
 
-#: ardour_ui.cc:2009 ardour_ui.cc:2015
+#: ardour_ui.cc:1982 ardour_ui.cc:1988
 msgid "files were"
 msgstr ""
 
-#: ardour_ui.cc:2011 ardour_ui.cc:2017
+#: ardour_ui.cc:1984 ardour_ui.cc:1990
 msgid "file was"
 msgstr ""
 
-#: ardour_ui.cc:2058
+#: ardour_ui.cc:2031
 msgid "Are you sure you want to cleanup?"
 msgstr ""
 
-#: ardour_ui.cc:2063
+#: ardour_ui.cc:2036
 #, fuzzy
 msgid ""
 "Cleanup is a destructive operation.\n"
@@ -586,24 +564,24 @@ msgstr ""
 "você continuar. Arquivos de audio não usados serão movidos\n"
 "para \"dead sounds\""
 
-#: ardour_ui.cc:2069
+#: ardour_ui.cc:2042
 #, fuzzy
 msgid "Clean Up"
 msgstr "Limpar"
 
-#: ardour_ui.cc:2072
+#: ardour_ui.cc:2045
 msgid "CleanupDialog"
 msgstr "Limpar"
 
-#: ardour_ui.cc:2073
+#: ardour_ui.cc:2046
 msgid "ardour_cleanup"
 msgstr "ardour_limpar"
 
-#: ardour_ui.cc:2092
+#: ardour_ui.cc:2065
 msgid "cleaned files"
 msgstr "arquivos limpos"
 
-#: ardour_ui.cc:2093
+#: ardour_ui.cc:2066
 #, fuzzy
 msgid ""
 "The following %1 %2 not in use and \n"
@@ -619,11 +597,11 @@ msgstr ""
 "isto vai liberar %3 %4bytes\n"
 "de espaço no disco rígido"
 
-#: ardour_ui.cc:2118
+#: ardour_ui.cc:2091
 msgid "deleted file"
 msgstr "arquivo removido"
 
-#: ardour_ui.cc:2119
+#: ardour_ui.cc:2092
 #, fuzzy
 msgid ""
 "The following %1 %2 deleted from\n"
@@ -633,11 +611,11 @@ msgstr ""
 "Os seguintes %1 arquivo%2 foram deletados, liberando %3 %4bytes de espaço no "
 "disco rígido"
 
-#: ardour_ui.cc:2242
+#: ardour_ui.cc:2215
 msgid "Recording was stopped because your system could not keep up."
 msgstr "A gravação foi encerrada porque seu sistema não consegue acompanhar"
 
-#: ardour_ui.cc:2265
+#: ardour_ui.cc:2238
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -646,7 +624,7 @@ msgid ""
 "quickly enough to keep up with recording.\n"
 msgstr ""
 
-#: ardour_ui.cc:2284
+#: ardour_ui.cc:2257
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -655,7 +633,7 @@ msgid ""
 "quickly enough to keep up with playback.\n"
 msgstr ""
 
-#: ardour_ui.cc:2310
+#: ardour_ui.cc:2283
 msgid ""
 "This session appears to have been in\n"
 "middle of recording when ardour or\n"
@@ -666,362 +644,362 @@ msgid ""
 "what you would like to do.\n"
 msgstr ""
 
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2293
 msgid "Recover from crash"
 msgstr ""
 
-#: ardour_ui.cc:2321
+#: ardour_ui.cc:2294
 msgid "Ignore crash data"
 msgstr ""
 
-#: ardour_ui.cc:2339
+#: ardour_ui.cc:2312
 msgid "Could not disconnect from JACK"
 msgstr "Não foi possível se desconectar ao servidor JACK"
 
-#: ardour_ui.cc:2352
+#: ardour_ui.cc:2325
 #, fuzzy
 msgid "Could not reconnect to JACK"
 msgstr "Não foi possível se conectar ao servidor JACK"
 
-#: ardour_ui2.cc:59
+#: ardour_ui2.cc:60
 msgid "UI: cannot setup editor"
 msgstr "não foi possível iniciar o editor"
 
-#: ardour_ui2.cc:64
+#: ardour_ui2.cc:65
 msgid "UI: cannot setup mixer"
 msgstr "não foi possível iniciar o mixer"
 
-#: ardour_ui2.cc:90
+#: ardour_ui2.cc:91
 msgid "MMC + Local"
 msgstr ""
 
-#: ardour_ui2.cc:91
+#: ardour_ui2.cc:92
 msgid "MMC"
 msgstr ""
 
-#: ardour_ui2.cc:92
+#: ardour_ui2.cc:93
 msgid "Local"
 msgstr ""
 
-#: ardour_ui2.cc:109
+#: ardour_ui2.cc:110
 msgid "MMC ID"
 msgstr ""
 
-#: ardour_ui2.cc:290
+#: ardour_ui2.cc:291
 msgid "Play from playhead"
 msgstr "Reproduzir a partir do início"
 
-#: ardour_ui2.cc:291
+#: ardour_ui2.cc:292
 msgid "Stop playback"
 msgstr "Parar reprodução"
 
-#: ardour_ui2.cc:292
+#: ardour_ui2.cc:293
 msgid "Play range/selection"
 msgstr "Reproduzir intervalo/seleção"
 
-#: ardour_ui2.cc:293
+#: ardour_ui2.cc:294
 msgid "Go to start of session"
 msgstr "Ir para o início da sessão"
 
-#: ardour_ui2.cc:294
+#: ardour_ui2.cc:295
 msgid "Go to end of session"
 msgstr "Ir para o fim da sessão"
 
-#: ardour_ui2.cc:295
+#: ardour_ui2.cc:296
 msgid "Play loop range"
 msgstr "Reproduzir intervalo"
 
-#: ardour_ui2.cc:296
+#: ardour_ui2.cc:297
 msgid "Return to last playback start when stopped"
 msgstr "Ir para o início da última reprodução quando parar"
 
-#: ardour_ui2.cc:297
+#: ardour_ui2.cc:298
 msgid "Start playback after any locate"
 msgstr "Iniciar reprodução após qualquer localização"
 
-#: ardour_ui2.cc:298
+#: ardour_ui2.cc:299
 msgid "Be sensible about input monitoring"
 msgstr "Sensível à monitoração na entrada"
 
-#: ardour_ui2.cc:299
+#: ardour_ui2.cc:300
 msgid "Start recording at auto-punch start"
 msgstr "Iniciar gravação no início do ponto-automático"
 
-#: ardour_ui2.cc:300
+#: ardour_ui2.cc:301
 msgid "Stop recording at auto-punch end"
 msgstr "Parar gravação no final do ponto-automático"
 
-#: ardour_ui2.cc:301
+#: ardour_ui2.cc:302
 msgid "Enable/Disable audio click"
 msgstr "Habilitar/desabilitar metrônomo"
 
-#: ardour_ui2.cc:302
+#: ardour_ui2.cc:303
 msgid "Positional sync source"
 msgstr ""
 
-#: ardour_ui2.cc:303
+#: ardour_ui2.cc:304
 msgid "Does Ardour control the time?"
 msgstr ""
 
-#: ardour_ui2.cc:304
+#: ardour_ui2.cc:305
 msgid "Shuttle speed control"
 msgstr "Velocidade do controle"
 
-#: ardour_ui2.cc:305
+#: ardour_ui2.cc:306
 #, c-format
 msgid "Select semitones or %%-age for speed display"
 msgstr "Selecionar semitons ou percentual para a velocidade da tela"
 
-#: ardour_ui2.cc:306
+#: ardour_ui2.cc:307
 msgid "Current transport speed"
 msgstr "Velocidade atual do transporte"
 
-#: ardour_ui2.cc:329
+#: ardour_ui2.cc:330
 msgid "Primary clock"
 msgstr "Relógio primeiramente"
 
-#: ardour_ui2.cc:330
+#: ardour_ui2.cc:331
 msgid "secondary clock"
 msgstr "Relógio secundário"
 
 #. XXX: this should really be saved in instant.xml or something similar and restored from there
 #. Combo's are stupid - they steal space from the entry for the button
-#: ardour_ui2.cc:387 ardour_ui2.cc:823 ardour_ui2.cc:836 ardour_ui2.cc:899
-#: ardour_ui2.cc:901
+#: ardour_ui2.cc:388 ardour_ui2.cc:833 ardour_ui2.cc:846 ardour_ui2.cc:909
+#: ardour_ui2.cc:911
 msgid "sprung"
 msgstr "retornável"
 
-#: ardour_ui2.cc:388 ardour_ui2.cc:825 ardour_ui2.cc:847
+#: ardour_ui2.cc:389 ardour_ui2.cc:835 ardour_ui2.cc:857
 msgid "wheel"
 msgstr "fixo"
 
-#: ardour_ui2.cc:450
+#: ardour_ui2.cc:451
 msgid "ardour: clock"
 msgstr "ardour: relógio"
 
-#: ardour_ui2.cc:595
+#: ardour_ui2.cc:596
 #, fuzzy
 msgid "Maximum speed"
 msgstr "velocidade variável"
 
-#: ardour_ui2.cc:813
+#: ardour_ui2.cc:823
 msgid "st"
 msgstr "o."
 
-#: ardour_ui2.cc:857 ardour_ui2.cc:880 ardour_ui2.cc:897
+#: ardour_ui2.cc:867 ardour_ui2.cc:890 ardour_ui2.cc:907
 msgid "stopped"
 msgstr "parado"
 
-#: ardour_ui_dialogs.cc:152 playlist_selector.cc:69
+#: ardour_ui_dialogs.cc:153 playlist_selector.cc:70
 msgid "close"
 msgstr "fechar"
 
-#: ardour_ui_dialogs.cc:359 ardour_ui_ed.cc:181
+#: ardour_ui_dialogs.cc:360 ardour_ui_ed.cc:184
 #, fuzzy
 msgid "Sound File Browser"
 msgstr "Biblioteca de Áudio"
 
 #. menus + submenus that need action items
-#: ardour_ui_ed.cc:69
+#: ardour_ui_ed.cc:72
 msgid "Session"
 msgstr "Sessão"
 
-#: ardour_ui_ed.cc:70 ardour_ui_ed.cc:127 editor.cc:1843 export_dialog.cc:350
+#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:130 editor.cc:1836 export_dialog.cc:350
 #: export_dialog.cc:1059 export_dialog.cc:1063
 msgid "Export"
 msgstr "Exportar"
 
-#: ardour_ui_ed.cc:71
+#: ardour_ui_ed.cc:74
 msgid "Cleanup"
 msgstr "Limpar"
 
-#: ardour_ui_ed.cc:72 option_editor.cc:125
+#: ardour_ui_ed.cc:75 option_editor.cc:126
 msgid "Sync"
 msgstr "Sincronia"
 
-#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:74
+#: ardour_ui_ed.cc:76 ardour_ui_ed.cc:77
 #, fuzzy
 msgid "Options"
 msgstr "Preferências"
 
-#: ardour_ui_ed.cc:75
+#: ardour_ui_ed.cc:78
 msgid "Help"
 msgstr ""
 
-#: ardour_ui_ed.cc:76
+#: ardour_ui_ed.cc:79
 msgid "KeyMouse Actions"
 msgstr ""
 
-#: ardour_ui_ed.cc:77
+#: ardour_ui_ed.cc:80
 #, fuzzy
 msgid "Audio File Format"
 msgstr "Quadros de Áudio"
 
-#: ardour_ui_ed.cc:78
+#: ardour_ui_ed.cc:81
 #, fuzzy
 msgid "Header"
 msgstr "Pré Fade"
 
-#: ardour_ui_ed.cc:79
+#: ardour_ui_ed.cc:82
 msgid "Data"
 msgstr ""
 
-#: ardour_ui_ed.cc:80
+#: ardour_ui_ed.cc:83
 #, fuzzy
 msgid "Control Surfaces"
 msgstr "Controle de Saídas"
 
 #. the real actions
-#: ardour_ui_ed.cc:84 audio_time_axis.cc:1856 new_session_dialog.cc:342
+#: ardour_ui_ed.cc:87 audio_time_axis.cc:1854 new_session_dialog.cc:529
 msgid "New"
 msgstr "Novo"
 
-#: ardour_ui_ed.cc:86 new_session_dialog.cc:334
+#: ardour_ui_ed.cc:89 new_session_dialog.cc:517
 msgid "Open"
 msgstr "Abrir"
 
-#: ardour_ui_ed.cc:87
+#: ardour_ui_ed.cc:90
 msgid "Recent"
 msgstr "Recente"
 
-#: ardour_ui_ed.cc:88 io_selector.cc:57 io_selector.cc:791
+#: ardour_ui_ed.cc:91 io_selector.cc:58 io_selector.cc:792
 msgid "Close"
 msgstr "Fechar"
 
-#: ardour_ui_ed.cc:91 route_params_ui.cc:512
+#: ardour_ui_ed.cc:94 route_params_ui.cc:514
 msgid "Add Track/Bus"
 msgstr "Adicionar Trilha/Barramento"
 
-#: ardour_ui_ed.cc:102
+#: ardour_ui_ed.cc:105
 msgid "Connect"
 msgstr "Conectar"
 
 #. </CMT Additions>
-#: ardour_ui_ed.cc:110
+#: ardour_ui_ed.cc:113
 msgid "Snapshot"
 msgstr "Capturar instantâneo"
 
-#: ardour_ui_ed.cc:113
+#: ardour_ui_ed.cc:116
 msgid "Save Template..."
 msgstr "Salvar Esquema..."
 
-#: ardour_ui_ed.cc:116
+#: ardour_ui_ed.cc:119
 msgid "Export session to audiofile..."
 msgstr "Exportar sessão para arquivo de áudio"
 
-#: ardour_ui_ed.cc:119
+#: ardour_ui_ed.cc:122
 #, fuzzy
 msgid "Export selection to audiofile..."
 msgstr "Exportar sessão para arquivo de áudio"
 
-#: ardour_ui_ed.cc:123
+#: ardour_ui_ed.cc:126
 #, fuzzy
 msgid "Export range markers to audiofile..."
 msgstr "Exportar intervalo para arquivo de áudio"
 
-#: ardour_ui_ed.cc:130
+#: ardour_ui_ed.cc:133
 msgid "Cleanup unused sources"
 msgstr "Limpar fontes não usadas"
 
-#: ardour_ui_ed.cc:132
+#: ardour_ui_ed.cc:135
 msgid "Flush wastebasket"
 msgstr "Esvaziar lixeira"
 
-#: ardour_ui_ed.cc:138 ardour_ui_options.cc:381 ardour_ui_options.cc:390
-#: ardour_ui_options.cc:462
+#: ardour_ui_ed.cc:141 ardour_ui_options.cc:408 ardour_ui_options.cc:417
+#: ardour_ui_options.cc:489
 msgid "JACK"
 msgstr "JACK"
 
-#: ardour_ui_ed.cc:139
+#: ardour_ui_ed.cc:142
 msgid "Latency"
 msgstr ""
 
-#: ardour_ui_ed.cc:141
+#: ardour_ui_ed.cc:144
 #, fuzzy
 msgid "Reconnect"
 msgstr "Conectar"
 
-#: ardour_ui_ed.cc:144 mixer_strip.cc:514 mixer_strip.cc:574
+#: ardour_ui_ed.cc:147 mixer_strip.cc:497 mixer_strip.cc:565
 msgid "Disconnect"
 msgstr "Desconectar"
 
-#: ardour_ui_ed.cc:171
+#: ardour_ui_ed.cc:174
 msgid "Windows"
 msgstr "Janelas"
 
-#: ardour_ui_ed.cc:172
+#: ardour_ui_ed.cc:175
 msgid "start prefix"
 msgstr ""
 
-#: ardour_ui_ed.cc:173
+#: ardour_ui_ed.cc:176
 msgid "Quit"
 msgstr "Sair"
 
 #. windows visibility actions
-#: ardour_ui_ed.cc:177
+#: ardour_ui_ed.cc:180
 msgid "Maximise Editor Space"
 msgstr ""
 
-#: ardour_ui_ed.cc:179
+#: ardour_ui_ed.cc:182
 #, fuzzy
 msgid "Show Editor"
 msgstr "Editor"
 
-#: ardour_ui_ed.cc:180
+#: ardour_ui_ed.cc:183
 #, fuzzy
 msgid "Show Mixer"
 msgstr "Mixer"
 
-#: ardour_ui_ed.cc:182
+#: ardour_ui_ed.cc:185
 msgid "Options Editor"
 msgstr "Preferências"
 
-#: ardour_ui_ed.cc:183
+#: ardour_ui_ed.cc:186
 msgid "Track/Bus Inspector"
 msgstr "Inspetador de Trilhas/Barramentos"
 
-#: ardour_ui_ed.cc:185
+#: ardour_ui_ed.cc:188
 msgid "Connections"
 msgstr "Conexões"
 
-#: ardour_ui_ed.cc:187
+#: ardour_ui_ed.cc:190
 msgid "Locations"
 msgstr "Localizações"
 
-#: ardour_ui_ed.cc:189
+#: ardour_ui_ed.cc:192
 msgid "Big Clock"
 msgstr "Metrônomo"
 
-#: ardour_ui_ed.cc:191
+#: ardour_ui_ed.cc:194
 msgid "About"
 msgstr "Sobre"
 
-#: ardour_ui_ed.cc:192
+#: ardour_ui_ed.cc:195
 #, fuzzy
 msgid "Colors"
 msgstr "Cor"
 
-#: ardour_ui_ed.cc:194
+#: ardour_ui_ed.cc:197
 #, fuzzy
 msgid "Add Audio Track"
 msgstr "Adicionar Trilha/Barramento"
 
-#: ardour_ui_ed.cc:196
+#: ardour_ui_ed.cc:199
 #, fuzzy
 msgid "Add Audio Bus"
 msgstr "Ocultar todos os barramentos de áudio"
 
-#: ardour_ui_ed.cc:198
+#: ardour_ui_ed.cc:201
 msgid "Save"
 msgstr "Salvar"
 
-#: ardour_ui_ed.cc:200 editor_actions.cc:254
+#: ardour_ui_ed.cc:203 editor_actions.cc:255
 #, fuzzy
 msgid "Remove Last Capture"
 msgstr "Remover última captura"
 
 #. do-nothing action for the "transport" menu bar item
-#: ardour_ui_ed.cc:207
+#: ardour_ui_ed.cc:210
 #, fuzzy
 msgid "Transport"
 msgstr "Tradutores"
@@ -1029,73 +1007,73 @@ msgstr "Tradutores"
 #. these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
 #. menus and via button proxies.
 #.
-#: ardour_ui_ed.cc:213 sfdb_ui.cc:57
+#: ardour_ui_ed.cc:216 sfdb_ui.cc:57
 msgid "Stop"
 msgstr "Parar"
 
-#: ardour_ui_ed.cc:216
+#: ardour_ui_ed.cc:219
 msgid "Roll"
 msgstr ""
 
-#: ardour_ui_ed.cc:220
+#: ardour_ui_ed.cc:223
 #, fuzzy
 msgid "Start/Stop"
 msgstr "Inicio:"
 
-#: ardour_ui_ed.cc:223
+#: ardour_ui_ed.cc:226
 msgid "Stop + Forget Capture"
 msgstr ""
 
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:229
 #, fuzzy
 msgid "Play Loop Range"
 msgstr "Reproduzir intervalo"
 
-#: ardour_ui_ed.cc:229
+#: ardour_ui_ed.cc:232
 #, fuzzy
 msgid "Play Selection"
 msgstr "Reproduzir região selecionada"
 
-#: ardour_ui_ed.cc:233
+#: ardour_ui_ed.cc:236
 #, fuzzy
 msgid "Enable Record"
 msgstr "Gravar"
 
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:239
 #, fuzzy
 msgid "Rewind"
 msgstr "Região"
 
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:242
 msgid "Rewind (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:242
+#: ardour_ui_ed.cc:245
 msgid "Rewind (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:245
+#: ardour_ui_ed.cc:248
 msgid "Forward"
 msgstr ""
 
-#: ardour_ui_ed.cc:248
+#: ardour_ui_ed.cc:251
 msgid "Forward (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:251
+#: ardour_ui_ed.cc:254
 msgid "Forward (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:254
+#: ardour_ui_ed.cc:257
 msgid "Goto Zero"
 msgstr ""
 
-#: ardour_ui_ed.cc:257
+#: ardour_ui_ed.cc:260
 #, fuzzy
 msgid "Goto Start"
 msgstr "Inicio:"
 
-#: ardour_ui_ed.cc:260
+#: ardour_ui_ed.cc:263
 msgid "Goto End"
 msgstr ""
 
@@ -1103,7 +1081,7 @@ msgstr ""
 #. that proxies for these action to be more compact. It would be nice to find a way to override the action
 #. name appearance on the buttons.
 #.
-#: ardour_ui_ed.cc:269
+#: ardour_ui_ed.cc:272
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1112,7 +1090,7 @@ msgstr ""
 "iniciar\n"
 "inserção"
 
-#: ardour_ui_ed.cc:272
+#: ardour_ui_ed.cc:275
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1121,11 +1099,11 @@ msgstr ""
 "finalizar\n"
 "inserção"
 
-#: ardour_ui_ed.cc:275 option_editor.cc:128
+#: ardour_ui_ed.cc:278 option_editor.cc:129
 msgid "Click"
 msgstr "Metrônomo"
 
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:281
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1134,7 +1112,7 @@ msgstr ""
 "entrada\n"
 "automática"
 
-#: ardour_ui_ed.cc:281
+#: ardour_ui_ed.cc:284
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1143,7 +1121,7 @@ msgstr ""
 "reprodução\n"
 "automática"
 
-#: ardour_ui_ed.cc:284
+#: ardour_ui_ed.cc:287
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1152,283 +1130,283 @@ msgstr ""
 "retorno\n"
 "automático"
 
-#: ardour_ui_ed.cc:288
+#: ardour_ui_ed.cc:291
 #, fuzzy
 msgid ""
 "Time\n"
 "master"
 msgstr "Modo supervisor de tempo (JACK)"
 
-#: ardour_ui_ed.cc:291
+#: ardour_ui_ed.cc:294
 msgid "Toggle Record Enable Track1"
 msgstr ""
 
-#: ardour_ui_ed.cc:293
+#: ardour_ui_ed.cc:296
 msgid "Toggle Record Enable Track2"
 msgstr ""
 
-#: ardour_ui_ed.cc:295
+#: ardour_ui_ed.cc:298
 msgid "Toggle Record Enable Track3"
 msgstr ""
 
-#: ardour_ui_ed.cc:297
+#: ardour_ui_ed.cc:300
 msgid "Toggle Record Enable Track4"
 msgstr ""
 
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:302
 msgid "Toggle Record Enable Track5"
 msgstr ""
 
-#: ardour_ui_ed.cc:301
+#: ardour_ui_ed.cc:304
 msgid "Toggle Record Enable Track6"
 msgstr ""
 
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:306
 msgid "Toggle Record Enable Track7"
 msgstr ""
 
-#: ardour_ui_ed.cc:305
+#: ardour_ui_ed.cc:308
 msgid "Toggle Record Enable Track8"
 msgstr ""
 
-#: ardour_ui_ed.cc:307
+#: ardour_ui_ed.cc:310
 msgid "Toggle Record Enable Track9"
 msgstr ""
 
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:312
 msgid "Toggle Record Enable Track10"
 msgstr ""
 
-#: ardour_ui_ed.cc:311
+#: ardour_ui_ed.cc:314
 msgid "Toggle Record Enable Track11"
 msgstr ""
 
-#: ardour_ui_ed.cc:313
+#: ardour_ui_ed.cc:316
 msgid "Toggle Record Enable Track12"
 msgstr ""
 
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:318
 msgid "Toggle Record Enable Track13"
 msgstr ""
 
-#: ardour_ui_ed.cc:317
+#: ardour_ui_ed.cc:320
 msgid "Toggle Record Enable Track14"
 msgstr ""
 
-#: ardour_ui_ed.cc:319
+#: ardour_ui_ed.cc:322
 msgid "Toggle Record Enable Track15"
 msgstr ""
 
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:324
 msgid "Toggle Record Enable Track16"
 msgstr ""
 
-#: ardour_ui_ed.cc:323
+#: ardour_ui_ed.cc:326
 msgid "Toggle Record Enable Track17"
 msgstr ""
 
-#: ardour_ui_ed.cc:325
+#: ardour_ui_ed.cc:328
 msgid "Toggle Record Enable Track18"
 msgstr ""
 
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:330
 msgid "Toggle Record Enable Track19"
 msgstr ""
 
-#: ardour_ui_ed.cc:329
+#: ardour_ui_ed.cc:332
 msgid "Toggle Record Enable Track20"
 msgstr ""
 
-#: ardour_ui_ed.cc:331
+#: ardour_ui_ed.cc:334
 msgid "Toggle Record Enable Track21"
 msgstr ""
 
-#: ardour_ui_ed.cc:333
+#: ardour_ui_ed.cc:336
 msgid "Toggle Record Enable Track22"
 msgstr ""
 
-#: ardour_ui_ed.cc:335
+#: ardour_ui_ed.cc:338
 msgid "Toggle Record Enable Track23"
 msgstr ""
 
-#: ardour_ui_ed.cc:337
+#: ardour_ui_ed.cc:340
 msgid "Toggle Record Enable Track24"
 msgstr ""
 
-#: ardour_ui_ed.cc:339
+#: ardour_ui_ed.cc:342
 msgid "Toggle Record Enable Track25"
 msgstr ""
 
-#: ardour_ui_ed.cc:341
+#: ardour_ui_ed.cc:344
 msgid "Toggle Record Enable Track26"
 msgstr ""
 
-#: ardour_ui_ed.cc:343
+#: ardour_ui_ed.cc:346
 msgid "Toggle Record Enable Track27"
 msgstr ""
 
-#: ardour_ui_ed.cc:345
+#: ardour_ui_ed.cc:348
 msgid "Toggle Record Enable Track28"
 msgstr ""
 
-#: ardour_ui_ed.cc:347
+#: ardour_ui_ed.cc:350
 msgid "Toggle Record Enable Track29"
 msgstr ""
 
-#: ardour_ui_ed.cc:349
+#: ardour_ui_ed.cc:352
 msgid "Toggle Record Enable Track30"
 msgstr ""
 
-#: ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:354
 msgid "Toggle Record Enable Track31"
 msgstr ""
 
-#: ardour_ui_ed.cc:353
+#: ardour_ui_ed.cc:356
 msgid "Toggle Record Enable Track32"
 msgstr ""
 
-#: ardour_ui_ed.cc:358
+#: ardour_ui_ed.cc:361
 msgid "Percentage"
 msgstr "Percentual"
 
-#: ardour_ui_ed.cc:359
+#: ardour_ui_ed.cc:362
 msgid "Semitones"
 msgstr "Semitons"
 
-#: ardour_ui_ed.cc:363
+#: ardour_ui_ed.cc:366
 msgid "Send MTC"
 msgstr "Enviar MTC"
 
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:368
 msgid "Send MMC"
 msgstr "Enviar MMC"
 
-#: ardour_ui_ed.cc:367
+#: ardour_ui_ed.cc:370
 #, fuzzy
 msgid "Use MMC"
 msgstr "Enviar MMC"
 
-#: ardour_ui_ed.cc:369
+#: ardour_ui_ed.cc:372
 msgid "Send MIDI feedback"
 msgstr ""
 
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:374
 #, fuzzy
 msgid "Use MIDI control"
 msgstr "Porta MMC"
 
-#: ardour_ui_ed.cc:374
+#: ardour_ui_ed.cc:377
 #, fuzzy
-msgid "Connect newtrack inputs to hardware"
+msgid "Connect new track inputs to hardware"
 msgstr "Conectar novas faixas automaticamente"
 
-#: ardour_ui_ed.cc:392
+#: ardour_ui_ed.cc:396
 #, fuzzy
 msgid "Connect new track outputs to hardware"
 msgstr "Conectar novas faixas automaticamente"
 
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:398
 #, fuzzy
 msgid "Connect new track outputs to master"
 msgstr "concetar automaticamente saídas das trilhas com as saídas master"
 
-#: ardour_ui_ed.cc:396
+#: ardour_ui_ed.cc:400
 #, fuzzy
 msgid "Manually connect new track outputs"
 msgstr "conectar manualmente saídas das trilhas"
 
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:405
 #, fuzzy
 msgid "Hardware monitoring"
 msgstr "Usar Monitoração de Hardware"
 
-#: ardour_ui_ed.cc:402
+#: ardour_ui_ed.cc:406
 #, fuzzy
 msgid "Software monitoring"
 msgstr "Usar Monitoração de Software"
 
-#: ardour_ui_ed.cc:403
+#: ardour_ui_ed.cc:407
 #, fuzzy
 msgid "External monitoring"
 msgstr "Usar Monitoração de Hardware"
 
 #. Configuration object options (i.e. not session specific)
-#: ardour_ui_ed.cc:407
+#: ardour_ui_ed.cc:411
 msgid "Stop plugins with transport"
 msgstr "Suspender efeitos/plugins em transporte"
 
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:412
 #, fuzzy
 msgid "Verify remove last capture"
 msgstr "Remover última captura"
 
-#: ardour_ui_ed.cc:409
+#: ardour_ui_ed.cc:413
 msgid "Stop recording on xrun"
 msgstr "Suspender gravaçãoo em caso de falha sincrônica (XRUN)"
 
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:414
 #, fuzzy
 msgid "Stop transport at session end"
 msgstr "Suspender o transporte no final da sessão"
 
-#: ardour_ui_ed.cc:411
+#: ardour_ui_ed.cc:415
 msgid "-12dB gain reduce ffwd/rewind"
 msgstr ""
 
-#: ardour_ui_ed.cc:412
+#: ardour_ui_ed.cc:416
 msgid "Rec-enable stays engaged at stop"
 msgstr ""
 
 #. session options
-#: ardour_ui_ed.cc:416
+#: ardour_ui_ed.cc:420
 #, fuzzy
 msgid "Do not run plugins while recording"
 msgstr "Executar plugins enquanto grava"
 
-#: ardour_ui_ed.cc:419
+#: ardour_ui_ed.cc:423
 msgid "Latched solo"
 msgstr "Solo alternado"
 
-#: ardour_ui_ed.cc:424
+#: ardour_ui_ed.cc:428
 #, fuzzy
 msgid "Solo in-place"
 msgstr "Solo"
 
-#: ardour_ui_ed.cc:426
+#: ardour_ui_ed.cc:430
 msgid "Solo via bus"
 msgstr ""
 
-#: ardour_ui_ed.cc:429
+#: ardour_ui_ed.cc:433
 #, fuzzy
 msgid "Automatically create crossfades"
 msgstr "Fade cruzado automático no intervalo sobreposto"
 
-#: ardour_ui_ed.cc:431
+#: ardour_ui_ed.cc:435
 msgid "Unmute new full crossfades"
 msgstr ""
 
-#: ardour_ui_options.cc:379 ardour_ui_options.cc:389 ardour_ui_options.cc:456
+#: ardour_ui_options.cc:406 ardour_ui_options.cc:416 ardour_ui_options.cc:483
 #, fuzzy
 msgid "Internal"
 msgstr "interno"
 
-#: ardour_ui_options.cc:380 ardour_ui_options.cc:459
+#: ardour_ui_options.cc:407 ardour_ui_options.cc:486
 msgid "MTC"
 msgstr ""
 
-#: audio_clock.cc:1719 editor.cc:185
+#: audio_clock.cc:1742 editor.cc:188
 msgid "SMPTE"
 msgstr ""
 
-#: audio_clock.cc:1720 editor.cc:184 editor_rulers.cc:359
+#: audio_clock.cc:1743 editor.cc:187 editor_rulers.cc:360
 msgid "Bars:Beats"
 msgstr "Compassos:Batimentos"
 
-#: audio_clock.cc:1721
+#: audio_clock.cc:1744
 msgid "Minutes:Seconds"
 msgstr "Minutos:Segundos"
 
-#: audio_clock.cc:1722
+#: audio_clock.cc:1745
 msgid "Audio Frames"
 msgstr "Quadros de Áudio"
 
@@ -1436,285 +1414,307 @@ msgstr "Quadros de Áudio"
 #. Slowest = 6.6dB/sec falloff at update rate of 40ms
 #. Slow    = 6.8dB/sec falloff at update rate of 40ms
 #.
-#: audio_clock.cc:1723 editor_actions.cc:374 editor_actions.cc:382
+#: audio_clock.cc:1746 editor_actions.cc:375 editor_actions.cc:383
+#: gain_meter.cc:172 panner_ui.cc:89 plugin_ui.cc:392 plugin_ui.cc:635
 msgid "Off"
 msgstr "Desligar"
 
-#: audio_clock.cc:1725
+#: audio_clock.cc:1748
 msgid "Mode"
 msgstr "Modo"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:458
+#: audio_time_axis.cc:91
 msgid "m"
 msgstr ""
 
-#: audio_time_axis.cc:90 mixer_strip.cc:459
+#: audio_time_axis.cc:91
 msgid "s"
 msgstr ""
 
-#: audio_time_axis.cc:90
+#: audio_time_axis.cc:91
 msgid "r"
 msgstr ""
 
-#: audio_time_axis.cc:94
+#: audio_time_axis.cc:95
 msgid "g"
 msgstr ""
 
 #. group
-#: audio_time_axis.cc:95
+#: audio_time_axis.cc:96
 msgid "p"
 msgstr ""
 
-#: audio_time_axis.cc:96 automation_time_axis.cc:31 visual_time_axis.cc:73
+#: audio_time_axis.cc:97 automation_time_axis.cc:32 visual_time_axis.cc:74
 msgid "h"
 msgstr ""
 
 #. height
-#: audio_time_axis.cc:97
+#: audio_time_axis.cc:98
 msgid "a"
 msgstr ""
 
-#: audio_time_axis.cc:98 visual_time_axis.cc:72
+#: audio_time_axis.cc:99 visual_time_axis.cc:73
 msgid "v"
 msgstr ""
 
-#: audio_time_axis.cc:173
+#: audio_time_axis.cc:168 mixer_strip.cc:86
 msgid "Record"
 msgstr "Gravar"
 
-#: audio_time_axis.cc:174 editor_actions.cc:36
+#: audio_time_axis.cc:169 editor_actions.cc:37 mixer_strip.cc:86
 msgid "Solo"
 msgstr "Solo"
 
-#: audio_time_axis.cc:175 editor.cc:1767 editor.cc:1866 panner_ui.cc:385
+#: audio_time_axis.cc:170 editor.cc:1760 editor.cc:1859 mixer_strip.cc:86
+#: panner_ui.cc:427
 msgid "Mute"
 msgstr "Mutar"
 
-#: audio_time_axis.cc:176
+#: audio_time_axis.cc:171
 msgid "Edit Group"
 msgstr "Editar Grupo"
 
-#: audio_time_axis.cc:177 visual_time_axis.cc:91
+#: audio_time_axis.cc:172 visual_time_axis.cc:92
 msgid "Display Height"
 msgstr "Altura"
 
-#: audio_time_axis.cc:178
+#: audio_time_axis.cc:173
 msgid "Playlist"
 msgstr "Lista de reprodução"
 
-#: audio_time_axis.cc:179 audio_time_axis.cc:743
+#: audio_time_axis.cc:174 audio_time_axis.cc:741
 msgid "Automation"
 msgstr "Automação"
 
-#: audio_time_axis.cc:180 visual_time_axis.cc:92
+#: audio_time_axis.cc:175 visual_time_axis.cc:93
 msgid "Visual options"
 msgstr "Opções de aparência"
 
-#: audio_time_axis.cc:181 visual_time_axis.cc:93
+#: audio_time_axis.cc:176 visual_time_axis.cc:94
 msgid "Hide this track"
 msgstr "Ocultar esta trilha"
 
-#: audio_time_axis.cc:337
+#: audio_time_axis.cc:333 mixer_strip.cc:927
 msgid "No group"
 msgstr "Sem grupo"
 
-#: audio_time_axis.cc:704 automation_time_axis.cc:448
-#: imageframe_time_axis.cc:256 marker_time_axis.cc:210
+#: audio_time_axis.cc:702 automation_time_axis.cc:450
+#: imageframe_time_axis.cc:255 marker_time_axis.cc:211
 msgid "Height"
 msgstr "Altura"
 
-#: audio_time_axis.cc:705 color_manager.cc:40 imageframe_time_axis.cc:257
-#: marker_time_axis.cc:211
+#: audio_time_axis.cc:703 color_manager.cc:41 imageframe_time_axis.cc:256
+#: marker_time_axis.cc:212
 msgid "Color"
 msgstr "Cor"
 
-#: audio_time_axis.cc:709
+#: audio_time_axis.cc:707
 msgid "Hide all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:710
+#: audio_time_axis.cc:708
 msgid "Show all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:714 mixer_strip.cc:1236
+#: audio_time_axis.cc:712 mixer_strip.cc:1011
 #, fuzzy
 msgid "Remote Control ID"
 msgstr "Remover ponto de controlo"
 
-#: audio_time_axis.cc:720
-msgid "show all automation"
+#: audio_time_axis.cc:718
+#, fuzzy
+msgid "Show all automation"
 msgstr "mostra toda a automação"
 
-#: audio_time_axis.cc:723
-msgid "show existing automation"
+#: audio_time_axis.cc:721
+#, fuzzy
+msgid "Show existing automation"
 msgstr "mostra a automação existente"
 
-#: audio_time_axis.cc:726
-msgid "hide all automation"
+#: audio_time_axis.cc:724
+#, fuzzy
+msgid "Hide all automation"
 msgstr "ocultar toda a automação"
 
-#: audio_time_axis.cc:731 audio_time_axis.cc:1169 editor.cc:215
-msgid "gain"
-msgstr "ganho"
+#: audio_time_axis.cc:729
+#, fuzzy
+msgid "Fader"
+msgstr "Fade"
 
-#: audio_time_axis.cc:736 audio_time_axis.cc:1209
-msgid "pan"
+#: audio_time_axis.cc:734
+#, fuzzy
+msgid "Pan"
 msgstr "pan"
 
-#: audio_time_axis.cc:741
+#: audio_time_axis.cc:739
 msgid "Plugins"
 msgstr "Entradas"
 
-#: audio_time_axis.cc:749
+#: audio_time_axis.cc:747
 msgid "Show waveforms"
 msgstr "Mostrar formas de onda áudio"
 
-#: audio_time_axis.cc:757
+#: audio_time_axis.cc:755
 msgid "Traditional"
 msgstr "Tradicional"
 
-#: audio_time_axis.cc:760
+#: audio_time_axis.cc:758
 msgid "Rectified"
 msgstr "Corrigido"
 
-#: audio_time_axis.cc:763
+#: audio_time_axis.cc:761
 msgid "Waveform"
 msgstr "Forma de onda"
 
-#: audio_time_axis.cc:773
+#: audio_time_axis.cc:771
 #, fuzzy
-msgid "align with existing material"
+msgid "Align with existing material"
 msgstr "Material existente"
 
-#: audio_time_axis.cc:778
+#: audio_time_axis.cc:776
 #, fuzzy
-msgid "align with capture time"
+msgid "Align with capture time"
 msgstr "Tempo de captura"
 
-#: audio_time_axis.cc:784
+#: audio_time_axis.cc:782
 #, fuzzy
 msgid "Alignment"
 msgstr "Alinhamento"
 
-#: audio_time_axis.cc:790 editor.cc:523 editor_actions.cc:59
-#: mixer_strip.cc:1225
+#: audio_time_axis.cc:788 editor.cc:527 editor_actions.cc:60
+#: mixer_strip.cc:1000 mixer_ui.cc:111
 msgid "Active"
 msgstr "Ativar"
 
-#: audio_time_axis.cc:795 editor.cc:1929 editor_actions.cc:319
-#: editor_markers.cc:507 imageframe_time_axis.cc:260 location_ui.cc:56
-#: marker_time_axis.cc:214 mixer_strip.cc:1239
+#: audio_time_axis.cc:793 editor.cc:1922 editor_actions.cc:320
+#: editor_markers.cc:508 imageframe_time_axis.cc:259 location_ui.cc:57
+#: marker_time_axis.cc:215 mixer_strip.cc:1014
 msgid "Remove"
 msgstr "Remover"
 
-#: audio_time_axis.cc:835
+#: audio_time_axis.cc:833
 msgid "Name for playlist"
 msgstr "Nome para a lista de reprodução"
 
-#: audio_time_axis.cc:837 audio_time_axis.cc:1853 editor_markers.cc:826
-#: editor_mouse.cc:4609 imageframe_time_axis.cc:249 marker_time_axis.cc:207
-#: meter_bridge_strip.cc:223 mixer_strip.cc:1223 redirect_box.cc:749
-#: redirect_box.cc:1063 route_ui.cc:732 visual_time_axis.cc:325
+#: audio_time_axis.cc:835 audio_time_axis.cc:1851 editor_markers.cc:827
+#: editor_mouse.cc:4673 imageframe_time_axis.cc:248 marker_time_axis.cc:208
+#: meter_bridge_strip.cc:224 mixer_strip.cc:998 redirect_box.cc:751
+#: redirect_box.cc:1065 route_ui.cc:739 visual_time_axis.cc:326
 msgid "Rename"
 msgstr "Renomear"
 
-#: audio_time_axis.cc:870 audio_time_axis.cc:910
+#: audio_time_axis.cc:868 audio_time_axis.cc:908
 #, fuzzy
 msgid "Name for Playlist"
 msgstr "Nome para a lista de reprodução"
 
-#: audio_time_axis.cc:1128 visual_time_axis.cc:382
+#: audio_time_axis.cc:1126 visual_time_axis.cc:383
 msgid "a track already exists with that name"
 msgstr "já existe uma trilha com este nome"
 
-#: audio_time_axis.cc:1412 editor.cc:1490 selection.cc:622
+#: audio_time_axis.cc:1167 editor.cc:218
+msgid "gain"
+msgstr "ganho"
+
+#: audio_time_axis.cc:1207
+msgid "pan"
+msgstr "pan"
+
+#: audio_time_axis.cc:1410 editor.cc:1483 selection.cc:634
 msgid "programming error: "
 msgstr ""
 
-#: audio_time_axis.cc:1850
+#: audio_time_axis.cc:1848
 msgid "Current: %1"
 msgstr "Atual: %1"
 
-#: audio_time_axis.cc:1857
+#: audio_time_axis.cc:1855
 msgid "New Copy"
 msgstr "Nova Cópia"
 
-#: audio_time_axis.cc:1859
+#: audio_time_axis.cc:1857
 msgid "Clear Current"
 msgstr "Limpar Atual"
 
-#: audio_time_axis.cc:1861 editor.cc:2031 editor.cc:2107
+#: audio_time_axis.cc:1859 editor.cc:2024 editor.cc:2100
 msgid "Select"
 msgstr "Selecionar"
 
-#: automation_line.cc:883
+#: automation_line.cc:884
 msgid "automation event move"
 msgstr "mover evento de automação"
 
-#: automation_line.cc:885
+#: automation_line.cc:886
 msgid "automation range drag"
 msgstr "arrastar intervalo de automação"
 
-#: automation_line.cc:1014 region_gain_line.cc:61
+#: automation_line.cc:1015 region_gain_line.cc:62
 msgid "remove control point"
 msgstr "Remover ponto de controlo"
 
-#: automation_time_axis.cc:32 editor_ops.cc:2813
+#: automation_time_axis.cc:33 editor_ops.cc:2885
 msgid "clear"
 msgstr "limpar"
 
-#: automation_time_axis.cc:74
+#: automation_time_axis.cc:75
 msgid "track height"
 msgstr ""
 
-#: automation_time_axis.cc:75
+#: automation_time_axis.cc:76
 msgid "automation state"
 msgstr "estado do automação"
 
-#: automation_time_axis.cc:76
+#: automation_time_axis.cc:77
 msgid "clear track"
 msgstr "limpar trilha"
 
-#: automation_time_axis.cc:77
+#: automation_time_axis.cc:78
 msgid "hide track"
 msgstr "ocultar esta trilha"
 
-#: automation_time_axis.cc:185 automation_time_axis.cc:223
-#: automation_time_axis.cc:463 mixer_strip.cc:176 mixer_strip.cc:188
-#: plugin_ui.cc:394 plugin_ui.cc:636 region_editor.cc:53
-msgid "play"
-msgstr "reproduzir"
+#: automation_time_axis.cc:184 automation_time_axis.cc:213
+#: automation_time_axis.cc:461
+msgid "Manual"
+msgstr ""
+
+#: automation_time_axis.cc:186 automation_time_axis.cc:224
+#: automation_time_axis.cc:465 editor.cc:2001 editor.cc:2082 gain_meter.cc:174
+#: panner_ui.cc:91 plugin_ui.cc:395 plugin_ui.cc:637 sfdb_ui.cc:56
+msgid "Play"
+msgstr "Reproduzir"
 
-#: automation_time_axis.cc:187 automation_time_axis.cc:234
-#: automation_time_axis.cc:467 mixer_strip.cc:178 mixer_strip.cc:190
-#: plugin_ui.cc:397 plugin_ui.cc:638
-msgid "write"
+#: automation_time_axis.cc:188 automation_time_axis.cc:235
+#: automation_time_axis.cc:469 gain_meter.cc:176 panner_ui.cc:93
+#: plugin_ui.cc:398 plugin_ui.cc:639
+#, fuzzy
+msgid "Write"
 msgstr "escrever"
 
-#: automation_time_axis.cc:189 automation_time_axis.cc:245
-#: automation_time_axis.cc:471 mixer_strip.cc:180 mixer_strip.cc:192
-#: mixer_strip.cc:887 plugin_ui.cc:400 plugin_ui.cc:640
-msgid "touch"
+#: automation_time_axis.cc:190 automation_time_axis.cc:246
+#: automation_time_axis.cc:473 gain_meter.cc:178 panner_ui.cc:95
+#: plugin_ui.cc:401 plugin_ui.cc:641
+#, fuzzy
+msgid "Touch"
 msgstr "marca como novo"
 
-#: automation_time_axis.cc:256 option_editor.cc:182 option_editor.cc:188
-#: plugin_ui.cc:403
+#: automation_time_axis.cc:257 option_editor.cc:183 option_editor.cc:189
+#: plugin_ui.cc:404
 msgid "???"
 msgstr ""
 
-#: automation_time_axis.cc:270
+#: automation_time_axis.cc:271
 msgid "clear automation"
 msgstr "limpar automação"
 
-#: automation_time_axis.cc:450 editor_actions.cc:317
+#: automation_time_axis.cc:452 editor_actions.cc:318
 msgid "Hide"
 msgstr "Ocultar"
 
-#: automation_time_axis.cc:452 crossfade_edit.cc:76 redirect_box.cc:1055
+#: automation_time_axis.cc:454 crossfade_edit.cc:78 redirect_box.cc:1057
 msgid "Clear"
 msgstr "Limpar"
 
-#: automation_time_axis.cc:475
+#: automation_time_axis.cc:477
 msgid "State"
 msgstr "Estado"
 
@@ -1860,1574 +1860,1561 @@ msgstr ""
 msgid "color of fill"
 msgstr ""
 
-#: color_manager.cc:39
+#: color_manager.cc:40
 #, fuzzy
 msgid "Object"
 msgstr "objeto"
 
-#: color_manager.cc:77
+#: color_manager.cc:78
 #, fuzzy
 msgid "cannot open color definition file %1: %2"
 msgstr "não foi possível abrir o arquivo de imagem \"%1\""
 
-#: crossfade_edit.cc:73
+#: crossfade_edit.cc:75
 msgid "ardour: x-fade edit"
 msgstr "ardour: editar cross fade"
 
-#: crossfade_edit.cc:77 panner_ui.cc:401
+#: crossfade_edit.cc:79 panner_ui.cc:443
 msgid "Reset"
 msgstr "Reiniciar"
 
-#: crossfade_edit.cc:78
+#: crossfade_edit.cc:80
 msgid "Fade"
 msgstr "Fade"
 
-#: crossfade_edit.cc:79
+#: crossfade_edit.cc:81
 msgid "Out (dry)"
 msgstr "Saída (flat)"
 
-#: crossfade_edit.cc:80
+#: crossfade_edit.cc:82
 msgid "Out"
 msgstr "Saídas"
 
-#: crossfade_edit.cc:81
+#: crossfade_edit.cc:83
 msgid "In (dry)"
 msgstr "Entrada (flat)"
 
-#: crossfade_edit.cc:82
+#: crossfade_edit.cc:84
 msgid "In"
 msgstr "Entrada"
 
-#: crossfade_edit.cc:84
+#: crossfade_edit.cc:86
 msgid "With Pre-roll"
 msgstr "Com pré-rolagem"
 
-#: crossfade_edit.cc:85
+#: crossfade_edit.cc:87
 msgid "With Post-roll"
 msgstr "Com pós-rolagem"
 
-#: crossfade_edit.cc:93
+#: crossfade_edit.cc:95
 msgid "Fade In"
 msgstr "Fade In"
 
-#: crossfade_edit.cc:94
+#: crossfade_edit.cc:96
 msgid "Fade Out"
 msgstr "Fade Out"
 
-#: crossfade_edit.cc:170 editor.cc:1842 editor_actions.cc:315
-#: option_editor.cc:129
+#: crossfade_edit.cc:172 editor.cc:1835 editor_actions.cc:316
+#: option_editor.cc:130
 msgid "Audition"
 msgstr "Audição"
 
-#: editor.cc:101 editor.cc:3588
+#: editor.cc:104 editor.cc:3616
 msgid "Slide"
 msgstr "Deslizar"
 
-#: editor.cc:102 editor.cc:3586
+#: editor.cc:105 editor.cc:3614
 msgid "Splice"
 msgstr "Reunir"
 
-#: editor.cc:107 editor.cc:3643 export_dialog.cc:78 export_dialog.cc:92
-#: export_dialog.cc:893 export_dialog.cc:1225
+#. note that this menu list starts at zero, not 1, because zero
+#. is a valid, if useless, ID.
+#.
+#. leave some breathing room
+#: editor.cc:110 editor.cc:3671 export_dialog.cc:78 export_dialog.cc:92
+#: export_dialog.cc:893 export_dialog.cc:1225 route_ui.cc:437
 msgid "None"
 msgstr "Nenhum"
 
-#: editor.cc:108 editor.cc:3631
+#: editor.cc:111 editor.cc:3659
 msgid "CD Frames"
 msgstr "Quadros de CD"
 
-#: editor.cc:109 editor.cc:3633
+#: editor.cc:112 editor.cc:3661
 msgid "SMPTE Frames"
 msgstr "SMPTE Frames"
 
-#: editor.cc:110 editor.cc:3635
+#: editor.cc:113 editor.cc:3663
 msgid "SMPTE Seconds"
 msgstr "SMPTE segundo"
 
-#: editor.cc:111 editor.cc:3637
+#: editor.cc:114 editor.cc:3665
 msgid "SMPTE Minutes"
 msgstr "SMPTE Minutos"
 
-#: editor.cc:112 editor.cc:3639
+#: editor.cc:115 editor.cc:3667
 msgid "Seconds"
 msgstr "Segundos"
 
-#: editor.cc:113 editor.cc:3641
+#: editor.cc:116 editor.cc:3669
 msgid "Minutes"
 msgstr "Minutos"
 
 # ## msgstr "Saídas Principais"
-#: editor.cc:114 editor.cc:3613
+#: editor.cc:117 editor.cc:3641
 msgid "Beats/32"
 msgstr "Batimentos/32"
 
-#: editor.cc:115 editor.cc:3611
+#: editor.cc:118 editor.cc:3639
 msgid "Beats/16"
 msgstr "Batimentos/16"
 
-#: editor.cc:116 editor.cc:3609
+#: editor.cc:119 editor.cc:3637
 msgid "Beats/8"
 msgstr "Batimentos/8"
 
-#: editor.cc:117 editor.cc:3607
+#: editor.cc:120 editor.cc:3635
 msgid "Beats/4"
 msgstr "Batimentos/4"
 
-#: editor.cc:118 editor.cc:3605
+#: editor.cc:121 editor.cc:3633
 msgid "Beats/3"
 msgstr "Batimentos/3"
 
-#: editor.cc:119 editor.cc:3615
+#: editor.cc:122 editor.cc:3643
 msgid "Beats"
 msgstr "Batimentos"
 
-#: editor.cc:120 editor.cc:3617
+#: editor.cc:123 editor.cc:3645
 msgid "Bars"
 msgstr "Compassos"
 
-#: editor.cc:121 editor.cc:3619
+#: editor.cc:124 editor.cc:3647
 msgid "Marks"
 msgstr "Marcas"
 
-#: editor.cc:122 editor.cc:141 editor.cc:3621 editor.cc:3687
+#: editor.cc:125 editor.cc:144 editor.cc:3649 editor.cc:3715
 msgid "Edit Cursor"
 msgstr "Cursor de Edição"
 
-#: editor.cc:123 editor.cc:3623
+#: editor.cc:126 editor.cc:3651
 msgid "Region starts"
 msgstr "Começo de regiões"
 
-#: editor.cc:124 editor.cc:3625
+#: editor.cc:127 editor.cc:3653
 msgid "Region ends"
 msgstr "Fim de regiões"
 
-#: editor.cc:125 editor.cc:3629
+#: editor.cc:128 editor.cc:3657
 msgid "Region syncs"
 msgstr "Sincronizações de região"
 
-#: editor.cc:126 editor.cc:3627
+#: editor.cc:129 editor.cc:3655
 msgid "Region bounds"
 msgstr "Divisas de região"
 
-#: editor.cc:132 editor.cc:3662
+#: editor.cc:135 editor.cc:3690
 msgid "Magnetic"
 msgstr "Magnético"
 
-#: editor.cc:137 editor.cc:3679 export_dialog.cc:140 export_dialog.cc:156
+#: editor.cc:140 editor.cc:3707 export_dialog.cc:140 export_dialog.cc:156
 #: export_dialog.cc:1068 export_dialog.cc:1072
 msgid "Left"
 msgstr "Esquerdo"
 
-#: editor.cc:138 editor.cc:3681 export_dialog.cc:141 export_dialog.cc:157
+#: editor.cc:141 editor.cc:3709 export_dialog.cc:141 export_dialog.cc:157
 msgid "Right"
 msgstr "Direito"
 
-#: editor.cc:139 editor.cc:3683
+#: editor.cc:142 editor.cc:3711
 msgid "Center"
 msgstr "Centro"
 
-#: editor.cc:140 editor.cc:3685
+#: editor.cc:143 editor.cc:3713
 msgid "Playhead"
 msgstr "Início"
 
 #. time display buttons
-#: editor.cc:183
+#: editor.cc:186
 msgid "Mins:Secs"
 msgstr "Mins:Segs"
 
-#: editor.cc:186 editor_rulers.cc:353
+#: editor.cc:189 editor_rulers.cc:354
 msgid "Frames"
 msgstr "Quadros"
 
-#: editor.cc:187 editor_rulers.cc:373
+#: editor.cc:190 editor_rulers.cc:374
 msgid "Tempo"
 msgstr "Tempo"
 
-#: editor.cc:188 editor_rulers.cc:367
+#: editor.cc:191 editor_rulers.cc:368
 msgid "Meter"
 msgstr "VU (medidor volumétrico)"
 
-#: editor.cc:189 editor_rulers.cc:379
+#: editor.cc:192 editor_rulers.cc:380
 msgid "Location Markers"
 msgstr "Marcas de Localização"
 
-#: editor.cc:190 editor_rulers.cc:385
+#: editor.cc:193 editor_rulers.cc:386
 msgid "Range Markers"
 msgstr "Marcas de Intervalos"
 
-#: editor.cc:191 editor_rulers.cc:391
+#: editor.cc:194 editor_rulers.cc:392
 msgid "Loop/Punch Ranges"
 msgstr "Intervalos Loop/Insersão"
 
-#: editor.cc:213
+#: editor.cc:216
 msgid "range"
 msgstr "intervalo"
 
-#: editor.cc:214
+#: editor.cc:217
 msgid "object"
 msgstr "objeto"
 
-#: editor.cc:216
+#: editor.cc:219
 msgid "zoom"
 msgstr "zoom"
 
-#: editor.cc:217
+#: editor.cc:220
 msgid "timefx"
 msgstr ""
 
-#: editor.cc:218
+#: editor.cc:221
 msgid "listen"
 msgstr ""
 
-#: editor.cc:220
+#: editor.cc:223
 msgid "mode"
 msgstr "modo"
 
-#: editor.cc:221
+#: editor.cc:224
 msgid "automation"
 msgstr "automação"
 
-#: editor.cc:223
+#: editor.cc:226
 msgid "Edit Mode"
 msgstr "Modo de edição"
 
-#: editor.cc:224 editor_actions.cc:283
+#: editor.cc:227 editor_actions.cc:284
 msgid "Snap To"
 msgstr "Ajustar a"
 
-#: editor.cc:225
+#: editor.cc:228
 msgid "Snap Mode"
 msgstr "Modo de Ajuste"
 
-#: editor.cc:226
+#: editor.cc:229
 msgid "Zoom Focus"
 msgstr "Foco de Zoom"
 
 #. </CMT Additions>
 #. nudge
-#: editor.cc:234 editor.cc:1907 editor.cc:2073 editor.cc:2129
+#: editor.cc:237 editor.cc:1900 editor.cc:2066 editor.cc:2122
 msgid "Nudge"
 msgstr "Retocar"
 
-#: editor.cc:466
+#: editor.cc:470
 msgid "Zoom in"
 msgstr "Mais Zoom"
 
-#: editor.cc:467
+#: editor.cc:471
 msgid "Zoom out"
 msgstr "Menos Zoom"
 
-#: editor.cc:470
+#: editor.cc:474
 msgid "Zoom to session"
 msgstr "Zoom na sessão"
 
-#: editor.cc:485
+#: editor.cc:489
 msgid "Zoom Span"
 msgstr "Alcance de zoom"
 
-#: editor.cc:498 editor.cc:524 editor_actions.cc:61 mixer_ui.cc:85
+#: editor.cc:502 editor.cc:528 editor_actions.cc:62 mixer_ui.cc:86
+#: mixer_ui.cc:112
 #, fuzzy
 msgid "Visible"
 msgstr "visível"
 
-#: editor.cc:499 editor.cc:522
+#: editor.cc:503 editor.cc:526
 #, fuzzy
 msgid "Name"
 msgstr "Quadros"
 
-#: editor.cc:595 editor.cc:661
+#: editor.cc:602 editor.cc:669
 #, fuzzy
 msgid "Regions"
 msgstr "Região"
 
-#: editor.cc:634 editor.cc:673
+#: editor.cc:642 editor.cc:681
 msgid "Chunks"
 msgstr "Trechos"
 
-#: editor.cc:664
+#: editor.cc:672
 #, fuzzy
 msgid "Tracks/Busses"
 msgstr "Trilhas/Barramentos"
 
-#: editor.cc:667
+#: editor.cc:675
 msgid "Snapshots"
 msgstr "Capturas"
 
-#: editor.cc:670
+#: editor.cc:678
 msgid "Edit Groups"
 msgstr "Editar Grupos"
 
-#: editor.cc:719
+#: editor.cc:727
 msgid "Nudge region/selection forwards"
 msgstr "Avançar o mínimo região/seleção"
 
-#: editor.cc:720
+#: editor.cc:728
 msgid "Nudge region/selection backwards"
 msgstr "Voltar o mínimo região/seleção"
 
-#: editor.cc:727 editor_mixer.cc:298
+#: editor.cc:735 editor_mixer.cc:299
 msgid "ardour: editor"
 msgstr ""
 
-#: editor.cc:728
+#: editor.cc:736
 msgid "ardour_editor"
 msgstr ""
 
-#: editor.cc:1190
+#: editor.cc:1183
 msgid "ardour: editor: "
 msgstr ""
 
 #. force name
-#: editor.cc:1275 editor.cc:1284 editor_markers.cc:869
+#: editor.cc:1268 editor.cc:1277 editor_markers.cc:870
 msgid "Loop"
 msgstr "Ciclo"
 
 #. force name
-#: editor.cc:1289 editor.cc:1298 editor_markers.cc:895
+#: editor.cc:1282 editor.cc:1291 editor_markers.cc:896
 msgid "Punch"
 msgstr "Inserção"
 
-#: editor.cc:1446 editor_mouse.cc:1721
+#: editor.cc:1439 editor_mouse.cc:1742
 msgid "programming error: fade in canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor.cc:1458 editor.cc:1475 redirect_box.cc:1071
+#: editor.cc:1451 editor.cc:1468 redirect_box.cc:1073
 msgid "Deactivate"
 msgstr "Desativar"
 
 #. activation
-#: editor.cc:1460 editor.cc:1477 redirect_box.cc:1069
+#: editor.cc:1453 editor.cc:1470 redirect_box.cc:1071
 msgid "Activate"
 msgstr "Ativar"
 
-#: editor.cc:1465 editor.cc:1482
+#: editor.cc:1458 editor.cc:1475
 msgid "Linear"
 msgstr "Linear"
 
-#: editor.cc:1466 editor.cc:1483 editor_actions.cc:375
+#: editor.cc:1459 editor.cc:1476 editor_actions.cc:376
 msgid "Slowest"
 msgstr "Menor"
 
-#: editor.cc:1467 editor.cc:1484 editor_actions.cc:376
+#: editor.cc:1460 editor.cc:1477 editor_actions.cc:377
 msgid "Slow"
 msgstr "Devegar"
 
-#: editor.cc:1468 editor.cc:1485 editor_actions.cc:378
+#: editor.cc:1461 editor.cc:1478 editor_actions.cc:379
 msgid "Fast"
 msgstr "Rapido"
 
-#: editor.cc:1469 editor.cc:1486 editor_actions.cc:380
+#: editor.cc:1462 editor.cc:1479 editor_actions.cc:381
 msgid "Fastest"
 msgstr "Rapidamente"
 
-#: editor.cc:1596 editor.cc:1604
+#: editor.cc:1589 editor.cc:1597
 msgid "Freeze"
 msgstr "Congelar"
 
-#: editor.cc:1600
+#: editor.cc:1593
 msgid "Unfreeze"
 msgstr "Descongelar"
 
-#: editor.cc:1769 editor.cc:1864
+#: editor.cc:1762 editor.cc:1857
 msgid "Unmute"
 msgstr "Desmudo"
 
 #. non-operative menu items for menu bar
 #. show editors
-#: editor.cc:1773 editor.cc:2053 editor.cc:2755 editor_actions.cc:26
-#: editor_markers.cc:506 mixer_strip.cc:512 mixer_strip.cc:572
-#: redirect_box.cc:1077
+#: editor.cc:1766 editor.cc:2046 editor.cc:2748 editor_actions.cc:27
+#: editor_markers.cc:507 mixer_strip.cc:495 mixer_strip.cc:563
+#: redirect_box.cc:1079
 msgid "Edit"
 msgstr "Editar"
 
-#: editor.cc:1778
+#: editor.cc:1771
 msgid "Convert to short"
 msgstr ""
 
-#: editor.cc:1780
+#: editor.cc:1773
 msgid "Convert to full"
 msgstr ""
 
-#: editor.cc:1791
+#: editor.cc:1784
 msgid "Crossfade"
 msgstr "Fade cruzado"
 
-#: editor.cc:1834
+#: editor.cc:1827
 msgid "Popup region editor"
 msgstr "Editor de região"
 
-#: editor.cc:1835
+#: editor.cc:1828
 msgid "Raise to top layer"
 msgstr "Trazer região para frente, primeira camada"
 
-#: editor.cc:1836
+#: editor.cc:1829
 msgid "Lower to bottom layer"
 msgstr "Enviar região para a trás, última camada"
 
-#: editor.cc:1838
+#: editor.cc:1831
 msgid "Define sync point"
 msgstr "Definir ponto de sincronia"
 
-#: editor.cc:1839
+#: editor.cc:1832
 msgid "Remove sync point"
 msgstr "Remover ponto de sincronia"
 
-#: editor.cc:1844
+#: editor.cc:1837
 msgid "Bounce"
 msgstr ""
 
-#: editor.cc:1847
+#: editor.cc:1840
 #, fuzzy
 msgid "Analyze region"
 msgstr "Reproduzir região"
 
-#: editor.cc:1859
+#: editor.cc:1852
 msgid "Lock"
 msgstr "Trancar"
 
-#: editor.cc:1860
+#: editor.cc:1853
 msgid "Unlock"
 msgstr "Destrancar"
 
-#: editor.cc:1870
+#: editor.cc:1863
 msgid "Original position"
 msgstr "Posição original"
 
-#: editor.cc:1876
+#: editor.cc:1869
 msgid "Toggle envelope visibility"
 msgstr ""
 
-#: editor.cc:1877
+#: editor.cc:1870
 #, fuzzy
 msgid "Toggle envelope active"
 msgstr "ativo"
 
-#: editor.cc:1881
+#: editor.cc:1874
 msgid "DeNormalize"
 msgstr "Desnormalizar"
 
-#: editor.cc:1883
+#: editor.cc:1876
 msgid "Normalize"
 msgstr "Normalizar"
 
-#: editor.cc:1886
+#: editor.cc:1879
 msgid "Reverse"
 msgstr "Inverter horizontalmente"
 
 #. range related stuff
-#: editor.cc:1892
+#: editor.cc:1885
 #, fuzzy
 msgid "Add Range Markers"
 msgstr "Marcas de Intervalos"
 
-#: editor.cc:1893
+#: editor.cc:1886
 #, fuzzy
 msgid "Set Range"
 msgstr "Separar intervalo"
 
-#: editor.cc:1902
+#: editor.cc:1895
 #, fuzzy
 msgid "Nudge fwd"
 msgstr "Retocar"
 
-#: editor.cc:1903
+#: editor.cc:1896
 #, fuzzy
 msgid "Nudge bwd"
 msgstr "Retocar"
 
-#: editor.cc:1904
+#: editor.cc:1897
 msgid "Nudge fwd by capture offset"
 msgstr ""
 
-#: editor.cc:1905
+#: editor.cc:1898
 msgid "Nudge bwd by capture offset"
 msgstr ""
 
-#: editor.cc:1914
+#: editor.cc:1907
 msgid "Start to edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor.cc:1915
+#: editor.cc:1908
 msgid "Edit cursor to end"
 msgstr "Do cursor de edição ao final"
 
-#: editor.cc:1917
+#: editor.cc:1910 gain_meter.cc:181 gain_meter.cc:813 panner_ui.cc:98
+#: panner_ui.cc:803
 msgid "Trim"
 msgstr "Cortar"
 
-#: editor.cc:1920
+#: editor.cc:1913
 msgid "Split"
 msgstr "Separar"
 
-#: editor.cc:1923
+#: editor.cc:1916
 msgid "Make mono regions"
 msgstr "Criar regiões mono"
 
-#: editor.cc:1926
+#: editor.cc:1919
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: editor.cc:1927
+#: editor.cc:1920
 msgid "Fill Track"
 msgstr "Preencher Trilha"
 
-#: editor.cc:1931
+#: editor.cc:1924
 msgid "Destroy"
 msgstr "Remover definitavente"
 
-#: editor.cc:1961
+#: editor.cc:1954
 msgid "Play range"
 msgstr "Reproduzir intervalo"
 
-#: editor.cc:1962
+#: editor.cc:1955
 msgid "Loop range"
 msgstr "Loop no intervalo"
 
-#: editor.cc:1966
+#: editor.cc:1959
 #, fuzzy
 msgid "Analyze range"
 msgstr "Reproduzir intervalo"
 
-#: editor.cc:1970
+#: editor.cc:1963
 #, fuzzy
 msgid "Separate range to track"
 msgstr "Separar intervalo"
 
-#: editor.cc:1971
+#: editor.cc:1964
 #, fuzzy
 msgid "Separate range to region list"
 msgstr "Loop região selecionada"
 
-#: editor.cc:1974
+#: editor.cc:1967
 #, fuzzy
 msgid "Select all in range"
 msgstr "Selecionar tudo na trilha"
 
-#: editor.cc:1976 editor.cc:2021
+#: editor.cc:1969 editor.cc:2014
 #, fuzzy
 msgid "Set range to loop range"
 msgstr "Selecionar intervalo de loop"
 
-#: editor.cc:1977 editor.cc:2022
+#: editor.cc:1970 editor.cc:2015
 #, fuzzy
 msgid "Set range to punch range"
 msgstr "Selecionar intervalo de inserção"
 
-#: editor.cc:1979
+#: editor.cc:1972
 #, fuzzy
 msgid "Crop region to range"
 msgstr "Cortar região pela intervalo"
 
-#: editor.cc:1980
+#: editor.cc:1973
 #, fuzzy
 msgid "Fill range with region"
 msgstr "Preencher intervalo com região"
 
-#: editor.cc:1981
+#: editor.cc:1974
 #, fuzzy
 msgid "Duplicate range"
 msgstr "Duplicar"
 
-#: editor.cc:1982
+#: editor.cc:1975
 msgid "Create chunk from range"
 msgstr "Criar trecho a partir da intervalo"
 
-#: editor.cc:1984
+#: editor.cc:1977
 #, fuzzy
 msgid "Bounce range"
 msgstr "região"
 
-#: editor.cc:1985
+#: editor.cc:1978
 #, fuzzy
 msgid "Export range"
 msgstr "Exportar região"
 
-#: editor.cc:1987
+#: editor.cc:1980
 msgid "Range"
 msgstr "Intervalo"
 
-#: editor.cc:2002 editor.cc:2087
+#: editor.cc:1995 editor.cc:2080
 msgid "Play from edit cursor"
 msgstr "Reproduzir a partir do cursor"
 
-#: editor.cc:2003 editor.cc:2088
+#: editor.cc:1996 editor.cc:2081
 msgid "Play from start"
 msgstr "Reproduzir do início"
 
-#: editor.cc:2004
+#: editor.cc:1997
 msgid "Play region"
 msgstr "Reproduzir região"
 
-#: editor.cc:2006
+#: editor.cc:1999
 msgid "Loop Region"
 msgstr "Região de loop"
 
-#: editor.cc:2008 editor.cc:2089 sfdb_ui.cc:56
-msgid "Play"
-msgstr "Reproduzir"
-
-#: editor.cc:2016 editor.cc:2097
+#: editor.cc:2009 editor.cc:2090
 msgid "Select All in track"
 msgstr "Selecionar tudo na trilha"
 
-#: editor.cc:2017 editor.cc:2098 redirect_box.cc:1065
+#: editor.cc:2010 editor.cc:2091 redirect_box.cc:1067
 msgid "Select All"
 msgstr "Selecionar Tudo"
 
-#: editor.cc:2018 editor.cc:2099
+#: editor.cc:2011 editor.cc:2092
 #, fuzzy
 msgid "Invert selection in track"
 msgstr "Inverter verticalmente na trilha"
 
-#: editor.cc:2019 editor.cc:2100
+#: editor.cc:2012 editor.cc:2093
 #, fuzzy
 msgid "Invert selection"
 msgstr "Saltar Seleção"
 
-#: editor.cc:2024 editor.cc:2102
+#: editor.cc:2017 editor.cc:2095
 #, fuzzy
 msgid "Select all after edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor.cc:2025 editor.cc:2103
+#: editor.cc:2018 editor.cc:2096
 #, fuzzy
 msgid "Select all before edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor.cc:2026 editor.cc:2104
+#: editor.cc:2019 editor.cc:2097
 #, fuzzy
 msgid "Select all after playhead"
 msgstr "Marcar aqui"
 
-#: editor.cc:2027 editor.cc:2105
+#: editor.cc:2020 editor.cc:2098
 #, fuzzy
 msgid "Select all before playhead"
 msgstr "Marcar aqui"
 
-#: editor.cc:2028
+#: editor.cc:2021
 #, fuzzy
 msgid "Select all between cursors"
 msgstr "Do início ao cursor de edição"
 
 #. standard editing stuff
-#: editor.cc:2039 editor.cc:2115 editor.cc:3455 editor_actions.cc:213
-#: redirect_box.cc:1058
+#: editor.cc:2032 editor.cc:2108 editor.cc:3483 editor_actions.cc:214
+#: redirect_box.cc:1060
 msgid "Cut"
 msgstr "Cortar"
 
-#: editor.cc:2040 editor.cc:2116 editor.cc:3457 editor_actions.cc:218
-#: redirect_box.cc:1060
+#: editor.cc:2033 editor.cc:2109 editor.cc:3485 editor_actions.cc:219
+#: redirect_box.cc:1062
 msgid "Copy"
 msgstr "Copiar"
 
-#: editor.cc:2041
+#: editor.cc:2034
 msgid "Paste at edit cursor"
 msgstr "Colar à cursor de edição"
 
-#: editor.cc:2042
+#: editor.cc:2035
 msgid "Paste at mouse"
 msgstr "Colar à mouse"
 
-#: editor.cc:2046 editor.cc:3462
+#: editor.cc:2039 editor.cc:3490
 msgid "Align"
 msgstr "Alinhamento"
 
-#: editor.cc:2047 editor.cc:3464
+#: editor.cc:2040 editor.cc:3492
 msgid "Align Relative"
 msgstr "Alinhamento Relativo"
 
-#: editor.cc:2051
+#: editor.cc:2044
 msgid "Insert chunk"
 msgstr "Inserir trecho"
 
-#: editor.cc:2058
+#: editor.cc:2051
 #, fuzzy
 msgid "Insert Selected Region"
 msgstr "Loop região selecionada"
 
-#: editor.cc:2059
+#: editor.cc:2052
 msgid "Insert Existing Audio"
 msgstr ""
 
-#: editor.cc:2068 editor.cc:2124
+#: editor.cc:2061 editor.cc:2117
 msgid "Nudge entire track fwd"
 msgstr "Retorcar toda a trilha para frente"
 
-#: editor.cc:2069 editor.cc:2125
+#: editor.cc:2062 editor.cc:2118
 msgid "Nudge track after edit cursor fwd"
 msgstr "Retocar trilha após o cursor de edição"
 
-#: editor.cc:2070 editor.cc:2126
+#: editor.cc:2063 editor.cc:2119
 msgid "Nudge entire track bwd"
 msgstr "Retorcar toda a trilha para trás"
 
-#: editor.cc:2071 editor.cc:2127
+#: editor.cc:2064 editor.cc:2120
 msgid "Nudge track after edit cursor bwd"
 msgstr "Retocar toda a trilha, do cursor de edição para trás"
 
-#: editor.cc:2117 editor.cc:3459 editor_actions.cc:220 redirect_box.cc:1062
+#: editor.cc:2110 editor.cc:3487 editor_actions.cc:221 redirect_box.cc:1064
 msgid "Paste"
 msgstr "Colar"
 
-#: editor.cc:2637
+#: editor.cc:2630
 msgid "select/move objects"
 msgstr "selecionar/mover objetos"
 
-#: editor.cc:2638
+#: editor.cc:2631
 msgid "select/move ranges"
 msgstr "selecionar/mover intervalos"
 
-#: editor.cc:2639
+#: editor.cc:2632
 msgid "draw gain automation"
 msgstr "desenhar ganho automático"
 
-#: editor.cc:2640
+#: editor.cc:2633
 msgid "select zoom range"
 msgstr "selecionar intervalo de zoom"
 
-#: editor.cc:2641
+#: editor.cc:2634
 msgid "stretch/shrink regions"
 msgstr "esticar/encolher regiões"
 
-#: editor.cc:2642
+#: editor.cc:2635
 #, fuzzy
 msgid "listen to specific regions"
 msgstr "Ouça no região especifica"
 
-#: editor.cc:2753
+#: editor.cc:2746
 msgid "Start:"
 msgstr "Inicio:"
 
-#: editor.cc:2754
+#: editor.cc:2747
 msgid "End:"
 msgstr "Final:"
 
-#: editor.cc:3097
+#: editor.cc:3362 editor.cc:3402
 #, fuzzy
-msgid "set selected trackview"
-msgstr "Inserir seleção"
+msgid "set selected regions"
+msgstr "Loop região selecionada"
 
-#: editor.cc:3137
-#, fuzzy
-msgid "set selected control point"
-msgstr "Remover ponto de controlo"
-
-#: editor.cc:3246
-#, fuzzy
-msgid "set selected regionview"
-msgstr "Loop região selecionada"
-
-#: editor.cc:3334 editor.cc:3374
-#, fuzzy
-msgid "set selected regions"
-msgstr "Loop região selecionada"
-
-#: editor.cc:3430 editor_actions.cc:203
+#: editor.cc:3458 editor_actions.cc:204
 msgid "Undo"
 msgstr "Desfazer"
 
-#: editor.cc:3432
+#: editor.cc:3460
 msgid "Undo (%1)"
 msgstr "Desfazer (%1)"
 
-#: editor.cc:3442 editor_actions.cc:205
+#: editor.cc:3470 editor_actions.cc:206
 msgid "Redo"
 msgstr "Refazer"
 
-#: editor.cc:3444
+#: editor.cc:3472
 msgid "Redo (%1)"
 msgstr "Refazer (%1)"
 
-#: editor.cc:3478
+#: editor.cc:3506
 msgid "... as new track"
 msgstr ""
 
-#: editor.cc:3479
+#: editor.cc:3507
 #, fuzzy
 msgid "... as new region"
 msgstr "normalizar região"
 
-#: editor.cc:3481
+#: editor.cc:3509
 msgid "Import audio (copy)"
 msgstr "Importar áudio (copiar)"
 
-#: editor.cc:3484
+#: editor.cc:3512
 msgid "Remove last capture"
 msgstr "Remover última captura"
 
-#: editor.cc:3508
+#: editor.cc:3536
 msgid "Duplicate how many times?"
 msgstr "Duplicar quantas vezes?"
 
-#: editor.cc:3994
+#: editor.cc:4022
 msgid ""
 "Playlist %1 is currently unused.\n"
 "If left alone, no audio files used by it will be cleaned.\n"
 "If deleted, audio files used by it alone by will cleaned."
 msgstr ""
 
-#: editor.cc:4002
+#: editor.cc:4030
 #, fuzzy
 msgid "Delete playlist"
 msgstr "Nome para a imagem capturada"
 
-#: editor.cc:4003
+#: editor.cc:4031
 #, fuzzy
 msgid "Keep playlist"
 msgstr "Nome para a imagem capturada"
 
-#: editor.cc:4004 editor_audio_import.cc:237 editor_ops.cc:1976
-#: editor_timefx.cc:52 export_dialog.cc:971 io_selector.cc:58
-#: io_selector.cc:792 redirect_box.cc:901 tempo_dialog.cc:19
-#: tempo_dialog.cc:36 tempo_dialog.cc:152 tempo_dialog.cc:170
+#: editor.cc:4032 editor_audio_import.cc:236 editor_ops.cc:2048
+#: editor_timefx.cc:71 export_dialog.cc:971 io_selector.cc:59
+#: io_selector.cc:793 redirect_box.cc:903 tempo_dialog.cc:20
+#: tempo_dialog.cc:37 tempo_dialog.cc:202 tempo_dialog.cc:220
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: editor.cc:4171
+#: editor.cc:4199
 #, fuzzy
 msgid "new playlists"
 msgstr "Nome para a imagem capturada"
 
-#: editor.cc:4179
+#: editor.cc:4207
 #, fuzzy
 msgid "copy playlists"
 msgstr "Nome para a imagem capturada"
 
-#: editor.cc:4187
+#: editor.cc:4215
 #, fuzzy
 msgid "clear playlists"
 msgstr "Nome para a imagem capturada"
 
-#: editor_actions.cc:27
+#: editor_actions.cc:28
 #, fuzzy
 msgid "Select regions"
 msgstr "Loop região selecionada"
 
-#: editor_actions.cc:28
+#: editor_actions.cc:29
 #, fuzzy
 msgid "Select range operations"
 msgstr "Loop região selecionada"
 
-#: editor_actions.cc:29
+#: editor_actions.cc:30
 #, fuzzy
 msgid "Move edit cursor"
 msgstr "Colar à cursor de edição"
 
-#: editor_actions.cc:30
+#: editor_actions.cc:31
 #, fuzzy
 msgid "Region operations"
 msgstr "Regiões/criação"
 
-#: editor_actions.cc:31
+#: editor_actions.cc:32
 msgid "Tools"
 msgstr ""
 
-#: editor_actions.cc:32
+#: editor_actions.cc:33
 msgid "View"
 msgstr ""
 
-#: editor_actions.cc:33
+#: editor_actions.cc:34
 #, fuzzy
 msgid "ZoomFocus"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:34
+#: editor_actions.cc:35
 #, fuzzy
 msgid "Meter hold"
 msgstr "VU (medidor volumétrico)"
 
-#: editor_actions.cc:35
+#: editor_actions.cc:36
 msgid "Meter falloff"
 msgstr ""
 
-#: editor_actions.cc:37
+#: editor_actions.cc:38
 #, fuzzy
 msgid "Crossfades"
 msgstr "Fade cruzado"
 
-#: editor_actions.cc:38
+#: editor_actions.cc:39
 #, fuzzy
 msgid "Monitoring"
 msgstr "Usar Monitoração de Hardware"
 
-#: editor_actions.cc:39
+#: editor_actions.cc:40
 #, fuzzy
 msgid "Autoconnect"
 msgstr "Conectar"
 
-#: editor_actions.cc:40
+#: editor_actions.cc:41
 #, fuzzy
 msgid "Layering"
 msgstr "Camada"
 
-#: editor_actions.cc:41
+#: editor_actions.cc:42
 #, fuzzy
 msgid "Metering"
 msgstr "VU (medidor volumétrico)"
 
-#: editor_actions.cc:42
+#: editor_actions.cc:43
 msgid "Fall off rate"
 msgstr ""
 
-#: editor_actions.cc:43
+#: editor_actions.cc:44
 msgid "Hold Time"
 msgstr ""
 
-#: editor_actions.cc:44
+#: editor_actions.cc:45
 msgid "Add Existing Audio"
 msgstr ""
 
 #. add named actions for the editor
-#: editor_actions.cc:49
+#: editor_actions.cc:50
 #, fuzzy
 msgid "Show Editor Mixer"
 msgstr "Mostrar painéis de mixer de todas as trilhas de áudio"
 
-#: editor_actions.cc:54
+#: editor_actions.cc:55
 #, fuzzy
 msgid "Span Entire Overlap"
 msgstr "Trazer região uma camada para frente"
 
-#: editor_actions.cc:56 editor_actions.cc:383
+#: editor_actions.cc:57 editor_actions.cc:384
 #, fuzzy
 msgid "Short"
 msgstr "porta"
 
-#: editor_actions.cc:63
+#: editor_actions.cc:64
 msgid "Created Automatically"
 msgstr ""
 
-#: editor_actions.cc:66
+#: editor_actions.cc:67
 msgid "Playhead to Next Region Start"
 msgstr ""
 
-#: editor_actions.cc:68
+#: editor_actions.cc:69
 msgid "Playhead to Next Region End"
 msgstr ""
 
-#: editor_actions.cc:70
+#: editor_actions.cc:71
 msgid "Playhead to Next Region Sync"
 msgstr ""
 
-#: editor_actions.cc:73
+#: editor_actions.cc:74
 msgid "Playhead to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:75
+#: editor_actions.cc:76
 msgid "Playhead to Previous Region End"
 msgstr ""
 
-#: editor_actions.cc:77
+#: editor_actions.cc:78
 msgid "Playhead to Previous Region Sync"
 msgstr ""
 
-#: editor_actions.cc:80
+#: editor_actions.cc:81
 #, fuzzy
 msgid "Edit Cursor to Next Region Start"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:82
+#: editor_actions.cc:83
 #, fuzzy
 msgid "Edit Cursor to Next Region End"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:84
+#: editor_actions.cc:85
 #, fuzzy
 msgid "Edit Cursor to Next Region Sync"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:87
+#: editor_actions.cc:88
 msgid "Edit Cursor to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:89
+#: editor_actions.cc:90
 #, fuzzy
 msgid "Edit Cursor to Previous Region End"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:91
+#: editor_actions.cc:92
 #, fuzzy
 msgid "Edit Cursor to Previous Region Sync"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:94
+#: editor_actions.cc:95
 msgid "Playhead to Range Start"
 msgstr ""
 
-#: editor_actions.cc:96
+#: editor_actions.cc:97
 #, fuzzy
 msgid "Playhead to Range End"
 msgstr "Reproduzir intervalo"
 
-#: editor_actions.cc:99
+#: editor_actions.cc:100
 #, fuzzy
 msgid "Edit Cursor to Range Start"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:101
+#: editor_actions.cc:102
 #, fuzzy
 msgid "Edit Cursor to Range End"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:104 editor_ops.cc:1300
+#: editor_actions.cc:105 editor_ops.cc:1363
 #, fuzzy
 msgid "select all"
 msgstr "Selecionar Tudo"
 
-#: editor_actions.cc:106
+#: editor_actions.cc:107
 #, fuzzy
 msgid "Select All After Edit Cursor"
 msgstr "Reproduzir a partir do cursor"
 
-#: editor_actions.cc:108
+#: editor_actions.cc:109
 msgid "Select All Before Edit Cursor"
 msgstr ""
 
-#: editor_actions.cc:111
+#: editor_actions.cc:112
 #, fuzzy
 msgid "Select All After Playhead"
 msgstr "Marcar aqui"
 
-#: editor_actions.cc:113
+#: editor_actions.cc:114
 #, fuzzy
 msgid "Select All Before Playhead"
 msgstr "Marcar aqui"
 
-#: editor_actions.cc:115
+#: editor_actions.cc:116
 #, fuzzy
 msgid "Select All Between Cursors"
 msgstr "Reproduzir a partir do cursor"
 
-#: editor_actions.cc:118
+#: editor_actions.cc:119
 #, fuzzy
 msgid "Select All in Punch Range"
 msgstr "Fazer intervalo de inserção"
 
-#: editor_actions.cc:120
+#: editor_actions.cc:121
 #, fuzzy
 msgid "Select All in Loop Range"
 msgstr "Selecionar intervalo de loop"
 
-#: editor_actions.cc:123
+#: editor_actions.cc:124
 msgid "Jump Forward to Mark"
 msgstr ""
 
-#: editor_actions.cc:125
+#: editor_actions.cc:126
 msgid "Jump Backward to Mark"
 msgstr ""
 
-#: editor_actions.cc:127
+#: editor_actions.cc:128
 #, fuzzy
 msgid "Add Location from Playhead"
 msgstr "Marcar aqui"
 
-#: editor_actions.cc:130
+#: editor_actions.cc:131
 #, fuzzy
 msgid "Nudge Forward"
 msgstr "Retocar"
 
-#: editor_actions.cc:132
+#: editor_actions.cc:133
 #, fuzzy
 msgid "Nudge Next Forward"
 msgstr "Avançar o mínimo região/seleção"
 
-#: editor_actions.cc:134
+#: editor_actions.cc:135
 #, fuzzy
 msgid "Nudge Backward"
 msgstr "Retocar"
 
-#: editor_actions.cc:136
+#: editor_actions.cc:137
 #, fuzzy
 msgid "Nudge Next Backward"
 msgstr "Retorcar toda a trilha para frente"
 
-#: editor_actions.cc:139
+#: editor_actions.cc:140
 #, fuzzy
 msgid "Zoom Out"
 msgstr "Menos Zoom"
 
-#: editor_actions.cc:141
+#: editor_actions.cc:142
 #, fuzzy
 msgid "Zoom In"
 msgstr "Mais Zoom"
 
-#: editor_actions.cc:143
+#: editor_actions.cc:144
 #, fuzzy
 msgid "Zoom to Session"
 msgstr "Zoom na sessão"
 
-#: editor_actions.cc:146
+#: editor_actions.cc:147
 #, fuzzy
 msgid "Scroll Tracks Up"
 msgstr "Preencher Trilha"
 
-#: editor_actions.cc:148
+#: editor_actions.cc:149
 msgid "Scroll Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:150
+#: editor_actions.cc:151
 #, fuzzy
 msgid "Step Tracks Up"
 msgstr "Outras trilhas"
 
-#: editor_actions.cc:152
+#: editor_actions.cc:153
 msgid "Step Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:155
+#: editor_actions.cc:156
 msgid "Scroll Backward"
 msgstr ""
 
-#: editor_actions.cc:157
+#: editor_actions.cc:158
 msgid "Scroll Forward"
 msgstr ""
 
-#: editor_actions.cc:159
+#: editor_actions.cc:160
 msgid "goto"
 msgstr ""
 
-#: editor_actions.cc:161
+#: editor_actions.cc:162
 #, fuzzy
 msgid "Center Playhead"
 msgstr "Início"
 
-#: editor_actions.cc:163
+#: editor_actions.cc:164
 #, fuzzy
 msgid "Center Edit Cursor"
 msgstr "Cursor de Edição"
 
-#: editor_actions.cc:165
+#: editor_actions.cc:166
 #, fuzzy
 msgid "Playhead Forward"
 msgstr "Início"
 
-#: editor_actions.cc:167
+#: editor_actions.cc:168
 #, fuzzy
 msgid "Playhead Backward"
 msgstr "Início"
 
-#: editor_actions.cc:169
+#: editor_actions.cc:170
 #, fuzzy
 msgid "Playhead to Edit"
 msgstr "Início"
 
-#: editor_actions.cc:171
+#: editor_actions.cc:172
 #, fuzzy
 msgid "Edit to Playhead"
 msgstr "Marcar aqui"
 
-#: editor_actions.cc:174
+#: editor_actions.cc:175
 #, fuzzy
 msgid "Align Regions Start"
 msgstr "Começo de regiões"
 
-#: editor_actions.cc:176
+#: editor_actions.cc:177
 #, fuzzy
 msgid "Align Regions Start Relative"
 msgstr "Alinhamento Relativo"
 
-#: editor_actions.cc:178
+#: editor_actions.cc:179
 #, fuzzy
 msgid "Align Regions End"
 msgstr "normalizar região"
 
-#: editor_actions.cc:180
+#: editor_actions.cc:181
 #, fuzzy
 msgid "Align Regions End Relative"
 msgstr "Alinhamento Relativo"
 
-#: editor_actions.cc:183
+#: editor_actions.cc:184
 #, fuzzy
 msgid "Align Regions Sync"
 msgstr "normalizar região"
 
-#: editor_actions.cc:185
+#: editor_actions.cc:186
 #, fuzzy
 msgid "Align Regions Sync Relative"
 msgstr "Alinhamento Relativo"
 
-#: editor_actions.cc:188
+#: editor_actions.cc:189
 #, fuzzy
 msgid "Audition at Mouse"
 msgstr "Audição"
 
-#: editor_actions.cc:190
+#: editor_actions.cc:191
 #, fuzzy
 msgid "Brush at Mouse"
 msgstr "Colar à mouse"
 
-#: editor_actions.cc:192
+#: editor_actions.cc:193
 #, fuzzy
 msgid "Set Edit Cursor"
 msgstr "Cursor de Edição"
 
-#: editor_actions.cc:194
+#: editor_actions.cc:195
 #, fuzzy
 msgid "Mute/Unmute Region"
 msgstr "Criar Região"
 
-#: editor_actions.cc:196
+#: editor_actions.cc:197
 #, fuzzy
 msgid "Set Playhead"
 msgstr "Início"
 
-#: editor_actions.cc:198
+#: editor_actions.cc:199
 #, fuzzy
 msgid "Split Region"
 msgstr "Separar Região"
 
-#: editor_actions.cc:200
+#: editor_actions.cc:201
 #, fuzzy
 msgid "Set Region Sync Position"
 msgstr "Por Posição da Região"
 
-#: editor_actions.cc:208
+#: editor_actions.cc:209
 #, fuzzy
 msgid "Export Session"
 msgstr "Exportar região"
 
-#: editor_actions.cc:210
+#: editor_actions.cc:211
 #, fuzzy
 msgid "Export Range"
 msgstr "Separar intervalo"
 
 #. Note: for now, editor-delete does the exact same thing as editor-cut
-#: editor_actions.cc:216
+#: editor_actions.cc:217
 msgid "Delete"
 msgstr "Apagar"
 
-#: editor_actions.cc:222
+#: editor_actions.cc:223
 #, fuzzy
 msgid "Duplicate Region"
 msgstr "Loop região selecionada"
 
-#: editor_actions.cc:224
+#: editor_actions.cc:225
 #, fuzzy
 msgid "Duplicate Range"
 msgstr "Duplicar"
 
-#: editor_actions.cc:226
+#: editor_actions.cc:227
 msgid "Insert Region"
 msgstr "Inserir região"
 
-#: editor_actions.cc:228
+#: editor_actions.cc:229
 #, fuzzy
 msgid "Reverse Region"
 msgstr "inverter horizontalmente as regiões"
 
-#: editor_actions.cc:230
+#: editor_actions.cc:231
 #, fuzzy
 msgid "Normalize Region"
 msgstr "Normalizar"
 
-#: editor_actions.cc:232
+#: editor_actions.cc:233
 #, fuzzy
 msgid "crop"
 msgstr "copiar"
 
-#: editor_actions.cc:234
+#: editor_actions.cc:235
 #, fuzzy
 msgid "Insert Chunk"
 msgstr "Inserir trecho"
 
-#: editor_actions.cc:237
+#: editor_actions.cc:238
 #, fuzzy
 msgid "Split at edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor_actions.cc:240
+#: editor_actions.cc:241
 #, fuzzy
 msgid "Start Range"
 msgstr "Separar intervalo"
 
-#: editor_actions.cc:242
+#: editor_actions.cc:243
 msgid "Finish Range"
 msgstr ""
 
-#: editor_actions.cc:244
+#: editor_actions.cc:245
 msgid "Finish add Range"
 msgstr ""
 
-#: editor_actions.cc:247
+#: editor_actions.cc:248
 msgid "Extend Range to End of Region"
 msgstr ""
 
-#: editor_actions.cc:249
+#: editor_actions.cc:250
 #, fuzzy
 msgid "Extend Range to Start of Region"
 msgstr "Ir para o início da sessão"
 
-#: editor_actions.cc:252
+#: editor_actions.cc:253
 #, fuzzy
 msgid "Follow Playhead"
 msgstr "Reproduzir a partir do início"
 
-#: editor_actions.cc:260
+#: editor_actions.cc:261
 #, fuzzy
 msgid "Zoom Focus Left"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:262
+#: editor_actions.cc:263
 #, fuzzy
 msgid "Zoom Focus Right"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:264
+#: editor_actions.cc:265
 #, fuzzy
 msgid "Zoom Focus Center"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:266
+#: editor_actions.cc:267
 #, fuzzy
 msgid "Zoom Focus Playhead"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:268
+#: editor_actions.cc:269
 #, fuzzy
 msgid "Zoom Focus Edit"
 msgstr "Foco de Zoom"
 
-#: editor_actions.cc:274
+#: editor_actions.cc:275
 msgid "Object Tool"
 msgstr ""
 
-#: editor_actions.cc:275
+#: editor_actions.cc:276
 #, fuzzy
 msgid "Range Tool"
 msgstr "Intervalo"
 
-#: editor_actions.cc:276
+#: editor_actions.cc:277
 msgid "Gain Tool"
 msgstr ""
 
-#: editor_actions.cc:277
+#: editor_actions.cc:278
 #, fuzzy
 msgid "Zoom Tool"
 msgstr "Menos Zoom"
 
-#: editor_actions.cc:278
+#: editor_actions.cc:279
 msgid "Timefx Tool"
 msgstr ""
 
-#: editor_actions.cc:285
+#: editor_actions.cc:286
 #, fuzzy
 msgid "Snap to frame"
 msgstr "Modo de Ajuste"
 
-#: editor_actions.cc:286
+#: editor_actions.cc:287
 #, fuzzy
 msgid "Snap to cd frame"
 msgstr "Modo de Ajuste"
 
-#: editor_actions.cc:287
+#: editor_actions.cc:288
 #, fuzzy
 msgid "Snap to SMPTE frame"
 msgstr "SMPTE Frames"
 
-#: editor_actions.cc:288
+#: editor_actions.cc:289
 #, fuzzy
 msgid "Snap to SMPTE seconds"
 msgstr "SMPTE segundo"
 
-#: editor_actions.cc:289
+#: editor_actions.cc:290
 #, fuzzy
 msgid "Snap to SMPTE minutes"
 msgstr "SMPTE Minutos"
 
-#: editor_actions.cc:290
+#: editor_actions.cc:291
 #, fuzzy
 msgid "Snap to seconds"
 msgstr "Segundos"
 
-#: editor_actions.cc:291
+#: editor_actions.cc:292
 msgid "Snap to minutes"
 msgstr ""
 
-#: editor_actions.cc:292
+#: editor_actions.cc:293
 #, fuzzy
 msgid "Snap to thirtyseconds"
 msgstr "trigésima segunda (32)"
 
-#: editor_actions.cc:293
+#: editor_actions.cc:294
 msgid "Snap to asixteenthbeat"
 msgstr ""
 
-#: editor_actions.cc:294
+#: editor_actions.cc:295
 msgid "Snap to eighths"
 msgstr ""
 
-#: editor_actions.cc:295
+#: editor_actions.cc:296
 msgid "Snap to quarters"
 msgstr ""
 
-#: editor_actions.cc:296
+#: editor_actions.cc:297
 #, fuzzy
 msgid "Snap to thirds"
 msgstr "Modo de Ajuste"
 
-#: editor_actions.cc:297
+#: editor_actions.cc:298
 #, fuzzy
 msgid "Snap to beat"
 msgstr "Modo de Ajuste"
 
-#: editor_actions.cc:298
+#: editor_actions.cc:299
 #, fuzzy
 msgid "Snap to bar"
 msgstr "Ajustar a"
 
-#: editor_actions.cc:299
+#: editor_actions.cc:300
 #, fuzzy
 msgid "Snap to mark"
 msgstr "adicionar marca de intervalo"
 
-#: editor_actions.cc:300
+#: editor_actions.cc:301
 #, fuzzy
 msgid "Snap to edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor_actions.cc:301
+#: editor_actions.cc:302
 #, fuzzy
 msgid "Snap to region start"
 msgstr "Começo de regiões"
 
-#: editor_actions.cc:302
+#: editor_actions.cc:303
 #, fuzzy
 msgid "Snap to region end"
 msgstr "Fim de regiões"
 
-#: editor_actions.cc:303
+#: editor_actions.cc:304
 #, fuzzy
 msgid "Snap to region sync"
 msgstr "Sincronizações de região"
 
-#: editor_actions.cc:304
+#: editor_actions.cc:305
 #, fuzzy
 msgid "Snap to region boundary"
 msgstr "Divisas de região"
 
 #. the region list popup menu
-#: editor_actions.cc:313
+#: editor_actions.cc:314
 #, fuzzy
 msgid "Sort"
 msgstr "porta"
 
-#: editor_actions.cc:321
+#: editor_actions.cc:322
 msgid "Show all"
 msgstr "Mostrar tudo"
 
-#: editor_actions.cc:322
+#: editor_actions.cc:323
 #, fuzzy
 msgid "Show automatic regions"
 msgstr "mostra toda a automação"
 
-#: editor_actions.cc:324
+#: editor_actions.cc:325
 msgid "Ascending"
 msgstr "Ascendente"
 
-#: editor_actions.cc:326
+#: editor_actions.cc:327
 msgid "Descending"
 msgstr "Descendente"
 
-#: editor_actions.cc:329
+#: editor_actions.cc:330
 msgid "By Region Name"
 msgstr "Por Nome da Região"
 
-#: editor_actions.cc:331
+#: editor_actions.cc:332
 msgid "By Region Length"
 msgstr "Por Tamanho da Região"
 
-#: editor_actions.cc:333
+#: editor_actions.cc:334
 msgid "By Region Position"
 msgstr "Por Posição da Região"
 
-#: editor_actions.cc:335
+#: editor_actions.cc:336
 msgid "By Region Timestamp"
 msgstr "Por tempo data/hora da Região"
 
-#: editor_actions.cc:337
+#: editor_actions.cc:338
 msgid "By Region Start in File"
 msgstr "Por posição inicial da Região no arquivo"
 
-#: editor_actions.cc:339
+#: editor_actions.cc:340
 msgid "By Region End in File"
 msgstr "Por posição final da Região no arquivo"
 
-#: editor_actions.cc:341
+#: editor_actions.cc:342
 msgid "By Source File Name"
 msgstr "Por nome original do arquivo"
 
-#: editor_actions.cc:343
+#: editor_actions.cc:344
 msgid "By Source File Length"
 msgstr "Por tamanho do arquivo original"
 
-#: editor_actions.cc:345
+#: editor_actions.cc:346
 msgid "By Source File Creation Date"
 msgstr "Por data de criação do arquivo original"
 
-#: editor_actions.cc:347
+#: editor_actions.cc:348
 msgid "By Source Filesystem"
 msgstr "Por sistema de arquivos original"
 
 #. the next two are duplicate items with different names for use in two different contexts
-#: editor_actions.cc:353
+#: editor_actions.cc:354
 #, fuzzy
 msgid "Add External Audio"
 msgstr "Adicionar na lista de regiões"
 
-#: editor_actions.cc:355
+#: editor_actions.cc:356
 #, fuzzy
 msgid "as Region(s)"
 msgstr "normalizar região"
 
-#: editor_actions.cc:357
+#: editor_actions.cc:358
 #, fuzzy
 msgid "as Tracks"
 msgstr "Trilhas"
 
-#: editor_actions.cc:359
+#: editor_actions.cc:360
 #, fuzzy
 msgid "to Tracks"
 msgstr "Trilhas"
 
-#: editor_actions.cc:362
+#: editor_actions.cc:363
 #, fuzzy
 msgid "Show Waveforms"
 msgstr "Mostrar formas de onda áudio"
 
-#: editor_actions.cc:363
+#: editor_actions.cc:364
 #, fuzzy
 msgid "Show Waveforms While Recording"
 msgstr "Mostrar formas de onda áudio quando gravando"
 
-#: editor_actions.cc:364
+#: editor_actions.cc:365
 #, fuzzy
 msgid "Show Measures"
 msgstr "Mostrar linhas de medida"
 
-#: editor_actions.cc:377 editor_actions.cc:384
+#: editor_actions.cc:378 editor_actions.cc:385
 msgid "Medium"
 msgstr ""
 
-#: editor_actions.cc:379
+#: editor_actions.cc:380
 #, fuzzy
 msgid "Faster"
 msgstr "Fades"
 
-#: editor_actions.cc:385
+#: editor_actions.cc:386
 msgid "Long"
 msgstr ""
 
-#: editor_actions.cc:389
+#: editor_actions.cc:390
 #, fuzzy
 msgid "Later is Higher"
 msgstr "Enviar região uma camada para trás"
 
-#: editor_actions.cc:390
+#: editor_actions.cc:391
 #, fuzzy
 msgid "Most Recently Moved/Added is Higher"
 msgstr "Enviar região uma camada para trás"
 
-#: editor_actions.cc:391
+#: editor_actions.cc:392
 #, fuzzy
 msgid "Most Recently Added is Higher"
 msgstr "Enviar região uma camada para trás"
@@ -3443,40 +3430,40 @@ msgstr ""
 msgid "Add existing audio to session"
 msgstr "mostra a automação existente"
 
-#: editor_audio_import.cc:143
+#: editor_audio_import.cc:142
 #, fuzzy
 msgid "ardour: importing %1"
 msgstr "ardour: exportar"
 
-#: editor_audio_import.cc:147
+#: editor_audio_import.cc:146
 msgid "Cancel Import"
 msgstr "Cancelar importação"
 
-#: editor_audio_import.cc:225
+#: editor_audio_import.cc:224
 #, fuzzy
 msgid "Editor: cannot open file \"%1\", (%2)"
 msgstr "Editor: não foi possível abrir o arquivo \"%1\" (%2)"
 
-#: editor_audio_import.cc:233
+#: editor_audio_import.cc:232
 #, fuzzy
 msgid "Cancel entire import"
 msgstr "Cancelar importação"
 
-#: editor_audio_import.cc:234
+#: editor_audio_import.cc:233
 #, fuzzy
 msgid "Don't embed it"
 msgstr "Não %1"
 
-#: editor_audio_import.cc:235
+#: editor_audio_import.cc:234
 msgid "Embed all without questions"
 msgstr ""
 
-#: editor_audio_import.cc:240
+#: editor_audio_import.cc:239
 #, fuzzy
 msgid "Embed it anyway"
 msgstr "Embutir mesmo assim"
 
-#: editor_audio_import.cc:243
+#: editor_audio_import.cc:242
 #, fuzzy
 msgid ""
 "%1\n"
@@ -3484,75 +3471,63 @@ msgid ""
 msgstr ""
 "A freqüência de áudio deste arquivo não corresponde à freqüência da sessão!"
 
-#: editor_audio_import.cc:276
+#: editor_audio_import.cc:275
 msgid "could not open %1"
 msgstr "não foi possível abrir %1"
 
-#: editor_audio_import.cc:321
+#: editor_audio_import.cc:320
 #, fuzzy
 msgid "insert sndfile"
 msgstr "Inserir arquivo de áudio externo"
 
 #. stuff for the verbose canvas cursor
-#: editor_canvas.cc:117
+#: editor_canvas.cc:118
 msgid "VerboseCanvasCursor"
 msgstr ""
 
-#: editor_canvas.cc:285
-msgid "Start a new session\n"
-msgstr "Iniciar uma nova sessão\n"
-
-#: editor_canvas.cc:285
-msgid "via Session menu"
-msgstr "via menu de Sessão"
-
-#: editor_canvas.cc:288
-msgid "FirstActionMessage"
-msgstr ""
-
-#: editor_edit_groups.cc:52 mixer_ui.cc:732
+#: editor_edit_groups.cc:53 mixer_ui.cc:736
 #, fuzzy
 msgid "Activate All"
 msgstr "Ativar"
 
-#: editor_edit_groups.cc:53 mixer_ui.cc:733
+#: editor_edit_groups.cc:54 mixer_ui.cc:737
 #, fuzzy
 msgid "Disable All"
 msgstr "Desconectar"
 
-#: editor_edit_groups.cc:55 mixer_ui.cc:735
+#: editor_edit_groups.cc:56 mixer_ui.cc:739
 #, fuzzy
 msgid "Add group"
 msgstr "Sem grupo"
 
-#: editor_edit_groups.cc:225 mixer_ui.cc:964
+#: editor_edit_groups.cc:229 mixer_ui.cc:970
 #, fuzzy
 msgid "unnamed"
 msgstr "Renomear"
 
-#: editor_edit_groups.cc:252 mixer_ui.cc:830
+#: editor_edit_groups.cc:258 mixer_ui.cc:834
 msgid "-all-"
 msgstr "-tudo-"
 
-#: editor_export_audio.cc:64
+#: editor_export_audio.cc:65
 msgid ""
 "There is no selection to export.\n"
 "\n"
 "Select a selection using the range mouse mode"
 msgstr ""
 
-#: editor_export_audio.cc:109
+#: editor_export_audio.cc:110
 msgid ""
 "There are no ranges to export.\n"
 "\n"
 "Create 1 or more ranges by dragging the mouse in the range bar"
 msgstr ""
 
-#: editor_imageframe.cc:624 editor_imageframe.cc:654
+#: editor_imageframe.cc:625 editor_imageframe.cc:655
 msgid "programming error: no ImageFrameView selected"
 msgstr ""
 
-#: editor_imageframe.cc:847 editor_imageframe.cc:869
+#: editor_imageframe.cc:848 editor_imageframe.cc:870
 msgid "programming error: no MarkerView selected"
 msgstr ""
 
@@ -3561,141 +3536,141 @@ msgstr ""
 msgid "mute region"
 msgstr "mutar esta região"
 
-#: editor_keys.cc:45
+#: editor_keys.cc:46
 #, fuzzy
 msgid "keyboard selection"
 msgstr "Separar Seleção"
 
-#: editor_markers.cc:291 editor_ops.cc:1227 editor_ops.cc:1240
-#: editor_ops.cc:1258 location_ui.cc:773
+#: editor_markers.cc:292 editor_ops.cc:1290 editor_ops.cc:1303
+#: editor_ops.cc:1321 location_ui.cc:774
 msgid "add marker"
 msgstr "adicionar marca"
 
-#: editor_markers.cc:306 editor_markers.cc:379 editor_markers.cc:551
-#: editor_markers.cc:569 editor_markers.cc:588 editor_markers.cc:607
-#: editor_markers.cc:637 editor_markers.cc:665 editor_markers.cc:693
-#: editor_markers.cc:731 editor_markers.cc:758 editor_markers.cc:781
-#: editor_markers.cc:800 editor_mouse.cc:1994 editor_mouse.cc:4237
+#: editor_markers.cc:307 editor_markers.cc:380 editor_markers.cc:552
+#: editor_markers.cc:570 editor_markers.cc:589 editor_markers.cc:608
+#: editor_markers.cc:638 editor_markers.cc:666 editor_markers.cc:694
+#: editor_markers.cc:732 editor_markers.cc:759 editor_markers.cc:782
+#: editor_markers.cc:801 editor_mouse.cc:2015 editor_mouse.cc:4275
 msgid "programming error: marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_markers.cc:330 location_ui.cc:655
+#: editor_markers.cc:331 location_ui.cc:656
 msgid "remove marker"
 msgstr "remover marca"
 
-#: editor_markers.cc:457
+#: editor_markers.cc:458
 #, fuzzy
 msgid "Locate to Mark"
 msgstr "Ir para"
 
-#: editor_markers.cc:458
+#: editor_markers.cc:459
 #, fuzzy
 msgid "Play from Mark"
 msgstr "Reproduzir do início"
 
-#: editor_markers.cc:459
+#: editor_markers.cc:460
 #, fuzzy
 msgid "Set Mark from Playhead"
 msgstr "Marcar aqui"
 
-#: editor_markers.cc:463
+#: editor_markers.cc:464
 #, fuzzy
 msgid "Rename Mark"
 msgstr "Renomear"
 
-#: editor_markers.cc:464
+#: editor_markers.cc:465
 #, fuzzy
 msgid "Hide Mark"
 msgstr "ocultar esta trilha"
 
-#: editor_markers.cc:465
+#: editor_markers.cc:466
 #, fuzzy
 msgid "Remove Mark"
 msgstr "Remover Marca"
 
-#: editor_markers.cc:478 editor_markers.cc:534
+#: editor_markers.cc:479 editor_markers.cc:535
 #, fuzzy
 msgid "Locate to Range Mark"
 msgstr "Marcas de Localização"
 
-#: editor_markers.cc:479 editor_markers.cc:535
+#: editor_markers.cc:480 editor_markers.cc:536
 #, fuzzy
 msgid "Play from Range Mark"
 msgstr "Reproduzir intervalo"
 
-#: editor_markers.cc:480
+#: editor_markers.cc:481
 #, fuzzy
 msgid "Loop Range"
 msgstr "Loop no intervalo"
 
-#: editor_markers.cc:481 editor_markers.cc:536
+#: editor_markers.cc:482 editor_markers.cc:537
 #, fuzzy
 msgid "Set Range Mark from Playhead"
 msgstr "Marcar aqui"
 
-#: editor_markers.cc:482 editor_markers.cc:537
+#: editor_markers.cc:483 editor_markers.cc:538
 #, fuzzy
 msgid "Set Range from Range Selection"
 msgstr "Reproduzir seleção"
 
-#: editor_markers.cc:486
+#: editor_markers.cc:487
 #, fuzzy
 msgid "Rename Range"
 msgstr "Renomear"
 
-#: editor_markers.cc:487 editor_markers.cc:539
+#: editor_markers.cc:488 editor_markers.cc:540
 #, fuzzy
 msgid "Hide Range"
 msgstr "Adicionar Novo Intervalo"
 
-#: editor_markers.cc:488
+#: editor_markers.cc:489
 #, fuzzy
 msgid "Remove Range"
 msgstr "Remover Campo"
 
-#: editor_markers.cc:492 editor_markers.cc:541
+#: editor_markers.cc:493 editor_markers.cc:542
 #, fuzzy
 msgid "Separate Regions in Range"
 msgstr "Nova região a partir da intervalo"
 
-#: editor_markers.cc:493 editor_markers.cc:542
+#: editor_markers.cc:494 editor_markers.cc:543
 #, fuzzy
 msgid "Select All in Range"
 msgstr "Selecionar tudo na trilha"
 
-#: editor_markers.cc:519
+#: editor_markers.cc:520
 msgid "Set Loop Range"
 msgstr "Marcar um intervalo de loop"
 
-#: editor_markers.cc:520
+#: editor_markers.cc:521
 msgid "Set Punch Range"
 msgstr "Fazer intervalo de inserção"
 
-#: editor_markers.cc:814
+#: editor_markers.cc:815
 #, fuzzy
 msgid "New Name:"
 msgstr "novo nome: "
 
-#: editor_markers.cc:817
+#: editor_markers.cc:818
 msgid "ardour: rename mark"
 msgstr "ardour: renomear marca"
 
-#: editor_markers.cc:819
+#: editor_markers.cc:820
 #, fuzzy
 msgid "ardour: rename range"
 msgstr "ardour: renomear região"
 
-#: editor_markers.cc:839
+#: editor_markers.cc:840
 #, fuzzy
 msgid "rename marker"
 msgstr "remover marca"
 
-#: editor_markers.cc:864
+#: editor_markers.cc:865
 #, fuzzy
 msgid "set loop range"
 msgstr "selecionar intervalo de zoom"
 
-#: editor_markers.cc:890
+#: editor_markers.cc:891
 #, fuzzy
 msgid "set punch range"
 msgstr "Selecionar intervalo atual"
@@ -3704,418 +3679,424 @@ msgstr "Selecionar intervalo atual"
 msgid "Editor::event_frame() used on unhandled event type %1"
 msgstr ""
 
-#: editor_mouse.cc:1589
+#: editor_mouse.cc:313
+#, fuzzy
+msgid "select on click"
+msgstr "Usar com metrônomo"
+
+#: editor_mouse.cc:1590
 msgid "programming error: start_grab called without drag item"
 msgstr ""
 
-#: editor_mouse.cc:1793
+#: editor_mouse.cc:1814
 #, fuzzy
 msgid "change fade in length"
 msgstr "fade in na edição"
 
-#: editor_mouse.cc:1811
+#: editor_mouse.cc:1832
 msgid "programming error: fade out canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:1885
+#: editor_mouse.cc:1906
 #, fuzzy
 msgid "change fade out length"
 msgstr "fade out na edição"
 
-#: editor_mouse.cc:1904
+#: editor_mouse.cc:1925
 msgid "programming error: cursor canvas item has no cursor data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2119
+#: editor_mouse.cc:2142
 #, fuzzy
 msgid "move marker"
 msgstr "remover marca"
 
-#: editor_mouse.cc:2142 editor_mouse.cc:2173 editor_tempodisplay.cc:461
+#: editor_mouse.cc:2165 editor_mouse.cc:2196 editor_tempodisplay.cc:459
 msgid ""
 "programming error: meter marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2241
+#: editor_mouse.cc:2264
 #, fuzzy
 msgid "copy meter mark"
 msgstr "remover marca"
 
-#: editor_mouse.cc:2251
+#: editor_mouse.cc:2274
 #, fuzzy
 msgid "move meter mark"
 msgstr "remover marca"
 
-#: editor_mouse.cc:2266 editor_mouse.cc:2299 editor_tempodisplay.cc:327
-#: editor_tempodisplay.cc:411 editor_tempodisplay.cc:430
+#: editor_mouse.cc:2289 editor_mouse.cc:2322 editor_tempodisplay.cc:331
+#: editor_tempodisplay.cc:409 editor_tempodisplay.cc:428
 msgid ""
 "programming error: tempo marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2271 editor_mouse.cc:2304 editor_tempodisplay.cc:332
-#: editor_tempodisplay.cc:416
+#: editor_mouse.cc:2294 editor_mouse.cc:2327 editor_tempodisplay.cc:336
+#: editor_tempodisplay.cc:414
 msgid "programming error: marker for tempo is not a tempo marker!"
 msgstr ""
 
-#: editor_mouse.cc:2371
+#: editor_mouse.cc:2394
 #, fuzzy
 msgid "copy tempo mark"
 msgstr "remover marca"
 
-#: editor_mouse.cc:2381
+#: editor_mouse.cc:2404
 #, fuzzy
 msgid "move tempo mark"
 msgstr "remover marca"
 
-#: editor_mouse.cc:2395 editor_mouse.cc:2414 editor_mouse.cc:2427
+#: editor_mouse.cc:2418 editor_mouse.cc:2437 editor_mouse.cc:2450
 msgid ""
 "programming error: control point canvas item has no control point object "
 "pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2525
+#: editor_mouse.cc:2555
 msgid "programming error: line canvas item has no line pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2634
+#: editor_mouse.cc:2664
 #, fuzzy
 msgid "move region(s)"
 msgstr "inverter horizontalmente as regiões"
 
-#. this is committed in the grab finished callback.
-#: editor_mouse.cc:2646
-msgid "Drag region copy"
-msgstr ""
-
-#: editor_mouse.cc:2758
+#: editor_mouse.cc:2727
 #, fuzzy
 msgid "Drag region brush"
 msgstr "normalizar região"
 
+#. don't copy again
+#. this is committed in the grab finished callback.
+#: editor_mouse.cc:2751
+msgid "Drag region copy"
+msgstr ""
+
 #. A selection grab currently creates two undo/redo operations, one for
 #. creating the new region and another for moving it.
 #.
-#: editor_mouse.cc:3574
+#: editor_mouse.cc:3609
 #, fuzzy
 msgid "selection grab"
 msgstr "Seleção"
 
-#: editor_mouse.cc:3615
+#: editor_mouse.cc:3650
 #, fuzzy
 msgid "cancel selection"
 msgstr "Reproduzir seleção"
 
-#: editor_mouse.cc:3722
+#: editor_mouse.cc:3760
 #, fuzzy
 msgid "range selection"
 msgstr "Reproduzir seleção"
 
-#: editor_mouse.cc:3738
+#: editor_mouse.cc:3776
 #, fuzzy
 msgid "trim selection start"
 msgstr "Desde a localização"
 
-#: editor_mouse.cc:3754
+#: editor_mouse.cc:3792
 #, fuzzy
 msgid "trim selection end"
 msgstr "Desde a localização"
 
-#: editor_mouse.cc:3771
+#: editor_mouse.cc:3809
 #, fuzzy
 msgid "move selection"
 msgstr "Saltar Seleção"
 
-#: editor_mouse.cc:4157
+#: editor_mouse.cc:4195
 #, fuzzy
 msgid "Start point trim"
 msgstr "Do início ao cursor de edição"
 
-#: editor_mouse.cc:4185
+#: editor_mouse.cc:4223
 msgid "End point trim"
 msgstr ""
 
-#: editor_mouse.cc:4224
+#: editor_mouse.cc:4262
 msgid "trimmed region"
 msgstr "região aparado"
 
-#: editor_mouse.cc:4363
+#: editor_mouse.cc:4400
 #, fuzzy
 msgid "new range marker"
 msgstr "adicionar marca de intervalo"
 
-#: editor_mouse.cc:4578
+#: editor_mouse.cc:4642
 #, fuzzy
 msgid "select regions"
 msgstr "Loop região selecionada"
 
-#: editor_mouse.cc:4607
+#: editor_mouse.cc:4671
 msgid "Name for region:"
 msgstr "Nome para a região:"
 
-#: editor_mouse.cc:4671
+#: editor_mouse.cc:4735
 #, fuzzy
 msgid "timestretch"
 msgstr "ardour: esticar no tempo"
 
-#: editor_ops.cc:132
+#: editor_ops.cc:195
 #, fuzzy
 msgid "split"
 msgstr "Separar"
 
-#: editor_ops.cc:168
+#: editor_ops.cc:231
 #, fuzzy
 msgid "remove region"
 msgstr "inverter horizontalmente as regiões"
 
-#: editor_ops.cc:187
+#: editor_ops.cc:250
 msgid ""
 " This is destructive, will possibly delete audio files\n"
 "It cannot be undone\n"
 "Do you really want to destroy %1 ?"
 msgstr ""
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "these regions"
 msgstr "inverter horizontalmente as regiões"
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "this region"
 msgstr "mutar esta região"
 
-#: editor_ops.cc:193 editor_ops.cc:3229 route_ui.cc:700
-#: visual_time_axis.cc:277
+#: editor_ops.cc:256 editor_ops.cc:3318 route_ui.cc:707
+#: visual_time_axis.cc:278
 msgid "No, do nothing."
 msgstr "Não, não faça nada."
 
-#: editor_ops.cc:196
+#: editor_ops.cc:259
 #, fuzzy
 msgid "Yes, destroy them."
 msgstr "Sim, remova definitivamente isto."
 
-#: editor_ops.cc:198 editor_ops.cc:3230
+#: editor_ops.cc:261 editor_ops.cc:3319
 msgid "Yes, destroy it."
 msgstr "Sim, remova definitivamente isto."
 
-#: editor_ops.cc:289 editor_ops.cc:317
+#: editor_ops.cc:352 editor_ops.cc:380
 #, fuzzy
 msgid "extend selection"
 msgstr "Separar Seleção"
 
-#: editor_ops.cc:333 editor_ops.cc:367 editor_ops.cc:411 editor_ops.cc:437
+#: editor_ops.cc:396 editor_ops.cc:430 editor_ops.cc:474 editor_ops.cc:500
 msgid "nudge forward"
 msgstr ""
 
-#: editor_ops.cc:501
+#: editor_ops.cc:564
 msgid "build_region_boundary_cache called with snap_type = %1"
 msgstr ""
 
-#: editor_ops.cc:1354
+#: editor_ops.cc:1420
 #, fuzzy
 msgid "select all within"
 msgstr "Selecionar Tudo"
 
-#: editor_ops.cc:1380
+#: editor_ops.cc:1452
 #, fuzzy
 msgid "set selection from region"
 msgstr "Nova região a partir da seleção"
 
-#: editor_ops.cc:1413
+#: editor_ops.cc:1485
 #, fuzzy
 msgid "set selection from range"
 msgstr "Nova região a partir da seleção"
 
-#: editor_ops.cc:1443
+#: editor_ops.cc:1515
 #, fuzzy
 msgid "select all from range"
 msgstr "selecionar intervalo de zoom"
 
-#: editor_ops.cc:1465
+#: editor_ops.cc:1537
 #, fuzzy
 msgid "select all from punch"
 msgstr "Selecionar Tudo"
 
-#: editor_ops.cc:1487
+#: editor_ops.cc:1559
 #, fuzzy
 msgid "select all from loop"
 msgstr "Selecionar Tudo"
 
-#: editor_ops.cc:1501
+#: editor_ops.cc:1573
 #, fuzzy
 msgid "select all after cursor"
 msgstr "Colar à cursor de edição"
 
-#: editor_ops.cc:1506
+#: editor_ops.cc:1578
 #, fuzzy
 msgid "select all before cursor"
 msgstr "Reproduzir a partir do cursor"
 
-#: editor_ops.cc:1536
+#: editor_ops.cc:1608
 #, fuzzy
 msgid "select all between cursors"
 msgstr "Reproduzir a partir do cursor"
 
-#: editor_ops.cc:1667
+#: editor_ops.cc:1739
 msgid "clear markers"
 msgstr "limpar marcas"
 
-#: editor_ops.cc:1679
+#: editor_ops.cc:1751
 msgid "clear ranges"
 msgstr "limpar intervalos"
 
-#: editor_ops.cc:1698
+#: editor_ops.cc:1770
 msgid "clear locations"
 msgstr "limpar localizações"
 
-#: editor_ops.cc:1748
+#: editor_ops.cc:1820
 #, fuzzy
 msgid "insert dragged region"
 msgstr "Inserir Região"
 
-#: editor_ops.cc:1784
+#: editor_ops.cc:1856
 #, fuzzy
 msgid "insert region"
 msgstr "Inserir Região"
 
-#: editor_ops.cc:1975 io_selector.cc:57 io_selector.cc:791
+#: editor_ops.cc:2047 io_selector.cc:58 io_selector.cc:792
 msgid "OK"
 msgstr "OK"
 
-#: editor_ops.cc:1982
+#: editor_ops.cc:2054
 msgid "ardour: rename region"
 msgstr "ardour: renomear região"
 
-#: editor_ops.cc:2205 editor_ops.cc:2254
+#: editor_ops.cc:2277 editor_ops.cc:2326
 #, fuzzy
 msgid "separate"
 msgstr "Separar Região"
 
-#: editor_ops.cc:2316
+#: editor_ops.cc:2388
 #, fuzzy
 msgid "trim to selection"
 msgstr "Desde a localização"
 
-#: editor_ops.cc:2356
+#: editor_ops.cc:2428
 msgid "region fill"
 msgstr ""
 
-#: editor_ops.cc:2415
+#: editor_ops.cc:2487
 #, fuzzy
 msgid "fill selection"
 msgstr "Reproduzir seleção continuamente"
 
-#: editor_ops.cc:2436
+#: editor_ops.cc:2508
 msgid "Programming error. that region doesn't cover that position"
 msgstr ""
 
-#: editor_ops.cc:2439
+#: editor_ops.cc:2511
 #, fuzzy
 msgid "set region sync position"
 msgstr "Regiões/posição"
 
-#: editor_ops.cc:2454
+#: editor_ops.cc:2526
 msgid "Place the edit cursor at the desired sync point"
 msgstr "Coloque o cursor de edição no ponto de sincronia desejado"
 
-#: editor_ops.cc:2459
+#: editor_ops.cc:2531
 #, fuzzy
 msgid "set sync from edit cursor"
 msgstr "Reproduzir a partir do cursor"
 
-#: editor_ops.cc:2471
+#: editor_ops.cc:2543
 #, fuzzy
 msgid "remove sync"
 msgstr "Remover ponto de sincronia"
 
-#: editor_ops.cc:2485
+#: editor_ops.cc:2557
 #, fuzzy
 msgid "naturalize"
 msgstr "Normalizar"
 
-#: editor_ops.cc:2549
+#: editor_ops.cc:2621
 #, fuzzy
 msgid "align selection (relative)"
 msgstr "Alinhamento Relativo"
 
-#: editor_ops.cc:2577
+#: editor_ops.cc:2649
 #, fuzzy
 msgid "align selection"
 msgstr "Saltar Seleção"
 
-#: editor_ops.cc:2589
+#: editor_ops.cc:2661
 #, fuzzy
 msgid "align region"
 msgstr "normalizar região"
 
-#: editor_ops.cc:2636 editor_ops.cc:2661
+#: editor_ops.cc:2708 editor_ops.cc:2733
 #, fuzzy
 msgid "trim to edit"
 msgstr "Do início ao cursor de edição"
 
-#: editor_ops.cc:2712
+#: editor_ops.cc:2784
 #, fuzzy
 msgid "ardour: freeze"
 msgstr "ardour: renomear região"
 
-#: editor_ops.cc:2717
+#: editor_ops.cc:2789
 #, fuzzy
 msgid "Cancel Freeze"
 msgstr "Cancelar"
 
-#: editor_ops.cc:2754
+#: editor_ops.cc:2826
 #, fuzzy
 msgid "bounce range"
 msgstr "intervalo"
 
-#: editor_ops.cc:2807
+#: editor_ops.cc:2879
 msgid "cut"
 msgstr "cortar"
 
-#: editor_ops.cc:2810
+#: editor_ops.cc:2882
 msgid "copy"
 msgstr "copiar"
 
-#: editor_ops.cc:2823
+#: editor_ops.cc:2895
 msgid " objects"
 msgstr "objetos"
 
-#: editor_ops.cc:2849
+#: editor_ops.cc:2921
 msgid " range"
 msgstr "intervalo"
 
-#: editor_ops.cc:3006
+#: editor_ops.cc:3078
 #, fuzzy
 msgid "paste"
 msgstr "Colar"
 
-#: editor_ops.cc:3044
+#: editor_ops.cc:3116
 #, fuzzy
 msgid "paste chunk"
 msgstr "Criar trecho"
 
 #. clear (below) will clear the argument list
-#: editor_ops.cc:3085
+#: editor_ops.cc:3157
 #, fuzzy
 msgid "duplicate region"
 msgstr "Loop região selecionada"
 
-#: editor_ops.cc:3130
+#: editor_ops.cc:3202
 #, fuzzy
 msgid "duplicate selection"
 msgstr "Saltar Seleção"
 
-#: editor_ops.cc:3170
+#: editor_ops.cc:3259
 #, fuzzy
 msgid "clear playlist"
 msgstr "Nome para a imagem capturada"
 
-#: editor_ops.cc:3199
+#: editor_ops.cc:3288
 #, fuzzy
 msgid "nudge track"
 msgstr "Ocultar esta trilha"
 
-#: editor_ops.cc:3226
+#: editor_ops.cc:3315
 msgid ""
 "Do you really want to destroy the last capture?\n"
 "(This is destructive and cannot be undone)"
@@ -4123,163 +4104,160 @@ msgstr ""
 "Você quer realmente remover definitivamente a última captura?\n"
 "(Isto não poderá ser desfeito)"
 
-#: editor_ops.cc:3254
+#: editor_ops.cc:3343
 #, fuzzy
 msgid "normalize"
 msgstr "Normalizar"
 
-#: editor_ops.cc:3301
+#: editor_ops.cc:3390
 msgid "reverse regions"
 msgstr "inverter horizontalmente as regiões"
 
-#: editor_region_list.cc:93 editor_region_list.cc:98 editor_region_list.cc:101
-#: location_ui.cc:55
+#: editor_region_list.cc:98 editor_region_list.cc:103
+#: editor_region_list.cc:106 location_ui.cc:56
 msgid "Hidden"
 msgstr "Oculto"
 
 #. added a new fresh one at the end
-#: editor_route_list.cc:101 editor_route_list.cc:102 editor_route_list.cc:246
+#: editor_route_list.cc:102 editor_route_list.cc:103 editor_route_list.cc:247
 msgid "editor"
 msgstr "editor"
 
-#: editor_route_list.cc:309 mixer_ui.cc:695
+#: editor_route_list.cc:310 mixer_ui.cc:699
 msgid "Show All"
 msgstr "Mostrar Tudo"
 
-#: editor_route_list.cc:310 mixer_ui.cc:696
+#: editor_route_list.cc:311 mixer_ui.cc:700
 msgid "Hide All"
 msgstr "Ocultar Tudo"
 
-#: editor_route_list.cc:311 mixer_ui.cc:697
+#: editor_route_list.cc:312 mixer_ui.cc:701
 #, fuzzy
 msgid "Show All Audio Tracks"
 msgstr "Mostrar todos os barramentos de áudio"
 
-#: editor_route_list.cc:312 mixer_ui.cc:698
+#: editor_route_list.cc:313 mixer_ui.cc:702
 #, fuzzy
 msgid "Hide All Audio Tracks"
 msgstr "Ocultar todos os barramentos de áudio"
 
-#: editor_route_list.cc:313 mixer_ui.cc:699
+#: editor_route_list.cc:314 mixer_ui.cc:703
 #, fuzzy
 msgid "Show All Audio Busses"
 msgstr "Mostrar todos os barramentos de áudio"
 
-#: editor_route_list.cc:314 mixer_ui.cc:700
+#: editor_route_list.cc:315 mixer_ui.cc:704
 #, fuzzy
 msgid "Hide All Audio Busses"
 msgstr "Ocultar todos os barramentos de áudio"
 
-#: editor_rulers.cc:311
+#: editor_rulers.cc:312
 msgid "New location marker"
 msgstr "Nova marca de localização"
 
-#: editor_rulers.cc:312
+#: editor_rulers.cc:313
 msgid "Clear all locations"
 msgstr "Apagar todas as localizações"
 
 #. ruler_items.push_back (MenuElem (_("New Range")));
-#: editor_rulers.cc:317
+#: editor_rulers.cc:318
 msgid "Clear all ranges"
 msgstr "Remover todos os intervalos"
 
-#: editor_rulers.cc:326
+#: editor_rulers.cc:327
 msgid "New Tempo"
 msgstr "Novo Andamento"
 
-#: editor_rulers.cc:327
+#: editor_rulers.cc:328
 msgid "Clear tempo"
 msgstr "Apagar andamento"
 
-#: editor_rulers.cc:332
+#: editor_rulers.cc:333
 msgid "New Meter"
 msgstr "Novo Meter"
 
-#: editor_rulers.cc:333
+#: editor_rulers.cc:334
 msgid "Clear meter"
 msgstr "Apagar meter"
 
-#: editor_rulers.cc:341
+#: editor_rulers.cc:342
 msgid "Min:Secs"
 msgstr "Min:Segs"
 
-#: editor_selection_list.cc:110
+#: editor_selection_list.cc:108
 #, fuzzy
 msgid "Name for Chunk:"
 msgstr "nome para o trecho"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 #, fuzzy
 msgid "Create Chunk"
 msgstr "Criar trecho"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 msgid "Forget it"
 msgstr "Esqueça isto"
 
-#: editor_tempodisplay.cc:249 editor_tempodisplay.cc:289
+#: editor_tempodisplay.cc:253 editor_tempodisplay.cc:293
 msgid "add"
 msgstr "adicionar"
 
-#: editor_tempodisplay.cc:271
+#: editor_tempodisplay.cc:275
 #, fuzzy
 msgid "add tempo mark"
 msgstr "adicionar marca de intervalo"
 
-#: editor_tempodisplay.cc:311
+#: editor_tempodisplay.cc:315
 #, fuzzy
 msgid "add meter mark"
 msgstr "adicionar marca de intervalo"
 
-#: editor_tempodisplay.cc:344 editor_tempodisplay.cc:375
+#: editor_tempodisplay.cc:348 editor_tempodisplay.cc:376
 msgid "done"
 msgstr "pronto"
 
-#: editor_tempodisplay.cc:365 editor_tempodisplay.cc:396
+#: editor_tempodisplay.cc:366 editor_tempodisplay.cc:394
 msgid "replace tempo mark"
 msgstr ""
 
-#: editor_tempodisplay.cc:435 editor_tempodisplay.cc:466
+#: editor_tempodisplay.cc:433 editor_tempodisplay.cc:464
 msgid "programming error: marker for meter is not a meter marker!"
 msgstr ""
 
-#: editor_tempodisplay.cc:445 editor_tempodisplay.cc:478
+#: editor_tempodisplay.cc:443 editor_tempodisplay.cc:476
 #, fuzzy
 msgid "remove tempo mark"
 msgstr "remover marca"
 
-#: editor_timefx.cc:50
+#: editor_timefx.cc:51
 msgid "Quick but Ugly"
 msgstr "Rápido mas Feio"
 
-#: editor_timefx.cc:51
+#: editor_timefx.cc:52
 msgid "Skip Anti-aliasing"
 msgstr "Pular Anti-aliasing"
 
-#: editor_timefx.cc:53
-msgid "Stretch/Shrink it"
-msgstr "Esticar/Encolher isto"
-
-#: editor_timefx.cc:57
+#: editor_timefx.cc:56
 msgid "ardour: timestretch"
 msgstr "ardour: esticar no tempo"
 
-#: editor_timefx.cc:58
+#: editor_timefx.cc:57
 msgid "TimeStretchDialog"
 msgstr "Diálogo esticar no tempo"
 
-#: editor_timefx.cc:80 editor_timefx.cc:81 editor_timefx.cc:82
-#: editor_timefx.cc:83
+#: editor_timefx.cc:70
+msgid "Stretch/Shrink it"
+msgstr "Esticar/Encolher isto"
+
+#: editor_timefx.cc:73 editor_timefx.cc:74
 msgid "TimeStretchButton"
 msgstr "Botão esticar no tempo"
 
-#: editor_timefx.cc:84
+#: editor_timefx.cc:75
 msgid "TimeStretchProgress"
 msgstr "Progresso esticar no tempo"
 
-#. GTK2FIX
-#. current_timestretch->close ();
-#: editor_timefx.cc:153
+#: editor_timefx.cc:139
 msgid "timestretch cannot be started - thread creation error"
 msgstr ""
 
@@ -4413,7 +4391,7 @@ msgstr ""
 msgid "Export to File"
 msgstr "Exportar para CD"
 
-#: export_dialog.cc:113 option_editor.cc:82 option_editor.cc:83
+#: export_dialog.cc:113 option_editor.cc:83 option_editor.cc:84
 msgid "Browse"
 msgstr "Localizar"
 
@@ -4429,7 +4407,8 @@ msgstr "ardour: exportar"
 msgid "ardour_export"
 msgstr ""
 
-#: export_dialog.cc:139 export_dialog.cc:155
+#: export_dialog.cc:139 export_dialog.cc:155 mixer_strip.cc:124
+#: mixer_strip.cc:767
 #, fuzzy
 msgid "Output"
 msgstr "Saídas"
@@ -4468,147 +4447,75 @@ msgstr ""
 msgid "File already exists, do you want to overwrite it?"
 msgstr ""
 
-#: export_dialog.cc:1159 export_range_markers_dialog.cc:154
+#: export_dialog.cc:1159 export_range_markers_dialog.cc:153
 msgid "Cannot write file in: "
 msgstr ""
 
 #. warning dialog
-#: export_range_markers_dialog.cc:136
+#: export_range_markers_dialog.cc:135
 msgid "Please enter a valid target directory."
 msgstr ""
 
-#: export_range_markers_dialog.cc:144
+#: export_range_markers_dialog.cc:143
 msgid ""
 "Please select an existing target directory. Files\n"
 "are not allowed!"
 msgstr ""
 
-#: gain_automation_time_axis.cc:61
+#: gain_automation_time_axis.cc:62
 #, fuzzy
 msgid "add gain automation event"
 msgstr "adicionar evento de automação para "
 
-#: gain_meter.cc:66
+#: gain_meter.cc:67
 msgid "cannot find images for fader slider"
 msgstr ""
 
-#: gain_meter.cc:73
+#: gain_meter.cc:74
 msgid "cannot find images for fader rail"
 msgstr ""
 
-#: gain_meter.cc:88
-msgid "dbFS"
-msgstr ""
-
-#: gain_meter.cc:89 gain_meter.cc:143 gain_meter.cc:704
-msgid "pre"
-msgstr ""
-
-#: gain_meter.cc:139 gain_meter.cc:700
-#, fuzzy
-msgid "input"
-msgstr "%1 entrada"
-
-#: gain_meter.cc:147 gain_meter.cc:708
-#, fuzzy
-msgid "post"
-msgstr "porta"
-
-#. TRANSLATORS: this string should be longest of the strings
-#. used to describe meter points. In english, its "input".
-#.
-#: gain_meter.cc:155
-msgid "tupni"
-msgstr ""
-
-#: gain_meter.cc:174 gain_meter.cc:458 gain_meter.cc:480 gain_meter.cc:525
+#: gain_meter.cc:130 gain_meter.cc:339 gain_meter.cc:494 gain_meter.cc:539
 #, fuzzy
 msgid "-inf"
 msgstr "entrada"
 
-#: glade/new_session_dialog.glade.h:1
+#: gain_meter.cc:140
 #, fuzzy
-msgid "<b>Advanced</b>"
-msgstr "Avançado ..."
-
-#: glade/new_session_dialog.glade.h:2
-msgid "<b>Input</b>"
-msgstr ""
+msgid "Fader automation mode"
+msgstr "modo automático de pan"
 
-#: glade/new_session_dialog.glade.h:3
+#: gain_meter.cc:141
 #, fuzzy
-msgid "<b>Output</b>"
-msgstr "Saídas"
+msgid "Fader automation type"
+msgstr "Tipo do pan automático"
 
-#: glade/new_session_dialog.glade.h:4
-#, fuzzy
-msgid "Automatically connect inputs"
-msgstr "conectar automaticamente entradas das trilhas com as portas físicas"
+#. XXX it might different in different languages
+#: gain_meter.cc:182 gain_meter.cc:817 panner_ui.cc:99 panner_ui.cc:807
+msgid "Abs"
+msgstr ""
 
-#: glade/new_session_dialog.glade.h:5
+#: gain_meter.cc:472
 #, fuzzy
-msgid "Automatically connect outputs"
-msgstr "conectar manualmente saídas das trilhas"
+msgid "-Inf"
+msgstr "entrada"
 
-#: glade/new_session_dialog.glade.h:6
+#: gain_meter.cc:781 mixer_strip.cc:770 panner_ui.cc:771
 #, fuzzy
-msgid "Channel Count"
-msgstr "Cancelar importação"
+msgid "O"
+msgstr "OU"
 
-#: glade/new_session_dialog.glade.h:7
-msgid "Connect to Master Bus"
+#: gain_meter.cc:784 panner_ui.cc:774
+msgid "P"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:8
-msgid "Connect to physical outputs"
+#: gain_meter.cc:787 panner_ui.cc:777
+msgid "T"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:9
-#, fuzzy
-msgid "Create Control Bus"
-msgstr "Controle de Saídas"
-
-#: glade/new_session_dialog.glade.h:10
-#, fuzzy
-msgid "Create Master Bus"
-msgstr "usar saída master"
-
-#: glade/new_session_dialog.glade.h:11
-#, fuzzy
-msgid "New Session"
-msgstr "Sessão"
-
-#
-#: glade/new_session_dialog.glade.h:12
-#, fuzzy
-msgid "Open Recent Session"
-msgstr "abrir sessão"
-
-#
-#: glade/new_session_dialog.glade.h:13
-#, fuzzy
-msgid "Open Session"
-msgstr "abrir sessão"
-
-#: glade/new_session_dialog.glade.h:14
-#, fuzzy
-msgid "Port limit"
-msgstr "Esqueça isto"
-
-#: glade/new_session_dialog.glade.h:15
-#, fuzzy
-msgid "Select a File"
-msgstr "Selecionar Tudo"
-
-#: glade/new_session_dialog.glade.h:16
-#, fuzzy
-msgid "Select a Session"
-msgstr "Loop região selecionada"
-
-#: glade/new_session_dialog.glade.h:17
-#, fuzzy
-msgid "Track/Bus connection options"
-msgstr "Inspetador de Trilhas/Barramentos"
+#: gain_meter.cc:790 panner_ui.cc:780
+msgid "W"
+msgstr ""
 
 #: gtk-custom-ruler.c:126
 #, fuzzy
@@ -4655,236 +4562,236 @@ msgid "Draw current ruler position"
 msgstr ""
 
 #. end-of-file, other end closed or shutdown?
-#: imageframe_socket_handler.cc:126
+#: imageframe_socket_handler.cc:127
 msgid "Image Compositor Socket has been shutdown/closed"
 msgstr ""
 
-#: imageframe_time_axis.cc:287
+#: imageframe_time_axis.cc:286
 #, fuzzy
 msgid "0.5 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:288 marker_time_axis.cc:241
+#: imageframe_time_axis.cc:287 marker_time_axis.cc:242
 #, fuzzy
 msgid "1 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:289 marker_time_axis.cc:242
+#: imageframe_time_axis.cc:288 marker_time_axis.cc:243
 #, fuzzy
 msgid "1.5 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:290 marker_time_axis.cc:243
+#: imageframe_time_axis.cc:289 marker_time_axis.cc:244
 #, fuzzy
 msgid "2 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:291 marker_time_axis.cc:244
+#: imageframe_time_axis.cc:290 marker_time_axis.cc:245
 #, fuzzy
 msgid "2.5 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:292 marker_time_axis.cc:245
+#: imageframe_time_axis.cc:291 marker_time_axis.cc:246
 #, fuzzy
 msgid "3 seconds"
 msgstr "Segundos"
 
 #. duration_items.push_back(SeparatorElem()) ;
 #. duration_items.push_back(MenuElem (_("custom"), mem_fun(*this, &ImageFrameTimeAxis::set_marker_duration_custom))) ;
-#: imageframe_time_axis.cc:297 marker_time_axis.cc:250
+#: imageframe_time_axis.cc:296 marker_time_axis.cc:251
 #, fuzzy
 msgid "Duration (sec)"
 msgstr "normalizar região"
 
-#: imageframe_time_axis.cc:302
+#: imageframe_time_axis.cc:301
 #, fuzzy
 msgid "Remove Frame"
 msgstr "Remover Campo"
 
-#: imageframe_time_axis.cc:305
+#: imageframe_time_axis.cc:304
 #, fuzzy
 msgid "Image Frame"
 msgstr "Quadros"
 
-#: imageframe_time_axis.cc:306 marker_time_axis.cc:256
+#: imageframe_time_axis.cc:305 marker_time_axis.cc:257
 #, fuzzy
 msgid "Rename Track"
 msgstr "Renomear"
 
-#: io_selector.cc:59 io_selector.cc:793
+#: io_selector.cc:60 io_selector.cc:794
 msgid "Rescan"
 msgstr "Rescanear"
 
-#: io_selector.cc:67
+#: io_selector.cc:68
 msgid "%1 input"
 msgstr "%1 entrada"
 
-#: io_selector.cc:69
+#: io_selector.cc:70
 msgid "%1 output"
 msgstr "%1 saída"
 
-#: io_selector.cc:141 route_params_ui.cc:106
+#: io_selector.cc:142 route_params_ui.cc:107
 msgid "Inputs"
 msgstr "Entradas"
 
-#: io_selector.cc:141 route_params_ui.cc:107
+#: io_selector.cc:142 route_params_ui.cc:108
 msgid "Outputs"
 msgstr "Saídas"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Input"
 msgstr "adicionar entrada"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Output"
 msgstr "adicionar saída"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Input"
 msgstr "Remover ponto de sincronia"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Output"
 msgstr "# Saídas"
 
-#: io_selector.cc:144
+#: io_selector.cc:145
 #, fuzzy
 msgid "Disconnect All"
 msgstr "Desconectar"
 
-#: io_selector.cc:158
+#: io_selector.cc:159
 msgid "Available connections"
 msgstr "Conexões disponíveis"
 
-#: io_selector.cc:554 io_selector.cc:573
+#: io_selector.cc:555 io_selector.cc:574
 msgid "There are no more JACK ports available."
 msgstr ""
 
-#: io_selector.cc:648 io_selector.cc:675 io_selector.cc:728
+#: io_selector.cc:649 io_selector.cc:676 io_selector.cc:729
 msgid "port"
 msgstr "porta"
 
-#: io_selector.cc:797
+#: io_selector.cc:798
 msgid "ardour: "
 msgstr ""
 
-#: keyboard.cc:297
+#: keyboard.cc:299
 msgid "KeyboardTarget: keyname \"%1\" is unknown."
 msgstr "KeyboardTarget: nome da tecla \"%1\" é desconhecido."
 
-#: keyboard.cc:523
+#: keyboard.cc:525
 msgid ""
 "Your system is completely broken - NumLock uses \"%1\"as its modifier. This "
 "is madness - see the man page for xmodmap to find out how to fix this."
 msgstr ""
 
-#: keyboard.cc:531
+#: keyboard.cc:533
 msgid ""
 "Your system generates \"%1\" when the NumLock key is pressed. This can cause "
 "problems when editing so Ardour will use %2 to mean Meta rather than %1"
 msgstr ""
 
-#: keyboard.cc:592
+#: keyboard.cc:594
 msgid "You have %1 keys bound to \"mod1\""
 msgstr "Você já tem %1 atalho de teclado para \"mod1\""
 
-#: keyboard.cc:607
+#: keyboard.cc:609
 msgid "You have %1 keys bound to \"mod2\""
 msgstr "Você já tem %1 atalho de teclado para \"mod2\""
 
-#: keyboard.cc:622
+#: keyboard.cc:624
 msgid "You have %1 keys bound to \"mod3\""
 msgstr "Você já tem %1 atalho de teclado para \"mod3\""
 
-#: keyboard.cc:637
+#: keyboard.cc:639
 msgid "You have %1 keys bound to \"mod4\""
 msgstr "Você já tem %1 atalho de teclado para \"mod4\""
 
-#: keyboard.cc:652
+#: keyboard.cc:654
 msgid "You have %1 keys bound to \"mod5\""
 msgstr "Você já tem %1 atalho de teclado para \"mod5\""
 
-#: location_ui.cc:47 location_ui.cc:50
+#: location_ui.cc:48 location_ui.cc:51
 msgid "Set"
 msgstr "Fazer"
 
-#: location_ui.cc:48 location_ui.cc:51
+#: location_ui.cc:49 location_ui.cc:52
 msgid "Go"
 msgstr "Ir"
 
-#: location_ui.cc:54
+#: location_ui.cc:55
 msgid "CD"
 msgstr "CD"
 
-#: location_ui.cc:57
+#: location_ui.cc:58
 msgid "SCMS"
 msgstr ""
 
-#: location_ui.cc:58
+#: location_ui.cc:59
 msgid "Pre-Emphasis"
 msgstr ""
 
-#: location_ui.cc:569
+#: location_ui.cc:570
 msgid "Add New Location"
 msgstr "Adicionar Nova Localização"
 
-#: location_ui.cc:570
+#: location_ui.cc:571
 msgid "Add New Range"
 msgstr "Adicionar Novo Intervalo"
 
-#: location_ui.cc:574
+#: location_ui.cc:575
 msgid "ardour: locations"
 msgstr "ardour: localizações"
 
-#: location_ui.cc:575
+#: location_ui.cc:576
 msgid "ardour_locations"
 msgstr ""
 
-#: location_ui.cc:603
+#: location_ui.cc:604
 #, fuzzy
 msgid "Location (CD Index) Markers"
 msgstr "Marcas de Localização"
 
-#: location_ui.cc:623
+#: location_ui.cc:624
 #, fuzzy
 msgid "Range (CD Track) Markers"
 msgstr "Marcas de Intervalos"
 
-#: location_ui.cc:789
+#: location_ui.cc:790
 msgid "add range marker"
 msgstr "adicionar marca de intervalo"
 
-#: main.cc:71
+#: main.cc:72
 msgid "ardour is killing itself for a clean exit\n"
 msgstr "o ardour está se matando para uma saída limpa\n"
 
-#: main.cc:80
+#: main.cc:81
 msgid "stopping user interface\n"
 msgstr "interrompendo a interface do usuário\n"
 
 #. XXX its doubtful that snprintf() is async-safe
-#: main.cc:99
+#: main.cc:100
 #, c-format
 msgid "%d(%d): received signal %d\n"
 msgstr ""
 
-#: main.cc:185
+#: main.cc:186
 msgid "cannot become new process group leader (%1)"
 msgstr ""
 
-#: main.cc:212
+#: main.cc:213
 msgid "cannot setup signal handling for %1"
 msgstr ""
 
-#: main.cc:223
+#: main.cc:224
 msgid "cannot set default signal mask (%1)"
 msgstr ""
 
-#: main.cc:253
+#: main.cc:254
 #, fuzzy
 msgid ""
 "Without a UI style file, ardour will look strange.\n"
@@ -4893,12 +4800,12 @@ msgstr ""
 "Sem um arquivo de estilo o ardour vai ficar meio esquisito.\n"
 "Por favor, configure a variável ambiente ARDOUR_UI_RC para um arquivo válido"
 
-#: main.cc:273
+#: main.cc:276
 #, fuzzy
 msgid "Ardour could not connect to JACK."
 msgstr "Não foi possível se conectar ao servidor JACK"
 
-#: main.cc:277
+#: main.cc:280
 #, fuzzy
 msgid ""
 "There are several possible reasons:\n"
@@ -4918,374 +4825,466 @@ msgstr ""
 "\n"
 "Por favor, considere essas razões, e talvez (re)inicie o JACK."
 
-#: main.cc:324
+#: main.cc:310
+msgid "could not load command line session \"%1\""
+msgstr "não foi possível carregar a sessão da linha de comando \"%1\""
+
+#. it wasn't new, but we require a new session
+#: main.cc:330
+msgid ""
+"\n"
+"\n"
+"A session named \"%1\" already exists.\n"
+"To avoid this message, start ardour as \"ardour %1"
+msgstr ""
+
+#: main.cc:341
+msgid ""
+"\n"
+"\n"
+"No session named \"%1\" exists.\n"
+"To create it from the command line, start ardour as \"ardour --new %1"
+msgstr ""
+
+#: main.cc:405
 msgid "Ardour/GTK "
 msgstr ""
 
-#: main.cc:326
+#: main.cc:407
 msgid ""
 "\n"
 "   (built using "
 msgstr ""
 
-#: main.cc:330
+#: main.cc:411
 #, fuzzy
 msgid " with libardour "
 msgstr " executando com libardour "
 
-#: main.cc:335
+#: main.cc:416
 msgid " and GCC version "
 msgstr ""
 
-#: main.cc:345
-msgid "Copyright (C) 1999-2005 Paul Davis"
+#: main.cc:426
+msgid "Copyright (C) 1999-2006 Paul Davis"
 msgstr ""
 
-#: main.cc:346
+#: main.cc:427
 msgid ""
 "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker"
 msgstr ""
 
-#: main.cc:348
+#: main.cc:429
 msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
 msgstr "Ardour não oferece ABSOLUTAMENTE NENHUMA GARANTIA"
 
-#: main.cc:349
+#: main.cc:430
 msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 msgstr ""
 
-#: main.cc:350
+#: main.cc:431
 msgid "This is free software, and you are welcome to redistribute it "
 msgstr "Isto é um Software Livre. Fique à vontade para redistribuí-lo "
 
-#: main.cc:351
+#: main.cc:432
 msgid "under certain conditions; see the source for copying conditions."
 msgstr "com algumas condições; veja o fonte para mais detalhes"
 
-#: main.cc:360
+#: main.cc:441
 msgid "could not create ARDOUR GUI"
 msgstr "não foi possível criar a INTERFACE ARDOUR"
 
-#: main.cc:378
+#: main.cc:459
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr "Não foi possível se conectar ao servidor JACK com \"%1\""
 
-#: main.cc:381
+#: main.cc:462
 msgid "could not initialize Ardour."
 msgstr "não foi possível iniciar o Ardour."
 
-#: main.cc:392
-msgid "could not load command line session \"%1\""
-msgstr "não foi possível carregar a sessão da linha de comando \"%1\""
+#: marker.cc:244
+#, fuzzy
+msgid "MarkerText"
+msgstr "Marcas"
 
-#. it wasn't new, but we require a new session
-#: main.cc:412
-msgid ""
-"\n"
-"\n"
-"A session named \"%1\" already exists.\n"
-"To avoid this message, start ardour as \"ardour %1"
-msgstr ""
-
-#: main.cc:423
-msgid ""
-"\n"
-"\n"
-"No session named \"%1\" exists.\n"
-"To create it from the command line, start ardour as \"ardour --new %1"
-msgstr ""
-
-#: marker.cc:244
-#, fuzzy
-msgid "MarkerText"
-msgstr "Marcas"
-
-#: marker_time_axis.cc:253
+#: marker_time_axis.cc:254
 msgid "Remove Marker"
 msgstr "Remover Marca"
 
-#: marker_time_axis.cc:255
+#: marker_time_axis.cc:256
 msgid "Marker"
 msgstr "Marca"
 
-#: meter_bridge.cc:77
+#: meter_bridge.cc:78
 msgid "ardour: meter bridge"
 msgstr "ardour: VU (medidor volumétrico)"
 
-#: meter_bridge.cc:78
+#: meter_bridge.cc:79
 msgid "ardour_meter_bridge"
 msgstr ""
 
-#: meter_bridge_strip.cc:79 meter_bridge_strip.cc:93
+#: meter_bridge_strip.cc:80 meter_bridge_strip.cc:94
 #, c-format
 msgid "# of %u-sample overs"
 msgstr ""
 
-#: meter_bridge_strip.cc:221
+#: meter_bridge_strip.cc:222
 #, fuzzy
 msgid "New Name for Meter:"
 msgstr "Novo nome para VU (medidor volumétrico)"
 
-#: mixer_strip.cc:85 mixer_strip.cc:437 region_editor.cc:46
-msgid "mute"
-msgstr "mudo"
-
-#: mixer_strip.cc:85 mixer_strip.cc:438
-msgid "solo"
-msgstr "solo"
-
-#: mixer_strip.cc:85 mixer_strip.cc:436
-msgid "RECORD"
-msgstr "GRAVAR"
+#: mixer_strip.cc:95 mixer_strip.cc:140 mixer_strip.cc:1227
+msgid "pre"
+msgstr ""
 
-#: mixer_strip.cc:96 mixer_strip.cc:441 mixer_strip.cc:1064
+#: mixer_strip.cc:96 mixer_strip.cc:822
 msgid "Comments"
 msgstr ""
 
-#: mixer_strip.cc:120 mixer_strip.cc:752
-msgid "INPUT"
-msgstr "ENTRADA"
-
-#: mixer_strip.cc:125 mixer_strip.cc:773
-msgid "OUTPUT"
-msgstr "SAÍDA"
-
-#: mixer_strip.cc:140
-msgid "Pan automation mode"
-msgstr "modo automático de pan"
+#: mixer_strip.cc:119
+#, fuzzy
+msgid "Input"
+msgstr "Entradas"
 
-#: mixer_strip.cc:141
-msgid "Gain automation mode"
-msgstr "modo automático de ganho"
+#: mixer_strip.cc:136 mixer_strip.cc:1223
+#, fuzzy
+msgid "input"
+msgstr "%1 entrada"
 
-#: mixer_strip.cc:143
-msgid "Pan automation type"
-msgstr "Tipo do pan automático"
+#: mixer_strip.cc:144 mixer_strip.cc:1231
+#, fuzzy
+msgid "post"
+msgstr "porta"
 
-#: mixer_strip.cc:144
-msgid "Gain automation type"
-msgstr "Tipo do ganho automático"
+#. TRANSLATORS: this string should be longest of the strings
+#. used to describe meter points. In english, its "input".
+#.
+#: mixer_strip.cc:152
+msgid "tupni"
+msgstr ""
 
-#: mixer_strip.cc:183 mixer_strip.cc:195 mixer_strip.cc:913
-msgid "trim"
-msgstr "cortar"
+#: mixer_strip.cc:207
+#, fuzzy
+msgid "Varispeed"
+msgstr "velocidade variável"
 
-#. XXX it might different in different languages
-#: mixer_strip.cc:184 mixer_strip.cc:196 mixer_strip.cc:917
-msgid "abs"
+#: mixer_strip.cc:233 mixer_strip.cc:836
+msgid "Click to Add/Edit Comments"
 msgstr ""
 
-#: mixer_strip.cc:203
-msgid "gain automation mode"
-msgstr "modo automático de ganho"
-
-#: mixer_strip.cc:204
-msgid "pan automation mode"
-msgstr "modo automático de pan"
+#: mixer_strip.cc:374
+msgid "unknown strip width \"%1\" in XML GUI information"
+msgstr ""
 
-#: mixer_strip.cc:205
-msgid "gain automation state"
-msgstr "estado do ganho automático"
+#: mixer_strip.cc:417
+#, fuzzy
+msgid "record"
+msgstr "Gravar"
 
-#: mixer_strip.cc:206
-msgid "pan automation state"
-msgstr "estado do pan automático"
+#: mixer_strip.cc:418 region_editor.cc:47
+msgid "mute"
+msgstr "mudo"
 
-#: mixer_strip.cc:223
-msgid "varispeed"
-msgstr "velocidade variável"
+#: mixer_strip.cc:419
+msgid "solo"
+msgstr "solo"
 
-#: mixer_strip.cc:245 mixer_strip.cc:1078
-msgid "Click to Add/Edit Comments"
+#: mixer_strip.cc:422
+msgid "comments"
 msgstr ""
 
-#: mixer_strip.cc:393
-msgid "unknown strip width \"%1\" in XML GUI information"
+#: mixer_strip.cc:424
+msgid "*comments*"
 msgstr ""
 
-#: mixer_strip.cc:443 mixer_strip.cc:1062
-msgid "*Comments*"
+#: mixer_strip.cc:438
+#, fuzzy
+msgid "Rec"
+msgstr "Rescanear"
+
+#: mixer_strip.cc:439
+msgid "M"
 msgstr ""
 
-#: mixer_strip.cc:457
-msgid "REC"
-msgstr "GRAV"
+#: mixer_strip.cc:440
+msgid "S"
+msgstr ""
 
-#: mixer_strip.cc:462 mixer_strip.cc:1072
+#: mixer_strip.cc:443 mixer_strip.cc:830
 #, fuzzy
 msgid "Cmt"
 msgstr "cortar"
 
-#: mixer_strip.cc:464 mixer_strip.cc:1070
+#: mixer_strip.cc:445 mixer_strip.cc:828
 msgid "*Cmt*"
 msgstr ""
 
-#: mixer_strip.cc:503 mixer_strip.cc:562 redirect_box.cc:1004
+#: mixer_strip.cc:483 mixer_strip.cc:549 redirect_box.cc:1006
 msgid "Not connected to JACK - no I/O changes are possible"
 msgstr ""
 
-#: mixer_strip.cc:569
+#: mixer_strip.cc:560
 msgid "Track"
 msgstr "Trilha"
 
-#: mixer_strip.cc:593 mixer_strip.cc:609
+#: mixer_strip.cc:588 mixer_strip.cc:604
 msgid "could not register new ports required for that connection"
 msgstr "não foi posível registrar portas novas solicitadas por este conneção"
 
-#: mixer_strip.cc:755
-msgid "IN"
-msgstr "ENTRADA"
-
-#: mixer_strip.cc:776
-msgid "OUT"
-msgstr "SAÍDA"
+#: mixer_strip.cc:747
+#, fuzzy
+msgid " Input"
+msgstr "# Entradas"
 
-#: mixer_strip.cc:884
-msgid "aplay"
-msgstr ""
+#: mixer_strip.cc:750
+#, fuzzy
+msgid "I"
+msgstr "ENTRADA"
 
-#: mixer_strip.cc:890
-msgid "awrite"
+#: mixer_strip.cc:820
+msgid "*Comments*"
 msgstr ""
 
-#: mixer_strip.cc:1095
+#: mixer_strip.cc:859
 #, fuzzy
 msgid ": comment editor"
 msgstr "não foi possível iniciar o editor"
 
-#: mixer_strip.cc:1157 mixer_strip.cc:1178
-msgid "no group"
-msgstr "sem grupo"
+#: mixer_strip.cc:953
+msgid "Grp"
+msgstr ""
 
-#: mixer_strip.cc:1181
+#: mixer_strip.cc:956
 msgid "~G"
 msgstr ""
 
-#: mixer_strip.cc:1229
+#: mixer_strip.cc:1004
 #, fuzzy
 msgid "Invert Polarity"
 msgstr "polaridade"
 
-#: mixer_ui.cc:84
+#: mixer_ui.cc:85
 msgid "Strips"
 msgstr "Painéis"
 
-#: mixer_ui.cc:108
-msgid "groupname"
-msgstr ""
-
-#: mixer_ui.cc:109 region_editor.cc:48 region_editor.cc:191
-#: region_editor.cc:225
-msgid "active"
-msgstr "ativo"
-
-#: mixer_ui.cc:110 region_editor.cc:49
-msgid "visible"
-msgstr "visível"
+#: mixer_ui.cc:110
+#, fuzzy
+msgid "Group"
+msgstr "Grupos de Mixer"
 
-#: mixer_ui.cc:207 mixer_ui.cc:366
+#: mixer_ui.cc:211 mixer_ui.cc:370
 msgid "ardour: mixer"
 msgstr ""
 
-#: mixer_ui.cc:208
+#: mixer_ui.cc:212
 msgid "ardour_mixer"
 msgstr "ardour_mixer"
 
-#: mixer_ui.cc:342
+#: mixer_ui.cc:346
 msgid "ardour: mixer: "
 msgstr ""
 
-#: mixer_ui.cc:569
+#: mixer_ui.cc:573
 msgid "signal"
 msgstr "sinal"
 
-#: mixer_ui.cc:719
+#: mixer_ui.cc:723
 msgid "track display list item for renamed strip not found!"
 msgstr "não foi encontrada qualquer trilha para o painel de mixer"
 
-#: option_editor.cc:75
+#: new_session_dialog.cc:39
+#, fuzzy
+msgid "New Session Name :"
+msgstr "Nome da sessão:"
+
+#: new_session_dialog.cc:41
+msgid "Create Session Directory In :"
+msgstr ""
+
+#: new_session_dialog.cc:43
+#, fuzzy
+msgid "Use Session Template :"
+msgstr "usar esquema existente"
+
+#: new_session_dialog.cc:45
+#, fuzzy
+msgid "Channel Count"
+msgstr "Cancelar importação"
+
+#: new_session_dialog.cc:46
+#, fuzzy
+msgid "Create Monitor Bus"
+msgstr "Controle de Saídas"
+
+#: new_session_dialog.cc:53
+#, fuzzy
+msgid "Create Master Bus"
+msgstr "usar saída master"
+
+#: new_session_dialog.cc:55
+#, fuzzy
+msgid "Automatically Connect Inputs"
+msgstr "conectar automaticamente entradas das trilhas com as portas físicas"
+
+#: new_session_dialog.cc:56 new_session_dialog.cc:67
+#, fuzzy
+msgid "Port Limit"
+msgstr "Esqueça isto"
+
+#: new_session_dialog.cc:64
+#, fuzzy
+msgid "<b>Track/Bus Inputs</b>"
+msgstr "Inspetador de Trilhas/Barramentos"
+
+#: new_session_dialog.cc:66
+#, fuzzy
+msgid "Automatically Connect Outputs"
+msgstr "conectar manualmente saídas das trilhas"
+
+#: new_session_dialog.cc:75
+msgid "Connect to Master Bus"
+msgstr ""
+
+#: new_session_dialog.cc:76
+msgid "Connect to Physical Outputs"
+msgstr ""
+
+#: new_session_dialog.cc:80
+#, fuzzy
+msgid "<b>Track/Bus Outputs</b>"
+msgstr "Saídas"
+
+#: new_session_dialog.cc:83
+#, fuzzy
+msgid "Advanced Options"
+msgstr "Preferências"
+
+#
+#: new_session_dialog.cc:91
+#, fuzzy
+msgid "Open Recent Session"
+msgstr "abrir sessão"
+
+#
+#: new_session_dialog.cc:127
+#, fuzzy
+msgid "Open Session File :"
+msgstr "abrir sessão"
+
+#: new_session_dialog.cc:274
+#, fuzzy
+msgid "New Session"
+msgstr "Sessão"
+
+#
+#: new_session_dialog.cc:276
+#, fuzzy
+msgid "Open Session"
+msgstr "abrir sessão"
+
+#: new_session_dialog.cc:281
+#, fuzzy
+msgid "ardour: session control"
+msgstr "ardour: salvar sessão?"
+
+#: new_session_dialog.cc:310
+#, fuzzy
+msgid "select template"
+msgstr "-esquema/template"
+
+#: new_session_dialog.cc:316
+#, fuzzy
+msgid "select session file"
+msgstr "Loop região selecionada"
+
+#: new_session_dialog.cc:325
+#, fuzzy
+msgid "select directory"
+msgstr "Loop região selecionada"
+
+#: option_editor.cc:76
 #, fuzzy
 msgid "SMPTE offset is negative"
 msgstr "Compensar SMPTE"
 
-#: option_editor.cc:101
+#: option_editor.cc:102
 msgid "ardour: options editor"
 msgstr "ardour: preferências"
 
-#: option_editor.cc:102
+#: option_editor.cc:103
 msgid "ardour_option_editor"
 msgstr ""
 
-#: option_editor.cc:126
+#: option_editor.cc:127
 msgid "Paths/Files"
 msgstr "Diretórios/Arquivos"
 
-#: option_editor.cc:127
+#: option_editor.cc:128
 msgid "Kbd/Mouse"
 msgstr "Teclado/Mouse"
 
-#: option_editor.cc:130
+#: option_editor.cc:131
 msgid "Layers & Fades"
 msgstr ""
 
-#: option_editor.cc:134
+#: option_editor.cc:135
 msgid "MIDI"
 msgstr "MIDI"
 
-#: option_editor.cc:176
+#: option_editor.cc:177
 msgid "24 FPS"
 msgstr ""
 
-#: option_editor.cc:178
+#: option_editor.cc:179
 msgid "25 FPS"
 msgstr ""
 
-#: option_editor.cc:180
+#: option_editor.cc:181
 msgid "30 FPS"
 msgstr ""
 
-#: option_editor.cc:186
+#: option_editor.cc:187
 msgid "30 FPS drop"
 msgstr ""
 
-#: option_editor.cc:243
+#: option_editor.cc:244
 msgid "session RAID path"
 msgstr "diretório para sessão RAID"
 
-#: option_editor.cc:248
+#: option_editor.cc:249
 #, fuzzy
 msgid "Soundfile Search Paths"
 msgstr "Biblioteca de Áudio"
 
-#: option_editor.cc:253
+#: option_editor.cc:254
 #, fuzzy
 msgid "Paths"
 msgstr "Diretórios/Arquivos"
 
-#: option_editor.cc:267 option_editor.cc:273 option_editor.cc:724
-#: option_editor.cc:751
+#: option_editor.cc:268 option_editor.cc:274 option_editor.cc:723
+#: option_editor.cc:750
 msgid "internal"
 msgstr "interno"
 
-#: option_editor.cc:286
+#: option_editor.cc:287
 msgid "Short crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:298
+#: option_editor.cc:299
 msgid "Destructive crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:366
+#: option_editor.cc:367
 msgid "SMPTE Frames/second"
 msgstr "SMPTE Frames/segundo"
 
-#: option_editor.cc:367
+#: option_editor.cc:368
 msgid "SMPTE Offset"
 msgstr "Compensar SMPTE"
 
-#: option_editor.cc:461 option_editor.cc:468 option_editor.cc:471
-#: option_editor.cc:617
+#: option_editor.cc:462 option_editor.cc:469 option_editor.cc:472
+#: option_editor.cc:618
 #, fuzzy
 msgid "online"
 msgstr "linear"
@@ -5293,12 +5292,12 @@ msgstr "linear"
 #. remember, we have to handle the i18n case where the relative
 #. lengths of the strings in language N is different than in english.
 #.
-#: option_editor.cc:468 option_editor.cc:469 option_editor.cc:614
+#: option_editor.cc:469 option_editor.cc:470 option_editor.cc:615
 #, fuzzy
 msgid "offline"
 msgstr "linear"
 
-#: option_editor.cc:669
+#: option_editor.cc:670
 msgid "Choose Click"
 msgstr ""
 
@@ -5307,15 +5306,15 @@ msgstr ""
 msgid "Choose Click Emphasis"
 msgstr "Usar com metrônomo acentuado"
 
-#: option_editor.cc:804
+#: option_editor.cc:803
 msgid "Click audio file"
 msgstr "Metrônomo no arquivo de áudio"
 
-#: option_editor.cc:810
+#: option_editor.cc:809
 msgid "Click emphasis audiofile"
 msgstr "Metrônomo acentuado no arquivo de áudio"
 
-#: option_editor.cc:847
+#: option_editor.cc:846
 msgid ""
 "The auditioner is a dedicated mixer strip used\n"
 "for listening to specific regions outside the context\n"
@@ -5327,35 +5326,35 @@ msgstr ""
 "da mistura geral. Pode ser interconectado tal como\n"
 "qualquer outro painel de mistura."
 
-#: option_editor.cc:920
+#: option_editor.cc:919
 msgid "Edit using"
 msgstr "Editar com"
 
-#: option_editor.cc:927 option_editor.cc:954
+#: option_editor.cc:926 option_editor.cc:953
 msgid "+ button"
 msgstr "+ button"
 
-#: option_editor.cc:947
+#: option_editor.cc:946
 msgid "Delete using"
 msgstr "Apagar com"
 
-#: option_editor.cc:974
+#: option_editor.cc:973
 msgid "Ignore snap using"
 msgstr "Ignorar ajuste com"
 
-#: opts.cc:47
+#: opts.cc:46
 msgid "Usage: "
 msgstr "Usual: "
 
-#: opts.cc:48
+#: opts.cc:47
 msgid "  -v, --version                    Show version information\n"
 msgstr "  -v, --version                    Mostra informação sobre a versão\n"
 
-#: opts.cc:49
+#: opts.cc:48
 msgid "  -h, --help                       Print this message\n"
 msgstr "  -h, --help                       Mostra esta mensagem\n"
 
-#: opts.cc:50
+#: opts.cc:49
 msgid ""
 "  -b, --bindings                   Print all possible keyboard binding "
 "names\n"
@@ -5363,12 +5362,12 @@ msgstr ""
 "  -b, --bindings                   Mostra todos os atalhos de teclado "
 "possíveis nomes\n"
 
-#: opts.cc:51
+#: opts.cc:50
 #, fuzzy
 msgid "  -n, --show-splash                Show splash screen\n"
 msgstr "  -n, --no-splash                  Não mostra imagem de abertura\n"
 
-#: opts.cc:52
+#: opts.cc:51
 #, fuzzy
 msgid ""
 "  -c, --name  name                 Use a specific jack client name, default "
@@ -5377,149 +5376,162 @@ msgstr ""
 "  -c, --jack-client-name  nome     Use o cliente jack especificado por nome. "
 "O padrão é o ardour\n"
 
-#: opts.cc:53
+#: opts.cc:52
 #, fuzzy
 msgid ""
 "  -N, --new session-name           Create a new session from the command "
 "line\n"
 msgstr "  [session-name]                   Nome da sessão para carregar\n"
 
-#: opts.cc:54
+#: opts.cc:53
 msgid ""
 "  -o, --use-hw-optimizations        Try to use h/w specific optimizations\n"
 msgstr ""
 
-#: opts.cc:56
+#: opts.cc:55
 #, fuzzy
 msgid "  -V, --novst                      Do not use VST support\n"
 msgstr "  -n, --no-splash                  Não mostra imagem de abertura\n"
 
-#: opts.cc:58
+#: opts.cc:57
 msgid "  [session-name]                   Name of session to load\n"
 msgstr "  [session-name]                   Nome da sessão para carregar\n"
 
-#: opts.cc:59
+#: opts.cc:58
 msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
 msgstr ""
 
-#: opts.cc:60
+#: opts.cc:59
 #, fuzzy
 msgid "  -g, --gtktheme                   Allow GTK to load a theme\n"
 msgstr "  -h, --help                       Mostra esta mensagem\n"
 
-#: pan_automation_time_axis.cc:59
+#: pan_automation_time_axis.cc:60
 msgid "You can't graphically edit panning of more than stream"
 msgstr ""
 
-#: pan_automation_time_axis.cc:79
+#: pan_automation_time_axis.cc:80
 #, fuzzy
 msgid "add pan automation event"
 msgstr "adicionar evento de automação para "
 
-#: panner2d.cc:588 panner_ui.cc:393 plugin_ui.cc:833
+#: panner2d.cc:589 panner_ui.cc:435 plugin_ui.cc:834
 msgid "Bypass"
 msgstr "Ignorar"
 
-#: panner_ui.cc:57 panner_ui.cc:187
+#: panner_ui.cc:58 panner_ui.cc:225
 #, fuzzy
 msgid "link"
 msgstr "entrada"
 
+#: panner_ui.cc:69
+msgid "Pan automation mode"
+msgstr "modo automático de pan"
+
 #: panner_ui.cc:70
+msgid "Pan automation type"
+msgstr "Tipo do pan automático"
+
+#: panner_ui.cc:81
 msgid "panning link control"
 msgstr ""
 
-#: panner_ui.cc:72
+#: panner_ui.cc:83
 msgid "panning link direction"
 msgstr ""
 
-#: panner_ui.cc:197
+#: panner_ui.cc:235
 msgid "L"
 msgstr ""
 
-#: panner_ui.cc:296
+#: panner_ui.cc:335
+#, c-format
+msgid "panner for channel %lu"
+msgstr ""
+
+#: panner_ui.cc:337
 #, c-format
 msgid "panner for channel %u"
 msgstr ""
 
-#: panner_ui.cc:403
+#: panner_ui.cc:445
 msgid "Reset all"
 msgstr "reiniciar todos"
 
-#: playlist_selector.cc:51
+#: playlist_selector.cc:52
 #, fuzzy
 msgid "ardour: playlists"
 msgstr "ardour: plugins"
 
-#: playlist_selector.cc:58
+#: playlist_selector.cc:59
 msgid "Playlists grouped by track"
 msgstr ""
 
-#: playlist_selector.cc:97
+#: playlist_selector.cc:98
 #, fuzzy
 msgid "ardour: playlist for "
 msgstr "ardour: plugins"
 
-#: playlist_selector.cc:113
+#: playlist_selector.cc:114
 msgid "Other tracks"
 msgstr "Outras trilhas"
 
 # msgstr "Ocultar esta trilha"
-#: playlist_selector.cc:129
+#: playlist_selector.cc:130
 msgid "unassigned"
 msgstr ""
 
-#: plugin_selector.cc:42
+#: plugin_selector.cc:43
 msgid "ardour: plugins"
 msgstr "ardour: plugins"
 
-#: plugin_selector.cc:55
+#: plugin_selector.cc:56
 #, fuzzy
 msgid "Available LADSPA Plugins"
 msgstr "LADSPA plugins disponíveis"
 
-#: plugin_selector.cc:56
+#: plugin_selector.cc:57
 msgid "Type"
 msgstr "Tipo"
 
-#: plugin_selector.cc:57 plugin_selector.cc:80
+#: plugin_selector.cc:58 plugin_selector.cc:81
 msgid "# Inputs"
 msgstr "# Entradas"
 
-#: plugin_selector.cc:58 plugin_selector.cc:81
+#: plugin_selector.cc:59 plugin_selector.cc:82
 msgid "# Outputs"
 msgstr "# Saídas"
 
-#: plugin_selector.cc:67
+#: plugin_selector.cc:68
 msgid "Plugins to be Connected to Insert"
 msgstr ""
 
-#: plugin_selector.cc:79
+#: plugin_selector.cc:80
 #, fuzzy
 msgid "Available plugins"
 msgstr "VST plugins disponíveis"
 
-#: plugin_selector.cc:97
+#: plugin_selector.cc:98
 msgid "Add a plugin to the effect list"
 msgstr "Adicionar plugin na lista de efeitos"
 
-#: plugin_selector.cc:99
+#: plugin_selector.cc:102
 msgid "Remove a plugin from the effect list"
 msgstr "Remover plugin da lista de efeitos"
 
-#: plugin_selector.cc:101
+#: plugin_selector.cc:104
 msgid "Update available plugins"
 msgstr "Atualizar plugins disponíveis"
 
-#: plugin_selector.cc:123
+#: plugin_selector.cc:126
 msgid "LADSPA"
 msgstr ""
 
-#: plugin_selector.cc:126
+#: plugin_selector.cc:129
 msgid "VST"
 msgstr ""
 
-#: plugin_ui.cc:83
+#: plugin_ui.cc:84
 msgid ""
 "unknown type of editor-supplying plugin (note: no VST support in this "
 "version of ardour)"
@@ -5527,52 +5539,53 @@ msgstr ""
 "tipo desconhecido do plugin fornecido para o editor (nota: sem suporte VST "
 "nesta versão do ardour)"
 
-#: plugin_ui.cc:138
+#: plugin_ui.cc:139
 msgid "<span size=\"large\">Presets</span>"
 msgstr ""
 
-#: plugin_ui.cc:229
+#: plugin_ui.cc:230
 #, fuzzy
 msgid "Controls"
 msgstr "Controle de Saídas"
 
-#: plugin_ui.cc:266
+#: plugin_ui.cc:267
 msgid "Plugin Editor: could not build control element for port %1"
 msgstr ""
 "Plugin Editor: não foi possível construir elemento de controle para a porta %"
 "1"
 
-#: plugin_ui.cc:357
-msgid "automation control"
+#: plugin_ui.cc:358
+#, fuzzy
+msgid "Automation control"
 msgstr "controle de automação"
 
-#: plugin_ui.cc:853
+#: plugin_ui.cc:854
 msgid "Plugin preset %1 not found"
 msgstr "Pré-seleção do plugin %1 não encontrada"
 
-#: plugin_ui.cc:863
+#: plugin_ui.cc:864
 #, fuzzy
 msgid "Name of New Preset:"
 msgstr "Nome para a nova conexão:"
 
-#: redirect_automation_line.cc:53
+#: redirect_automation_line.cc:54
 msgid "redirect automation created for non-plugin"
 msgstr "redirecionamento automático criado para um não-efeito/não-plugin"
 
-#: redirect_automation_time_axis.cc:93
+#: redirect_automation_time_axis.cc:94
 msgid "add automation event to "
 msgstr "adicionar evento de automação para "
 
-#: redirect_box.cc:222
+#: redirect_box.cc:223
 msgid "New send"
 msgstr ""
 
-#: redirect_box.cc:223
+#: redirect_box.cc:224
 #, fuzzy
 msgid "Show send controls"
 msgstr "Velocidade do controle"
 
-#: redirect_box.cc:377
+#: redirect_box.cc:383
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5583,7 +5596,7 @@ msgid ""
 "part of the signal."
 msgstr ""
 
-#: redirect_box.cc:389
+#: redirect_box.cc:395
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5595,7 +5608,7 @@ msgid ""
 "support this type of configuration."
 msgstr ""
 
-#: redirect_box.cc:402
+#: redirect_box.cc:408
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "\n"
@@ -5608,34 +5621,34 @@ msgid ""
 "Ardour does not understand what to do in such situations.\n"
 msgstr ""
 
-#: redirect_box.cc:493
+#: redirect_box.cc:495
 msgid "Pre-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:496
+#: redirect_box.cc:498
 msgid "Post-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:642
+#: redirect_box.cc:644
 msgid ""
 "You cannot reorder this set of redirects\n"
 "in that way because the inputs and\n"
 "outputs do not work correctly."
 msgstr ""
 
-#: redirect_box.cc:747
+#: redirect_box.cc:749
 #, fuzzy
 msgid "rename redirect"
 msgstr "ardour: renomear região"
 
-#: redirect_box.cc:824 redirect_box.cc:872
+#: redirect_box.cc:826 redirect_box.cc:874
 msgid ""
 "Copying the set of redirects on the clipboard failed,\n"
 "probably because the I/O configuration of the plugins\n"
 "could not match the configuration of this track."
 msgstr ""
 
-#: redirect_box.cc:894
+#: redirect_box.cc:896
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this track?\n"
@@ -5644,7 +5657,7 @@ msgstr ""
 "Tem certeza de que deseja remover a trilha \"%1\" ?\n"
 "(não será possível voltar)"
 
-#: redirect_box.cc:897
+#: redirect_box.cc:899
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this bus?\n"
@@ -5653,248 +5666,260 @@ msgstr ""
 "Tem certeza de que deseja remover a trilha \"%1\" ?\n"
 "(não será possível voltar)"
 
-#: redirect_box.cc:902
+#: redirect_box.cc:904
 #, fuzzy
 msgid "Yes, remove them all"
 msgstr "Sim, remova isto."
 
-#: redirect_box.cc:938
+#: redirect_box.cc:940
 #, fuzzy
 msgid "ardour: %1"
 msgstr "ardour: relógio"
 
-#: redirect_box.cc:980
+#: redirect_box.cc:982
 #, fuzzy
 msgid "ardour: %1: %2 (by %3)"
 msgstr "ardour: região"
 
 #. new stuff
-#: redirect_box.cc:1052
+#: redirect_box.cc:1054
 msgid "New Plugin ..."
 msgstr ""
 
-#: redirect_box.cc:1053
+#: redirect_box.cc:1055
 #, fuzzy
 msgid "New Insert"
 msgstr "nova entrada"
 
-#: redirect_box.cc:1054
+#: redirect_box.cc:1056
 msgid "New Send ..."
 msgstr ""
 
-#: redirect_box.cc:1066
+#: redirect_box.cc:1068
 #, fuzzy
 msgid "Deselect All"
 msgstr "Selecionar Tudo"
 
-#: redirect_box.cc:1073
+#: redirect_box.cc:1075
 #, fuzzy
 msgid "Activate all"
 msgstr "Ativar"
 
-#: redirect_box.cc:1074
+#: redirect_box.cc:1076
 #, fuzzy
 msgid "Deactivate all"
 msgstr "Desativar"
 
-#: region_editor.cc:44
+#: region_editor.cc:45
 msgid "NAME:"
 msgstr "NOME:"
 
-#: region_editor.cc:45
+#: region_editor.cc:46
 msgid "lock"
 msgstr "bloquear"
 
-#: region_editor.cc:47
+#: region_editor.cc:48
 msgid "opaque"
 msgstr "opaco"
 
-#: region_editor.cc:52
+#: region_editor.cc:49 region_editor.cc:192 region_editor.cc:226
+msgid "active"
+msgstr "ativo"
+
+#: region_editor.cc:50
+msgid "visible"
+msgstr "visível"
+
+#: region_editor.cc:53
 msgid "Layer"
 msgstr "Camada"
 
-#: region_editor.cc:60
+#: region_editor.cc:54
+msgid "play"
+msgstr "reproduzir"
+
+#: region_editor.cc:61
 msgid "ENVELOPE"
 msgstr "ENVELOPE"
 
-#: region_editor.cc:106
+#: region_editor.cc:107
 msgid "mute this region"
 msgstr "mutar esta região"
 
-#: region_editor.cc:107
+#: region_editor.cc:108
 msgid "regions underneath this one cannot be heard"
 msgstr "regiões abaixo desta não são ouvidas"
 
-#: region_editor.cc:108
+#: region_editor.cc:109
 msgid "prevent any changes to this region"
 msgstr "bloquear qualquer ateração nesta região"
 
-#: region_editor.cc:109
+#: region_editor.cc:110
 msgid "use the gain envelope during playback"
 msgstr "usar envelope de ganho durante a reprodução"
 
-#: region_editor.cc:110
+#: region_editor.cc:111
 msgid "show the gain envelope"
 msgstr "mostrar envelope de ganho"
 
-#: region_editor.cc:111
+#: region_editor.cc:112
 msgid "use fade in curve during playback"
 msgstr "usar curva de fade-in durante reprodução"
 
-#: region_editor.cc:112
+#: region_editor.cc:113
 msgid "use fade out curve during playback"
 msgstr "usar curva de fade-out durante reprodução"
 
-#: region_editor.cc:113
+#: region_editor.cc:114
 msgid "audition this region"
 msgstr "ouvir esta região"
 
-#: region_editor.cc:146
+#: region_editor.cc:147
 msgid "START:"
 msgstr "INICIO"
 
-#: region_editor.cc:148
+#: region_editor.cc:149
 msgid "END:"
 msgstr "FINAL:"
 
-#: region_editor.cc:150
+#: region_editor.cc:151
 msgid "LENGTH:"
 msgstr "TAMANHO:"
 
-#: region_editor.cc:190
+#: region_editor.cc:191
 msgid "FADE IN"
 msgstr "FADE IN"
 
-#: region_editor.cc:192 region_editor.cc:226
+#: region_editor.cc:193 region_editor.cc:227
 msgid "msecs"
 msgstr "milisecs."
 
-#: region_editor.cc:224
+#: region_editor.cc:225
 msgid "FADE OUT"
 msgstr "FADE OUT"
 
-#: region_editor.cc:264
+#: region_editor.cc:265
 msgid "ardour: region "
 msgstr "ardour: região"
 
-#: region_editor.cc:401
+#: region_editor.cc:402
 msgid "fade in edit"
 msgstr "fade in na edição"
 
-#: region_editor.cc:413
+#: region_editor.cc:414
 msgid "fade out edit"
 msgstr "fade out na edição"
 
-#: regionview.cc:1140
+#: regionview.cc:1146
 #, fuzzy
 msgid "add gain control point"
 msgstr "Remover ponto de controlo"
 
-#: route_params_ui.cc:88
+#: route_params_ui.cc:89
 msgid "Tracks/Buses"
 msgstr "Trilhas/Barramentos"
 
-#: route_params_ui.cc:108
+#: route_params_ui.cc:109
 #, fuzzy
 msgid "Pre-fader Redirects"
 msgstr "Pré Redirecionamentos"
 
-#: route_params_ui.cc:109
+#: route_params_ui.cc:110
 #, fuzzy
 msgid "Post-fader Redirects"
 msgstr "Pós Redirecionamentos"
 
-#: route_params_ui.cc:141
+#: route_params_ui.cc:144
 #, fuzzy
 msgid "ardour: track/bus inspector"
 msgstr "ardour: adicionar trilhas/barramento"
 
-#: route_params_ui.cc:142
+#: route_params_ui.cc:145
 msgid "ardour_route_parameters"
 msgstr "ardour_route_parameters"
 
-#: route_params_ui.cc:199
+#: route_params_ui.cc:202
 msgid "route display list item for renamed route not found!"
 msgstr "não foi encontrada qualquer elemento para encaminhamento"
 
-#: route_params_ui.cc:451
+#: route_params_ui.cc:453
 msgid "NO TRACK"
 msgstr "NENHUMA TRILHA"
 
-#: route_params_ui.cc:693
+#: route_params_ui.cc:695
 #, fuzzy
 msgid "ardour: track/bus inspector: "
 msgstr "ardour: adicionar trilhas/barramento"
 
-#: route_params_ui.cc:697
+#: route_params_ui.cc:699
 msgid "No Route Selected"
 msgstr "Caminho não selecionado"
 
-#: route_params_ui.cc:698
+#: route_params_ui.cc:700
 #, fuzzy
 msgid "ardour: track/bus/inspector: no route selected"
 msgstr "ardour: parâmetros de encaminhamento: caminho não seleccionado"
 
 #. ctrl-shift-click applies change to all routes
-#: route_ui.cc:133
+#: route_ui.cc:134
 #, fuzzy
 msgid "mute change"
 msgstr "Fazer intervalo de inserção"
 
 #. ctrl-shift-click applies change to all routes
 #. ctrl-alt-click: exclusively solo this track, not a toggle */
-#: route_ui.cc:208 route_ui.cc:218
+#: route_ui.cc:209 route_ui.cc:219
 #, fuzzy
 msgid "solo change"
 msgstr "Loop no intervalo"
 
-#: route_ui.cc:281
+#: route_ui.cc:282
 msgid "rec-enable change"
 msgstr ""
 
-#: route_ui.cc:472
+#: route_ui.cc:479
 #, fuzzy
 msgid "Solo-safe"
 msgstr "Solo"
 
-#: route_ui.cc:480 route_ui.cc:523
+#: route_ui.cc:487 route_ui.cc:530
 #, fuzzy
 msgid "MIDI Bind"
 msgstr "MIDI"
 
-#: route_ui.cc:494
+#: route_ui.cc:501
 msgid "Pre Fader"
 msgstr "Pré Fade"
 
-#: route_ui.cc:501
+#: route_ui.cc:508
 msgid "Post Fader"
 msgstr "Pós Fade"
 
-#: route_ui.cc:508
+#: route_ui.cc:515
 msgid "Control Outs"
 msgstr "Controle de Saídas"
 
-#: route_ui.cc:515
+#: route_ui.cc:522
 msgid "Main Outs"
 msgstr "Saídas Principais"
 
-#: route_ui.cc:552
+#: route_ui.cc:559
 msgid "mix group solo  change"
 msgstr ""
 
-#: route_ui.cc:586
+#: route_ui.cc:593
 msgid "mix group mute change"
 msgstr ""
 
-#: route_ui.cc:602
+#: route_ui.cc:609
 msgid "mix group rec-enable change"
 msgstr ""
 
-#: route_ui.cc:619 visual_time_axis.cc:236
+#: route_ui.cc:626 visual_time_axis.cc:237
 msgid "ardour: color selection"
 msgstr "ardour: seleção de cor"
 
-#: route_ui.cc:695
+#: route_ui.cc:702
 #, fuzzy
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
@@ -5905,7 +5930,7 @@ msgstr ""
 "Tem certeza de que deseja remover a trilha \"%1\" ?\n"
 "(não será possível voltar)"
 
-#: route_ui.cc:697
+#: route_ui.cc:704
 msgid ""
 "Do you really want to remove bus \"%1\" ?\n"
 "(cannot be undone)"
@@ -5913,11 +5938,11 @@ msgstr ""
 "Deseja realmente remover o barramento \"%1\" ?\n"
 "(esta operação não poderá ser desfeita)"
 
-#: route_ui.cc:701 visual_time_axis.cc:278
+#: route_ui.cc:708 visual_time_axis.cc:279
 msgid "Yes, remove it."
 msgstr "Sim, remova isto."
 
-#: route_ui.cc:730
+#: route_ui.cc:737
 #, fuzzy
 msgid "New Name: "
 msgstr "novo nome: "
@@ -5975,147 +6000,148 @@ msgstr "não foi possível acessar arquivo de áudio"
 msgid "Name for Field"
 msgstr "Nome para a região:"
 
-#: sfdb_ui.cc:333
+#: sfdb_ui.cc:335
 msgid "Split Channels"
 msgstr "Separar Canais"
 
-#: sfdb_ui.cc:340
+#: sfdb_ui.cc:342
 msgid "Create a region for each channel"
 msgstr ""
 
-#: sfdb_ui.cc:342
+#: sfdb_ui.cc:344
 msgid "Embed"
 msgstr ""
 
-#: sfdb_ui.cc:344
+#: sfdb_ui.cc:346
 #, fuzzy
 msgid "Link to an external file"
 msgstr "Inserir arquivo de áudio externo"
 
-#: sfdb_ui.cc:346
+#: sfdb_ui.cc:348
 msgid "Import"
 msgstr "Importar"
 
-#: sfdb_ui.cc:348
+#: sfdb_ui.cc:350
 msgid "Copy a file to the session folder"
 msgstr ""
 
-#: sfdb_ui.cc:412
+#: sfdb_ui.cc:414
 msgid "programming error: %1"
 msgstr ""
 
-#: tempo_dialog.cc:17 tempo_dialog.cc:34
+#: tempo_dialog.cc:18 tempo_dialog.cc:35
 msgid "Beats per minute"
 msgstr "Batimentos por minuto"
 
-#: tempo_dialog.cc:20 tempo_dialog.cc:37 tempo_dialog.cc:153
-#: tempo_dialog.cc:171
+#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:203
+#: tempo_dialog.cc:221
 msgid "Bar"
 msgstr "Compasso"
 
-#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:154
-#: tempo_dialog.cc:172
+#: tempo_dialog.cc:22 tempo_dialog.cc:39 tempo_dialog.cc:204
+#: tempo_dialog.cc:222
 msgid "Beat"
 msgstr "Batimentos"
 
-#: tempo_dialog.cc:23 tempo_dialog.cc:40 tempo_dialog.cc:155
-#: tempo_dialog.cc:173
+#: tempo_dialog.cc:24 tempo_dialog.cc:41 tempo_dialog.cc:205
+#: tempo_dialog.cc:223
 msgid "Location"
 msgstr "Localização"
 
-#: tempo_dialog.cc:149 tempo_dialog.cc:167
+#: tempo_dialog.cc:199 tempo_dialog.cc:217
 msgid "Meter denominator"
 msgstr "Denominador métrico"
 
-#: tempo_dialog.cc:150 tempo_dialog.cc:168
+#: tempo_dialog.cc:200 tempo_dialog.cc:218
 msgid "Beats per bar"
 msgstr "Batimentos por compasso"
 
-#: tempo_dialog.cc:186 tempo_dialog.cc:197
+#: tempo_dialog.cc:236 tempo_dialog.cc:247
 msgid "whole (1)"
 msgstr "toda (1)"
 
-#: tempo_dialog.cc:187 tempo_dialog.cc:199
+#: tempo_dialog.cc:237 tempo_dialog.cc:249
 msgid "second (2)"
 msgstr "segunda (2)"
 
-#: tempo_dialog.cc:188 tempo_dialog.cc:201
+#: tempo_dialog.cc:238 tempo_dialog.cc:251
 msgid "third (3)"
 msgstr "terceira (3)"
 
-#: tempo_dialog.cc:189 tempo_dialog.cc:203 tempo_dialog.cc:211
+#: tempo_dialog.cc:239 tempo_dialog.cc:253 tempo_dialog.cc:261
 msgid "quarter (4)"
 msgstr "quarta (4)"
 
-#: tempo_dialog.cc:190 tempo_dialog.cc:205
+#: tempo_dialog.cc:240 tempo_dialog.cc:255
 msgid "eighth (8)"
 msgstr "oitava (8)"
 
-#: tempo_dialog.cc:191 tempo_dialog.cc:207
+#: tempo_dialog.cc:241 tempo_dialog.cc:257
 msgid "sixteenth (16)"
 msgstr "décima sexta (16)"
 
-#: tempo_dialog.cc:192 tempo_dialog.cc:209
+#: tempo_dialog.cc:242 tempo_dialog.cc:259
 msgid "thirty-second (32)"
 msgstr "trigésima segunda (32)"
 
-#: tempo_dialog.cc:321
+#: tempo_dialog.cc:420
 msgid "garbaged note type entry (%1)"
 msgstr "tipo de nota entrada descartada (%1)"
 
-#: tempo_dialog.cc:331
+#: tempo_dialog.cc:430
 msgid "incomprehensible note type entry (%1)"
 msgstr "tipo de nota entrada incompreensível (%1)"
 
-#: time_axis_view.cc:111
+#: time_axis_view.cc:112
 msgid "gTortnam"
 msgstr "gTortnam"
 
-#: time_axis_view.cc:548
+#: time_axis_view.cc:549
 msgid "Largest"
 msgstr "Enorme"
 
-#: time_axis_view.cc:549
+#: time_axis_view.cc:550
 msgid "Large"
 msgstr "Grande"
 
-#: time_axis_view.cc:550
+#: time_axis_view.cc:551
 msgid "Larger"
 msgstr "Maior"
 
-#: time_axis_view.cc:552
+#: time_axis_view.cc:553
 msgid "Smaller"
 msgstr "Menor"
 
-#: time_axis_view.cc:553
+#: time_axis_view.cc:554
 msgid "Small"
 msgstr "Pequeno"
 
-#: time_axis_view.cc:869
+#: time_axis_view.cc:870
 msgid "unknown track height name \"%1\" in XML GUI information"
 msgstr ""
 
-#: time_axis_view_item.cc:71
+#. first constructed item sets up font info
+#: time_axis_view_item.cc:79
 msgid "TimeAxisViewItemName"
 msgstr ""
 
-#: time_axis_view_item.cc:271
+#: time_axis_view_item.cc:298
 msgid "new duration %1 frames is out of bounds for %2"
 msgstr ""
 
-#: time_selection.cc:40
+#: time_selection.cc:41
 msgid "programming error: request for non-existent audio range (%1)!"
 msgstr ""
 
-#: utils.cc:106 utils.cc:149
+#: utils.cc:107 utils.cc:150
 msgid "bad XPM header %1"
 msgstr ""
 
-#: utils.cc:331
+#: utils.cc:332
 msgid "missing RGBA style for \"%1\""
 msgstr ""
 
-#: visual_time_axis.cc:275
+#: visual_time_axis.cc:276
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
 "(cannot be undone)"
@@ -6123,14 +6149,91 @@ msgstr ""
 "Tem certeza de que deseja remover a trilha \"%1\" ?\n"
 "(não será possível voltar)"
 
-#: visual_time_axis.cc:324
+#: visual_time_axis.cc:325
 msgid "new name: "
 msgstr "novo nome: "
 
-#: visual_time_axis.cc:335
+#: visual_time_axis.cc:336
 msgid "A track already exists with that name"
 msgstr "já existe uma trilha com este nome"
 
+#~ msgid ""
+#~ "You cannot record-enable\n"
+#~ "track %1\n"
+#~ "because it has no input connections.\n"
+#~ "You would be wasting space recording silence."
+#~ msgstr ""
+#~ "Vocãonão pode habilitar para gravaãoo\n"
+#~ "a trilha %1\n"
+#~ "porque ela não tem conexãos de entrada.\n"
+#~ "Você estaria desperdiçando espaço gravando silêncio."
+
+#, fuzzy
+#~ msgid "set selected trackview"
+#~ msgstr "Inserir seleção"
+
+#, fuzzy
+#~ msgid "set selected control point"
+#~ msgstr "Remover ponto de controlo"
+
+#, fuzzy
+#~ msgid "set selected regionview"
+#~ msgstr "Loop região selecionada"
+
+#~ msgid "Start a new session\n"
+#~ msgstr "Iniciar uma nova sessão\n"
+
+#~ msgid "via Session menu"
+#~ msgstr "via menu de Sessão"
+
+#, fuzzy
+#~ msgid "<b>Advanced</b>"
+#~ msgstr "Avançado ..."
+
+#, fuzzy
+#~ msgid "Select a File"
+#~ msgstr "Selecionar Tudo"
+
+#, fuzzy
+#~ msgid "Track/Bus connection options"
+#~ msgstr "Inspetador de Trilhas/Barramentos"
+
+#~ msgid "RECORD"
+#~ msgstr "GRAVAR"
+
+#~ msgid "INPUT"
+#~ msgstr "ENTRADA"
+
+#~ msgid "OUTPUT"
+#~ msgstr "SAÍDA"
+
+#~ msgid "Gain automation mode"
+#~ msgstr "modo automático de ganho"
+
+#~ msgid "Gain automation type"
+#~ msgstr "Tipo do ganho automático"
+
+#~ msgid "trim"
+#~ msgstr "cortar"
+
+#~ msgid "gain automation mode"
+#~ msgstr "modo automático de ganho"
+
+#~ msgid "gain automation state"
+#~ msgstr "estado do ganho automático"
+
+#~ msgid "pan automation state"
+#~ msgstr "estado do pan automático"
+
+#~ msgid "REC"
+#~ msgstr "GRAV"
+
+#~ msgid "OUT"
+#~ msgstr "SAÍDA"
+
+#~ msgid "no group"
+#~ msgstr "sem grupo"
+
 #, fuzzy
 #~ msgid "normal"
 #~ msgstr "Normal"
@@ -6399,9 +6502,6 @@ msgstr "já existe uma trilha com este nome"
 #~ msgid "AND"
 #~ msgstr "E"
 
-#~ msgid "OR"
-#~ msgstr "OU"
-
 #~ msgid "ardour: locate soundfiles"
 #~ msgstr "ardour: localizar arquivos de áudio"
 
@@ -6414,9 +6514,6 @@ msgstr "já existe uma trilha com este nome"
 #~ msgid "Ardour: Search Results"
 #~ msgstr "Ardour: Resultado da Busca"
 
-#~ msgid "Mix Groups"
-#~ msgstr "Grupos de Mixer"
-
 #~ msgid "Hide All AudioTrack MixerStrips"
 #~ msgstr "Ocultar os páineis de mixer de todas as trilhas de áudio "
 
@@ -6429,9 +6526,6 @@ msgstr "já existe uma trilha com este nome"
 #~ msgid "Name for new mix group"
 #~ msgstr "Nome para o novo grupo de mixer"
 
-#~ msgid "Session name:"
-#~ msgstr "Nome da sessão:"
-
 #~ msgid "Create"
 #~ msgstr "Criar"
 
@@ -6464,17 +6558,9 @@ msgstr "já existe uma trilha com este nome"
 #~ "Se você quiser usar outra freqüência de áudio\n"
 #~ "por favor feche o programa e reinicie o JACK"
 
-#, fuzzy
-#~ msgid "Session template"
-#~ msgstr "usar esquema existente"
-
 #~ msgid "blank"
 #~ msgstr "vazio"
 
-#, fuzzy
-#~ msgid "No template"
-#~ msgstr "-esquema/template"
-
 #, fuzzy
 #~ msgid "Slave to MTC"
 #~ msgstr "Enviar MTC"
@@ -6500,9 +6586,6 @@ msgstr "já existe uma trilha com este nome"
 #~ msgid "Native Format"
 #~ msgstr "Formato Nativo"
 
-#~ msgid "Use as click"
-#~ msgstr "Usar com metrônomo"
-
 #~ msgid "--unknown--"
 #~ msgstr "--desconhecido--"
 
index 1a8d47b36fcbedacf0beac5419f048ad77e622a5..f07f025713d23653580ba3a2cdc895975f88127e 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: 0.814.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 18:09-0400\n"
 "PO-Revision-Date: 2004-12-07 13:00+0000\n"
 "Last-Translator: Rui Nuno Capela <rncbc@rncbc.org>\n"
 "Language-Team: Portuguese\n"
@@ -15,143 +15,143 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: about.cc:119
+#: about.cc:120
 msgid "Paul Davis"
 msgstr ""
 
-#: about.cc:120
+#: about.cc:121
 #, fuzzy
 msgid "Jesse Chappell"
 msgstr "reiniciar"
 
-#: about.cc:121
+#: about.cc:122
 msgid "Taybin Rutkin"
 msgstr ""
 
-#: about.cc:122
+#: about.cc:123
 msgid "Marcus Andersson"
 msgstr ""
 
-#: about.cc:123
+#: about.cc:124
 msgid "Jeremy Hall"
 msgstr ""
 
-#: about.cc:124
+#: about.cc:125
 msgid "Steve Harris"
 msgstr ""
 
-#: about.cc:125
+#: about.cc:126
 msgid "Tim Mayberry"
 msgstr ""
 
-#: about.cc:126
+#: about.cc:127
 msgid "Mark Stewart"
 msgstr ""
 
-#: about.cc:127
+#: about.cc:128
 msgid "Sam Chessman"
 msgstr ""
 
-#: about.cc:128
+#: about.cc:129
 msgid "Jack O'Quin"
 msgstr ""
 
-#: about.cc:129
+#: about.cc:130
 msgid "Matt Krai"
 msgstr ""
 
-#: about.cc:130
+#: about.cc:131
 msgid "Ben Bell"
 msgstr ""
 
-#: about.cc:131
+#: about.cc:132
 msgid "Gerard van Dongen"
 msgstr ""
 
-#: about.cc:132
+#: about.cc:133
 msgid "Thomas Charbonnel"
 msgstr ""
 
-#: about.cc:133
+#: about.cc:134
 msgid "Nick Mainsbridge"
 msgstr ""
 
-#: about.cc:134
+#: about.cc:135
 msgid "Colin Law"
 msgstr ""
 
-#: about.cc:135
+#: about.cc:136
 msgid "Sampo Savolainen"
 msgstr ""
 
-#: about.cc:136
+#: about.cc:137
 msgid "Joshua Leach"
 msgstr ""
 
-#: about.cc:137
+#: about.cc:138
 msgid "Rob Holland"
 msgstr ""
 
-#: about.cc:138
+#: about.cc:139
 msgid "Per Sigmond"
 msgstr ""
 
-#: about.cc:139
+#: about.cc:140
 msgid "Doug Mclain"
 msgstr ""
 
-#: about.cc:140
+#: about.cc:141
 msgid "Petter Sundlöf"
 msgstr ""
 
-#: about.cc:145
+#: about.cc:146
 msgid ""
 "French:\n"
 "\tAlain Fréhel <alain.frehel@free.fr>\n"
 msgstr ""
 
-#: about.cc:146
+#: about.cc:147
 msgid ""
 "German:\n"
 "\tKarsten Petersen <kapet@kapet.de>\n"
 msgstr ""
 
-#: about.cc:147
+#: about.cc:148
 msgid ""
 "Italian:\n"
 "\tFilippo Pappalardo <filippo@email.it>\n"
 msgstr ""
 
-#: about.cc:148
+#: about.cc:149
 msgid ""
 "Portuguese:\n"
 "\tRui Nuno Capela <rncbc@rncbc.org>\n"
 msgstr ""
 
-#: about.cc:149
+#: about.cc:150
 msgid ""
 "Brazilian Portuguese:\n"
 "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
 "\tChris Ross <chris@tebibyte.org>\n"
 msgstr ""
 
-#: about.cc:151
+#: about.cc:152
 msgid ""
 "Spanish:\n"
 "\t Alex Krohn <alexkrohn@fastmail.fm>\n"
 msgstr ""
 
-#: about.cc:152
+#: about.cc:153
 msgid ""
 "Russian:\n"
 "\t Igor Blinov <pitstop@nm.ru>\n"
 msgstr ""
 
-#: about.cc:180
+#: about.cc:181
 msgid "Copyright (C) 1999-2005 Paul Davis\n"
 msgstr ""
 
-#: about.cc:181
+#: about.cc:182
 #, fuzzy
 msgid ""
 "Ardour comes with ABSOLUTELY NO WARRANTY\n"
@@ -164,7 +164,7 @@ msgstr ""
 "desde que sejam respeitadas algumas condições;\n"
 "para mais informações, leia por favor o ficheiro COPYING.\n"
 
-#: about.cc:187
+#: about.cc:188
 #, fuzzy
 msgid ""
 "%1\n"
@@ -173,51 +173,51 @@ msgstr ""
 "Ardour: %1\n"
 "(compilado com ardour/gtk %2 libardour: %3.%4.%5)"
 
-#: actions.cc:260
+#: actions.cc:261
 msgid "programmer error: %1 %2"
 msgstr ""
 
-#: add_route_dialog.cc:61
+#: add_route_dialog.cc:62
 msgid "ardour: add track/bus"
 msgstr "ardour: acrescentar faixa/barramento"
 
 #. path = "1"
-#: add_route_dialog.cc:62 editor_route_list.cc:72
+#: add_route_dialog.cc:63 editor_route_list.cc:73
 msgid "Tracks"
 msgstr "Faixas"
 
 #. path = "0"
-#: add_route_dialog.cc:63 editor_route_list.cc:69
+#: add_route_dialog.cc:64 editor_route_list.cc:70
 msgid "Busses"
 msgstr "Barramentos"
 
-#: add_route_dialog.cc:95 plugin_ui.cc:832
+#: add_route_dialog.cc:96 plugin_ui.cc:833
 msgid "Add"
 msgstr "Acrescentar"
 
-#: add_route_dialog.cc:113
+#: add_route_dialog.cc:114
 msgid "Name (template)"
 msgstr "Nome (modelo)"
 
-#: add_route_dialog.cc:119
+#: add_route_dialog.cc:120
 #, fuzzy
 msgid "Channel Configuration"
 msgstr "Configuração"
 
-#: add_route_dialog.cc:176 editor.cc:131 editor.cc:3660 time_axis_view.cc:551
+#: add_route_dialog.cc:177 editor.cc:134 editor.cc:3688 time_axis_view.cc:552
 msgid "Normal"
 msgstr "Normal"
 
-#: add_route_dialog.cc:178
+#: add_route_dialog.cc:179
 #, fuzzy
 msgid "Tape"
 msgstr "Início"
 
-#: add_route_dialog.cc:195
+#: add_route_dialog.cc:196
 msgid "Mono"
 msgstr ""
 
-#: add_route_dialog.cc:197
+#: add_route_dialog.cc:198
 #, fuzzy
 msgid "Stereo"
 msgstr "Parar"
@@ -303,27 +303,11 @@ msgstr "AUDIÇÃO"
 msgid "SOLO"
 msgstr ""
 
-#: ardour_ui.cc:207
-msgid ""
-"You cannot record-enable\n"
-"track %1\n"
-"because it has no input connections.\n"
-"You would be wasting space recording silence."
-msgstr ""
-
-#: ardour_ui.cc:236
-msgid "no vertical meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:243
-msgid "no horizontal meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:410
+#: ardour_ui.cc:375
 msgid "quit"
 msgstr "sair"
 
-#: ardour_ui.cc:419
+#: ardour_ui.cc:384
 msgid ""
 "Ardour was unable to save your session.\n"
 "\n"
@@ -332,33 +316,33 @@ msgid ""
 "\"Just quit\" option."
 msgstr ""
 
-#: ardour_ui.cc:438
+#: ardour_ui.cc:403
 msgid "ardour: save session?"
 msgstr "ardour: guardar sessão?"
 
-#: ardour_ui.cc:445
+#: ardour_ui.cc:410
 msgid "Don't %1"
 msgstr "Não %1"
 
-#: ardour_ui.cc:447
+#: ardour_ui.cc:412
 msgid "Just %1"
 msgstr "Apenas %1"
 
-#: ardour_ui.cc:449
+#: ardour_ui.cc:414
 msgid "Save and %1"
 msgstr "Guardar e %1"
 
-#: ardour_ui.cc:461
+#: ardour_ui.cc:426
 #, fuzzy
 msgid "session"
 msgstr "Sessão"
 
-#: ardour_ui.cc:463
+#: ardour_ui.cc:428
 #, fuzzy
 msgid "snapshot"
 msgstr "Capturar"
 
-#: ardour_ui.cc:465
+#: ardour_ui.cc:430
 #, fuzzy
 msgid ""
 "The %1\"%2\"\n"
@@ -377,82 +361,82 @@ msgstr ""
 "\n"
 "O que pretende fazer?"
 
-#: ardour_ui.cc:479
+#: ardour_ui.cc:444
 msgid "Prompter"
 msgstr "Alerta"
 
-#: ardour_ui.cc:538
+#: ardour_ui.cc:503
 #, fuzzy, c-format
 msgid "disconnected"
 msgstr "Desligar"
 
-#: ardour_ui.cc:545
+#: ardour_ui.cc:510
 #, fuzzy, c-format
 msgid "SR: %.1f kHz / %4.1f msecs"
 msgstr "FA: %.1f kHz"
 
-#: ardour_ui.cc:549
+#: ardour_ui.cc:514
 #, c-format
 msgid "SR: %u kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:562
+#: ardour_ui.cc:527
 #, c-format
 msgid "DSP Load: %.1f%%"
 msgstr "Carga DSP: %.1f%%"
 
-#: ardour_ui.cc:572
+#: ardour_ui.cc:537
 #, c-format
 msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
 msgstr ""
 
-#: ardour_ui.cc:599
+#: ardour_ui.cc:564
 msgid "space: 24hrs+"
 msgstr "espaço: 24hrs+"
 
-#: ardour_ui.cc:629
+#: ardour_ui.cc:594
 #, c-format
 msgid "space: %02dh:%02dm:%02ds"
 msgstr "espaço: %02dh:%02dm:%02ds"
 
-#: ardour_ui.cc:668
+#: ardour_ui.cc:633
 msgid "programming error: impossible control method"
 msgstr ""
 
-#: ardour_ui.cc:776 new_session_dialog.cc:89
+#: ardour_ui.cc:741 new_session_dialog.cc:294
 #, fuzzy
 msgid "Recent Sessions"
 msgstr "abrir sessão"
 
 #. ardour sessions are folders
-#: ardour_ui.cc:867
+#: ardour_ui.cc:834
 msgid "open session"
 msgstr "abrir sessão"
 
-#: ardour_ui.cc:873
+#: ardour_ui.cc:840
 #, fuzzy
 msgid "Ardour sessions"
 msgstr "ardour: guardar sessão?"
 
-#: ardour_ui.cc:906
+#: ardour_ui.cc:873
 msgid "Patience is a virtue.\n"
 msgstr "A paciência é uma virtude.\n"
 
-#: ardour_ui.cc:915
+#: ardour_ui.cc:882
 msgid "You cannot add a track without a session already loaded."
 msgstr ""
 "Não é possível acrescentar uma faixa sem que haja uma sessão esteja "
 "carregada."
 
-#: ardour_ui.cc:922
+#: ardour_ui.cc:889
 msgid "could not create new audio track"
 msgstr "não foi possível criar uma nova faixa audio"
 
-#: ardour_ui.cc:926
+#: ardour_ui.cc:893
 msgid "could not create new audio bus"
 msgstr "não foi possível criar um novo barramento audio"
 
-#: ardour_ui.cc:945
+#: ardour_ui.cc:912
 msgid ""
 "There are insufficient JACK ports available\n"
 "to create a new track or bus.\n"
@@ -460,14 +444,14 @@ msgid ""
 "restart JACK with more ports."
 msgstr ""
 
-#: ardour_ui.cc:1069
+#: ardour_ui.cc:1036
 msgid ""
 "Please create 1 or more track\n"
 "before trying to record.\n"
 "Check the Session menu."
 msgstr ""
 
-#: ardour_ui.cc:1298
+#: ardour_ui.cc:1265
 #, fuzzy
 msgid ""
 "JACK has either been shutdown or it\n"
@@ -481,57 +465,55 @@ msgstr ""
 "A sessão corrente deverá ser salvaguardada\n"
 "e o serviço JACK reiniciado, tal como o Ardour."
 
-#: ardour_ui.cc:1315
+#: ardour_ui.cc:1282
 msgid "Unable to create all required ports"
 msgstr ""
 
-#: ardour_ui.cc:1323
+#: ardour_ui.cc:1290
 #, fuzzy
 msgid "Unable to start the session running"
 msgstr "Ir para o início da sessão"
 
-#: ardour_ui.cc:1459
+#: ardour_ui.cc:1426
 msgid "No Stream"
 msgstr "Sem Fluxo"
 
-#: ardour_ui.cc:1486 ardour_ui.cc:1505
+#: ardour_ui.cc:1453 ardour_ui.cc:1472
 msgid "none"
 msgstr "nenhum"
 
-#: ardour_ui.cc:1495 ardour_ui.cc:1514 automation_time_axis.cc:183
-#: automation_time_axis.cc:212 automation_time_axis.cc:459 mixer_strip.cc:174
-#: mixer_strip.cc:186 mixer_strip.cc:881 plugin_ui.cc:391 plugin_ui.cc:634
+#: ardour_ui.cc:1462 ardour_ui.cc:1481
 msgid "off"
 msgstr "desligado"
 
-#: ardour_ui.cc:1538
+#: ardour_ui.cc:1505
 #, fuzzy
 msgid "Name of New Snapshot"
 msgstr "Nome para a imagem capturada"
 
-#: ardour_ui.cc:1684
+#: ardour_ui.cc:1651
 msgid "Name for mix template:"
 msgstr "Nome para o modelo de mistura"
 
-#: ardour_ui.cc:1685
+#: ardour_ui.cc:1652
 msgid "-template"
 msgstr "-modelo"
 
-#: ardour_ui.cc:1836
+#: ardour_ui.cc:1809
 msgid ""
 "You do not have write access to this session.\n"
 "This prevents the session from being loaded."
 msgstr ""
 
-#: ardour_ui.cc:1849 ardour_ui.cc:1904
+#: ardour_ui.cc:1822 ardour_ui.cc:1877
 msgid "Session \"%1 (snapshot %2)\" did not load successfully"
 msgstr "Não foi possível carregar a sessão \"%1 (captura %2)\" com sucesso"
 
-#: ardour_ui.cc:1960
+#: ardour_ui.cc:1933
 msgid "No audio files were ready for cleanup"
 msgstr ""
 
-#: ardour_ui.cc:1964
+#: ardour_ui.cc:1937
 msgid ""
 "If this seems suprising, \n"
 "check for any existing snapshots.\n"
@@ -539,25 +521,25 @@ msgid ""
 "require some unused files to continue to exist."
 msgstr ""
 
-#: ardour_ui.cc:1973
+#: ardour_ui.cc:1946
 msgid "ardour: cleanup"
 msgstr "ardour: limpeza"
 
-#: ardour_ui.cc:2009 ardour_ui.cc:2015
+#: ardour_ui.cc:1982 ardour_ui.cc:1988
 #, fuzzy
 msgid "files were"
 msgstr "ficheiros"
 
-#: ardour_ui.cc:2011 ardour_ui.cc:2017
+#: ardour_ui.cc:1984 ardour_ui.cc:1990
 #, fuzzy
 msgid "file was"
 msgstr "ficheiros"
 
-#: ardour_ui.cc:2058
+#: ardour_ui.cc:2031
 msgid "Are you sure you want to cleanup?"
 msgstr ""
 
-#: ardour_ui.cc:2063
+#: ardour_ui.cc:2036
 msgid ""
 "Cleanup is a destructive operation.\n"
 "ALL undo/redo information will be lost if you cleanup.\n"
@@ -565,26 +547,26 @@ msgid ""
 "location."
 msgstr ""
 
-#: ardour_ui.cc:2069
+#: ardour_ui.cc:2042
 #, fuzzy
 msgid "Clean Up"
 msgstr "Apagar"
 
-#: ardour_ui.cc:2072
+#: ardour_ui.cc:2045
 #, fuzzy
 msgid "CleanupDialog"
 msgstr "Apagar"
 
-#: ardour_ui.cc:2073
+#: ardour_ui.cc:2046
 #, fuzzy
 msgid "ardour_cleanup"
 msgstr "ardour: limpeza"
 
-#: ardour_ui.cc:2092
+#: ardour_ui.cc:2065
 msgid "cleaned files"
 msgstr "ficheiros limpos"
 
-#: ardour_ui.cc:2093
+#: ardour_ui.cc:2066
 #, fuzzy
 msgid ""
 "The following %1 %2 not in use and \n"
@@ -599,11 +581,11 @@ msgstr ""
 "Da próxima vez que efectuar uma limpeza\n"
 "irão ser libertados %3 %4 de espaço em disco"
 
-#: ardour_ui.cc:2118
+#: ardour_ui.cc:2091
 msgid "deleted file"
 msgstr "ficheiro eliminado"
 
-#: ardour_ui.cc:2119
+#: ardour_ui.cc:2092
 #, fuzzy
 msgid ""
 "The following %1 %2 deleted from\n"
@@ -613,13 +595,13 @@ msgstr ""
 "Os seguintes %1 ficheiro%2 foram eliminados, libertando %3 %4B de espaço em "
 "disco"
 
-#: ardour_ui.cc:2242
+#: ardour_ui.cc:2215
 msgid "Recording was stopped because your system could not keep up."
 msgstr ""
 "A gravação foi interrompida porque o seu sistema não foi capaz de a "
 "acompanhar."
 
-#: ardour_ui.cc:2265
+#: ardour_ui.cc:2238
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -633,7 +615,7 @@ msgstr ""
 "Especificamente, a velocidade de escrita de dados em disco\n"
 "foi insuficiente para acompanhar o ritmo de gravação.\n"
 
-#: ardour_ui.cc:2284
+#: ardour_ui.cc:2257
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -647,7 +629,7 @@ msgstr ""
 "Especificamente, a velocidade de leitura de dados em disco\n"
 "foi insuficiente para acompanhar o ritmo de reprodução.\n"
 
-#: ardour_ui.cc:2310
+#: ardour_ui.cc:2283
 msgid ""
 "This session appears to have been in\n"
 "middle of recording when ardour or\n"
@@ -665,367 +647,367 @@ msgstr ""
 "capturado até então ou simplesmente ignorá-lo.\n"
 "Por favor decida o que pretende fazer.\n"
 
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2293
 msgid "Recover from crash"
 msgstr "Recuperação"
 
-#: ardour_ui.cc:2321
+#: ardour_ui.cc:2294
 msgid "Ignore crash data"
 msgstr "Ignorar informação de recuperação"
 
-#: ardour_ui.cc:2339
+#: ardour_ui.cc:2312
 #, fuzzy
 msgid "Could not disconnect from JACK"
 msgstr "Não foi possível conectar ao serviço JACK como \"%1\""
 
-#: ardour_ui.cc:2352
+#: ardour_ui.cc:2325
 #, fuzzy
 msgid "Could not reconnect to JACK"
 msgstr "Não foi possível conectar ao serviço JACK como \"%1\""
 
-#: ardour_ui2.cc:59
+#: ardour_ui2.cc:60
 msgid "UI: cannot setup editor"
 msgstr "Não foi possível iniciar o painel principal de edição (editor)"
 
-#: ardour_ui2.cc:64
+#: ardour_ui2.cc:65
 msgid "UI: cannot setup mixer"
 msgstr "Não foi posivel iniciar o painel de mistura"
 
-#: ardour_ui2.cc:90
+#: ardour_ui2.cc:91
 msgid "MMC + Local"
 msgstr ""
 
-#: ardour_ui2.cc:91
+#: ardour_ui2.cc:92
 msgid "MMC"
 msgstr ""
 
-#: ardour_ui2.cc:92
+#: ardour_ui2.cc:93
 msgid "Local"
 msgstr ""
 
-#: ardour_ui2.cc:109
+#: ardour_ui2.cc:110
 msgid "MMC ID"
 msgstr ""
 
-#: ardour_ui2.cc:290
+#: ardour_ui2.cc:291
 msgid "Play from playhead"
 msgstr "Reproduzir desde o cursor de reprodução"
 
-#: ardour_ui2.cc:291
+#: ardour_ui2.cc:292
 msgid "Stop playback"
 msgstr "Parar reprodução"
 
-#: ardour_ui2.cc:292
+#: ardour_ui2.cc:293
 msgid "Play range/selection"
 msgstr "Reproduzir selecção"
 
-#: ardour_ui2.cc:293
+#: ardour_ui2.cc:294
 msgid "Go to start of session"
 msgstr "Ir para o início da sessão"
 
-#: ardour_ui2.cc:294
+#: ardour_ui2.cc:295
 msgid "Go to end of session"
 msgstr "Ir para o final da sessão"
 
-#: ardour_ui2.cc:295
+#: ardour_ui2.cc:296
 msgid "Play loop range"
 msgstr "Reproduzir intervalo cíclico"
 
-#: ardour_ui2.cc:296
+#: ardour_ui2.cc:297
 msgid "Return to last playback start when stopped"
 msgstr "Ir para a última posição inicial do cursor de reprodução quando parar"
 
-#: ardour_ui2.cc:297
+#: ardour_ui2.cc:298
 msgid "Start playback after any locate"
 msgstr "Iniciar a reprodução após qualquer localização"
 
-#: ardour_ui2.cc:298
+#: ardour_ui2.cc:299
 msgid "Be sensible about input monitoring"
 msgstr "Seja sensível acerca de monitorização de entradas"
 
-#: ardour_ui2.cc:299
+#: ardour_ui2.cc:300
 msgid "Start recording at auto-punch start"
 msgstr "Iniciar gravação na posição inicial de inserção automática"
 
-#: ardour_ui2.cc:300
+#: ardour_ui2.cc:301
 msgid "Stop recording at auto-punch end"
 msgstr "Parar gravação na posição final de inserção automática"
 
-#: ardour_ui2.cc:301
+#: ardour_ui2.cc:302
 msgid "Enable/Disable audio click"
 msgstr "Ligar/Desligar o metrónomo"
 
-#: ardour_ui2.cc:302
+#: ardour_ui2.cc:303
 #, fuzzy
 msgid "Positional sync source"
 msgstr "Sicronia de Posição"
 
-#: ardour_ui2.cc:303
+#: ardour_ui2.cc:304
 msgid "Does Ardour control the time?"
 msgstr ""
 
-#: ardour_ui2.cc:304
+#: ardour_ui2.cc:305
 msgid "Shuttle speed control"
 msgstr "Controlo de velocidade"
 
-#: ardour_ui2.cc:305
+#: ardour_ui2.cc:306
 #, fuzzy, c-format
 msgid "Select semitones or %%-age for speed display"
 msgstr "Seleccionar semitons ou %-agem para visualização de velocidade"
 
-#: ardour_ui2.cc:306
+#: ardour_ui2.cc:307
 msgid "Current transport speed"
 msgstr "Velocidade de transporte actual"
 
-#: ardour_ui2.cc:329
+#: ardour_ui2.cc:330
 msgid "Primary clock"
 msgstr "Cronómetro principal"
 
-#: ardour_ui2.cc:330
+#: ardour_ui2.cc:331
 msgid "secondary clock"
 msgstr "Cronómetro secundário"
 
 #. XXX: this should really be saved in instant.xml or something similar and restored from there
 #. Combo's are stupid - they steal space from the entry for the button
-#: ardour_ui2.cc:387 ardour_ui2.cc:823 ardour_ui2.cc:836 ardour_ui2.cc:899
-#: ardour_ui2.cc:901
+#: ardour_ui2.cc:388 ardour_ui2.cc:833 ardour_ui2.cc:846 ardour_ui2.cc:909
+#: ardour_ui2.cc:911
 msgid "sprung"
 msgstr "mola"
 
-#: ardour_ui2.cc:388 ardour_ui2.cc:825 ardour_ui2.cc:847
+#: ardour_ui2.cc:389 ardour_ui2.cc:835 ardour_ui2.cc:857
 msgid "wheel"
 msgstr "roda"
 
-#: ardour_ui2.cc:450
+#: ardour_ui2.cc:451
 msgid "ardour: clock"
 msgstr "ardour: cronómetro"
 
-#: ardour_ui2.cc:595
+#: ardour_ui2.cc:596
 #, fuzzy
 msgid "Maximum speed"
 msgstr "velocidade variável"
 
-#: ardour_ui2.cc:813
+#: ardour_ui2.cc:823
 msgid "st"
 msgstr ""
 
-#: ardour_ui2.cc:857 ardour_ui2.cc:880 ardour_ui2.cc:897
+#: ardour_ui2.cc:867 ardour_ui2.cc:890 ardour_ui2.cc:907
 msgid "stopped"
 msgstr "parado"
 
-#: ardour_ui_dialogs.cc:152 playlist_selector.cc:69
+#: ardour_ui_dialogs.cc:153 playlist_selector.cc:70
 #, fuzzy
 msgid "close"
 msgstr "Fechar"
 
-#: ardour_ui_dialogs.cc:359 ardour_ui_ed.cc:181
+#: ardour_ui_dialogs.cc:360 ardour_ui_ed.cc:184
 #, fuzzy
 msgid "Sound File Browser"
 msgstr "Audioteca"
 
 #. menus + submenus that need action items
-#: ardour_ui_ed.cc:69
+#: ardour_ui_ed.cc:72
 msgid "Session"
 msgstr "Sessão"
 
-#: ardour_ui_ed.cc:70 ardour_ui_ed.cc:127 editor.cc:1843 export_dialog.cc:350
+#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:130 editor.cc:1836 export_dialog.cc:350
 #: export_dialog.cc:1059 export_dialog.cc:1063
 msgid "Export"
 msgstr "Exportar"
 
-#: ardour_ui_ed.cc:71
+#: ardour_ui_ed.cc:74
 msgid "Cleanup"
 msgstr "Apagar"
 
-#: ardour_ui_ed.cc:72 option_editor.cc:125
+#: ardour_ui_ed.cc:75 option_editor.cc:126
 msgid "Sync"
 msgstr "Sincronia"
 
-#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:74
+#: ardour_ui_ed.cc:76 ardour_ui_ed.cc:77
 #, fuzzy
 msgid "Options"
 msgstr "Opções"
 
-#: ardour_ui_ed.cc:75
+#: ardour_ui_ed.cc:78
 msgid "Help"
 msgstr ""
 
-#: ardour_ui_ed.cc:76
+#: ardour_ui_ed.cc:79
 msgid "KeyMouse Actions"
 msgstr ""
 
-#: ardour_ui_ed.cc:77
+#: ardour_ui_ed.cc:80
 #, fuzzy
 msgid "Audio File Format"
 msgstr "Quadros Audio"
 
-#: ardour_ui_ed.cc:78
+#: ardour_ui_ed.cc:81
 #, fuzzy
 msgid "Header"
 msgstr "Pré-Atenuador"
 
-#: ardour_ui_ed.cc:79
+#: ardour_ui_ed.cc:82
 msgid "Data"
 msgstr ""
 
-#: ardour_ui_ed.cc:80
+#: ardour_ui_ed.cc:83
 #, fuzzy
 msgid "Control Surfaces"
 msgstr "Saídas de Controlo"
 
 #. the real actions
-#: ardour_ui_ed.cc:84 audio_time_axis.cc:1856 new_session_dialog.cc:342
+#: ardour_ui_ed.cc:87 audio_time_axis.cc:1854 new_session_dialog.cc:529
 msgid "New"
 msgstr "Novo"
 
-#: ardour_ui_ed.cc:86 new_session_dialog.cc:334
+#: ardour_ui_ed.cc:89 new_session_dialog.cc:517
 msgid "Open"
 msgstr "Abrir"
 
-#: ardour_ui_ed.cc:87
+#: ardour_ui_ed.cc:90
 msgid "Recent"
 msgstr "Recente"
 
-#: ardour_ui_ed.cc:88 io_selector.cc:57 io_selector.cc:791
+#: ardour_ui_ed.cc:91 io_selector.cc:58 io_selector.cc:792
 msgid "Close"
 msgstr "Fechar"
 
-#: ardour_ui_ed.cc:91 route_params_ui.cc:512
+#: ardour_ui_ed.cc:94 route_params_ui.cc:514
 msgid "Add Track/Bus"
 msgstr "Acrescentar Faixa/Barramento"
 
-#: ardour_ui_ed.cc:102
+#: ardour_ui_ed.cc:105
 msgid "Connect"
 msgstr "Ligar"
 
 #. </CMT Additions>
-#: ardour_ui_ed.cc:110
+#: ardour_ui_ed.cc:113
 msgid "Snapshot"
 msgstr "Capturar"
 
-#: ardour_ui_ed.cc:113
+#: ardour_ui_ed.cc:116
 msgid "Save Template..."
 msgstr "Guardar Modelo..."
 
-#: ardour_ui_ed.cc:116
+#: ardour_ui_ed.cc:119
 msgid "Export session to audiofile..."
 msgstr "Exportar sessão para ficheiro audio..."
 
-#: ardour_ui_ed.cc:119
+#: ardour_ui_ed.cc:122
 #, fuzzy
 msgid "Export selection to audiofile..."
 msgstr "Exportar sessão para ficheiro audio..."
 
-#: ardour_ui_ed.cc:123
+#: ardour_ui_ed.cc:126
 #, fuzzy
 msgid "Export range markers to audiofile..."
 msgstr "Exportar intervalo para ficheiro audio..."
 
-#: ardour_ui_ed.cc:130
+#: ardour_ui_ed.cc:133
 msgid "Cleanup unused sources"
 msgstr "Apagar originais em desuso"
 
-#: ardour_ui_ed.cc:132
+#: ardour_ui_ed.cc:135
 msgid "Flush wastebasket"
 msgstr "Limpeza"
 
-#: ardour_ui_ed.cc:138 ardour_ui_options.cc:381 ardour_ui_options.cc:390
-#: ardour_ui_options.cc:462
+#: ardour_ui_ed.cc:141 ardour_ui_options.cc:408 ardour_ui_options.cc:417
+#: ardour_ui_options.cc:489
 #, fuzzy
 msgid "JACK"
 msgstr "RECUAR"
 
-#: ardour_ui_ed.cc:139
+#: ardour_ui_ed.cc:142
 msgid "Latency"
 msgstr ""
 
-#: ardour_ui_ed.cc:141
+#: ardour_ui_ed.cc:144
 #, fuzzy
 msgid "Reconnect"
 msgstr "Ligar"
 
-#: ardour_ui_ed.cc:144 mixer_strip.cc:514 mixer_strip.cc:574
+#: ardour_ui_ed.cc:147 mixer_strip.cc:497 mixer_strip.cc:565
 msgid "Disconnect"
 msgstr "Desligar"
 
-#: ardour_ui_ed.cc:171
+#: ardour_ui_ed.cc:174
 msgid "Windows"
 msgstr "Janelas"
 
-#: ardour_ui_ed.cc:172
+#: ardour_ui_ed.cc:175
 msgid "start prefix"
 msgstr ""
 
-#: ardour_ui_ed.cc:173
+#: ardour_ui_ed.cc:176
 msgid "Quit"
 msgstr "Sair"
 
 #. windows visibility actions
-#: ardour_ui_ed.cc:177
+#: ardour_ui_ed.cc:180
 msgid "Maximise Editor Space"
 msgstr ""
 
-#: ardour_ui_ed.cc:179
+#: ardour_ui_ed.cc:182
 #, fuzzy
 msgid "Show Editor"
 msgstr "Opções"
 
-#: ardour_ui_ed.cc:180
+#: ardour_ui_ed.cc:183
 #, fuzzy
 msgid "Show Mixer"
 msgstr "Mistura"
 
-#: ardour_ui_ed.cc:182
+#: ardour_ui_ed.cc:185
 msgid "Options Editor"
 msgstr "Opções"
 
-#: ardour_ui_ed.cc:183
+#: ardour_ui_ed.cc:186
 #, fuzzy
 msgid "Track/Bus Inspector"
 msgstr "Faixas/Barramentos"
 
-#: ardour_ui_ed.cc:185
+#: ardour_ui_ed.cc:188
 msgid "Connections"
 msgstr "Ligações"
 
-#: ardour_ui_ed.cc:187
+#: ardour_ui_ed.cc:190
 msgid "Locations"
 msgstr "Localizações"
 
-#: ardour_ui_ed.cc:189
+#: ardour_ui_ed.cc:192
 msgid "Big Clock"
 msgstr "Cronómetro Principal"
 
-#: ardour_ui_ed.cc:191
+#: ardour_ui_ed.cc:194
 msgid "About"
 msgstr "Acerca de"
 
-#: ardour_ui_ed.cc:192
+#: ardour_ui_ed.cc:195
 #, fuzzy
 msgid "Colors"
 msgstr "Cor"
 
-#: ardour_ui_ed.cc:194
+#: ardour_ui_ed.cc:197
 #, fuzzy
 msgid "Add Audio Track"
 msgstr "Acrescentar Faixa/Barramento"
 
-#: ardour_ui_ed.cc:196
+#: ardour_ui_ed.cc:199
 #, fuzzy
 msgid "Add Audio Bus"
 msgstr "Esconder todos os barramentos audio"
 
-#: ardour_ui_ed.cc:198
+#: ardour_ui_ed.cc:201
 msgid "Save"
 msgstr "Guardar"
 
-#: ardour_ui_ed.cc:200 editor_actions.cc:254
+#: ardour_ui_ed.cc:203 editor_actions.cc:255
 #, fuzzy
 msgid "Remove Last Capture"
 msgstr "Remover a última captura"
 
 #. do-nothing action for the "transport" menu bar item
-#: ardour_ui_ed.cc:207
+#: ardour_ui_ed.cc:210
 #, fuzzy
 msgid "Transport"
 msgstr "Tradutores"
@@ -1033,74 +1015,74 @@ msgstr "Tradutores"
 #. these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
 #. menus and via button proxies.
 #.
-#: ardour_ui_ed.cc:213 sfdb_ui.cc:57
+#: ardour_ui_ed.cc:216 sfdb_ui.cc:57
 msgid "Stop"
 msgstr "Parar"
 
-#: ardour_ui_ed.cc:216
+#: ardour_ui_ed.cc:219
 msgid "Roll"
 msgstr ""
 
-#: ardour_ui_ed.cc:220
+#: ardour_ui_ed.cc:223
 #, fuzzy
 msgid "Start/Stop"
 msgstr "Início:"
 
-#: ardour_ui_ed.cc:223
+#: ardour_ui_ed.cc:226
 msgid "Stop + Forget Capture"
 msgstr ""
 
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:229
 #, fuzzy
 msgid "Play Loop Range"
 msgstr "Reproduzir intervalo cíclico"
 
-#: ardour_ui_ed.cc:229
+#: ardour_ui_ed.cc:232
 #, fuzzy
 msgid "Play Selection"
 msgstr "Reproduzir região seleccionada"
 
-#: ardour_ui_ed.cc:233
+#: ardour_ui_ed.cc:236
 #, fuzzy
 msgid "Enable Record"
 msgstr "Gravar"
 
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:239
 #, fuzzy
 msgid "Rewind"
 msgstr "Região"
 
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:242
 msgid "Rewind (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:242
+#: ardour_ui_ed.cc:245
 msgid "Rewind (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:245
+#: ardour_ui_ed.cc:248
 #, fuzzy
 msgid "Forward"
 msgstr "retocar p/frente"
 
-#: ardour_ui_ed.cc:248
+#: ardour_ui_ed.cc:251
 msgid "Forward (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:251
+#: ardour_ui_ed.cc:254
 msgid "Forward (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:254
+#: ardour_ui_ed.cc:257
 msgid "Goto Zero"
 msgstr ""
 
-#: ardour_ui_ed.cc:257
+#: ardour_ui_ed.cc:260
 #, fuzzy
 msgid "Goto Start"
 msgstr "Início:"
 
-#: ardour_ui_ed.cc:260
+#: ardour_ui_ed.cc:263
 msgid "Goto End"
 msgstr ""
 
@@ -1108,7 +1090,7 @@ msgstr ""
 #. that proxies for these action to be more compact. It would be nice to find a way to override the action
 #. name appearance on the buttons.
 #.
-#: ardour_ui_ed.cc:269
+#: ardour_ui_ed.cc:272
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1117,7 +1099,7 @@ msgstr ""
 "início de\n"
 "inserção"
 
-#: ardour_ui_ed.cc:272
+#: ardour_ui_ed.cc:275
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1126,11 +1108,11 @@ msgstr ""
 "final de\n"
 "inserção"
 
-#: ardour_ui_ed.cc:275 option_editor.cc:128
+#: ardour_ui_ed.cc:278 option_editor.cc:129
 msgid "Click"
 msgstr "Metrónomo"
 
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:281
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1139,7 +1121,7 @@ msgstr ""
 "entrada\n"
 "automática"
 
-#: ardour_ui_ed.cc:281
+#: ardour_ui_ed.cc:284
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1148,7 +1130,7 @@ msgstr ""
 "reprodução\n"
 "automática"
 
-#: ardour_ui_ed.cc:284
+#: ardour_ui_ed.cc:287
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1157,283 +1139,283 @@ msgstr ""
 "retorno\n"
 "automático"
 
-#: ardour_ui_ed.cc:288
+#: ardour_ui_ed.cc:291
 #, fuzzy
 msgid ""
 "Time\n"
 "master"
 msgstr "Supervisor de tempo JACK"
 
-#: ardour_ui_ed.cc:291
+#: ardour_ui_ed.cc:294
 msgid "Toggle Record Enable Track1"
 msgstr ""
 
-#: ardour_ui_ed.cc:293
+#: ardour_ui_ed.cc:296
 msgid "Toggle Record Enable Track2"
 msgstr ""
 
-#: ardour_ui_ed.cc:295
+#: ardour_ui_ed.cc:298
 msgid "Toggle Record Enable Track3"
 msgstr ""
 
-#: ardour_ui_ed.cc:297
+#: ardour_ui_ed.cc:300
 msgid "Toggle Record Enable Track4"
 msgstr ""
 
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:302
 msgid "Toggle Record Enable Track5"
 msgstr ""
 
-#: ardour_ui_ed.cc:301
+#: ardour_ui_ed.cc:304
 msgid "Toggle Record Enable Track6"
 msgstr ""
 
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:306
 msgid "Toggle Record Enable Track7"
 msgstr ""
 
-#: ardour_ui_ed.cc:305
+#: ardour_ui_ed.cc:308
 msgid "Toggle Record Enable Track8"
 msgstr ""
 
-#: ardour_ui_ed.cc:307
+#: ardour_ui_ed.cc:310
 msgid "Toggle Record Enable Track9"
 msgstr ""
 
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:312
 msgid "Toggle Record Enable Track10"
 msgstr ""
 
-#: ardour_ui_ed.cc:311
+#: ardour_ui_ed.cc:314
 msgid "Toggle Record Enable Track11"
 msgstr ""
 
-#: ardour_ui_ed.cc:313
+#: ardour_ui_ed.cc:316
 msgid "Toggle Record Enable Track12"
 msgstr ""
 
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:318
 msgid "Toggle Record Enable Track13"
 msgstr ""
 
-#: ardour_ui_ed.cc:317
+#: ardour_ui_ed.cc:320
 msgid "Toggle Record Enable Track14"
 msgstr ""
 
-#: ardour_ui_ed.cc:319
+#: ardour_ui_ed.cc:322
 msgid "Toggle Record Enable Track15"
 msgstr ""
 
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:324
 msgid "Toggle Record Enable Track16"
 msgstr ""
 
-#: ardour_ui_ed.cc:323
+#: ardour_ui_ed.cc:326
 msgid "Toggle Record Enable Track17"
 msgstr ""
 
-#: ardour_ui_ed.cc:325
+#: ardour_ui_ed.cc:328
 msgid "Toggle Record Enable Track18"
 msgstr ""
 
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:330
 msgid "Toggle Record Enable Track19"
 msgstr ""
 
-#: ardour_ui_ed.cc:329
+#: ardour_ui_ed.cc:332
 msgid "Toggle Record Enable Track20"
 msgstr ""
 
-#: ardour_ui_ed.cc:331
+#: ardour_ui_ed.cc:334
 msgid "Toggle Record Enable Track21"
 msgstr ""
 
-#: ardour_ui_ed.cc:333
+#: ardour_ui_ed.cc:336
 msgid "Toggle Record Enable Track22"
 msgstr ""
 
-#: ardour_ui_ed.cc:335
+#: ardour_ui_ed.cc:338
 msgid "Toggle Record Enable Track23"
 msgstr ""
 
-#: ardour_ui_ed.cc:337
+#: ardour_ui_ed.cc:340
 msgid "Toggle Record Enable Track24"
 msgstr ""
 
-#: ardour_ui_ed.cc:339
+#: ardour_ui_ed.cc:342
 msgid "Toggle Record Enable Track25"
 msgstr ""
 
-#: ardour_ui_ed.cc:341
+#: ardour_ui_ed.cc:344
 msgid "Toggle Record Enable Track26"
 msgstr ""
 
-#: ardour_ui_ed.cc:343
+#: ardour_ui_ed.cc:346
 msgid "Toggle Record Enable Track27"
 msgstr ""
 
-#: ardour_ui_ed.cc:345
+#: ardour_ui_ed.cc:348
 msgid "Toggle Record Enable Track28"
 msgstr ""
 
-#: ardour_ui_ed.cc:347
+#: ardour_ui_ed.cc:350
 msgid "Toggle Record Enable Track29"
 msgstr ""
 
-#: ardour_ui_ed.cc:349
+#: ardour_ui_ed.cc:352
 msgid "Toggle Record Enable Track30"
 msgstr ""
 
-#: ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:354
 msgid "Toggle Record Enable Track31"
 msgstr ""
 
-#: ardour_ui_ed.cc:353
+#: ardour_ui_ed.cc:356
 msgid "Toggle Record Enable Track32"
 msgstr ""
 
-#: ardour_ui_ed.cc:358
+#: ardour_ui_ed.cc:361
 msgid "Percentage"
 msgstr "Percentagem"
 
-#: ardour_ui_ed.cc:359
+#: ardour_ui_ed.cc:362
 msgid "Semitones"
 msgstr "Semitons"
 
-#: ardour_ui_ed.cc:363
+#: ardour_ui_ed.cc:366
 msgid "Send MTC"
 msgstr "Enviar MTC"
 
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:368
 msgid "Send MMC"
 msgstr "Enviar MMC"
 
-#: ardour_ui_ed.cc:367
+#: ardour_ui_ed.cc:370
 #, fuzzy
 msgid "Use MMC"
 msgstr "Enviar MMC"
 
-#: ardour_ui_ed.cc:369
+#: ardour_ui_ed.cc:372
 #, fuzzy
 msgid "Send MIDI feedback"
 msgstr "Enviar resposta a parametros MIDI"
 
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:374
 #, fuzzy
 msgid "Use MIDI control"
 msgstr "Porta MMC"
 
-#: ardour_ui_ed.cc:374
+#: ardour_ui_ed.cc:377
 #, fuzzy
-msgid "Connect newtrack inputs to hardware"
+msgid "Connect new track inputs to hardware"
 msgstr "Ligar novas faixas automaticamente"
 
-#: ardour_ui_ed.cc:392
+#: ardour_ui_ed.cc:396
 #, fuzzy
 msgid "Connect new track outputs to hardware"
 msgstr "Ligar novas faixas automaticamente"
 
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:398
 #, fuzzy
 msgid "Connect new track outputs to master"
 msgstr "ligar saídas principais automaticamente"
 
-#: ardour_ui_ed.cc:396
+#: ardour_ui_ed.cc:400
 #, fuzzy
 msgid "Manually connect new track outputs"
 msgstr "ligar saídas manualmente"
 
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:405
 #, fuzzy
 msgid "Hardware monitoring"
 msgstr "Usar monitorização física"
 
-#: ardour_ui_ed.cc:402
+#: ardour_ui_ed.cc:406
 #, fuzzy
 msgid "Software monitoring"
 msgstr "Usar monitorização lógica"
 
-#: ardour_ui_ed.cc:403
+#: ardour_ui_ed.cc:407
 #, fuzzy
 msgid "External monitoring"
 msgstr "Usar monitorização física"
 
 #. Configuration object options (i.e. not session specific)
-#: ardour_ui_ed.cc:407
+#: ardour_ui_ed.cc:411
 msgid "Stop plugins with transport"
 msgstr "Suspender efeitos/plug-ins com transporte"
 
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:412
 #, fuzzy
 msgid "Verify remove last capture"
 msgstr "Remover a última captura"
 
-#: ardour_ui_ed.cc:409
+#: ardour_ui_ed.cc:413
 msgid "Stop recording on xrun"
 msgstr "Suspender a gravação em caso de falha sincrónica (XRUN)"
 
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:414
 #, fuzzy
 msgid "Stop transport at session end"
 msgstr "Suspender o transporte no final da sessão"
 
-#: ardour_ui_ed.cc:411
+#: ardour_ui_ed.cc:415
 msgid "-12dB gain reduce ffwd/rewind"
 msgstr ""
 
-#: ardour_ui_ed.cc:412
+#: ardour_ui_ed.cc:416
 msgid "Rec-enable stays engaged at stop"
 msgstr ""
 
 #. session options
-#: ardour_ui_ed.cc:416
+#: ardour_ui_ed.cc:420
 #, fuzzy
 msgid "Do not run plugins while recording"
 msgstr "Executar efeitos/plug-ins durante a gravação"
 
-#: ardour_ui_ed.cc:419
+#: ardour_ui_ed.cc:423
 msgid "Latched solo"
 msgstr "Solo retido"
 
-#: ardour_ui_ed.cc:424
+#: ardour_ui_ed.cc:428
 #, fuzzy
 msgid "Solo in-place"
 msgstr "solo livre"
 
-#: ardour_ui_ed.cc:426
+#: ardour_ui_ed.cc:430
 msgid "Solo via bus"
 msgstr "Solo por barramento"
 
-#: ardour_ui_ed.cc:429
+#: ardour_ui_ed.cc:433
 #, fuzzy
 msgid "Automatically create crossfades"
 msgstr "Desvanecimento cruzado automático em sobreposição"
 
-#: ardour_ui_ed.cc:431
+#: ardour_ui_ed.cc:435
 msgid "Unmute new full crossfades"
 msgstr ""
 
-#: ardour_ui_options.cc:379 ardour_ui_options.cc:389 ardour_ui_options.cc:456
+#: ardour_ui_options.cc:406 ardour_ui_options.cc:416 ardour_ui_options.cc:483
 msgid "Internal"
 msgstr "Interno"
 
-#: ardour_ui_options.cc:380 ardour_ui_options.cc:459
+#: ardour_ui_options.cc:407 ardour_ui_options.cc:486
 msgid "MTC"
 msgstr ""
 
-#: audio_clock.cc:1719 editor.cc:185
+#: audio_clock.cc:1742 editor.cc:188
 msgid "SMPTE"
 msgstr ""
 
-#: audio_clock.cc:1720 editor.cc:184 editor_rulers.cc:359
+#: audio_clock.cc:1743 editor.cc:187 editor_rulers.cc:360
 msgid "Bars:Beats"
 msgstr "Comp:Bat"
 
-#: audio_clock.cc:1721
+#: audio_clock.cc:1744
 msgid "Minutes:Seconds"
 msgstr "Mins:Segs"
 
-#: audio_clock.cc:1722
+#: audio_clock.cc:1745
 msgid "Audio Frames"
 msgstr "Quadros Audio"
 
@@ -1441,288 +1423,310 @@ msgstr "Quadros Audio"
 #. Slowest = 6.6dB/sec falloff at update rate of 40ms
 #. Slow    = 6.8dB/sec falloff at update rate of 40ms
 #.
-#: audio_clock.cc:1723 editor_actions.cc:374 editor_actions.cc:382
+#: audio_clock.cc:1746 editor_actions.cc:375 editor_actions.cc:383
+#: gain_meter.cc:172 panner_ui.cc:89 plugin_ui.cc:392 plugin_ui.cc:635
 msgid "Off"
 msgstr "Desligado"
 
-#: audio_clock.cc:1725
+#: audio_clock.cc:1748
 msgid "Mode"
 msgstr "Modo"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:458
+#: audio_time_axis.cc:91
 msgid "m"
 msgstr ""
 
-#: audio_time_axis.cc:90 mixer_strip.cc:459
+#: audio_time_axis.cc:91
 msgid "s"
 msgstr ""
 
-#: audio_time_axis.cc:90
+#: audio_time_axis.cc:91
 msgid "r"
 msgstr ""
 
-#: audio_time_axis.cc:94
+#: audio_time_axis.cc:95
 msgid "g"
 msgstr ""
 
 #. group
-#: audio_time_axis.cc:95
+#: audio_time_axis.cc:96
 msgid "p"
 msgstr ""
 
-#: audio_time_axis.cc:96 automation_time_axis.cc:31 visual_time_axis.cc:73
+#: audio_time_axis.cc:97 automation_time_axis.cc:32 visual_time_axis.cc:74
 msgid "h"
 msgstr ""
 
 #. height
-#: audio_time_axis.cc:97
+#: audio_time_axis.cc:98
 msgid "a"
 msgstr ""
 
-#: audio_time_axis.cc:98 visual_time_axis.cc:72
+#: audio_time_axis.cc:99 visual_time_axis.cc:73
 msgid "v"
 msgstr ""
 
-#: audio_time_axis.cc:173
+#: audio_time_axis.cc:168 mixer_strip.cc:86
 msgid "Record"
 msgstr "Gravar"
 
-#: audio_time_axis.cc:174 editor_actions.cc:36
+#: audio_time_axis.cc:169 editor_actions.cc:37 mixer_strip.cc:86
 msgid "Solo"
 msgstr ""
 
-#: audio_time_axis.cc:175 editor.cc:1767 editor.cc:1866 panner_ui.cc:385
+#: audio_time_axis.cc:170 editor.cc:1760 editor.cc:1859 mixer_strip.cc:86
+#: panner_ui.cc:427
 msgid "Mute"
 msgstr "Mudo"
 
-#: audio_time_axis.cc:176
+#: audio_time_axis.cc:171
 msgid "Edit Group"
 msgstr "Grupo"
 
-#: audio_time_axis.cc:177 visual_time_axis.cc:91
+#: audio_time_axis.cc:172 visual_time_axis.cc:92
 msgid "Display Height"
 msgstr "Altura"
 
-#: audio_time_axis.cc:178
+#: audio_time_axis.cc:173
 msgid "Playlist"
 msgstr "Lista de Reprodução"
 
-#: audio_time_axis.cc:179 audio_time_axis.cc:743
+#: audio_time_axis.cc:174 audio_time_axis.cc:741
 msgid "Automation"
 msgstr "Automatização"
 
-#: audio_time_axis.cc:180 visual_time_axis.cc:92
+#: audio_time_axis.cc:175 visual_time_axis.cc:93
 msgid "Visual options"
 msgstr "Opções visuais"
 
-#: audio_time_axis.cc:181 visual_time_axis.cc:93
+#: audio_time_axis.cc:176 visual_time_axis.cc:94
 msgid "Hide this track"
 msgstr "Esconder esta faixa"
 
-#: audio_time_axis.cc:337
+#: audio_time_axis.cc:333 mixer_strip.cc:927
 msgid "No group"
 msgstr "Sem grupo"
 
-#: audio_time_axis.cc:704 automation_time_axis.cc:448
-#: imageframe_time_axis.cc:256 marker_time_axis.cc:210
+#: audio_time_axis.cc:702 automation_time_axis.cc:450
+#: imageframe_time_axis.cc:255 marker_time_axis.cc:211
 msgid "Height"
 msgstr "Altura"
 
-#: audio_time_axis.cc:705 color_manager.cc:40 imageframe_time_axis.cc:257
-#: marker_time_axis.cc:211
+#: audio_time_axis.cc:703 color_manager.cc:41 imageframe_time_axis.cc:256
+#: marker_time_axis.cc:212
 msgid "Color"
 msgstr "Cor"
 
-#: audio_time_axis.cc:709
+#: audio_time_axis.cc:707
 msgid "Hide all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:710
+#: audio_time_axis.cc:708
 msgid "Show all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:714 mixer_strip.cc:1236
+#: audio_time_axis.cc:712 mixer_strip.cc:1011
 #, fuzzy
 msgid "Remote Control ID"
 msgstr "remover ponto de controlo"
 
-#: audio_time_axis.cc:720
-msgid "show all automation"
+#: audio_time_axis.cc:718
+#, fuzzy
+msgid "Show all automation"
 msgstr "Mostrar todos as automatizações"
 
-#: audio_time_axis.cc:723
-msgid "show existing automation"
+#: audio_time_axis.cc:721
+#, fuzzy
+msgid "Show existing automation"
 msgstr "Mostrar automatizações existentes"
 
-#: audio_time_axis.cc:726
-msgid "hide all automation"
+#: audio_time_axis.cc:724
+#, fuzzy
+msgid "Hide all automation"
 msgstr "Esconder todos as automatizações"
 
-#: audio_time_axis.cc:731 audio_time_axis.cc:1169 editor.cc:215
-msgid "gain"
-msgstr "ganho"
+#: audio_time_axis.cc:729
+#, fuzzy
+msgid "Fader"
+msgstr "Desvanecimentos"
 
-#: audio_time_axis.cc:736 audio_time_axis.cc:1209
-msgid "pan"
+#: audio_time_axis.cc:734
+#, fuzzy
+msgid "Pan"
 msgstr "pan"
 
-#: audio_time_axis.cc:741
+#: audio_time_axis.cc:739
 msgid "Plugins"
 msgstr ""
 
-#: audio_time_axis.cc:749
+#: audio_time_axis.cc:747
 msgid "Show waveforms"
 msgstr "Mostrar formas de onda"
 
-#: audio_time_axis.cc:757
+#: audio_time_axis.cc:755
 msgid "Traditional"
 msgstr "Tradicional"
 
-#: audio_time_axis.cc:760
+#: audio_time_axis.cc:758
 msgid "Rectified"
 msgstr "Rectificado"
 
-#: audio_time_axis.cc:763
+#: audio_time_axis.cc:761
 msgid "Waveform"
 msgstr "Forma de onda"
 
-#: audio_time_axis.cc:773
+#: audio_time_axis.cc:771
 #, fuzzy
-msgid "align with existing material"
+msgid "Align with existing material"
 msgstr "Material existente"
 
-#: audio_time_axis.cc:778
+#: audio_time_axis.cc:776
 #, fuzzy
-msgid "align with capture time"
+msgid "Align with capture time"
 msgstr "Tempo de captura"
 
-#: audio_time_axis.cc:784
+#: audio_time_axis.cc:782
 #, fuzzy
 msgid "Alignment"
 msgstr "Alinhar"
 
-#: audio_time_axis.cc:790 editor.cc:523 editor_actions.cc:59
-#: mixer_strip.cc:1225
+#: audio_time_axis.cc:788 editor.cc:527 editor_actions.cc:60
+#: mixer_strip.cc:1000 mixer_ui.cc:111
 msgid "Active"
 msgstr "Activar"
 
-#: audio_time_axis.cc:795 editor.cc:1929 editor_actions.cc:319
-#: editor_markers.cc:507 imageframe_time_axis.cc:260 location_ui.cc:56
-#: marker_time_axis.cc:214 mixer_strip.cc:1239
+#: audio_time_axis.cc:793 editor.cc:1922 editor_actions.cc:320
+#: editor_markers.cc:508 imageframe_time_axis.cc:259 location_ui.cc:57
+#: marker_time_axis.cc:215 mixer_strip.cc:1014
 msgid "Remove"
 msgstr "Remover"
 
-#: audio_time_axis.cc:835
+#: audio_time_axis.cc:833
 msgid "Name for playlist"
 msgstr "Nome para lista de reprodução"
 
-#: audio_time_axis.cc:837 audio_time_axis.cc:1853 editor_markers.cc:826
-#: editor_mouse.cc:4609 imageframe_time_axis.cc:249 marker_time_axis.cc:207
-#: meter_bridge_strip.cc:223 mixer_strip.cc:1223 redirect_box.cc:749
-#: redirect_box.cc:1063 route_ui.cc:732 visual_time_axis.cc:325
+#: audio_time_axis.cc:835 audio_time_axis.cc:1851 editor_markers.cc:827
+#: editor_mouse.cc:4673 imageframe_time_axis.cc:248 marker_time_axis.cc:208
+#: meter_bridge_strip.cc:224 mixer_strip.cc:998 redirect_box.cc:751
+#: redirect_box.cc:1065 route_ui.cc:739 visual_time_axis.cc:326
 msgid "Rename"
 msgstr "Renomear"
 
-#: audio_time_axis.cc:870 audio_time_axis.cc:910
+#: audio_time_axis.cc:868 audio_time_axis.cc:908
 #, fuzzy
 msgid "Name for Playlist"
 msgstr "Nome para lista de reprodução"
 
-#: audio_time_axis.cc:1128 visual_time_axis.cc:382
+#: audio_time_axis.cc:1126 visual_time_axis.cc:383
 msgid "a track already exists with that name"
 msgstr "já existe uma faixa com este nome"
 
-#: audio_time_axis.cc:1412 editor.cc:1490 selection.cc:622
+#: audio_time_axis.cc:1167 editor.cc:218
+msgid "gain"
+msgstr "ganho"
+
+#: audio_time_axis.cc:1207
+msgid "pan"
+msgstr "pan"
+
+#: audio_time_axis.cc:1410 editor.cc:1483 selection.cc:634
 msgid "programming error: "
 msgstr ""
 
-#: audio_time_axis.cc:1850
+#: audio_time_axis.cc:1848
 msgid "Current: %1"
 msgstr "Actual: %1"
 
-#: audio_time_axis.cc:1857
+#: audio_time_axis.cc:1855
 msgid "New Copy"
 msgstr "Nova Cópia"
 
-#: audio_time_axis.cc:1859
+#: audio_time_axis.cc:1857
 msgid "Clear Current"
 msgstr "Limpar Actual"
 
-#: audio_time_axis.cc:1861 editor.cc:2031 editor.cc:2107
+#: audio_time_axis.cc:1859 editor.cc:2024 editor.cc:2100
 msgid "Select"
 msgstr "Seleccionar"
 
-#: automation_line.cc:883
+#: automation_line.cc:884
 msgid "automation event move"
 msgstr "mover evento de automatização"
 
-#: automation_line.cc:885
+#: automation_line.cc:886
 msgid "automation range drag"
 msgstr "deslocar intervalo de automatização"
 
-#: automation_line.cc:1014 region_gain_line.cc:61
+#: automation_line.cc:1015 region_gain_line.cc:62
 msgid "remove control point"
 msgstr "remover ponto de controlo"
 
-#: automation_time_axis.cc:32 editor_ops.cc:2813
+#: automation_time_axis.cc:33 editor_ops.cc:2885
 msgid "clear"
 msgstr "apagar"
 
-#: automation_time_axis.cc:74
+#: automation_time_axis.cc:75
 msgid "track height"
 msgstr ""
 
-#: automation_time_axis.cc:75
+#: automation_time_axis.cc:76
 #, fuzzy
 msgid "automation state"
 msgstr "ponto de automatização de panorâmica"
 
-#: automation_time_axis.cc:76
+#: automation_time_axis.cc:77
 #, fuzzy
 msgid "clear track"
 msgstr "apagar intervalos"
 
-#: automation_time_axis.cc:77
+#: automation_time_axis.cc:78
 #, fuzzy
 msgid "hide track"
 msgstr "retocar faixa"
 
-#: automation_time_axis.cc:185 automation_time_axis.cc:223
-#: automation_time_axis.cc:463 mixer_strip.cc:176 mixer_strip.cc:188
-#: plugin_ui.cc:394 plugin_ui.cc:636 region_editor.cc:53
-msgid "play"
-msgstr "reproduzir"
+#: automation_time_axis.cc:184 automation_time_axis.cc:213
+#: automation_time_axis.cc:461
+msgid "Manual"
+msgstr ""
+
+#: automation_time_axis.cc:186 automation_time_axis.cc:224
+#: automation_time_axis.cc:465 editor.cc:2001 editor.cc:2082 gain_meter.cc:174
+#: panner_ui.cc:91 plugin_ui.cc:395 plugin_ui.cc:637 sfdb_ui.cc:56
+msgid "Play"
+msgstr "Reproduzir"
 
-#: automation_time_axis.cc:187 automation_time_axis.cc:234
-#: automation_time_axis.cc:467 mixer_strip.cc:178 mixer_strip.cc:190
-#: plugin_ui.cc:397 plugin_ui.cc:638
-msgid "write"
+#: automation_time_axis.cc:188 automation_time_axis.cc:235
+#: automation_time_axis.cc:469 gain_meter.cc:176 panner_ui.cc:93
+#: plugin_ui.cc:398 plugin_ui.cc:639
+#, fuzzy
+msgid "Write"
 msgstr "escrita"
 
-#: automation_time_axis.cc:189 automation_time_axis.cc:245
-#: automation_time_axis.cc:471 mixer_strip.cc:180 mixer_strip.cc:192
-#: mixer_strip.cc:887 plugin_ui.cc:400 plugin_ui.cc:640
-msgid "touch"
+#: automation_time_axis.cc:190 automation_time_axis.cc:246
+#: automation_time_axis.cc:473 gain_meter.cc:178 panner_ui.cc:95
+#: plugin_ui.cc:401 plugin_ui.cc:641
+#, fuzzy
+msgid "Touch"
 msgstr "tocar"
 
-#: automation_time_axis.cc:256 option_editor.cc:182 option_editor.cc:188
-#: plugin_ui.cc:403
+#: automation_time_axis.cc:257 option_editor.cc:183 option_editor.cc:189
+#: plugin_ui.cc:404
 msgid "???"
 msgstr ""
 
-#: automation_time_axis.cc:270
+#: automation_time_axis.cc:271
 msgid "clear automation"
 msgstr "apagar automatizações"
 
-#: automation_time_axis.cc:450 editor_actions.cc:317
+#: automation_time_axis.cc:452 editor_actions.cc:318
 msgid "Hide"
 msgstr "Esconder"
 
-#: automation_time_axis.cc:452 crossfade_edit.cc:76 redirect_box.cc:1055
+#: automation_time_axis.cc:454 crossfade_edit.cc:78 redirect_box.cc:1057
 msgid "Clear"
 msgstr "Apagar"
 
-#: automation_time_axis.cc:475
+#: automation_time_axis.cc:477
 #, fuzzy
 msgid "State"
 msgstr "Início"
@@ -1870,816 +1874,804 @@ msgstr ""
 msgid "color of fill"
 msgstr ""
 
-#: color_manager.cc:39
+#: color_manager.cc:40
 #, fuzzy
 msgid "Object"
 msgstr "objecto"
 
-#: color_manager.cc:77
+#: color_manager.cc:78
 #, fuzzy
 msgid "cannot open color definition file %1: %2"
 msgstr ""
 "Editor: não foi possível abrir o ficheiro de imagem inicial \"%1\" (%2)"
 
-#: crossfade_edit.cc:73
+#: crossfade_edit.cc:75
 msgid "ardour: x-fade edit"
 msgstr "ardour: desvanecimento cruzado"
 
-#: crossfade_edit.cc:77 panner_ui.cc:401
+#: crossfade_edit.cc:79 panner_ui.cc:443
 #, fuzzy
 msgid "Reset"
 msgstr "reiniciar"
 
-#: crossfade_edit.cc:78
+#: crossfade_edit.cc:80
 #, fuzzy
 msgid "Fade"
 msgstr "Desvanecimentos"
 
-#: crossfade_edit.cc:79
+#: crossfade_edit.cc:81
 #, fuzzy
 msgid "Out (dry)"
 msgstr "saída (limpa)"
 
-#: crossfade_edit.cc:80
+#: crossfade_edit.cc:82
 #, fuzzy
 msgid "Out"
 msgstr "Saída"
 
-#: crossfade_edit.cc:81
+#: crossfade_edit.cc:83
 #, fuzzy
 msgid "In (dry)"
 msgstr "entrada (limpa)"
 
-#: crossfade_edit.cc:82
+#: crossfade_edit.cc:84
 msgid "In"
 msgstr ""
 
-#: crossfade_edit.cc:84
+#: crossfade_edit.cc:86
 #, fuzzy
 msgid "With Pre-roll"
 msgstr "com pré-batimento"
 
-#: crossfade_edit.cc:85
+#: crossfade_edit.cc:87
 #, fuzzy
 msgid "With Post-roll"
 msgstr "com pós-batimento"
 
-#: crossfade_edit.cc:93
+#: crossfade_edit.cc:95
 msgid "Fade In"
 msgstr "Evanescimento"
 
-#: crossfade_edit.cc:94
+#: crossfade_edit.cc:96
 msgid "Fade Out"
 msgstr "Desvanecimento"
 
-#: crossfade_edit.cc:170 editor.cc:1842 editor_actions.cc:315
-#: option_editor.cc:129
+#: crossfade_edit.cc:172 editor.cc:1835 editor_actions.cc:316
+#: option_editor.cc:130
 msgid "Audition"
 msgstr "Audição"
 
-#: editor.cc:101 editor.cc:3588
+#: editor.cc:104 editor.cc:3616
 msgid "Slide"
 msgstr "Deslizar"
 
-#: editor.cc:102 editor.cc:3586
+#: editor.cc:105 editor.cc:3614
 msgid "Splice"
 msgstr "Reunir"
 
-#: editor.cc:107 editor.cc:3643 export_dialog.cc:78 export_dialog.cc:92
-#: export_dialog.cc:893 export_dialog.cc:1225
+#. note that this menu list starts at zero, not 1, because zero
+#. is a valid, if useless, ID.
+#.
+#. leave some breathing room
+#: editor.cc:110 editor.cc:3671 export_dialog.cc:78 export_dialog.cc:92
+#: export_dialog.cc:893 export_dialog.cc:1225 route_ui.cc:437
 msgid "None"
 msgstr "Nenhum"
 
-#: editor.cc:108 editor.cc:3631
+#: editor.cc:111 editor.cc:3659
 msgid "CD Frames"
 msgstr "Quadros CD"
 
-#: editor.cc:109 editor.cc:3633
+#: editor.cc:112 editor.cc:3661
 msgid "SMPTE Frames"
 msgstr "Quadros SMPTE"
 
-#: editor.cc:110 editor.cc:3635
+#: editor.cc:113 editor.cc:3663
 msgid "SMPTE Seconds"
 msgstr "Segundos SMPTE"
 
-#: editor.cc:111 editor.cc:3637
+#: editor.cc:114 editor.cc:3665
 msgid "SMPTE Minutes"
 msgstr "Minutos SMPTE"
 
-#: editor.cc:112 editor.cc:3639
+#: editor.cc:115 editor.cc:3667
 msgid "Seconds"
 msgstr "Segundos"
 
-#: editor.cc:113 editor.cc:3641
+#: editor.cc:116 editor.cc:3669
 msgid "Minutes"
 msgstr "Minutos"
 
-#: editor.cc:114 editor.cc:3613
+#: editor.cc:117 editor.cc:3641
 msgid "Beats/32"
 msgstr "Batimentos/32"
 
-#: editor.cc:115 editor.cc:3611
+#: editor.cc:118 editor.cc:3639
 msgid "Beats/16"
 msgstr "Batimentos/16"
 
-#: editor.cc:116 editor.cc:3609
+#: editor.cc:119 editor.cc:3637
 msgid "Beats/8"
 msgstr "Batimentos/8"
 
-#: editor.cc:117 editor.cc:3607
+#: editor.cc:120 editor.cc:3635
 msgid "Beats/4"
 msgstr "Batimentos/4"
 
-#: editor.cc:118 editor.cc:3605
+#: editor.cc:121 editor.cc:3633
 msgid "Beats/3"
 msgstr "Batimentos/3"
 
-#: editor.cc:119 editor.cc:3615
+#: editor.cc:122 editor.cc:3643
 msgid "Beats"
 msgstr "Batimentos"
 
-#: editor.cc:120 editor.cc:3617
+#: editor.cc:123 editor.cc:3645
 msgid "Bars"
 msgstr "Compassos"
 
-#: editor.cc:121 editor.cc:3619
+#: editor.cc:124 editor.cc:3647
 msgid "Marks"
 msgstr "Marcas"
 
-#: editor.cc:122 editor.cc:141 editor.cc:3621 editor.cc:3687
+#: editor.cc:125 editor.cc:144 editor.cc:3649 editor.cc:3715
 msgid "Edit Cursor"
 msgstr "Cursor de Edição"
 
-#: editor.cc:123 editor.cc:3623
+#: editor.cc:126 editor.cc:3651
 msgid "Region starts"
 msgstr "Inícios de região"
 
-#: editor.cc:124 editor.cc:3625
+#: editor.cc:127 editor.cc:3653
 msgid "Region ends"
 msgstr "Finais de região"
 
-#: editor.cc:125 editor.cc:3629
+#: editor.cc:128 editor.cc:3657
 msgid "Region syncs"
 msgstr "Sincronismos de região"
 
-#: editor.cc:126 editor.cc:3627
+#: editor.cc:129 editor.cc:3655
 msgid "Region bounds"
 msgstr "Extremos de região"
 
-#: editor.cc:132 editor.cc:3662
+#: editor.cc:135 editor.cc:3690
 msgid "Magnetic"
 msgstr "Magnético"
 
-#: editor.cc:137 editor.cc:3679 export_dialog.cc:140 export_dialog.cc:156
+#: editor.cc:140 editor.cc:3707 export_dialog.cc:140 export_dialog.cc:156
 #: export_dialog.cc:1068 export_dialog.cc:1072
 msgid "Left"
 msgstr "Esquerda"
 
-#: editor.cc:138 editor.cc:3681 export_dialog.cc:141 export_dialog.cc:157
+#: editor.cc:141 editor.cc:3709 export_dialog.cc:141 export_dialog.cc:157
 msgid "Right"
 msgstr "Direita"
 
-#: editor.cc:139 editor.cc:3683
+#: editor.cc:142 editor.cc:3711
 msgid "Center"
 msgstr "Centro"
 
-#: editor.cc:140 editor.cc:3685
+#: editor.cc:143 editor.cc:3713
 msgid "Playhead"
 msgstr "Cursor de Reprodução"
 
 #. time display buttons
-#: editor.cc:183
+#: editor.cc:186
 msgid "Mins:Secs"
 msgstr "Mins:Segs"
 
-#: editor.cc:186 editor_rulers.cc:353
+#: editor.cc:189 editor_rulers.cc:354
 msgid "Frames"
 msgstr "Quadros"
 
-#: editor.cc:187 editor_rulers.cc:373
+#: editor.cc:190 editor_rulers.cc:374
 msgid "Tempo"
 msgstr ""
 
-#: editor.cc:188 editor_rulers.cc:367
+#: editor.cc:191 editor_rulers.cc:368
 msgid "Meter"
 msgstr "VUímetro"
 
-#: editor.cc:189 editor_rulers.cc:379
+#: editor.cc:192 editor_rulers.cc:380
 msgid "Location Markers"
 msgstr "Localizações"
 
-#: editor.cc:190 editor_rulers.cc:385
+#: editor.cc:193 editor_rulers.cc:386
 msgid "Range Markers"
 msgstr "Intervalos"
 
-#: editor.cc:191 editor_rulers.cc:391
+#: editor.cc:194 editor_rulers.cc:392
 msgid "Loop/Punch Ranges"
 msgstr "Ciclos/Inserção"
 
-#: editor.cc:213
+#: editor.cc:216
 msgid "range"
 msgstr "intervalo"
 
-#: editor.cc:214
+#: editor.cc:217
 msgid "object"
 msgstr "objecto"
 
-#: editor.cc:216
+#: editor.cc:219
 msgid "zoom"
 msgstr ""
 
-#: editor.cc:217
+#: editor.cc:220
 msgid "timefx"
 msgstr ""
 
-#: editor.cc:218
+#: editor.cc:221
 msgid "listen"
 msgstr ""
 
-#: editor.cc:220
+#: editor.cc:223
 msgid "mode"
 msgstr "modo"
 
-#: editor.cc:221
+#: editor.cc:224
 msgid "automation"
 msgstr "automatização"
 
-#: editor.cc:223
+#: editor.cc:226
 msgid "Edit Mode"
 msgstr "Modo de Edição"
 
-#: editor.cc:224 editor_actions.cc:283
+#: editor.cc:227 editor_actions.cc:284
 msgid "Snap To"
 msgstr "Ajustar a"
 
-#: editor.cc:225
+#: editor.cc:228
 msgid "Snap Mode"
 msgstr "Modo de Ajuste"
 
-#: editor.cc:226
+#: editor.cc:229
 msgid "Zoom Focus"
 msgstr "Zoom(focagem)"
 
 #. </CMT Additions>
 #. nudge
-#: editor.cc:234 editor.cc:1907 editor.cc:2073 editor.cc:2129
+#: editor.cc:237 editor.cc:1900 editor.cc:2066 editor.cc:2122
 msgid "Nudge"
 msgstr "Retocar"
 
-#: editor.cc:466
+#: editor.cc:470
 msgid "Zoom in"
 msgstr "Zoom(+)"
 
-#: editor.cc:467
+#: editor.cc:471
 msgid "Zoom out"
 msgstr "Zoom(-)"
 
-#: editor.cc:470
+#: editor.cc:474
 msgid "Zoom to session"
 msgstr "Zoom(sessão)"
 
-#: editor.cc:485
+#: editor.cc:489
 msgid "Zoom Span"
 msgstr "Zoom(alcance)"
 
-#: editor.cc:498 editor.cc:524 editor_actions.cc:61 mixer_ui.cc:85
+#: editor.cc:502 editor.cc:528 editor_actions.cc:62 mixer_ui.cc:86
+#: mixer_ui.cc:112
 #, fuzzy
 msgid "Visible"
 msgstr "visível"
 
-#: editor.cc:499 editor.cc:522
+#: editor.cc:503 editor.cc:526
 #, fuzzy
 msgid "Name"
 msgstr "Quadros"
 
-#: editor.cc:595 editor.cc:661
+#: editor.cc:602 editor.cc:669
 #, fuzzy
 msgid "Regions"
 msgstr "Região"
 
-#: editor.cc:634 editor.cc:673
+#: editor.cc:642 editor.cc:681
 msgid "Chunks"
 msgstr "Trechos"
 
-#: editor.cc:664
+#: editor.cc:672
 #, fuzzy
 msgid "Tracks/Busses"
 msgstr "Faixas/Barramentos"
 
-#: editor.cc:667
+#: editor.cc:675
 msgid "Snapshots"
 msgstr "Capturas"
 
-#: editor.cc:670
+#: editor.cc:678
 msgid "Edit Groups"
 msgstr "Grupos"
 
-#: editor.cc:719
+#: editor.cc:727
 msgid "Nudge region/selection forwards"
 msgstr "Retocar região/selecção para a frente"
 
-#: editor.cc:720
+#: editor.cc:728
 msgid "Nudge region/selection backwards"
 msgstr "Retocar região/selecção para trás"
 
-#: editor.cc:727 editor_mixer.cc:298
+#: editor.cc:735 editor_mixer.cc:299
 msgid "ardour: editor"
 msgstr ""
 
-#: editor.cc:728
+#: editor.cc:736
 msgid "ardour_editor"
 msgstr ""
 
-#: editor.cc:1190
+#: editor.cc:1183
 msgid "ardour: editor: "
 msgstr ""
 
 #. force name
-#: editor.cc:1275 editor.cc:1284 editor_markers.cc:869
+#: editor.cc:1268 editor.cc:1277 editor_markers.cc:870
 msgid "Loop"
 msgstr "Ciclo"
 
 #. force name
-#: editor.cc:1289 editor.cc:1298 editor_markers.cc:895
+#: editor.cc:1282 editor.cc:1291 editor_markers.cc:896
 msgid "Punch"
 msgstr "Inserção"
 
-#: editor.cc:1446 editor_mouse.cc:1721
+#: editor.cc:1439 editor_mouse.cc:1742
 msgid "programming error: fade in canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor.cc:1458 editor.cc:1475 redirect_box.cc:1071
+#: editor.cc:1451 editor.cc:1468 redirect_box.cc:1073
 msgid "Deactivate"
 msgstr "Desactivar"
 
 #. activation
-#: editor.cc:1460 editor.cc:1477 redirect_box.cc:1069
+#: editor.cc:1453 editor.cc:1470 redirect_box.cc:1071
 msgid "Activate"
 msgstr "Activar"
 
-#: editor.cc:1465 editor.cc:1482
+#: editor.cc:1458 editor.cc:1475
 msgid "Linear"
 msgstr ""
 
-#: editor.cc:1466 editor.cc:1483 editor_actions.cc:375
+#: editor.cc:1459 editor.cc:1476 editor_actions.cc:376
 msgid "Slowest"
 msgstr "Mais lento"
 
-#: editor.cc:1467 editor.cc:1484 editor_actions.cc:376
+#: editor.cc:1460 editor.cc:1477 editor_actions.cc:377
 msgid "Slow"
 msgstr "Lento"
 
-#: editor.cc:1468 editor.cc:1485 editor_actions.cc:378
+#: editor.cc:1461 editor.cc:1478 editor_actions.cc:379
 msgid "Fast"
 msgstr "Rápido"
 
-#: editor.cc:1469 editor.cc:1486 editor_actions.cc:380
+#: editor.cc:1462 editor.cc:1479 editor_actions.cc:381
 msgid "Fastest"
 msgstr "Mais Rápido"
 
-#: editor.cc:1596 editor.cc:1604
+#: editor.cc:1589 editor.cc:1597
 msgid "Freeze"
 msgstr "Congelar"
 
-#: editor.cc:1600
+#: editor.cc:1593
 msgid "Unfreeze"
 msgstr "Descongelar"
 
-#: editor.cc:1769 editor.cc:1864
+#: editor.cc:1762 editor.cc:1857
 #, fuzzy
 msgid "Unmute"
 msgstr "mudo"
 
 #. non-operative menu items for menu bar
 #. show editors
-#: editor.cc:1773 editor.cc:2053 editor.cc:2755 editor_actions.cc:26
-#: editor_markers.cc:506 mixer_strip.cc:512 mixer_strip.cc:572
-#: redirect_box.cc:1077
+#: editor.cc:1766 editor.cc:2046 editor.cc:2748 editor_actions.cc:27
+#: editor_markers.cc:507 mixer_strip.cc:495 mixer_strip.cc:563
+#: redirect_box.cc:1079
 msgid "Edit"
 msgstr "Editar"
 
-#: editor.cc:1778
+#: editor.cc:1771
 msgid "Convert to short"
 msgstr ""
 
-#: editor.cc:1780
+#: editor.cc:1773
 msgid "Convert to full"
 msgstr ""
 
-#: editor.cc:1791
+#: editor.cc:1784
 #, fuzzy
 msgid "Crossfade"
 msgstr "Desvanecimento cruzado"
 
-#: editor.cc:1834
+#: editor.cc:1827
 msgid "Popup region editor"
 msgstr "Editor de região"
 
-#: editor.cc:1835
+#: editor.cc:1828
 #, fuzzy
 msgid "Raise to top layer"
 msgstr "Elevar a região para o nível de topo"
 
-#: editor.cc:1836
+#: editor.cc:1829
 #, fuzzy
 msgid "Lower to bottom layer"
 msgstr "Descer a região para o nível de fundo"
 
-#: editor.cc:1838
+#: editor.cc:1831
 msgid "Define sync point"
 msgstr "Definir ponto de sincronia"
 
-#: editor.cc:1839
+#: editor.cc:1832
 msgid "Remove sync point"
 msgstr "Remover ponto de sincronia"
 
-#: editor.cc:1844
+#: editor.cc:1837
 #, fuzzy
 msgid "Bounce"
 msgstr "Rebater intervalo"
 
-#: editor.cc:1847
+#: editor.cc:1840
 #, fuzzy
 msgid "Analyze region"
 msgstr "Reproduzir Região"
 
-#: editor.cc:1859
+#: editor.cc:1852
 msgid "Lock"
 msgstr "Bloquear"
 
-#: editor.cc:1860
+#: editor.cc:1853
 msgid "Unlock"
 msgstr "Desbloquear"
 
-#: editor.cc:1870
+#: editor.cc:1863
 msgid "Original position"
 msgstr "Posição original"
 
-#: editor.cc:1876
+#: editor.cc:1869
 msgid "Toggle envelope visibility"
 msgstr ""
 
-#: editor.cc:1877
+#: editor.cc:1870
 #, fuzzy
 msgid "Toggle envelope active"
 msgstr "Activação"
 
-#: editor.cc:1881
+#: editor.cc:1874
 msgid "DeNormalize"
 msgstr "Denormalizar"
 
-#: editor.cc:1883
+#: editor.cc:1876
 msgid "Normalize"
 msgstr "Normalizar"
 
-#: editor.cc:1886
+#: editor.cc:1879
 msgid "Reverse"
 msgstr "Inverter"
 
 #. range related stuff
-#: editor.cc:1892
+#: editor.cc:1885
 #, fuzzy
 msgid "Add Range Markers"
 msgstr "Intervalos"
 
-#: editor.cc:1893
+#: editor.cc:1886
 #, fuzzy
 msgid "Set Range"
 msgstr "Separar Intervalo"
 
-#: editor.cc:1902
+#: editor.cc:1895
 msgid "Nudge fwd"
 msgstr "Retocar p/frente"
 
-#: editor.cc:1903
+#: editor.cc:1896
 msgid "Nudge bwd"
 msgstr "Retocar p/trás"
 
-#: editor.cc:1904
+#: editor.cc:1897
 msgid "Nudge fwd by capture offset"
 msgstr "Retocar p/frente captura"
 
-#: editor.cc:1905
+#: editor.cc:1898
 msgid "Nudge bwd by capture offset"
 msgstr "Retocar p/trás captura"
 
-#: editor.cc:1914
+#: editor.cc:1907
 msgid "Start to edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor.cc:1915
+#: editor.cc:1908
 msgid "Edit cursor to end"
 msgstr "Do cursor de edição ao final"
 
-#: editor.cc:1917
+#: editor.cc:1910 gain_meter.cc:181 gain_meter.cc:813 panner_ui.cc:98
+#: panner_ui.cc:803
 msgid "Trim"
 msgstr "Cortar"
 
-#: editor.cc:1920
+#: editor.cc:1913
 msgid "Split"
 msgstr "Separar"
 
-#: editor.cc:1923
+#: editor.cc:1916
 msgid "Make mono regions"
 msgstr "Criar regiões mono"
 
-#: editor.cc:1926
+#: editor.cc:1919
 msgid "Duplicate"
 msgstr "Duplicar"
 
-#: editor.cc:1927
+#: editor.cc:1920
 msgid "Fill Track"
 msgstr "Preencher Faixa"
 
-#: editor.cc:1931
+#: editor.cc:1924
 msgid "Destroy"
 msgstr "Destruir"
 
-#: editor.cc:1961
+#: editor.cc:1954
 msgid "Play range"
 msgstr "Reproduzir intervalo"
 
-#: editor.cc:1962
+#: editor.cc:1955
 msgid "Loop range"
 msgstr "Intervalo cíclico"
 
-#: editor.cc:1966
+#: editor.cc:1959
 #, fuzzy
 msgid "Analyze range"
 msgstr "Reproduzir intervalo"
 
-#: editor.cc:1970
+#: editor.cc:1963
 #, fuzzy
 msgid "Separate range to track"
 msgstr "Separar Intervalo"
 
-#: editor.cc:1971
+#: editor.cc:1964
 #, fuzzy
 msgid "Separate range to region list"
 msgstr "seleccionar regiões"
 
-#: editor.cc:1974
+#: editor.cc:1967
 #, fuzzy
 msgid "Select all in range"
 msgstr "Seleccionar tudo na faixa"
 
-#: editor.cc:1976 editor.cc:2021
+#: editor.cc:1969 editor.cc:2014
 #, fuzzy
 msgid "Set range to loop range"
 msgstr "Seleccionar intervalo de ciclo"
 
-#: editor.cc:1977 editor.cc:2022
+#: editor.cc:1970 editor.cc:2015
 #, fuzzy
 msgid "Set range to punch range"
 msgstr "Seleccionar intervalo de inserção"
 
-#: editor.cc:1979
+#: editor.cc:1972
 #, fuzzy
 msgid "Crop region to range"
 msgstr "Cortar Regão para intervalo"
 
-#: editor.cc:1980
+#: editor.cc:1973
 #, fuzzy
 msgid "Fill range with region"
 msgstr "Preencher intervalo c/Região"
 
-#: editor.cc:1981
+#: editor.cc:1974
 #, fuzzy
 msgid "Duplicate range"
 msgstr "Duplicar"
 
-#: editor.cc:1982
+#: editor.cc:1975
 msgid "Create chunk from range"
 msgstr "Criar trecho desde intervalo"
 
-#: editor.cc:1984
+#: editor.cc:1977
 msgid "Bounce range"
 msgstr "Rebater intervalo"
 
-#: editor.cc:1985
+#: editor.cc:1978
 #, fuzzy
 msgid "Export range"
 msgstr "Exportar região"
 
-#: editor.cc:1987
+#: editor.cc:1980
 msgid "Range"
 msgstr "Intervalo"
 
-#: editor.cc:2002 editor.cc:2087
+#: editor.cc:1995 editor.cc:2080
 msgid "Play from edit cursor"
 msgstr "Reproduzir desde o cursor de edição"
 
-#: editor.cc:2003 editor.cc:2088
+#: editor.cc:1996 editor.cc:2081
 msgid "Play from start"
 msgstr "Reproduzir desde o início"
 
-#: editor.cc:2004
+#: editor.cc:1997
 #, fuzzy
 msgid "Play region"
 msgstr "Reproduzir Região"
 
-#: editor.cc:2006
+#: editor.cc:1999
 msgid "Loop Region"
 msgstr "Região Cíclica"
 
-#: editor.cc:2008 editor.cc:2089 sfdb_ui.cc:56
-msgid "Play"
-msgstr "Reproduzir"
-
-#: editor.cc:2016 editor.cc:2097
+#: editor.cc:2009 editor.cc:2090
 msgid "Select All in track"
 msgstr "Seleccionar tudo na faixa"
 
-#: editor.cc:2017 editor.cc:2098 redirect_box.cc:1065
+#: editor.cc:2010 editor.cc:2091 redirect_box.cc:1067
 msgid "Select All"
 msgstr "Seleccionar tudo"
 
-#: editor.cc:2018 editor.cc:2099
+#: editor.cc:2011 editor.cc:2092
 #, fuzzy
 msgid "Invert selection in track"
 msgstr "Inverter na faixa"
 
-#: editor.cc:2019 editor.cc:2100
+#: editor.cc:2012 editor.cc:2093
 #, fuzzy
 msgid "Invert selection"
 msgstr "mover selecção"
 
-#: editor.cc:2024 editor.cc:2102
+#: editor.cc:2017 editor.cc:2095
 #, fuzzy
 msgid "Select all after edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor.cc:2025 editor.cc:2103
+#: editor.cc:2018 editor.cc:2096
 #, fuzzy
 msgid "Select all before edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor.cc:2026 editor.cc:2104
+#: editor.cc:2019 editor.cc:2097
 #, fuzzy
 msgid "Select all after playhead"
 msgstr "Desde cursor de reprodução"
 
-#: editor.cc:2027 editor.cc:2105
+#: editor.cc:2020 editor.cc:2098
 #, fuzzy
 msgid "Select all before playhead"
 msgstr "Desde cursor de reprodução"
 
-#: editor.cc:2028
+#: editor.cc:2021
 #, fuzzy
 msgid "Select all between cursors"
 msgstr "Do início ao cursor de edição"
 
 #. standard editing stuff
-#: editor.cc:2039 editor.cc:2115 editor.cc:3455 editor_actions.cc:213
-#: redirect_box.cc:1058
+#: editor.cc:2032 editor.cc:2108 editor.cc:3483 editor_actions.cc:214
+#: redirect_box.cc:1060
 msgid "Cut"
 msgstr "Cortar"
 
-#: editor.cc:2040 editor.cc:2116 editor.cc:3457 editor_actions.cc:218
-#: redirect_box.cc:1060
+#: editor.cc:2033 editor.cc:2109 editor.cc:3485 editor_actions.cc:219
+#: redirect_box.cc:1062
 msgid "Copy"
 msgstr "Copiar"
 
-#: editor.cc:2041
+#: editor.cc:2034
 #, fuzzy
 msgid "Paste at edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor.cc:2042
+#: editor.cc:2035
 #, fuzzy
 msgid "Paste at mouse"
 msgstr "usar saídas principais"
 
-#: editor.cc:2046 editor.cc:3462
+#: editor.cc:2039 editor.cc:3490
 msgid "Align"
 msgstr "Alinhar"
 
-#: editor.cc:2047 editor.cc:3464
+#: editor.cc:2040 editor.cc:3492
 msgid "Align Relative"
 msgstr "Alinhar Relativamente"
 
-#: editor.cc:2051
+#: editor.cc:2044
 msgid "Insert chunk"
 msgstr "Inserir trecho"
 
-#: editor.cc:2058
+#: editor.cc:2051
 #, fuzzy
 msgid "Insert Selected Region"
 msgstr "seleccionar regiões"
 
-#: editor.cc:2059
+#: editor.cc:2052
 msgid "Insert Existing Audio"
 msgstr ""
 
-#: editor.cc:2068 editor.cc:2124
+#: editor.cc:2061 editor.cc:2117
 msgid "Nudge entire track fwd"
 msgstr "Retocar toda a faixa p/frente"
 
-#: editor.cc:2069 editor.cc:2125
+#: editor.cc:2062 editor.cc:2118
 msgid "Nudge track after edit cursor fwd"
 msgstr "Retocar a faixa p/frente do cursor de edição"
 
-#: editor.cc:2070 editor.cc:2126
+#: editor.cc:2063 editor.cc:2119
 msgid "Nudge entire track bwd"
 msgstr "Retocar toda a faixa p/trás"
 
-#: editor.cc:2071 editor.cc:2127
+#: editor.cc:2064 editor.cc:2120
 msgid "Nudge track after edit cursor bwd"
 msgstr "Retocar a faixa p/trás do cursor de edição"
 
-#: editor.cc:2117 editor.cc:3459 editor_actions.cc:220 redirect_box.cc:1062
+#: editor.cc:2110 editor.cc:3487 editor_actions.cc:221 redirect_box.cc:1064
 msgid "Paste"
 msgstr "Colar"
 
-#: editor.cc:2637
+#: editor.cc:2630
 msgid "select/move objects"
 msgstr "seleccionar/mover objectos"
 
-#: editor.cc:2638
+#: editor.cc:2631
 msgid "select/move ranges"
 msgstr "seleccionar/mover intervalos"
 
-#: editor.cc:2639
+#: editor.cc:2632
 msgid "draw gain automation"
 msgstr "desenhar automatização de ganho"
 
-#: editor.cc:2640
+#: editor.cc:2633
 msgid "select zoom range"
 msgstr "seleccionar zoom"
 
-#: editor.cc:2641
+#: editor.cc:2634
 msgid "stretch/shrink regions"
 msgstr "alongar/estreitar regiões"
 
-#: editor.cc:2642
+#: editor.cc:2635
 #, fuzzy
 msgid "listen to specific regions"
 msgstr "seleccionar regiões"
 
-#: editor.cc:2753
+#: editor.cc:2746
 msgid "Start:"
 msgstr "Início:"
 
-#: editor.cc:2754
+#: editor.cc:2747
 msgid "End:"
 msgstr "Final:"
 
-#: editor.cc:3097
-#, fuzzy
-msgid "set selected trackview"
-msgstr "seleccionar visualização de faixa"
+#: editor.cc:3362 editor.cc:3402
+msgid "set selected regions"
+msgstr "seleccionar regiões"
 
-#: editor.cc:3137
-#, fuzzy
-msgid "set selected control point"
-msgstr "remover ponto de controlo"
-
-#: editor.cc:3246
-msgid "set selected regionview"
-msgstr "seleccionar visualização de região"
-
-#: editor.cc:3334 editor.cc:3374
-msgid "set selected regions"
-msgstr "seleccionar regiões"
-
-#: editor.cc:3430 editor_actions.cc:203
+#: editor.cc:3458 editor_actions.cc:204
 msgid "Undo"
 msgstr "Desfazer"
 
-#: editor.cc:3432
+#: editor.cc:3460
 msgid "Undo (%1)"
 msgstr "Desfazer (%1)"
 
-#: editor.cc:3442 editor_actions.cc:205
+#: editor.cc:3470 editor_actions.cc:206
 msgid "Redo"
 msgstr "Refazer"
 
-#: editor.cc:3444
+#: editor.cc:3472
 msgid "Redo (%1)"
 msgstr "Refazer (%1)"
 
-#: editor.cc:3478
+#: editor.cc:3506
 msgid "... as new track"
 msgstr ""
 
-#: editor.cc:3479
+#: editor.cc:3507
 #, fuzzy
 msgid "... as new region"
 msgstr "alinhar região"
 
-#: editor.cc:3481
+#: editor.cc:3509
 msgid "Import audio (copy)"
 msgstr "Importar audio (copiar)"
 
-#: editor.cc:3484
+#: editor.cc:3512
 msgid "Remove last capture"
 msgstr "Remover a última captura"
 
-#: editor.cc:3508
+#: editor.cc:3536
 msgid "Duplicate how many times?"
 msgstr "Duplicar quantas vezes?"
 
-#: editor.cc:3994
+#: editor.cc:4022
 msgid ""
 "Playlist %1 is currently unused.\n"
 "If left alone, no audio files used by it will be cleaned.\n"
@@ -2691,768 +2683,768 @@ msgstr ""
 "Se for eliminada, todos os ficheiros de audio serão respectivamente "
 "eliminados."
 
-#: editor.cc:4002
+#: editor.cc:4030
 msgid "Delete playlist"
 msgstr "Eliminar lista de reprodução"
 
-#: editor.cc:4003
+#: editor.cc:4031
 #, fuzzy
 msgid "Keep playlist"
 msgstr "Manter lista de reprodução"
 
-#: editor.cc:4004 editor_audio_import.cc:237 editor_ops.cc:1976
-#: editor_timefx.cc:52 export_dialog.cc:971 io_selector.cc:58
-#: io_selector.cc:792 redirect_box.cc:901 tempo_dialog.cc:19
-#: tempo_dialog.cc:36 tempo_dialog.cc:152 tempo_dialog.cc:170
+#: editor.cc:4032 editor_audio_import.cc:236 editor_ops.cc:2048
+#: editor_timefx.cc:71 export_dialog.cc:971 io_selector.cc:59
+#: io_selector.cc:793 redirect_box.cc:903 tempo_dialog.cc:20
+#: tempo_dialog.cc:37 tempo_dialog.cc:202 tempo_dialog.cc:220
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: editor.cc:4171
+#: editor.cc:4199
 #, fuzzy
 msgid "new playlists"
 msgstr "Manter lista de reprodução"
 
-#: editor.cc:4179
+#: editor.cc:4207
 #, fuzzy
 msgid "copy playlists"
 msgstr "Manter lista de reprodução"
 
-#: editor.cc:4187
+#: editor.cc:4215
 #, fuzzy
 msgid "clear playlists"
 msgstr "limpar lista de reprodução"
 
-#: editor_actions.cc:27
+#: editor_actions.cc:28
 #, fuzzy
 msgid "Select regions"
 msgstr "seleccionar regiões"
 
-#: editor_actions.cc:28
+#: editor_actions.cc:29
 #, fuzzy
 msgid "Select range operations"
 msgstr "seleccionar regiões"
 
-#: editor_actions.cc:29
+#: editor_actions.cc:30
 #, fuzzy
 msgid "Move edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor_actions.cc:30
+#: editor_actions.cc:31
 #, fuzzy
 msgid "Region operations"
 msgstr "Regiões/criação"
 
-#: editor_actions.cc:31
+#: editor_actions.cc:32
 msgid "Tools"
 msgstr ""
 
-#: editor_actions.cc:32
+#: editor_actions.cc:33
 msgid "View"
 msgstr ""
 
-#: editor_actions.cc:33
+#: editor_actions.cc:34
 #, fuzzy
 msgid "ZoomFocus"
 msgstr "Zoom(focagem)"
 
-#: editor_actions.cc:34
+#: editor_actions.cc:35
 #, fuzzy
 msgid "Meter hold"
 msgstr "VUímetro"
 
-#: editor_actions.cc:35
+#: editor_actions.cc:36
 msgid "Meter falloff"
 msgstr ""
 
-#: editor_actions.cc:37
+#: editor_actions.cc:38
 #, fuzzy
 msgid "Crossfades"
 msgstr "Desvanecimento cruzado"
 
-#: editor_actions.cc:38
+#: editor_actions.cc:39
 #, fuzzy
 msgid "Monitoring"
 msgstr "Usar monitorização física"
 
-#: editor_actions.cc:39
+#: editor_actions.cc:40
 #, fuzzy
 msgid "Autoconnect"
 msgstr "Ligar"
 
-#: editor_actions.cc:40
+#: editor_actions.cc:41
 #, fuzzy
 msgid "Layering"
 msgstr "Nível"
 
-#: editor_actions.cc:41
+#: editor_actions.cc:42
 #, fuzzy
 msgid "Metering"
 msgstr "VUímetro"
 
-#: editor_actions.cc:42
+#: editor_actions.cc:43
 msgid "Fall off rate"
 msgstr ""
 
-#: editor_actions.cc:43
+#: editor_actions.cc:44
 msgid "Hold Time"
 msgstr ""
 
-#: editor_actions.cc:44
+#: editor_actions.cc:45
 msgid "Add Existing Audio"
 msgstr ""
 
 #. add named actions for the editor
-#: editor_actions.cc:49
+#: editor_actions.cc:50
 #, fuzzy
 msgid "Show Editor Mixer"
 msgstr "Mostrar painéis de mistura de todas as faixas audio"
 
-#: editor_actions.cc:54
+#: editor_actions.cc:55
 #, fuzzy
 msgid "Span Entire Overlap"
 msgstr "Elevar a região em um nível"
 
-#: editor_actions.cc:56 editor_actions.cc:383
+#: editor_actions.cc:57 editor_actions.cc:384
 #, fuzzy
 msgid "Short"
 msgstr "porta"
 
-#: editor_actions.cc:63
+#: editor_actions.cc:64
 msgid "Created Automatically"
 msgstr ""
 
-#: editor_actions.cc:66
+#: editor_actions.cc:67
 msgid "Playhead to Next Region Start"
 msgstr ""
 
-#: editor_actions.cc:68
+#: editor_actions.cc:69
 msgid "Playhead to Next Region End"
 msgstr ""
 
-#: editor_actions.cc:70
+#: editor_actions.cc:71
 msgid "Playhead to Next Region Sync"
 msgstr ""
 
-#: editor_actions.cc:73
+#: editor_actions.cc:74
 msgid "Playhead to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:75
+#: editor_actions.cc:76
 msgid "Playhead to Previous Region End"
 msgstr ""
 
-#: editor_actions.cc:77
+#: editor_actions.cc:78
 msgid "Playhead to Previous Region Sync"
 msgstr ""
 
-#: editor_actions.cc:80
+#: editor_actions.cc:81
 #, fuzzy
 msgid "Edit Cursor to Next Region Start"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:82
+#: editor_actions.cc:83
 #, fuzzy
 msgid "Edit Cursor to Next Region End"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:84
+#: editor_actions.cc:85
 #, fuzzy
 msgid "Edit Cursor to Next Region Sync"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:87
+#: editor_actions.cc:88
 msgid "Edit Cursor to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:89
+#: editor_actions.cc:90
 #, fuzzy
 msgid "Edit Cursor to Previous Region End"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:91
+#: editor_actions.cc:92
 #, fuzzy
 msgid "Edit Cursor to Previous Region Sync"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:94
+#: editor_actions.cc:95
 msgid "Playhead to Range Start"
 msgstr ""
 
-#: editor_actions.cc:96
+#: editor_actions.cc:97
 #, fuzzy
 msgid "Playhead to Range End"
 msgstr "Reproduzir intervalo cíclico"
 
-#: editor_actions.cc:99
+#: editor_actions.cc:100
 #, fuzzy
 msgid "Edit Cursor to Range Start"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:101
+#: editor_actions.cc:102
 #, fuzzy
 msgid "Edit Cursor to Range End"
 msgstr "Do cursor de edição ao final"
 
-#: editor_actions.cc:104 editor_ops.cc:1300
+#: editor_actions.cc:105 editor_ops.cc:1363
 #, fuzzy
 msgid "select all"
 msgstr "Seleccionar tudo"
 
-#: editor_actions.cc:106
+#: editor_actions.cc:107
 #, fuzzy
 msgid "Select All After Edit Cursor"
 msgstr "sincronizar pelo cursor de edição"
 
-#: editor_actions.cc:108
+#: editor_actions.cc:109
 msgid "Select All Before Edit Cursor"
 msgstr ""
 
-#: editor_actions.cc:111
+#: editor_actions.cc:112
 #, fuzzy
 msgid "Select All After Playhead"
 msgstr "Desde cursor de reprodução"
 
-#: editor_actions.cc:113
+#: editor_actions.cc:114
 #, fuzzy
 msgid "Select All Before Playhead"
 msgstr "Desde cursor de reprodução"
 
-#: editor_actions.cc:115
+#: editor_actions.cc:116
 #, fuzzy
 msgid "Select All Between Cursors"
 msgstr "sincronizar pelo cursor de edição"
 
-#: editor_actions.cc:118
+#: editor_actions.cc:119
 #, fuzzy
 msgid "Select All in Punch Range"
 msgstr "Seleccionar Intervalo de Inserção"
 
-#: editor_actions.cc:120
+#: editor_actions.cc:121
 #, fuzzy
 msgid "Select All in Loop Range"
 msgstr "Seleccionar intervalo de ciclo"
 
-#: editor_actions.cc:123
+#: editor_actions.cc:124
 msgid "Jump Forward to Mark"
 msgstr ""
 
-#: editor_actions.cc:125
+#: editor_actions.cc:126
 msgid "Jump Backward to Mark"
 msgstr ""
 
-#: editor_actions.cc:127
+#: editor_actions.cc:128
 #, fuzzy
 msgid "Add Location from Playhead"
 msgstr "Desde cursor de reprodução"
 
-#: editor_actions.cc:130
+#: editor_actions.cc:131
 #, fuzzy
 msgid "Nudge Forward"
 msgstr "retocar p/frente"
 
-#: editor_actions.cc:132
+#: editor_actions.cc:133
 #, fuzzy
 msgid "Nudge Next Forward"
 msgstr "retocar p/frente"
 
-#: editor_actions.cc:134
+#: editor_actions.cc:135
 #, fuzzy
 msgid "Nudge Backward"
 msgstr "Retocar p/trás"
 
-#: editor_actions.cc:136
+#: editor_actions.cc:137
 #, fuzzy
 msgid "Nudge Next Backward"
 msgstr "Retocar toda a faixa p/frente"
 
-#: editor_actions.cc:139
+#: editor_actions.cc:140
 #, fuzzy
 msgid "Zoom Out"
 msgstr "Zoom(-)"
 
-#: editor_actions.cc:141
+#: editor_actions.cc:142
 #, fuzzy
 msgid "Zoom In"
 msgstr "Zoom(+)"
 
-#: editor_actions.cc:143
+#: editor_actions.cc:144
 #, fuzzy
 msgid "Zoom to Session"
 msgstr "Zoom(sessão)"
 
-#: editor_actions.cc:146
+#: editor_actions.cc:147
 #, fuzzy
 msgid "Scroll Tracks Up"
 msgstr "Preencher Faixa"
 
-#: editor_actions.cc:148
+#: editor_actions.cc:149
 msgid "Scroll Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:150
+#: editor_actions.cc:151
 #, fuzzy
 msgid "Step Tracks Up"
 msgstr "retocar faixa"
 
-#: editor_actions.cc:152
+#: editor_actions.cc:153
 msgid "Step Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:155
+#: editor_actions.cc:156
 msgid "Scroll Backward"
 msgstr ""
 
-#: editor_actions.cc:157
+#: editor_actions.cc:158
 msgid "Scroll Forward"
 msgstr ""
 
-#: editor_actions.cc:159
+#: editor_actions.cc:160
 msgid "goto"
 msgstr ""
 
-#: editor_actions.cc:161
+#: editor_actions.cc:162
 #, fuzzy
 msgid "Center Playhead"
 msgstr "Cursor de Reprodução"
 
-#: editor_actions.cc:163
+#: editor_actions.cc:164
 #, fuzzy
 msgid "Center Edit Cursor"
 msgstr "Cursor de Edição"
 
-#: editor_actions.cc:165
+#: editor_actions.cc:166
 #, fuzzy
 msgid "Playhead Forward"
 msgstr "Cursor de Reprodução"
 
-#: editor_actions.cc:167
+#: editor_actions.cc:168
 #, fuzzy
 msgid "Playhead Backward"
 msgstr "Cursor de Reprodução"
 
-#: editor_actions.cc:169
+#: editor_actions.cc:170
 #, fuzzy
 msgid "Playhead to Edit"
 msgstr "Cursor de Reprodução"
 
-#: editor_actions.cc:171
+#: editor_actions.cc:172
 #, fuzzy
 msgid "Edit to Playhead"
 msgstr "Desde cursor de reprodução"
 
-#: editor_actions.cc:174
+#: editor_actions.cc:175
 #, fuzzy
 msgid "Align Regions Start"
 msgstr "Inícios de região"
 
-#: editor_actions.cc:176
+#: editor_actions.cc:177
 #, fuzzy
 msgid "Align Regions Start Relative"
 msgstr "alinhar selecção (relativamente)"
 
-#: editor_actions.cc:178
+#: editor_actions.cc:179
 #, fuzzy
 msgid "Align Regions End"
 msgstr "alinhar região"
 
-#: editor_actions.cc:180
+#: editor_actions.cc:181
 #, fuzzy
 msgid "Align Regions End Relative"
 msgstr "Alinhar Relativamente"
 
-#: editor_actions.cc:183
+#: editor_actions.cc:184
 #, fuzzy
 msgid "Align Regions Sync"
 msgstr "alinhar região"
 
-#: editor_actions.cc:185
+#: editor_actions.cc:186
 #, fuzzy
 msgid "Align Regions Sync Relative"
 msgstr "Alinhar Relativamente"
 
-#: editor_actions.cc:188
+#: editor_actions.cc:189
 #, fuzzy
 msgid "Audition at Mouse"
 msgstr "Audição"
 
-#: editor_actions.cc:190
+#: editor_actions.cc:191
 #, fuzzy
 msgid "Brush at Mouse"
 msgstr "usar saídas principais"
 
-#: editor_actions.cc:192
+#: editor_actions.cc:193
 #, fuzzy
 msgid "Set Edit Cursor"
 msgstr "Cursor de Edição"
 
-#: editor_actions.cc:194
+#: editor_actions.cc:195
 #, fuzzy
 msgid "Mute/Unmute Region"
 msgstr "Criar Região"
 
-#: editor_actions.cc:196
+#: editor_actions.cc:197
 #, fuzzy
 msgid "Set Playhead"
 msgstr "Cursor de Reprodução"
 
-#: editor_actions.cc:198
+#: editor_actions.cc:199
 #, fuzzy
 msgid "Split Region"
 msgstr "Separar Região"
 
-#: editor_actions.cc:200
+#: editor_actions.cc:201
 #, fuzzy
 msgid "Set Region Sync Position"
 msgstr "Por Posição de Região"
 
-#: editor_actions.cc:208
+#: editor_actions.cc:209
 #, fuzzy
 msgid "Export Session"
 msgstr "Exportar região"
 
-#: editor_actions.cc:210
+#: editor_actions.cc:211
 #, fuzzy
 msgid "Export Range"
 msgstr "Separar Intervalo"
 
 #. Note: for now, editor-delete does the exact same thing as editor-cut
-#: editor_actions.cc:216
+#: editor_actions.cc:217
 #, fuzzy
 msgid "Delete"
 msgstr "eliminar"
 
-#: editor_actions.cc:222
+#: editor_actions.cc:223
 #, fuzzy
 msgid "Duplicate Region"
 msgstr "duplicar região"
 
-#: editor_actions.cc:224
+#: editor_actions.cc:225
 #, fuzzy
 msgid "Duplicate Range"
 msgstr "Duplicar"
 
-#: editor_actions.cc:226
+#: editor_actions.cc:227
 msgid "Insert Region"
 msgstr "Inserir Região"
 
-#: editor_actions.cc:228
+#: editor_actions.cc:229
 #, fuzzy
 msgid "Reverse Region"
 msgstr "inverter regiões"
 
-#: editor_actions.cc:230
+#: editor_actions.cc:231
 #, fuzzy
 msgid "Normalize Region"
 msgstr "Normalizar"
 
-#: editor_actions.cc:232
+#: editor_actions.cc:233
 #, fuzzy
 msgid "crop"
 msgstr "cópia"
 
-#: editor_actions.cc:234
+#: editor_actions.cc:235
 #, fuzzy
 msgid "Insert Chunk"
 msgstr "Inserir trecho"
 
-#: editor_actions.cc:237
+#: editor_actions.cc:238
 #, fuzzy
 msgid "Split at edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor_actions.cc:240
+#: editor_actions.cc:241
 #, fuzzy
 msgid "Start Range"
 msgstr "Separar Intervalo"
 
-#: editor_actions.cc:242
+#: editor_actions.cc:243
 msgid "Finish Range"
 msgstr ""
 
-#: editor_actions.cc:244
+#: editor_actions.cc:245
 msgid "Finish add Range"
 msgstr ""
 
-#: editor_actions.cc:247
+#: editor_actions.cc:248
 msgid "Extend Range to End of Region"
 msgstr ""
 
-#: editor_actions.cc:249
+#: editor_actions.cc:250
 #, fuzzy
 msgid "Extend Range to Start of Region"
 msgstr "Ir para o início da sessão"
 
-#: editor_actions.cc:252
+#: editor_actions.cc:253
 #, fuzzy
 msgid "Follow Playhead"
 msgstr "Seguir o cursor de reprodução"
 
-#: editor_actions.cc:260
+#: editor_actions.cc:261
 #, fuzzy
 msgid "Zoom Focus Left"
 msgstr "Zoom(focagem)"
 
-#: editor_actions.cc:262
+#: editor_actions.cc:263
 #, fuzzy
 msgid "Zoom Focus Right"
 msgstr "Zoom(focagem)"
 
-#: editor_actions.cc:264
+#: editor_actions.cc:265
 #, fuzzy
 msgid "Zoom Focus Center"
 msgstr "Zoom(focagem)"
 
-#: editor_actions.cc:266
+#: editor_actions.cc:267
 #, fuzzy
 msgid "Zoom Focus Playhead"
 msgstr "Zoom(focagem)"
 
-#: editor_actions.cc:268
+#: editor_actions.cc:269
 #, fuzzy
 msgid "Zoom Focus Edit"
 msgstr "Zoom(focagem)"
 
-#: editor_actions.cc:274
+#: editor_actions.cc:275
 msgid "Object Tool"
 msgstr ""
 
-#: editor_actions.cc:275
+#: editor_actions.cc:276
 #, fuzzy
 msgid "Range Tool"
 msgstr "Intervalo"
 
-#: editor_actions.cc:276
+#: editor_actions.cc:277
 msgid "Gain Tool"
 msgstr ""
 
-#: editor_actions.cc:277
+#: editor_actions.cc:278
 #, fuzzy
 msgid "Zoom Tool"
 msgstr "Zoom(-)"
 
-#: editor_actions.cc:278
+#: editor_actions.cc:279
 msgid "Timefx Tool"
 msgstr ""
 
-#: editor_actions.cc:285
+#: editor_actions.cc:286
 #, fuzzy
 msgid "Snap to frame"
 msgstr "Modo de Ajuste"
 
-#: editor_actions.cc:286
+#: editor_actions.cc:287
 #, fuzzy
 msgid "Snap to cd frame"
 msgstr "Modo de Ajuste"
 
-#: editor_actions.cc:287
+#: editor_actions.cc:288
 #, fuzzy
 msgid "Snap to SMPTE frame"
 msgstr "Quadros SMPTE"
 
-#: editor_actions.cc:288
+#: editor_actions.cc:289
 #, fuzzy
 msgid "Snap to SMPTE seconds"
 msgstr "Segundos SMPTE"
 
-#: editor_actions.cc:289
+#: editor_actions.cc:290
 #, fuzzy
 msgid "Snap to SMPTE minutes"
 msgstr "Minutos SMPTE"
 
-#: editor_actions.cc:290
+#: editor_actions.cc:291
 #, fuzzy
 msgid "Snap to seconds"
 msgstr "Segundos"
 
-#: editor_actions.cc:291
+#: editor_actions.cc:292
 msgid "Snap to minutes"
 msgstr ""
 
-#: editor_actions.cc:292
+#: editor_actions.cc:293
 #, fuzzy
 msgid "Snap to thirtyseconds"
 msgstr "trigésima-segunda (32)"
 
-#: editor_actions.cc:293
+#: editor_actions.cc:294
 msgid "Snap to asixteenthbeat"
 msgstr ""
 
-#: editor_actions.cc:294
+#: editor_actions.cc:295
 msgid "Snap to eighths"
 msgstr ""
 
-#: editor_actions.cc:295
+#: editor_actions.cc:296
 msgid "Snap to quarters"
 msgstr ""
 
-#: editor_actions.cc:296
+#: editor_actions.cc:297
 #, fuzzy
 msgid "Snap to thirds"
 msgstr "Modo de Ajuste"
 
-#: editor_actions.cc:297
+#: editor_actions.cc:298
 #, fuzzy
 msgid "Snap to beat"
 msgstr "Modo de Ajuste"
 
-#: editor_actions.cc:298
+#: editor_actions.cc:299
 #, fuzzy
 msgid "Snap to bar"
 msgstr "Ajustar a"
 
-#: editor_actions.cc:299
+#: editor_actions.cc:300
 #, fuzzy
 msgid "Snap to mark"
 msgstr "acrescentar marcador de região"
 
-#: editor_actions.cc:300
+#: editor_actions.cc:301
 #, fuzzy
 msgid "Snap to edit cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor_actions.cc:301
+#: editor_actions.cc:302
 #, fuzzy
 msgid "Snap to region start"
 msgstr "Inícios de região"
 
-#: editor_actions.cc:302
+#: editor_actions.cc:303
 #, fuzzy
 msgid "Snap to region end"
 msgstr "Finais de região"
 
-#: editor_actions.cc:303
+#: editor_actions.cc:304
 #, fuzzy
 msgid "Snap to region sync"
 msgstr "Sincronismos de região"
 
-#: editor_actions.cc:304
+#: editor_actions.cc:305
 #, fuzzy
 msgid "Snap to region boundary"
 msgstr "Extremos de região"
 
 #. the region list popup menu
-#: editor_actions.cc:313
+#: editor_actions.cc:314
 #, fuzzy
 msgid "Sort"
 msgstr "porta"
 
-#: editor_actions.cc:321
+#: editor_actions.cc:322
 msgid "Show all"
 msgstr "Mostrar tudo"
 
-#: editor_actions.cc:322
+#: editor_actions.cc:323
 #, fuzzy
 msgid "Show automatic regions"
 msgstr "Mostrar todos as automatizações"
 
-#: editor_actions.cc:324
+#: editor_actions.cc:325
 msgid "Ascending"
 msgstr "Crescente"
 
-#: editor_actions.cc:326
+#: editor_actions.cc:327
 msgid "Descending"
 msgstr "Decrescente"
 
-#: editor_actions.cc:329
+#: editor_actions.cc:330
 msgid "By Region Name"
 msgstr "Por Nome de Região"
 
-#: editor_actions.cc:331
+#: editor_actions.cc:332
 msgid "By Region Length"
 msgstr "Por Tamanho de Região"
 
-#: editor_actions.cc:333
+#: editor_actions.cc:334
 msgid "By Region Position"
 msgstr "Por Posição de Região"
 
-#: editor_actions.cc:335
+#: editor_actions.cc:336
 msgid "By Region Timestamp"
 msgstr "Por Instante de Região"
 
-#: editor_actions.cc:337
+#: editor_actions.cc:338
 msgid "By Region Start in File"
 msgstr "Por Posição Inicial da Região no Ficheiro"
 
-#: editor_actions.cc:339
+#: editor_actions.cc:340
 msgid "By Region End in File"
 msgstr "Por Posição Final da Região no Ficheiro"
 
-#: editor_actions.cc:341
+#: editor_actions.cc:342
 msgid "By Source File Name"
 msgstr "Por Nome do Ficheiro Original"
 
-#: editor_actions.cc:343
+#: editor_actions.cc:344
 msgid "By Source File Length"
 msgstr "Por Tamanho do Ficheiro Original"
 
-#: editor_actions.cc:345
+#: editor_actions.cc:346
 msgid "By Source File Creation Date"
 msgstr "Por Data de Criação do Ficheiro Original"
 
-#: editor_actions.cc:347
+#: editor_actions.cc:348
 msgid "By Source Filesystem"
 msgstr "Por Sistema de Ficheiros Original"
 
 #. the next two are duplicate items with different names for use in two different contexts
-#: editor_actions.cc:353
+#: editor_actions.cc:354
 #, fuzzy
 msgid "Add External Audio"
 msgstr "Acrescentar à lista de Regiões Externas"
 
-#: editor_actions.cc:355
+#: editor_actions.cc:356
 #, fuzzy
 msgid "as Region(s)"
 msgstr "Arrastar regiões"
 
-#: editor_actions.cc:357
+#: editor_actions.cc:358
 #, fuzzy
 msgid "as Tracks"
 msgstr "Faixas"
 
-#: editor_actions.cc:359
+#: editor_actions.cc:360
 #, fuzzy
 msgid "to Tracks"
 msgstr "Faixas"
 
-#: editor_actions.cc:362
+#: editor_actions.cc:363
 #, fuzzy
 msgid "Show Waveforms"
 msgstr "Mostrar formas de onda"
 
-#: editor_actions.cc:363
+#: editor_actions.cc:364
 #, fuzzy
 msgid "Show Waveforms While Recording"
 msgstr "Mostrar formas de onda enquanto grava"
 
-#: editor_actions.cc:364
+#: editor_actions.cc:365
 #, fuzzy
 msgid "Show Measures"
 msgstr "Mostrar linhas de tempo"
 
-#: editor_actions.cc:377 editor_actions.cc:384
+#: editor_actions.cc:378 editor_actions.cc:385
 msgid "Medium"
 msgstr ""
 
-#: editor_actions.cc:379
+#: editor_actions.cc:380
 #, fuzzy
 msgid "Faster"
 msgstr "Rápido"
 
-#: editor_actions.cc:385
+#: editor_actions.cc:386
 msgid "Long"
 msgstr ""
 
-#: editor_actions.cc:389
+#: editor_actions.cc:390
 #, fuzzy
 msgid "Later is Higher"
 msgstr "Descer a região em um nível"
 
-#: editor_actions.cc:390
+#: editor_actions.cc:391
 #, fuzzy
 msgid "Most Recently Moved/Added is Higher"
 msgstr "Descer a região em um nível"
 
-#: editor_actions.cc:391
+#: editor_actions.cc:392
 #, fuzzy
 msgid "Most Recently Added is Higher"
 msgstr "Descer a região em um nível"
@@ -3468,39 +3460,39 @@ msgstr ""
 msgid "Add existing audio to session"
 msgstr "Mostrar automatizações existentes"
 
-#: editor_audio_import.cc:143
+#: editor_audio_import.cc:142
 msgid "ardour: importing %1"
 msgstr "ardour: em importação %1"
 
-#: editor_audio_import.cc:147
+#: editor_audio_import.cc:146
 msgid "Cancel Import"
 msgstr "Cancelar Importação"
 
-#: editor_audio_import.cc:225
+#: editor_audio_import.cc:224
 #, fuzzy
 msgid "Editor: cannot open file \"%1\", (%2)"
 msgstr "Editor: não foi possível abrir o ficheiro \"%1\" (%2)"
 
-#: editor_audio_import.cc:233
+#: editor_audio_import.cc:232
 #, fuzzy
 msgid "Cancel entire import"
 msgstr "Cancelar Importação"
 
-#: editor_audio_import.cc:234
+#: editor_audio_import.cc:233
 #, fuzzy
 msgid "Don't embed it"
 msgstr "Não %1"
 
-#: editor_audio_import.cc:235
+#: editor_audio_import.cc:234
 msgid "Embed all without questions"
 msgstr ""
 
-#: editor_audio_import.cc:240
+#: editor_audio_import.cc:239
 #, fuzzy
 msgid "Embed it anyway"
 msgstr "%s de qualquer forma"
 
-#: editor_audio_import.cc:243
+#: editor_audio_import.cc:242
 #, fuzzy
 msgid ""
 "%1\n"
@@ -3508,74 +3500,62 @@ msgid ""
 msgstr ""
 "A frequência de amostragem deste ficheiro audio não é igual à de sessão"
 
-#: editor_audio_import.cc:276
+#: editor_audio_import.cc:275
 msgid "could not open %1"
 msgstr "não foi possível abrir %1"
 
-#: editor_audio_import.cc:321
+#: editor_audio_import.cc:320
 msgid "insert sndfile"
 msgstr "inserir ficheiro audio"
 
 #. stuff for the verbose canvas cursor
-#: editor_canvas.cc:117
+#: editor_canvas.cc:118
 msgid "VerboseCanvasCursor"
 msgstr ""
 
-#: editor_canvas.cc:285
-msgid "Start a new session\n"
-msgstr "Iniciar uma nova sessão\n"
-
-#: editor_canvas.cc:285
-msgid "via Session menu"
-msgstr "via menu de Sessão"
-
-#: editor_canvas.cc:288
-msgid "FirstActionMessage"
-msgstr ""
-
-#: editor_edit_groups.cc:52 mixer_ui.cc:732
+#: editor_edit_groups.cc:53 mixer_ui.cc:736
 #, fuzzy
 msgid "Activate All"
 msgstr "Activar"
 
-#: editor_edit_groups.cc:53 mixer_ui.cc:733
+#: editor_edit_groups.cc:54 mixer_ui.cc:737
 #, fuzzy
 msgid "Disable All"
 msgstr "Desligar"
 
-#: editor_edit_groups.cc:55 mixer_ui.cc:735
+#: editor_edit_groups.cc:56 mixer_ui.cc:739
 #, fuzzy
 msgid "Add group"
 msgstr "Sem grupo"
 
-#: editor_edit_groups.cc:225 mixer_ui.cc:964
+#: editor_edit_groups.cc:229 mixer_ui.cc:970
 #, fuzzy
 msgid "unnamed"
 msgstr "Renomear"
 
-#: editor_edit_groups.cc:252 mixer_ui.cc:830
+#: editor_edit_groups.cc:258 mixer_ui.cc:834
 msgid "-all-"
 msgstr "-tudo-"
 
-#: editor_export_audio.cc:64
+#: editor_export_audio.cc:65
 msgid ""
 "There is no selection to export.\n"
 "\n"
 "Select a selection using the range mouse mode"
 msgstr ""
 
-#: editor_export_audio.cc:109
+#: editor_export_audio.cc:110
 msgid ""
 "There are no ranges to export.\n"
 "\n"
 "Create 1 or more ranges by dragging the mouse in the range bar"
 msgstr ""
 
-#: editor_imageframe.cc:624 editor_imageframe.cc:654
+#: editor_imageframe.cc:625 editor_imageframe.cc:655
 msgid "programming error: no ImageFrameView selected"
 msgstr ""
 
-#: editor_imageframe.cc:847 editor_imageframe.cc:869
+#: editor_imageframe.cc:848 editor_imageframe.cc:870
 msgid "programming error: no MarkerView selected"
 msgstr ""
 
@@ -3584,140 +3564,140 @@ msgstr ""
 msgid "mute region"
 msgstr "emudecer esta região"
 
-#: editor_keys.cc:45
+#: editor_keys.cc:46
 #, fuzzy
 msgid "keyboard selection"
 msgstr "extender selecção"
 
-#: editor_markers.cc:291 editor_ops.cc:1227 editor_ops.cc:1240
-#: editor_ops.cc:1258 location_ui.cc:773
+#: editor_markers.cc:292 editor_ops.cc:1290 editor_ops.cc:1303
+#: editor_ops.cc:1321 location_ui.cc:774
 msgid "add marker"
 msgstr "adicionar marcador"
 
-#: editor_markers.cc:306 editor_markers.cc:379 editor_markers.cc:551
-#: editor_markers.cc:569 editor_markers.cc:588 editor_markers.cc:607
-#: editor_markers.cc:637 editor_markers.cc:665 editor_markers.cc:693
-#: editor_markers.cc:731 editor_markers.cc:758 editor_markers.cc:781
-#: editor_markers.cc:800 editor_mouse.cc:1994 editor_mouse.cc:4237
+#: editor_markers.cc:307 editor_markers.cc:380 editor_markers.cc:552
+#: editor_markers.cc:570 editor_markers.cc:589 editor_markers.cc:608
+#: editor_markers.cc:638 editor_markers.cc:666 editor_markers.cc:694
+#: editor_markers.cc:732 editor_markers.cc:759 editor_markers.cc:782
+#: editor_markers.cc:801 editor_mouse.cc:2015 editor_mouse.cc:4275
 msgid "programming error: marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_markers.cc:330 location_ui.cc:655
+#: editor_markers.cc:331 location_ui.cc:656
 msgid "remove marker"
 msgstr "remover marcador"
 
-#: editor_markers.cc:457
+#: editor_markers.cc:458
 #, fuzzy
 msgid "Locate to Mark"
 msgstr "Localizar"
 
-#: editor_markers.cc:458
+#: editor_markers.cc:459
 #, fuzzy
 msgid "Play from Mark"
 msgstr "Reproduzir desde o início"
 
-#: editor_markers.cc:459
+#: editor_markers.cc:460
 #, fuzzy
 msgid "Set Mark from Playhead"
 msgstr "Desde cursor de reprodução"
 
-#: editor_markers.cc:463
+#: editor_markers.cc:464
 #, fuzzy
 msgid "Rename Mark"
 msgstr "Renomear"
 
-#: editor_markers.cc:464
+#: editor_markers.cc:465
 #, fuzzy
 msgid "Hide Mark"
 msgstr "retocar faixa"
 
-#: editor_markers.cc:465
+#: editor_markers.cc:466
 #, fuzzy
 msgid "Remove Mark"
 msgstr "remover marcador"
 
-#: editor_markers.cc:478 editor_markers.cc:534
+#: editor_markers.cc:479 editor_markers.cc:535
 #, fuzzy
 msgid "Locate to Range Mark"
 msgstr "Localizações"
 
-#: editor_markers.cc:479 editor_markers.cc:535
+#: editor_markers.cc:480 editor_markers.cc:536
 #, fuzzy
 msgid "Play from Range Mark"
 msgstr "Reproduzir intervalo cíclico"
 
-#: editor_markers.cc:480
+#: editor_markers.cc:481
 #, fuzzy
 msgid "Loop Range"
 msgstr "Intervalo cíclico"
 
-#: editor_markers.cc:481 editor_markers.cc:536
+#: editor_markers.cc:482 editor_markers.cc:537
 #, fuzzy
 msgid "Set Range Mark from Playhead"
 msgstr "Desde cursor de reprodução"
 
-#: editor_markers.cc:482 editor_markers.cc:537
+#: editor_markers.cc:483 editor_markers.cc:538
 #, fuzzy
 msgid "Set Range from Range Selection"
 msgstr "selecção de intervalo"
 
-#: editor_markers.cc:486
+#: editor_markers.cc:487
 #, fuzzy
 msgid "Rename Range"
 msgstr "Renomear"
 
-#: editor_markers.cc:487 editor_markers.cc:539
+#: editor_markers.cc:488 editor_markers.cc:540
 #, fuzzy
 msgid "Hide Range"
 msgstr "Adicionar Novo Intervalo"
 
-#: editor_markers.cc:488
+#: editor_markers.cc:489
 #, fuzzy
 msgid "Remove Range"
 msgstr "Remover Campo"
 
-#: editor_markers.cc:492 editor_markers.cc:541
+#: editor_markers.cc:493 editor_markers.cc:542
 #, fuzzy
 msgid "Separate Regions in Range"
 msgstr "Nova região desde a selecção"
 
-#: editor_markers.cc:493 editor_markers.cc:542
+#: editor_markers.cc:494 editor_markers.cc:543
 #, fuzzy
 msgid "Select All in Range"
 msgstr "Seleccionar tudo na faixa"
 
-#: editor_markers.cc:519
+#: editor_markers.cc:520
 msgid "Set Loop Range"
 msgstr "Seleccionar Intervalo Cíclico"
 
-#: editor_markers.cc:520
+#: editor_markers.cc:521
 msgid "Set Punch Range"
 msgstr "Seleccionar Intervalo de Inserção"
 
-#: editor_markers.cc:814
+#: editor_markers.cc:815
 #, fuzzy
 msgid "New Name:"
 msgstr "novo nome: "
 
-#: editor_markers.cc:817
+#: editor_markers.cc:818
 msgid "ardour: rename mark"
 msgstr "ardour: renomear marca"
 
-#: editor_markers.cc:819
+#: editor_markers.cc:820
 #, fuzzy
 msgid "ardour: rename range"
 msgstr "ardour: renomear região"
 
-#: editor_markers.cc:839
+#: editor_markers.cc:840
 #, fuzzy
 msgid "rename marker"
 msgstr "remover marcador"
 
-#: editor_markers.cc:864
+#: editor_markers.cc:865
 msgid "set loop range"
 msgstr "seleccionar intervalo cíclico"
 
-#: editor_markers.cc:890
+#: editor_markers.cc:891
 msgid "set punch range"
 msgstr "seleccionar intervalo de inserção"
 
@@ -3725,385 +3705,391 @@ msgstr "seleccionar intervalo de inserção"
 msgid "Editor::event_frame() used on unhandled event type %1"
 msgstr ""
 
-#: editor_mouse.cc:1589
+#: editor_mouse.cc:313
+#, fuzzy
+msgid "select on click"
+msgstr "Usar como metrónomo"
+
+#: editor_mouse.cc:1590
 msgid "programming error: start_grab called without drag item"
 msgstr ""
 
-#: editor_mouse.cc:1793
+#: editor_mouse.cc:1814
 msgid "change fade in length"
 msgstr "alterar duração de evanescimento"
 
-#: editor_mouse.cc:1811
+#: editor_mouse.cc:1832
 msgid "programming error: fade out canvas item has no regionview data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:1885
+#: editor_mouse.cc:1906
 msgid "change fade out length"
 msgstr "alterar duração desvanecimento"
 
-#: editor_mouse.cc:1904
+#: editor_mouse.cc:1925
 msgid "programming error: cursor canvas item has no cursor data pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2119
+#: editor_mouse.cc:2142
 #, fuzzy
 msgid "move marker"
 msgstr "remover marcador"
 
-#: editor_mouse.cc:2142 editor_mouse.cc:2173 editor_tempodisplay.cc:461
+#: editor_mouse.cc:2165 editor_mouse.cc:2196 editor_tempodisplay.cc:459
 msgid ""
 "programming error: meter marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2241
+#: editor_mouse.cc:2264
 #, fuzzy
 msgid "copy meter mark"
 msgstr "remover marcador métrico"
 
-#: editor_mouse.cc:2251
+#: editor_mouse.cc:2274
 msgid "move meter mark"
 msgstr "remover marcador métrico"
 
-#: editor_mouse.cc:2266 editor_mouse.cc:2299 editor_tempodisplay.cc:327
-#: editor_tempodisplay.cc:411 editor_tempodisplay.cc:430
+#: editor_mouse.cc:2289 editor_mouse.cc:2322 editor_tempodisplay.cc:331
+#: editor_tempodisplay.cc:409 editor_tempodisplay.cc:428
 msgid ""
 "programming error: tempo marker canvas item has no marker object pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2271 editor_mouse.cc:2304 editor_tempodisplay.cc:332
-#: editor_tempodisplay.cc:416
+#: editor_mouse.cc:2294 editor_mouse.cc:2327 editor_tempodisplay.cc:336
+#: editor_tempodisplay.cc:414
 msgid "programming error: marker for tempo is not a tempo marker!"
 msgstr ""
 
-#: editor_mouse.cc:2371
+#: editor_mouse.cc:2394
 #, fuzzy
 msgid "copy tempo mark"
 msgstr "remover marcador de tempo"
 
-#: editor_mouse.cc:2381
+#: editor_mouse.cc:2404
 msgid "move tempo mark"
 msgstr "remover marcador de tempo"
 
-#: editor_mouse.cc:2395 editor_mouse.cc:2414 editor_mouse.cc:2427
+#: editor_mouse.cc:2418 editor_mouse.cc:2437 editor_mouse.cc:2450
 msgid ""
 "programming error: control point canvas item has no control point object "
 "pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2525
+#: editor_mouse.cc:2555
 msgid "programming error: line canvas item has no line pointer!"
 msgstr ""
 
-#: editor_mouse.cc:2634
+#: editor_mouse.cc:2664
 #, fuzzy
 msgid "move region(s)"
 msgstr "remover região"
 
-#. this is committed in the grab finished callback.
-#: editor_mouse.cc:2646
-msgid "Drag region copy"
-msgstr "Arraster cópia de região"
-
-#: editor_mouse.cc:2758
+#: editor_mouse.cc:2727
 #, fuzzy
 msgid "Drag region brush"
 msgstr "Arrastar regiões"
 
+#. don't copy again
+#. this is committed in the grab finished callback.
+#: editor_mouse.cc:2751
+msgid "Drag region copy"
+msgstr "Arraster cópia de região"
+
 #. A selection grab currently creates two undo/redo operations, one for
 #. creating the new region and another for moving it.
 #.
-#: editor_mouse.cc:3574
+#: editor_mouse.cc:3609
 msgid "selection grab"
 msgstr "selecção"
 
-#: editor_mouse.cc:3615
+#: editor_mouse.cc:3650
 #, fuzzy
 msgid "cancel selection"
 msgstr "selecção de intervalo"
 
-#: editor_mouse.cc:3722
+#: editor_mouse.cc:3760
 msgid "range selection"
 msgstr "selecção de intervalo"
 
-#: editor_mouse.cc:3738
+#: editor_mouse.cc:3776
 msgid "trim selection start"
 msgstr "recortar início da selecção"
 
-#: editor_mouse.cc:3754
+#: editor_mouse.cc:3792
 msgid "trim selection end"
 msgstr "recortar final da selecção"
 
-#: editor_mouse.cc:3771
+#: editor_mouse.cc:3809
 msgid "move selection"
 msgstr "mover selecção"
 
-#: editor_mouse.cc:4157
+#: editor_mouse.cc:4195
 msgid "Start point trim"
 msgstr "Ponto inicial de recorte"
 
-#: editor_mouse.cc:4185
+#: editor_mouse.cc:4223
 msgid "End point trim"
 msgstr "Ponto final de recorte"
 
-#: editor_mouse.cc:4224
+#: editor_mouse.cc:4262
 msgid "trimmed region"
 msgstr "região recortada"
 
-#: editor_mouse.cc:4363
+#: editor_mouse.cc:4400
 msgid "new range marker"
 msgstr "novo marcador de região"
 
-#: editor_mouse.cc:4578
+#: editor_mouse.cc:4642
 msgid "select regions"
 msgstr "seleccionar regiões"
 
-#: editor_mouse.cc:4607
+#: editor_mouse.cc:4671
 msgid "Name for region:"
 msgstr "Nome para a região:"
 
-#: editor_mouse.cc:4671
+#: editor_mouse.cc:4735
 msgid "timestretch"
 msgstr "alongamento temporal"
 
-#: editor_ops.cc:132
+#: editor_ops.cc:195
 msgid "split"
 msgstr "separar"
 
-#: editor_ops.cc:168
+#: editor_ops.cc:231
 msgid "remove region"
 msgstr "remover região"
 
-#: editor_ops.cc:187
+#: editor_ops.cc:250
 msgid ""
 " This is destructive, will possibly delete audio files\n"
 "It cannot be undone\n"
 "Do you really want to destroy %1 ?"
 msgstr ""
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "these regions"
 msgstr "inverter regiões"
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "this region"
 msgstr "emudecer esta região"
 
-#: editor_ops.cc:193 editor_ops.cc:3229 route_ui.cc:700
-#: visual_time_axis.cc:277
+#: editor_ops.cc:256 editor_ops.cc:3318 route_ui.cc:707
+#: visual_time_axis.cc:278
 msgid "No, do nothing."
 msgstr "Não, não fazer nada."
 
-#: editor_ops.cc:196
+#: editor_ops.cc:259
 #, fuzzy
 msgid "Yes, destroy them."
 msgstr "Sim, elimine-se."
 
-#: editor_ops.cc:198 editor_ops.cc:3230
+#: editor_ops.cc:261 editor_ops.cc:3319
 msgid "Yes, destroy it."
 msgstr "Sim, elimine-se."
 
-#: editor_ops.cc:289 editor_ops.cc:317
+#: editor_ops.cc:352 editor_ops.cc:380
 msgid "extend selection"
 msgstr "extender selecção"
 
-#: editor_ops.cc:333 editor_ops.cc:367 editor_ops.cc:411 editor_ops.cc:437
+#: editor_ops.cc:396 editor_ops.cc:430 editor_ops.cc:474 editor_ops.cc:500
 msgid "nudge forward"
 msgstr "retocar p/frente"
 
-#: editor_ops.cc:501
+#: editor_ops.cc:564
 msgid "build_region_boundary_cache called with snap_type = %1"
 msgstr ""
 
-#: editor_ops.cc:1354
+#: editor_ops.cc:1420
 #, fuzzy
 msgid "select all within"
 msgstr "Seleccionar tudo"
 
-#: editor_ops.cc:1380
+#: editor_ops.cc:1452
 #, fuzzy
 msgid "set selection from region"
 msgstr "selecção de intervalo"
 
-#: editor_ops.cc:1413
+#: editor_ops.cc:1485
 #, fuzzy
 msgid "set selection from range"
 msgstr "selecção de intervalo"
 
-#: editor_ops.cc:1443
+#: editor_ops.cc:1515
 #, fuzzy
 msgid "select all from range"
 msgstr "seleccionar zoom"
 
-#: editor_ops.cc:1465
+#: editor_ops.cc:1537
 #, fuzzy
 msgid "select all from punch"
 msgstr "Seleccionar tudo"
 
-#: editor_ops.cc:1487
+#: editor_ops.cc:1559
 #, fuzzy
 msgid "select all from loop"
 msgstr "Seleccionar tudo"
 
-#: editor_ops.cc:1501
+#: editor_ops.cc:1573
 #, fuzzy
 msgid "select all after cursor"
 msgstr "Do início ao cursor de edição"
 
-#: editor_ops.cc:1506
+#: editor_ops.cc:1578
 #, fuzzy
 msgid "select all before cursor"
 msgstr "sincronizar pelo cursor de edição"
 
-#: editor_ops.cc:1536
+#: editor_ops.cc:1608
 #, fuzzy
 msgid "select all between cursors"
 msgstr "sincronizar pelo cursor de edição"
 
-#: editor_ops.cc:1667
+#: editor_ops.cc:1739
 msgid "clear markers"
 msgstr "apagar marcadores"
 
-#: editor_ops.cc:1679
+#: editor_ops.cc:1751
 msgid "clear ranges"
 msgstr "apagar intervalos"
 
-#: editor_ops.cc:1698
+#: editor_ops.cc:1770
 msgid "clear locations"
 msgstr "apagar localizações"
 
-#: editor_ops.cc:1748
+#: editor_ops.cc:1820
 msgid "insert dragged region"
 msgstr "inserir região arrastada"
 
-#: editor_ops.cc:1784
+#: editor_ops.cc:1856
 msgid "insert region"
 msgstr "inserir região"
 
-#: editor_ops.cc:1975 io_selector.cc:57 io_selector.cc:791
+#: editor_ops.cc:2047 io_selector.cc:58 io_selector.cc:792
 msgid "OK"
 msgstr ""
 
-#: editor_ops.cc:1982
+#: editor_ops.cc:2054
 msgid "ardour: rename region"
 msgstr "ardour: renomear região"
 
-#: editor_ops.cc:2205 editor_ops.cc:2254
+#: editor_ops.cc:2277 editor_ops.cc:2326
 #, fuzzy
 msgid "separate"
 msgstr "separar"
 
-#: editor_ops.cc:2316
+#: editor_ops.cc:2388
 msgid "trim to selection"
 msgstr "recortar pela selecção"
 
-#: editor_ops.cc:2356
+#: editor_ops.cc:2428
 msgid "region fill"
 msgstr "preencher região"
 
-#: editor_ops.cc:2415
+#: editor_ops.cc:2487
 msgid "fill selection"
 msgstr "preencher selecção"
 
-#: editor_ops.cc:2436
+#: editor_ops.cc:2508
 msgid "Programming error. that region doesn't cover that position"
 msgstr ""
 
-#: editor_ops.cc:2439
+#: editor_ops.cc:2511
 #, fuzzy
 msgid "set region sync position"
 msgstr "Regiões/posição"
 
-#: editor_ops.cc:2454
+#: editor_ops.cc:2526
 msgid "Place the edit cursor at the desired sync point"
 msgstr "Coloque o cursor de edição sobre o ponto de sincronia desejado"
 
-#: editor_ops.cc:2459
+#: editor_ops.cc:2531
 #, fuzzy
 msgid "set sync from edit cursor"
 msgstr "sincronizar pelo cursor de edição"
 
-#: editor_ops.cc:2471
+#: editor_ops.cc:2543
 msgid "remove sync"
 msgstr "remover sincronismo"
 
-#: editor_ops.cc:2485
+#: editor_ops.cc:2557
 msgid "naturalize"
 msgstr "naturalizar"
 
-#: editor_ops.cc:2549
+#: editor_ops.cc:2621
 msgid "align selection (relative)"
 msgstr "alinhar selecção (relativamente)"
 
-#: editor_ops.cc:2577
+#: editor_ops.cc:2649
 msgid "align selection"
 msgstr "alinhar selecção"
 
-#: editor_ops.cc:2589
+#: editor_ops.cc:2661
 msgid "align region"
 msgstr "alinhar região"
 
-#: editor_ops.cc:2636 editor_ops.cc:2661
+#: editor_ops.cc:2708 editor_ops.cc:2733
 msgid "trim to edit"
 msgstr "recortar para edição"
 
-#: editor_ops.cc:2712
+#: editor_ops.cc:2784
 #, fuzzy
 msgid "ardour: freeze"
 msgstr "ardour: renomear região"
 
-#: editor_ops.cc:2717
+#: editor_ops.cc:2789
 #, fuzzy
 msgid "Cancel Freeze"
 msgstr "Cancelar"
 
-#: editor_ops.cc:2754
+#: editor_ops.cc:2826
 msgid "bounce range"
 msgstr "intervalo de rebatimento"
 
-#: editor_ops.cc:2807
+#: editor_ops.cc:2879
 msgid "cut"
 msgstr "corte"
 
-#: editor_ops.cc:2810
+#: editor_ops.cc:2882
 msgid "copy"
 msgstr "cópia"
 
-#: editor_ops.cc:2823
+#: editor_ops.cc:2895
 msgid " objects"
 msgstr " objectos"
 
-#: editor_ops.cc:2849
+#: editor_ops.cc:2921
 msgid " range"
 msgstr " intervalo"
 
-#: editor_ops.cc:3006
+#: editor_ops.cc:3078
 msgid "paste"
 msgstr "colar"
 
-#: editor_ops.cc:3044
+#: editor_ops.cc:3116
 msgid "paste chunk"
 msgstr "colar trecho"
 
 #. clear (below) will clear the argument list
-#: editor_ops.cc:3085
+#: editor_ops.cc:3157
 msgid "duplicate region"
 msgstr "duplicar região"
 
-#: editor_ops.cc:3130
+#: editor_ops.cc:3202
 msgid "duplicate selection"
 msgstr "duplicar selecção"
 
-#: editor_ops.cc:3170
+#: editor_ops.cc:3259
 msgid "clear playlist"
 msgstr "limpar lista de reprodução"
 
-#: editor_ops.cc:3199
+#: editor_ops.cc:3288
 msgid "nudge track"
 msgstr "retocar faixa"
 
-#: editor_ops.cc:3226
+#: editor_ops.cc:3315
 msgid ""
 "Do you really want to destroy the last capture?\n"
 "(This is destructive and cannot be undone)"
@@ -4111,161 +4097,158 @@ msgstr ""
 "Deseja realmente eliminar a última captura?\n"
 "(esta operação é destrutiva e não pode ser desfeita)"
 
-#: editor_ops.cc:3254
+#: editor_ops.cc:3343
 msgid "normalize"
 msgstr "normalizar"
 
-#: editor_ops.cc:3301
+#: editor_ops.cc:3390
 msgid "reverse regions"
 msgstr "inverter regiões"
 
-#: editor_region_list.cc:93 editor_region_list.cc:98 editor_region_list.cc:101
-#: location_ui.cc:55
+#: editor_region_list.cc:98 editor_region_list.cc:103
+#: editor_region_list.cc:106 location_ui.cc:56
 msgid "Hidden"
 msgstr "Esconder"
 
 #. added a new fresh one at the end
-#: editor_route_list.cc:101 editor_route_list.cc:102 editor_route_list.cc:246
+#: editor_route_list.cc:102 editor_route_list.cc:103 editor_route_list.cc:247
 msgid "editor"
 msgstr ""
 
-#: editor_route_list.cc:309 mixer_ui.cc:695
+#: editor_route_list.cc:310 mixer_ui.cc:699
 msgid "Show All"
 msgstr "Mostrar tudo"
 
-#: editor_route_list.cc:310 mixer_ui.cc:696
+#: editor_route_list.cc:311 mixer_ui.cc:700
 msgid "Hide All"
 msgstr "Ocultar tudo"
 
-#: editor_route_list.cc:311 mixer_ui.cc:697
+#: editor_route_list.cc:312 mixer_ui.cc:701
 #, fuzzy
 msgid "Show All Audio Tracks"
 msgstr "Mostrar todos os barramentos audio"
 
-#: editor_route_list.cc:312 mixer_ui.cc:698
+#: editor_route_list.cc:313 mixer_ui.cc:702
 #, fuzzy
 msgid "Hide All Audio Tracks"
 msgstr "Esconder todos os barramentos audio"
 
-#: editor_route_list.cc:313 mixer_ui.cc:699
+#: editor_route_list.cc:314 mixer_ui.cc:703
 #, fuzzy
 msgid "Show All Audio Busses"
 msgstr "Mostrar todos os barramentos audio"
 
-#: editor_route_list.cc:314 mixer_ui.cc:700
+#: editor_route_list.cc:315 mixer_ui.cc:704
 #, fuzzy
 msgid "Hide All Audio Busses"
 msgstr "Esconder todos os barramentos audio"
 
-#: editor_rulers.cc:311
+#: editor_rulers.cc:312
 msgid "New location marker"
 msgstr "Novo marcador de localização"
 
-#: editor_rulers.cc:312
+#: editor_rulers.cc:313
 msgid "Clear all locations"
 msgstr "Apagar todas as localizações"
 
 #. ruler_items.push_back (MenuElem (_("New Range")));
-#: editor_rulers.cc:317
+#: editor_rulers.cc:318
 msgid "Clear all ranges"
 msgstr "Apagar todos os intervalos"
 
-#: editor_rulers.cc:326
+#: editor_rulers.cc:327
 msgid "New Tempo"
 msgstr "Novo Tempo"
 
-#: editor_rulers.cc:327
+#: editor_rulers.cc:328
 msgid "Clear tempo"
 msgstr "Apagar tempo"
 
-#: editor_rulers.cc:332
+#: editor_rulers.cc:333
 msgid "New Meter"
 msgstr "Novo VUímetro"
 
-#: editor_rulers.cc:333
+#: editor_rulers.cc:334
 msgid "Clear meter"
 msgstr "Apagar VUímetro"
 
-#: editor_rulers.cc:341
+#: editor_rulers.cc:342
 msgid "Min:Secs"
 msgstr "Min:Segs"
 
-#: editor_selection_list.cc:110
+#: editor_selection_list.cc:108
 #, fuzzy
 msgid "Name for Chunk:"
 msgstr "Nome para o trecho:"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 #, fuzzy
 msgid "Create Chunk"
 msgstr "Criar trecho"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 msgid "Forget it"
 msgstr "Esquecer"
 
-#: editor_tempodisplay.cc:249 editor_tempodisplay.cc:289
+#: editor_tempodisplay.cc:253 editor_tempodisplay.cc:293
 msgid "add"
 msgstr "acrescentar"
 
-#: editor_tempodisplay.cc:271
+#: editor_tempodisplay.cc:275
 #, fuzzy
 msgid "add tempo mark"
 msgstr "acrescentar marcador de região"
 
-#: editor_tempodisplay.cc:311
+#: editor_tempodisplay.cc:315
 #, fuzzy
 msgid "add meter mark"
 msgstr "acrescentar marcador métrico"
 
-#: editor_tempodisplay.cc:344 editor_tempodisplay.cc:375
+#: editor_tempodisplay.cc:348 editor_tempodisplay.cc:376
 msgid "done"
 msgstr "pronto"
 
-#: editor_tempodisplay.cc:365 editor_tempodisplay.cc:396
+#: editor_tempodisplay.cc:366 editor_tempodisplay.cc:394
 msgid "replace tempo mark"
 msgstr "substituir marcador de tempo"
 
-#: editor_tempodisplay.cc:435 editor_tempodisplay.cc:466
+#: editor_tempodisplay.cc:433 editor_tempodisplay.cc:464
 msgid "programming error: marker for meter is not a meter marker!"
 msgstr ""
 
-#: editor_tempodisplay.cc:445 editor_tempodisplay.cc:478
+#: editor_tempodisplay.cc:443 editor_tempodisplay.cc:476
 msgid "remove tempo mark"
 msgstr "remover marcador de tempo"
 
-#: editor_timefx.cc:50
+#: editor_timefx.cc:51
 msgid "Quick but Ugly"
 msgstr "Rápido mas Feio"
 
-#: editor_timefx.cc:51
+#: editor_timefx.cc:52
 msgid "Skip Anti-aliasing"
 msgstr "Ignorar Anti-aliasing"
 
-#: editor_timefx.cc:53
-msgid "Stretch/Shrink it"
-msgstr "Alongar/Estreitar"
-
-#: editor_timefx.cc:57
+#: editor_timefx.cc:56
 msgid "ardour: timestretch"
 msgstr "ardour: alongamento temporal"
 
-#: editor_timefx.cc:58
+#: editor_timefx.cc:57
 msgid "TimeStretchDialog"
 msgstr ""
 
-#: editor_timefx.cc:80 editor_timefx.cc:81 editor_timefx.cc:82
-#: editor_timefx.cc:83
+#: editor_timefx.cc:70
+msgid "Stretch/Shrink it"
+msgstr "Alongar/Estreitar"
+
+#: editor_timefx.cc:73 editor_timefx.cc:74
 msgid "TimeStretchButton"
 msgstr ""
 
-#: editor_timefx.cc:84
+#: editor_timefx.cc:75
 msgid "TimeStretchProgress"
 msgstr ""
 
-#. GTK2FIX
-#. current_timestretch->close ();
-#: editor_timefx.cc:153
+#: editor_timefx.cc:139
 msgid "timestretch cannot be started - thread creation error"
 msgstr ""
 
@@ -4399,7 +4382,7 @@ msgstr ""
 msgid "Export to File"
 msgstr "Exportar para CD"
 
-#: export_dialog.cc:113 option_editor.cc:82 option_editor.cc:83
+#: export_dialog.cc:113 option_editor.cc:83 option_editor.cc:84
 msgid "Browse"
 msgstr "Pesquisar"
 
@@ -4415,7 +4398,8 @@ msgstr "ardour: exportar"
 msgid "ardour_export"
 msgstr ""
 
-#: export_dialog.cc:139 export_dialog.cc:155
+#: export_dialog.cc:139 export_dialog.cc:155 mixer_strip.cc:124
+#: mixer_strip.cc:767
 msgid "Output"
 msgstr "Saída"
 
@@ -4451,145 +4435,75 @@ msgstr ""
 msgid "File already exists, do you want to overwrite it?"
 msgstr ""
 
-#: export_dialog.cc:1159 export_range_markers_dialog.cc:154
+#: export_dialog.cc:1159 export_range_markers_dialog.cc:153
 msgid "Cannot write file in: "
 msgstr ""
 
 #. warning dialog
-#: export_range_markers_dialog.cc:136
+#: export_range_markers_dialog.cc:135
 msgid "Please enter a valid target directory."
 msgstr ""
 
-#: export_range_markers_dialog.cc:144
+#: export_range_markers_dialog.cc:143
 msgid ""
 "Please select an existing target directory. Files\n"
 "are not allowed!"
 msgstr ""
 
-#: gain_automation_time_axis.cc:61
+#: gain_automation_time_axis.cc:62
 #, fuzzy
 msgid "add gain automation event"
 msgstr "acrescentar evento de automatização a "
 
-#: gain_meter.cc:66
+#: gain_meter.cc:67
 msgid "cannot find images for fader slider"
 msgstr ""
 
-#: gain_meter.cc:73
+#: gain_meter.cc:74
 msgid "cannot find images for fader rail"
 msgstr ""
 
-#: gain_meter.cc:88
-msgid "dbFS"
-msgstr ""
-
-#: gain_meter.cc:89 gain_meter.cc:143 gain_meter.cc:704
-msgid "pre"
-msgstr ""
-
-#: gain_meter.cc:139 gain_meter.cc:700
-#, fuzzy
-msgid "input"
-msgstr "%1 entrada"
-
-#: gain_meter.cc:147 gain_meter.cc:708
-#, fuzzy
-msgid "post"
-msgstr "porta"
-
-#. TRANSLATORS: this string should be longest of the strings
-#. used to describe meter points. In english, its "input".
-#.
-#: gain_meter.cc:155
-msgid "tupni"
-msgstr ""
-
-#: gain_meter.cc:174 gain_meter.cc:458 gain_meter.cc:480 gain_meter.cc:525
+#: gain_meter.cc:130 gain_meter.cc:339 gain_meter.cc:494 gain_meter.cc:539
 #, fuzzy
 msgid "-inf"
 msgstr "entrada"
 
-#: glade/new_session_dialog.glade.h:1
+#: gain_meter.cc:140
 #, fuzzy
-msgid "<b>Advanced</b>"
-msgstr "Avançado..."
-
-#: glade/new_session_dialog.glade.h:2
-msgid "<b>Input</b>"
-msgstr ""
+msgid "Fader automation mode"
+msgstr "modo de automatização de panorâmica"
 
-#: glade/new_session_dialog.glade.h:3
+#: gain_meter.cc:141
 #, fuzzy
-msgid "<b>Output</b>"
-msgstr "Saída"
+msgid "Fader automation type"
+msgstr "Tipo de automatização de panorâmica"
 
-#: glade/new_session_dialog.glade.h:4
-#, fuzzy
-msgid "Automatically connect inputs"
-msgstr "ligar entradas físicas automaticamente"
+#. XXX it might different in different languages
+#: gain_meter.cc:182 gain_meter.cc:817 panner_ui.cc:99 panner_ui.cc:807
+msgid "Abs"
+msgstr ""
 
-#: glade/new_session_dialog.glade.h:5
+#: gain_meter.cc:472
 #, fuzzy
-msgid "Automatically connect outputs"
-msgstr "ligar saídas manualmente"
+msgid "-Inf"
+msgstr "entrada"
 
-#: glade/new_session_dialog.glade.h:6
+#: gain_meter.cc:781 mixer_strip.cc:770 panner_ui.cc:771
 #, fuzzy
-msgid "Channel Count"
-msgstr "Cancelar Importação"
+msgid "O"
+msgstr "OU"
 
-#: glade/new_session_dialog.glade.h:7
-msgid "Connect to Master Bus"
+#: gain_meter.cc:784 panner_ui.cc:774
+msgid "P"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:8
-msgid "Connect to physical outputs"
+#: gain_meter.cc:787 panner_ui.cc:777
+msgid "T"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:9
-#, fuzzy
-msgid "Create Control Bus"
-msgstr "Saídas de Controlo"
-
-#: glade/new_session_dialog.glade.h:10
-#, fuzzy
-msgid "Create Master Bus"
-msgstr "usar saídas principais"
-
-#: glade/new_session_dialog.glade.h:11
-#, fuzzy
-msgid "New Session"
-msgstr "Sessão"
-
-#: glade/new_session_dialog.glade.h:12
-#, fuzzy
-msgid "Open Recent Session"
-msgstr "abrir sessão"
-
-#: glade/new_session_dialog.glade.h:13
-#, fuzzy
-msgid "Open Session"
-msgstr "abrir sessão"
-
-#: glade/new_session_dialog.glade.h:14
-#, fuzzy
-msgid "Port limit"
-msgstr "Esquecer"
-
-#: glade/new_session_dialog.glade.h:15
-#, fuzzy
-msgid "Select a File"
-msgstr "Seleccionar tudo"
-
-#: glade/new_session_dialog.glade.h:16
-#, fuzzy
-msgid "Select a Session"
-msgstr "seleccionar regiões"
-
-#: glade/new_session_dialog.glade.h:17
-#, fuzzy
-msgid "Track/Bus connection options"
-msgstr "Faixas/Barramentos"
+#: gain_meter.cc:790 panner_ui.cc:780
+msgid "W"
+msgstr ""
 
 #: gtk-custom-ruler.c:126
 #, fuzzy
@@ -4636,237 +4550,237 @@ msgid "Draw current ruler position"
 msgstr ""
 
 #. end-of-file, other end closed or shutdown?
-#: imageframe_socket_handler.cc:126
+#: imageframe_socket_handler.cc:127
 msgid "Image Compositor Socket has been shutdown/closed"
 msgstr "O ligação ao Compositor de Imagem foi desligada/fechada"
 
-#: imageframe_time_axis.cc:287
+#: imageframe_time_axis.cc:286
 #, fuzzy
 msgid "0.5 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:288 marker_time_axis.cc:241
+#: imageframe_time_axis.cc:287 marker_time_axis.cc:242
 #, fuzzy
 msgid "1 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:289 marker_time_axis.cc:242
+#: imageframe_time_axis.cc:288 marker_time_axis.cc:243
 #, fuzzy
 msgid "1.5 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:290 marker_time_axis.cc:243
+#: imageframe_time_axis.cc:289 marker_time_axis.cc:244
 #, fuzzy
 msgid "2 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:291 marker_time_axis.cc:244
+#: imageframe_time_axis.cc:290 marker_time_axis.cc:245
 #, fuzzy
 msgid "2.5 seconds"
 msgstr "Segundos"
 
-#: imageframe_time_axis.cc:292 marker_time_axis.cc:245
+#: imageframe_time_axis.cc:291 marker_time_axis.cc:246
 #, fuzzy
 msgid "3 seconds"
 msgstr "Segundos"
 
 #. duration_items.push_back(SeparatorElem()) ;
 #. duration_items.push_back(MenuElem (_("custom"), mem_fun(*this, &ImageFrameTimeAxis::set_marker_duration_custom))) ;
-#: imageframe_time_axis.cc:297 marker_time_axis.cc:250
+#: imageframe_time_axis.cc:296 marker_time_axis.cc:251
 #, fuzzy
 msgid "Duration (sec)"
 msgstr "Arrastar regiões"
 
-#: imageframe_time_axis.cc:302
+#: imageframe_time_axis.cc:301
 #, fuzzy
 msgid "Remove Frame"
 msgstr "Remover Campo"
 
-#: imageframe_time_axis.cc:305
+#: imageframe_time_axis.cc:304
 #, fuzzy
 msgid "Image Frame"
 msgstr "Quadros CD"
 
-#: imageframe_time_axis.cc:306 marker_time_axis.cc:256
+#: imageframe_time_axis.cc:305 marker_time_axis.cc:257
 #, fuzzy
 msgid "Rename Track"
 msgstr "Renomear"
 
-#: io_selector.cc:59 io_selector.cc:793
+#: io_selector.cc:60 io_selector.cc:794
 #, fuzzy
 msgid "Rescan"
 msgstr "refrescar"
 
-#: io_selector.cc:67
+#: io_selector.cc:68
 msgid "%1 input"
 msgstr "%1 entrada"
 
-#: io_selector.cc:69
+#: io_selector.cc:70
 msgid "%1 output"
 msgstr "%1 saída"
 
-#: io_selector.cc:141 route_params_ui.cc:106
+#: io_selector.cc:142 route_params_ui.cc:107
 msgid "Inputs"
 msgstr "Entradas"
 
-#: io_selector.cc:141 route_params_ui.cc:107
+#: io_selector.cc:142 route_params_ui.cc:108
 msgid "Outputs"
 msgstr "Saídas"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Input"
 msgstr "acrescentar entrada"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Output"
 msgstr "acrescentar saída"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Input"
 msgstr "Remover ponto de sincronia"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Output"
 msgstr "No.Saídas"
 
-#: io_selector.cc:144
+#: io_selector.cc:145
 #, fuzzy
 msgid "Disconnect All"
 msgstr "Desligar"
 
-#: io_selector.cc:158
+#: io_selector.cc:159
 msgid "Available connections"
 msgstr "Ligações disponíveis"
 
-#: io_selector.cc:554 io_selector.cc:573
+#: io_selector.cc:555 io_selector.cc:574
 msgid "There are no more JACK ports available."
 msgstr ""
 
-#: io_selector.cc:648 io_selector.cc:675 io_selector.cc:728
+#: io_selector.cc:649 io_selector.cc:676 io_selector.cc:729
 msgid "port"
 msgstr "porta"
 
-#: io_selector.cc:797
+#: io_selector.cc:798
 msgid "ardour: "
 msgstr ""
 
-#: keyboard.cc:297
+#: keyboard.cc:299
 msgid "KeyboardTarget: keyname \"%1\" is unknown."
 msgstr ""
 
-#: keyboard.cc:523
+#: keyboard.cc:525
 msgid ""
 "Your system is completely broken - NumLock uses \"%1\"as its modifier. This "
 "is madness - see the man page for xmodmap to find out how to fix this."
 msgstr ""
 
-#: keyboard.cc:531
+#: keyboard.cc:533
 msgid ""
 "Your system generates \"%1\" when the NumLock key is pressed. This can cause "
 "problems when editing so Ardour will use %2 to mean Meta rather than %1"
 msgstr ""
 
-#: keyboard.cc:592
+#: keyboard.cc:594
 msgid "You have %1 keys bound to \"mod1\""
 msgstr "Existem %1 teclas associadas a \"mod1\""
 
-#: keyboard.cc:607
+#: keyboard.cc:609
 msgid "You have %1 keys bound to \"mod2\""
 msgstr "Existem %1 teclas associadas a \"mod2\""
 
-#: keyboard.cc:622
+#: keyboard.cc:624
 msgid "You have %1 keys bound to \"mod3\""
 msgstr "Existem %1 teclas associadas a \"mod3\""
 
-#: keyboard.cc:637
+#: keyboard.cc:639
 msgid "You have %1 keys bound to \"mod4\""
 msgstr "Existem %1 teclas associadas a \"mod4\""
 
-#: keyboard.cc:652
+#: keyboard.cc:654
 msgid "You have %1 keys bound to \"mod5\""
 msgstr "Existem %1 teclas associadas a \"mod5\""
 
-#: location_ui.cc:47 location_ui.cc:50
+#: location_ui.cc:48 location_ui.cc:51
 msgid "Set"
 msgstr "Seleccionar"
 
-#: location_ui.cc:48 location_ui.cc:51
+#: location_ui.cc:49 location_ui.cc:52
 msgid "Go"
 msgstr "Ir"
 
-#: location_ui.cc:54
+#: location_ui.cc:55
 msgid "CD"
 msgstr ""
 
-#: location_ui.cc:57
+#: location_ui.cc:58
 msgid "SCMS"
 msgstr ""
 
-#: location_ui.cc:58
+#: location_ui.cc:59
 msgid "Pre-Emphasis"
 msgstr ""
 
-#: location_ui.cc:569
+#: location_ui.cc:570
 msgid "Add New Location"
 msgstr "Adicionar Nova Localização"
 
-#: location_ui.cc:570
+#: location_ui.cc:571
 msgid "Add New Range"
 msgstr "Adicionar Novo Intervalo"
 
-#: location_ui.cc:574
+#: location_ui.cc:575
 msgid "ardour: locations"
 msgstr "ardour: localizações"
 
-#: location_ui.cc:575
+#: location_ui.cc:576
 msgid "ardour_locations"
 msgstr ""
 
-#: location_ui.cc:603
+#: location_ui.cc:604
 #, fuzzy
 msgid "Location (CD Index) Markers"
 msgstr "Localizações"
 
-#: location_ui.cc:623
+#: location_ui.cc:624
 #, fuzzy
 msgid "Range (CD Track) Markers"
 msgstr "Intervalos"
 
-#: location_ui.cc:789
+#: location_ui.cc:790
 msgid "add range marker"
 msgstr "acrescentar marcador de região"
 
-#: main.cc:71
+#: main.cc:72
 msgid "ardour is killing itself for a clean exit\n"
 msgstr "ardour em modo de auto-destruição para uma saída em beleza\n"
 
-#: main.cc:80
+#: main.cc:81
 msgid "stopping user interface\n"
 msgstr "interface homem-máquina em fase terminal\n"
 
 #. XXX its doubtful that snprintf() is async-safe
-#: main.cc:99
+#: main.cc:100
 #, fuzzy, c-format
 msgid "%d(%d): received signal %d\n"
 msgstr "%d: sinal %d recebido\n"
 
-#: main.cc:185
+#: main.cc:186
 msgid "cannot become new process group leader (%1)"
 msgstr ""
 
-#: main.cc:212
+#: main.cc:213
 msgid "cannot setup signal handling for %1"
 msgstr "não foi possível estabelecer receptor de sinal %1"
 
-#: main.cc:223
+#: main.cc:224
 msgid "cannot set default signal mask (%1)"
 msgstr "não foi possível estabelecer máscara de sinal %1"
 
-#: main.cc:253
+#: main.cc:254
 #, fuzzy
 msgid ""
 "Without a UI style file, ardour will look strange.\n"
@@ -4877,12 +4791,12 @@ msgstr ""
 "Por favor, indique um ficheiro de estilo visual válido em ARDOUR_UI_RC "
 "(variável de ambiente)"
 
-#: main.cc:273
+#: main.cc:276
 #, fuzzy
 msgid "Ardour could not connect to JACK."
 msgstr "Não foi possível conectar ao serviço JACK como \"%1\""
 
-#: main.cc:277
+#: main.cc:280
 #, fuzzy
 msgid ""
 "There are several possible reasons:\n"
@@ -4902,380 +4816,469 @@ msgstr ""
 "\n"
 "Por favor, considere estas possibilidades e (re)inicie o serviço JACK."
 
-#: main.cc:324
+#: main.cc:310
+msgid "could not load command line session \"%1\""
+msgstr "não foi possível carregar a sessão de linha de comando \"%1\""
+
+#. it wasn't new, but we require a new session
+#: main.cc:330
+msgid ""
+"\n"
+"\n"
+"A session named \"%1\" already exists.\n"
+"To avoid this message, start ardour as \"ardour %1"
+msgstr ""
+
+#: main.cc:341
+msgid ""
+"\n"
+"\n"
+"No session named \"%1\" exists.\n"
+"To create it from the command line, start ardour as \"ardour --new %1"
+msgstr ""
+
+#: main.cc:405
 msgid "Ardour/GTK "
 msgstr ""
 
-#: main.cc:326
+#: main.cc:407
 msgid ""
 "\n"
 "   (built using "
 msgstr ""
 
-#: main.cc:330
+#: main.cc:411
 #, fuzzy
 msgid " with libardour "
 msgstr " em execução com libardour "
 
-#: main.cc:335
+#: main.cc:416
 msgid " and GCC version "
 msgstr ""
 
-#: main.cc:345
-msgid "Copyright (C) 1999-2005 Paul Davis"
+#: main.cc:426
+msgid "Copyright (C) 1999-2006 Paul Davis"
 msgstr ""
 
-#: main.cc:346
+#: main.cc:427
 msgid ""
 "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker"
 msgstr ""
 
-#: main.cc:348
+#: main.cc:429
 msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
 msgstr "Ardour é fornecido ABSOLUTAMENTE SEM QUALQUER GARANTIA"
 
-#: main.cc:349
+#: main.cc:430
 msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 msgstr ""
 
-#: main.cc:350
+#: main.cc:431
 msgid "This is free software, and you are welcome to redistribute it "
 msgstr "Sendo software livre, é permitida e até encorajada a sua distribuição"
 
-#: main.cc:351
+#: main.cc:432
 #, fuzzy
 msgid "under certain conditions; see the source for copying conditions."
 msgstr ""
 "desde que sejam respeitadas algumas condições; para mais informações, leia "
 "por favor o ficheiro COPYING."
 
-#: main.cc:360
+#: main.cc:441
 msgid "could not create ARDOUR GUI"
 msgstr "não foi possível criar o interface gráfico (GUI)"
 
-#: main.cc:378
+#: main.cc:459
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr "Não foi possível conectar ao serviço JACK como \"%1\""
 
-#: main.cc:381
+#: main.cc:462
 msgid "could not initialize Ardour."
 msgstr "não foi possível inicializar o Ardour"
 
-#: main.cc:392
-msgid "could not load command line session \"%1\""
-msgstr "não foi possível carregar a sessão de linha de comando \"%1\""
+#: marker.cc:244
+#, fuzzy
+msgid "MarkerText"
+msgstr "Marcas"
 
-#. it wasn't new, but we require a new session
-#: main.cc:412
-msgid ""
-"\n"
-"\n"
-"A session named \"%1\" already exists.\n"
-"To avoid this message, start ardour as \"ardour %1"
-msgstr ""
-
-#: main.cc:423
-msgid ""
-"\n"
-"\n"
-"No session named \"%1\" exists.\n"
-"To create it from the command line, start ardour as \"ardour --new %1"
-msgstr ""
-
-#: marker.cc:244
-#, fuzzy
-msgid "MarkerText"
-msgstr "Marcas"
-
-#: marker_time_axis.cc:253
+#: marker_time_axis.cc:254
 #, fuzzy
 msgid "Remove Marker"
 msgstr "remover marcador"
 
-#: marker_time_axis.cc:255
+#: marker_time_axis.cc:256
 #, fuzzy
 msgid "Marker"
 msgstr "Marcas"
 
-#: meter_bridge.cc:77
+#: meter_bridge.cc:78
 msgid "ardour: meter bridge"
 msgstr "ardour: VUímetro"
 
-#: meter_bridge.cc:78
+#: meter_bridge.cc:79
 msgid "ardour_meter_bridge"
 msgstr ""
 
-#: meter_bridge_strip.cc:79 meter_bridge_strip.cc:93
+#: meter_bridge_strip.cc:80 meter_bridge_strip.cc:94
 #, c-format
 msgid "# of %u-sample overs"
 msgstr "# de %u-quadros"
 
-#: meter_bridge_strip.cc:221
+#: meter_bridge_strip.cc:222
 #, fuzzy
 msgid "New Name for Meter:"
 msgstr "Novo nome para o VUímetro:"
 
-#: mixer_strip.cc:85 mixer_strip.cc:437 region_editor.cc:46
-msgid "mute"
-msgstr "mudo"
-
-#: mixer_strip.cc:85 mixer_strip.cc:438
-msgid "solo"
+#: mixer_strip.cc:95 mixer_strip.cc:140 mixer_strip.cc:1227
+msgid "pre"
 msgstr ""
 
-#: mixer_strip.cc:85 mixer_strip.cc:436
-msgid "RECORD"
-msgstr "GRAVAR"
-
-#: mixer_strip.cc:96 mixer_strip.cc:441 mixer_strip.cc:1064
+#: mixer_strip.cc:96 mixer_strip.cc:822
 msgid "Comments"
 msgstr ""
 
-#: mixer_strip.cc:120 mixer_strip.cc:752
-msgid "INPUT"
-msgstr "ENTRADA"
-
-#: mixer_strip.cc:125 mixer_strip.cc:773
-msgid "OUTPUT"
-msgstr "SAÍDA"
-
-#: mixer_strip.cc:140
-msgid "Pan automation mode"
-msgstr "Modo de automatização de panorâmica"
+#: mixer_strip.cc:119
+#, fuzzy
+msgid "Input"
+msgstr "Entradas"
 
-#: mixer_strip.cc:141
-msgid "Gain automation mode"
-msgstr "Modo de automatização de ganho"
+#: mixer_strip.cc:136 mixer_strip.cc:1223
+#, fuzzy
+msgid "input"
+msgstr "%1 entrada"
 
-#: mixer_strip.cc:143
-msgid "Pan automation type"
-msgstr "Tipo de automatização de panorâmica"
+#: mixer_strip.cc:144 mixer_strip.cc:1231
+#, fuzzy
+msgid "post"
+msgstr "porta"
 
-#: mixer_strip.cc:144
-msgid "Gain automation type"
-msgstr "Tipo de automatização de ganho"
+#. TRANSLATORS: this string should be longest of the strings
+#. used to describe meter points. In english, its "input".
+#.
+#: mixer_strip.cc:152
+msgid "tupni"
+msgstr ""
 
-#: mixer_strip.cc:183 mixer_strip.cc:195 mixer_strip.cc:913
-msgid "trim"
-msgstr "recorte"
+#: mixer_strip.cc:207
+#, fuzzy
+msgid "Varispeed"
+msgstr "velocidade variável"
 
-#. XXX it might different in different languages
-#: mixer_strip.cc:184 mixer_strip.cc:196 mixer_strip.cc:917
-msgid "abs"
+#: mixer_strip.cc:233 mixer_strip.cc:836
+msgid "Click to Add/Edit Comments"
 msgstr ""
 
-#: mixer_strip.cc:203
-msgid "gain automation mode"
-msgstr "modo de automatização de ganho"
-
-#: mixer_strip.cc:204
-msgid "pan automation mode"
-msgstr "modo de automatização de panorâmica"
+#: mixer_strip.cc:374
+msgid "unknown strip width \"%1\" in XML GUI information"
+msgstr ""
+"largura desconhecida \"%1\" na informação XML para o interface gráfico (GUI)"
 
-#: mixer_strip.cc:205
-msgid "gain automation state"
-msgstr "ponto de automatização de ganho"
+#: mixer_strip.cc:417
+#, fuzzy
+msgid "record"
+msgstr "Gravar"
 
-#: mixer_strip.cc:206
-msgid "pan automation state"
-msgstr "ponto de automatização de panorâmica"
+#: mixer_strip.cc:418 region_editor.cc:47
+msgid "mute"
+msgstr "mudo"
 
-#: mixer_strip.cc:223
-msgid "varispeed"
-msgstr "velocidade variável"
+#: mixer_strip.cc:419
+msgid "solo"
+msgstr ""
 
-#: mixer_strip.cc:245 mixer_strip.cc:1078
-msgid "Click to Add/Edit Comments"
+#: mixer_strip.cc:422
+msgid "comments"
 msgstr ""
 
-#: mixer_strip.cc:393
-msgid "unknown strip width \"%1\" in XML GUI information"
+#: mixer_strip.cc:424
+msgid "*comments*"
 msgstr ""
-"largura desconhecida \"%1\" na informação XML para o interface gráfico (GUI)"
 
-#: mixer_strip.cc:443 mixer_strip.cc:1062
-msgid "*Comments*"
+#: mixer_strip.cc:438
+#, fuzzy
+msgid "Rec"
+msgstr "refrescar"
+
+#: mixer_strip.cc:439
+msgid "M"
 msgstr ""
 
-#: mixer_strip.cc:457
-msgid "REC"
-msgstr "GRAV"
+#: mixer_strip.cc:440
+msgid "S"
+msgstr ""
 
-#: mixer_strip.cc:462 mixer_strip.cc:1072
+#: mixer_strip.cc:443 mixer_strip.cc:830
 #, fuzzy
 msgid "Cmt"
 msgstr "corte"
 
-#: mixer_strip.cc:464 mixer_strip.cc:1070
+#: mixer_strip.cc:445 mixer_strip.cc:828
 msgid "*Cmt*"
 msgstr ""
 
-#: mixer_strip.cc:503 mixer_strip.cc:562 redirect_box.cc:1004
+#: mixer_strip.cc:483 mixer_strip.cc:549 redirect_box.cc:1006
 msgid "Not connected to JACK - no I/O changes are possible"
 msgstr ""
 
-#: mixer_strip.cc:569
+#: mixer_strip.cc:560
 msgid "Track"
 msgstr "Faixa"
 
-#: mixer_strip.cc:593 mixer_strip.cc:609
+#: mixer_strip.cc:588 mixer_strip.cc:604
 msgid "could not register new ports required for that connection"
 msgstr ""
 
-#: mixer_strip.cc:755
-msgid "IN"
-msgstr "ENTRADA"
-
-#: mixer_strip.cc:776
-msgid "OUT"
-msgstr "SAÍDA"
+#: mixer_strip.cc:747
+#, fuzzy
+msgid " Input"
+msgstr "No.Entradas"
 
-#: mixer_strip.cc:884
-msgid "aplay"
-msgstr "aRepr"
+#: mixer_strip.cc:750
+#, fuzzy
+msgid "I"
+msgstr "ENTRADA"
 
-#: mixer_strip.cc:890
-msgid "awrite"
-msgstr "aGrav"
+#: mixer_strip.cc:820
+msgid "*Comments*"
+msgstr ""
 
-#: mixer_strip.cc:1095
+#: mixer_strip.cc:859
 #, fuzzy
 msgid ": comment editor"
 msgstr "Não foi possível iniciar o painel principal de edição (editor)"
 
-#: mixer_strip.cc:1157 mixer_strip.cc:1178
-msgid "no group"
-msgstr "sem grupo"
+#: mixer_strip.cc:953
+msgid "Grp"
+msgstr ""
 
-#: mixer_strip.cc:1181
+#: mixer_strip.cc:956
 msgid "~G"
 msgstr ""
 
-#: mixer_strip.cc:1229
+#: mixer_strip.cc:1004
 #, fuzzy
 msgid "Invert Polarity"
 msgstr "polaridade"
 
-#: mixer_ui.cc:84
+#: mixer_ui.cc:85
 msgid "Strips"
 msgstr "Painéis"
 
-#: mixer_ui.cc:108
-msgid "groupname"
-msgstr ""
-
-#: mixer_ui.cc:109 region_editor.cc:48 region_editor.cc:191
-#: region_editor.cc:225
-msgid "active"
-msgstr "activo"
-
-#: mixer_ui.cc:110 region_editor.cc:49
-msgid "visible"
-msgstr "visível"
+#: mixer_ui.cc:110
+#, fuzzy
+msgid "Group"
+msgstr "Grupos"
 
-#: mixer_ui.cc:207 mixer_ui.cc:366
+#: mixer_ui.cc:211 mixer_ui.cc:370
 msgid "ardour: mixer"
 msgstr "ardour: misturador"
 
-#: mixer_ui.cc:208
+#: mixer_ui.cc:212
 msgid "ardour_mixer"
 msgstr ""
 
-#: mixer_ui.cc:342
+#: mixer_ui.cc:346
 msgid "ardour: mixer: "
 msgstr "ardour: misturador: "
 
-#: mixer_ui.cc:569
+#: mixer_ui.cc:573
 msgid "signal"
 msgstr "sinal"
 
-#: mixer_ui.cc:719
+#: mixer_ui.cc:723
 msgid "track display list item for renamed strip not found!"
 msgstr "não foi encontrada qualquer faixa para o painel de mistura"
 
-#: option_editor.cc:75
+#: new_session_dialog.cc:39
+#, fuzzy
+msgid "New Session Name :"
+msgstr "Nome de sessão:"
+
+#: new_session_dialog.cc:41
+msgid "Create Session Directory In :"
+msgstr ""
+
+#: new_session_dialog.cc:43
+#, fuzzy
+msgid "Use Session Template :"
+msgstr "Modelo de sessão"
+
+#: new_session_dialog.cc:45
+#, fuzzy
+msgid "Channel Count"
+msgstr "Cancelar Importação"
+
+#: new_session_dialog.cc:46
+#, fuzzy
+msgid "Create Monitor Bus"
+msgstr "Saídas de Controlo"
+
+#: new_session_dialog.cc:53
+#, fuzzy
+msgid "Create Master Bus"
+msgstr "usar saídas principais"
+
+#: new_session_dialog.cc:55
+#, fuzzy
+msgid "Automatically Connect Inputs"
+msgstr "ligar entradas físicas automaticamente"
+
+#: new_session_dialog.cc:56 new_session_dialog.cc:67
+#, fuzzy
+msgid "Port Limit"
+msgstr "Esquecer"
+
+#: new_session_dialog.cc:64
+#, fuzzy
+msgid "<b>Track/Bus Inputs</b>"
+msgstr "Faixas/Barramentos"
+
+#: new_session_dialog.cc:66
+#, fuzzy
+msgid "Automatically Connect Outputs"
+msgstr "ligar saídas manualmente"
+
+#: new_session_dialog.cc:75
+msgid "Connect to Master Bus"
+msgstr ""
+
+#: new_session_dialog.cc:76
+msgid "Connect to Physical Outputs"
+msgstr ""
+
+#: new_session_dialog.cc:80
+#, fuzzy
+msgid "<b>Track/Bus Outputs</b>"
+msgstr "Saída"
+
+#: new_session_dialog.cc:83
+#, fuzzy
+msgid "Advanced Options"
+msgstr "Opções"
+
+#: new_session_dialog.cc:91
+#, fuzzy
+msgid "Open Recent Session"
+msgstr "abrir sessão"
+
+#: new_session_dialog.cc:127
+#, fuzzy
+msgid "Open Session File :"
+msgstr "abrir sessão"
+
+#: new_session_dialog.cc:274
+#, fuzzy
+msgid "New Session"
+msgstr "Sessão"
+
+#: new_session_dialog.cc:276
+#, fuzzy
+msgid "Open Session"
+msgstr "abrir sessão"
+
+#: new_session_dialog.cc:281
+#, fuzzy
+msgid "ardour: session control"
+msgstr "ardour: guardar sessão?"
+
+#: new_session_dialog.cc:310
+#, fuzzy
+msgid "select template"
+msgstr "Sem modelo"
+
+#: new_session_dialog.cc:316
+#, fuzzy
+msgid "select session file"
+msgstr "seleccionar regiões"
+
+#: new_session_dialog.cc:325
+#, fuzzy
+msgid "select directory"
+msgstr "seleccionar regiões"
+
+#: option_editor.cc:76
 #, fuzzy
 msgid "SMPTE offset is negative"
 msgstr "Deslocamento SMPTE"
 
-#: option_editor.cc:101
+#: option_editor.cc:102
 msgid "ardour: options editor"
 msgstr "ardour: opções"
 
-#: option_editor.cc:102
+#: option_editor.cc:103
 msgid "ardour_option_editor"
 msgstr ""
 
-#: option_editor.cc:126
+#: option_editor.cc:127
 msgid "Paths/Files"
 msgstr "Directórios/Ficheiros"
 
-#: option_editor.cc:127
+#: option_editor.cc:128
 msgid "Kbd/Mouse"
 msgstr "Teclado/Rato"
 
-#: option_editor.cc:130
+#: option_editor.cc:131
 msgid "Layers & Fades"
 msgstr ""
 
-#: option_editor.cc:134
+#: option_editor.cc:135
 msgid "MIDI"
 msgstr ""
 
-#: option_editor.cc:176
+#: option_editor.cc:177
 msgid "24 FPS"
 msgstr ""
 
-#: option_editor.cc:178
+#: option_editor.cc:179
 msgid "25 FPS"
 msgstr ""
 
-#: option_editor.cc:180
+#: option_editor.cc:181
 msgid "30 FPS"
 msgstr ""
 
-#: option_editor.cc:186
+#: option_editor.cc:187
 msgid "30 FPS drop"
 msgstr ""
 
-#: option_editor.cc:243
+#: option_editor.cc:244
 msgid "session RAID path"
 msgstr "directório RAID de sessão"
 
-#: option_editor.cc:248
+#: option_editor.cc:249
 #, fuzzy
 msgid "Soundfile Search Paths"
 msgstr "Audioteca"
 
-#: option_editor.cc:253
+#: option_editor.cc:254
 #, fuzzy
 msgid "Paths"
 msgstr "Directórios/Ficheiros"
 
-#: option_editor.cc:267 option_editor.cc:273 option_editor.cc:724
-#: option_editor.cc:751
+#: option_editor.cc:268 option_editor.cc:274 option_editor.cc:723
+#: option_editor.cc:750
 msgid "internal"
 msgstr "interno"
 
-#: option_editor.cc:286
+#: option_editor.cc:287
 msgid "Short crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:298
+#: option_editor.cc:299
 msgid "Destructive crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:366
+#: option_editor.cc:367
 msgid "SMPTE Frames/second"
 msgstr "Quadros SMPTE/segundo"
 
-#: option_editor.cc:367
+#: option_editor.cc:368
 msgid "SMPTE Offset"
 msgstr "Deslocamento SMPTE"
 
-#: option_editor.cc:461 option_editor.cc:468 option_editor.cc:471
-#: option_editor.cc:617
+#: option_editor.cc:462 option_editor.cc:469 option_editor.cc:472
+#: option_editor.cc:618
 #, fuzzy
 msgid "online"
 msgstr "linear"
@@ -5283,12 +5286,12 @@ msgstr "linear"
 #. remember, we have to handle the i18n case where the relative
 #. lengths of the strings in language N is different than in english.
 #.
-#: option_editor.cc:468 option_editor.cc:469 option_editor.cc:614
+#: option_editor.cc:469 option_editor.cc:470 option_editor.cc:615
 #, fuzzy
 msgid "offline"
 msgstr "linear"
 
-#: option_editor.cc:669
+#: option_editor.cc:670
 msgid "Choose Click"
 msgstr ""
 
@@ -5297,15 +5300,15 @@ msgstr ""
 msgid "Choose Click Emphasis"
 msgstr "Usar como metrónomo acentuado"
 
-#: option_editor.cc:804
+#: option_editor.cc:803
 msgid "Click audio file"
 msgstr "Ficheiro audio para metrónomo"
 
-#: option_editor.cc:810
+#: option_editor.cc:809
 msgid "Click emphasis audiofile"
 msgstr "Ficheiro audio para metrónomo acentuado"
 
-#: option_editor.cc:847
+#: option_editor.cc:846
 msgid ""
 "The auditioner is a dedicated mixer strip used\n"
 "for listening to specific regions outside the context\n"
@@ -5317,35 +5320,35 @@ msgstr ""
 "da mistura geral. Pode ser inter-conectado tal como\n"
 "qualquer outro painel de mistura."
 
-#: option_editor.cc:920
+#: option_editor.cc:919
 msgid "Edit using"
 msgstr "Editar com"
 
-#: option_editor.cc:927 option_editor.cc:954
+#: option_editor.cc:926 option_editor.cc:953
 msgid "+ button"
 msgstr "+ botão"
 
-#: option_editor.cc:947
+#: option_editor.cc:946
 msgid "Delete using"
 msgstr "Eliminar com"
 
-#: option_editor.cc:974
+#: option_editor.cc:973
 msgid "Ignore snap using"
 msgstr "Ignorar ajuste com"
 
-#: opts.cc:47
+#: opts.cc:46
 msgid "Usage: "
 msgstr "Uso: "
 
-#: opts.cc:48
+#: opts.cc:47
 msgid "  -v, --version                    Show version information\n"
 msgstr "  -v, --version                    Mostrar informação sobre versão\n"
 
-#: opts.cc:49
+#: opts.cc:48
 msgid "  -h, --help                       Print this message\n"
 msgstr "  -h, --help                       Mostrar esta mesma mensagem\n"
 
-#: opts.cc:50
+#: opts.cc:49
 msgid ""
 "  -b, --bindings                   Print all possible keyboard binding "
 "names\n"
@@ -5353,14 +5356,14 @@ msgstr ""
 "  -b, --bindings                   Mostrar todas as associações de teclado "
 "possíveis\n"
 
-#: opts.cc:51
+#: opts.cc:50
 #, fuzzy
 msgid "  -n, --show-splash                Show splash screen\n"
 msgstr ""
 "  -n, --no-splash                  Não mostrar ecran de apresentação "
 "inicial\n"
 
-#: opts.cc:52
+#: opts.cc:51
 #, fuzzy
 msgid ""
 "  -c, --name  name                 Use a specific jack client name, default "
@@ -5369,150 +5372,163 @@ msgstr ""
 "  -c, --jack-client-name  name     Empregar um nome de cliente JACK "
 "específico (ardour)\n"
 
-#: opts.cc:53
+#: opts.cc:52
 #, fuzzy
 msgid ""
 "  -N, --new session-name           Create a new session from the command "
 "line\n"
 msgstr "  [session-name]                   Nome de sessão a carregar\n"
 
-#: opts.cc:54
+#: opts.cc:53
 msgid ""
 "  -o, --use-hw-optimizations        Try to use h/w specific optimizations\n"
 msgstr ""
 
-#: opts.cc:56
+#: opts.cc:55
 #, fuzzy
 msgid "  -V, --novst                      Do not use VST support\n"
 msgstr "  -V, --novst                      Não usar suporte VST inicial\n"
 
-#: opts.cc:58
+#: opts.cc:57
 msgid "  [session-name]                   Name of session to load\n"
 msgstr "  [session-name]                   Nome de sessão a carregar\n"
 
-#: opts.cc:59
+#: opts.cc:58
 msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
 msgstr ""
 
-#: opts.cc:60
+#: opts.cc:59
 #, fuzzy
 msgid "  -g, --gtktheme                   Allow GTK to load a theme\n"
 msgstr "  -h, --help                       Mostrar esta mesma mensagem\n"
 
-#: pan_automation_time_axis.cc:59
+#: pan_automation_time_axis.cc:60
 msgid "You can't graphically edit panning of more than stream"
 msgstr ""
 
-#: pan_automation_time_axis.cc:79
+#: pan_automation_time_axis.cc:80
 #, fuzzy
 msgid "add pan automation event"
 msgstr "acrescentar evento de automatização a "
 
-#: panner2d.cc:588 panner_ui.cc:393 plugin_ui.cc:833
+#: panner2d.cc:589 panner_ui.cc:435 plugin_ui.cc:834
 msgid "Bypass"
 msgstr "Ignorar"
 
-#: panner_ui.cc:57 panner_ui.cc:187
+#: panner_ui.cc:58 panner_ui.cc:225
 #, fuzzy
 msgid "link"
 msgstr "entrada"
 
+#: panner_ui.cc:69
+msgid "Pan automation mode"
+msgstr "Modo de automatização de panorâmica"
+
 #: panner_ui.cc:70
+msgid "Pan automation type"
+msgstr "Tipo de automatização de panorâmica"
+
+#: panner_ui.cc:81
 msgid "panning link control"
 msgstr ""
 
-#: panner_ui.cc:72
+#: panner_ui.cc:83
 msgid "panning link direction"
 msgstr ""
 
-#: panner_ui.cc:197
+#: panner_ui.cc:235
 msgid "L"
 msgstr ""
 
-#: panner_ui.cc:296
+#: panner_ui.cc:335
+#, c-format
+msgid "panner for channel %lu"
+msgstr ""
+
+#: panner_ui.cc:337
 #, c-format
 msgid "panner for channel %u"
 msgstr ""
 
-#: panner_ui.cc:403
+#: panner_ui.cc:445
 #, fuzzy
 msgid "Reset all"
 msgstr "reiniciar"
 
-#: playlist_selector.cc:51
+#: playlist_selector.cc:52
 #, fuzzy
 msgid "ardour: playlists"
 msgstr "ardour: efeitos/plug-ins"
 
-#: playlist_selector.cc:58
+#: playlist_selector.cc:59
 msgid "Playlists grouped by track"
 msgstr ""
 
-#: playlist_selector.cc:97
+#: playlist_selector.cc:98
 #, fuzzy
 msgid "ardour: playlist for "
 msgstr "ardour: efeitos/plug-ins"
 
-#: playlist_selector.cc:113
+#: playlist_selector.cc:114
 #, fuzzy
 msgid "Other tracks"
 msgstr "retocar faixa"
 
-#: playlist_selector.cc:129
+#: playlist_selector.cc:130
 msgid "unassigned"
 msgstr ""
 
-#: plugin_selector.cc:42
+#: plugin_selector.cc:43
 msgid "ardour: plugins"
 msgstr "ardour: efeitos/plug-ins"
 
-#: plugin_selector.cc:55
+#: plugin_selector.cc:56
 #, fuzzy
 msgid "Available LADSPA Plugins"
 msgstr "Efeitos/plug-ins LADSPA disponíveis"
 
-#: plugin_selector.cc:56
+#: plugin_selector.cc:57
 msgid "Type"
 msgstr "Tipo"
 
-#: plugin_selector.cc:57 plugin_selector.cc:80
+#: plugin_selector.cc:58 plugin_selector.cc:81
 msgid "# Inputs"
 msgstr "No.Entradas"
 
-#: plugin_selector.cc:58 plugin_selector.cc:81
+#: plugin_selector.cc:59 plugin_selector.cc:82
 msgid "# Outputs"
 msgstr "No.Saídas"
 
-#: plugin_selector.cc:67
+#: plugin_selector.cc:68
 msgid "Plugins to be Connected to Insert"
 msgstr ""
 
-#: plugin_selector.cc:79
+#: plugin_selector.cc:80
 #, fuzzy
 msgid "Available plugins"
 msgstr "Efeitos/plug-ins VST disponíveis"
 
-#: plugin_selector.cc:97
+#: plugin_selector.cc:98
 msgid "Add a plugin to the effect list"
 msgstr "Acrescentar à lista de efeitos/plug-ins"
 
-#: plugin_selector.cc:99
+#: plugin_selector.cc:102
 msgid "Remove a plugin from the effect list"
 msgstr "Remover à lista de efeitos/plug-ins"
 
-#: plugin_selector.cc:101
+#: plugin_selector.cc:104
 msgid "Update available plugins"
 msgstr "Actualizar efeitos/plug-ins disponíveis"
 
-#: plugin_selector.cc:123
+#: plugin_selector.cc:126
 msgid "LADSPA"
 msgstr ""
 
-#: plugin_selector.cc:126
+#: plugin_selector.cc:129
 msgid "VST"
 msgstr ""
 
-#: plugin_ui.cc:83
+#: plugin_ui.cc:84
 msgid ""
 "unknown type of editor-supplying plugin (note: no VST support in this "
 "version of ardour)"
@@ -5520,52 +5536,53 @@ msgstr ""
 "tipo desconhecido de editor de efeito/plug-in (nota: esta versão do ardour "
 "não suporta VST)"
 
-#: plugin_ui.cc:138
+#: plugin_ui.cc:139
 msgid "<span size=\"large\">Presets</span>"
 msgstr ""
 
-#: plugin_ui.cc:229
+#: plugin_ui.cc:230
 #, fuzzy
 msgid "Controls"
 msgstr "Saídas de Controlo"
 
-#: plugin_ui.cc:266
+#: plugin_ui.cc:267
 msgid "Plugin Editor: could not build control element for port %1"
 msgstr ""
 "Editor de efeitos/plug-ins: não foi possível criar elemento de controlo para "
 "%1"
 
-#: plugin_ui.cc:357
-msgid "automation control"
+#: plugin_ui.cc:358
+#, fuzzy
+msgid "Automation control"
 msgstr "controlo de automatização"
 
-#: plugin_ui.cc:853
+#: plugin_ui.cc:854
 msgid "Plugin preset %1 not found"
 msgstr "Parametrização de efeito/plug-in %1 inexistente"
 
-#: plugin_ui.cc:863
+#: plugin_ui.cc:864
 #, fuzzy
 msgid "Name of New Preset:"
 msgstr "Nome para a nova ligação:"
 
-#: redirect_automation_line.cc:53
+#: redirect_automation_line.cc:54
 msgid "redirect automation created for non-plugin"
 msgstr "automatização de re-encaminhamento criado para um não-efeito/plug-in"
 
-#: redirect_automation_time_axis.cc:93
+#: redirect_automation_time_axis.cc:94
 msgid "add automation event to "
 msgstr "acrescentar evento de automatização a "
 
-#: redirect_box.cc:222
+#: redirect_box.cc:223
 msgid "New send"
 msgstr ""
 
-#: redirect_box.cc:223
+#: redirect_box.cc:224
 #, fuzzy
 msgid "Show send controls"
 msgstr "Controlo de velocidade"
 
-#: redirect_box.cc:377
+#: redirect_box.cc:383
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5576,7 +5593,7 @@ msgid ""
 "part of the signal."
 msgstr ""
 
-#: redirect_box.cc:389
+#: redirect_box.cc:395
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5588,7 +5605,7 @@ msgid ""
 "support this type of configuration."
 msgstr ""
 
-#: redirect_box.cc:402
+#: redirect_box.cc:408
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "\n"
@@ -5601,34 +5618,34 @@ msgid ""
 "Ardour does not understand what to do in such situations.\n"
 msgstr ""
 
-#: redirect_box.cc:493
+#: redirect_box.cc:495
 msgid "Pre-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:496
+#: redirect_box.cc:498
 msgid "Post-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:642
+#: redirect_box.cc:644
 msgid ""
 "You cannot reorder this set of redirects\n"
 "in that way because the inputs and\n"
 "outputs do not work correctly."
 msgstr ""
 
-#: redirect_box.cc:747
+#: redirect_box.cc:749
 #, fuzzy
 msgid "rename redirect"
 msgstr "ardour: renomear região"
 
-#: redirect_box.cc:824 redirect_box.cc:872
+#: redirect_box.cc:826 redirect_box.cc:874
 msgid ""
 "Copying the set of redirects on the clipboard failed,\n"
 "probably because the I/O configuration of the plugins\n"
 "could not match the configuration of this track."
 msgstr ""
 
-#: redirect_box.cc:894
+#: redirect_box.cc:896
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this track?\n"
@@ -5637,7 +5654,7 @@ msgstr ""
 "Deseja realmente remover o faixa \"%1\" ?\n"
 "(esta operação não pode ser desfeita)"
 
-#: redirect_box.cc:897
+#: redirect_box.cc:899
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this bus?\n"
@@ -5646,244 +5663,256 @@ msgstr ""
 "Deseja realmente remover o faixa \"%1\" ?\n"
 "(esta operação não pode ser desfeita)"
 
-#: redirect_box.cc:902
+#: redirect_box.cc:904
 #, fuzzy
 msgid "Yes, remove them all"
 msgstr "Sim, remover."
 
-#: redirect_box.cc:938
+#: redirect_box.cc:940
 #, fuzzy
 msgid "ardour: %1"
 msgstr "ardour: misturador"
 
-#: redirect_box.cc:980
+#: redirect_box.cc:982
 #, fuzzy
 msgid "ardour: %1: %2 (by %3)"
 msgstr "ardour: misturador: "
 
 #. new stuff
-#: redirect_box.cc:1052
+#: redirect_box.cc:1054
 msgid "New Plugin ..."
 msgstr ""
 
-#: redirect_box.cc:1053
+#: redirect_box.cc:1055
 #, fuzzy
 msgid "New Insert"
 msgstr "nova entrada"
 
-#: redirect_box.cc:1054
+#: redirect_box.cc:1056
 msgid "New Send ..."
 msgstr ""
 
-#: redirect_box.cc:1066
+#: redirect_box.cc:1068
 #, fuzzy
 msgid "Deselect All"
 msgstr "Seleccionar tudo"
 
-#: redirect_box.cc:1073
+#: redirect_box.cc:1075
 #, fuzzy
 msgid "Activate all"
 msgstr "Activar"
 
-#: redirect_box.cc:1074
+#: redirect_box.cc:1076
 #, fuzzy
 msgid "Deactivate all"
 msgstr "Desactivar"
 
-#: region_editor.cc:44
+#: region_editor.cc:45
 msgid "NAME:"
 msgstr "NOME:"
 
-#: region_editor.cc:45
+#: region_editor.cc:46
 msgid "lock"
 msgstr "bloquear"
 
-#: region_editor.cc:47
+#: region_editor.cc:48
 msgid "opaque"
 msgstr "opaco"
 
-#: region_editor.cc:52
+#: region_editor.cc:49 region_editor.cc:192 region_editor.cc:226
+msgid "active"
+msgstr "activo"
+
+#: region_editor.cc:50
+msgid "visible"
+msgstr "visível"
+
+#: region_editor.cc:53
 msgid "Layer"
 msgstr "Nível"
 
-#: region_editor.cc:60
+#: region_editor.cc:54
+msgid "play"
+msgstr "reproduzir"
+
+#: region_editor.cc:61
 msgid "ENVELOPE"
 msgstr "ENVOLVENTE"
 
-#: region_editor.cc:106
+#: region_editor.cc:107
 msgid "mute this region"
 msgstr "emudecer esta região"
 
-#: region_editor.cc:107
+#: region_editor.cc:108
 msgid "regions underneath this one cannot be heard"
 msgstr "regiões abaixo desta não serão ouvidas"
 
-#: region_editor.cc:108
+#: region_editor.cc:109
 msgid "prevent any changes to this region"
 msgstr "evitar qualquer alteração nesta região"
 
-#: region_editor.cc:109
+#: region_editor.cc:110
 msgid "use the gain envelope during playback"
 msgstr "usar a envolvente de ganho durante a reprodução"
 
-#: region_editor.cc:110
+#: region_editor.cc:111
 msgid "show the gain envelope"
 msgstr "mostrar a curva de envolvente de ganho"
 
-#: region_editor.cc:111
+#: region_editor.cc:112
 msgid "use fade in curve during playback"
 msgstr "usar curva de evanescimento durante a reprodução"
 
-#: region_editor.cc:112
+#: region_editor.cc:113
 msgid "use fade out curve during playback"
 msgstr "usar curva de desvanecimento durante a reprodução"
 
-#: region_editor.cc:113
+#: region_editor.cc:114
 msgid "audition this region"
 msgstr "ouvir esta região"
 
-#: region_editor.cc:146
+#: region_editor.cc:147
 msgid "START:"
 msgstr "INÍCIO:"
 
-#: region_editor.cc:148
+#: region_editor.cc:149
 msgid "END:"
 msgstr "FINAL:"
 
-#: region_editor.cc:150
+#: region_editor.cc:151
 msgid "LENGTH:"
 msgstr "TAMANHO:"
 
-#: region_editor.cc:190
+#: region_editor.cc:191
 msgid "FADE IN"
 msgstr "EVANESCER"
 
-#: region_editor.cc:192 region_editor.cc:226
+#: region_editor.cc:193 region_editor.cc:227
 msgid "msecs"
 msgstr "msegs"
 
-#: region_editor.cc:224
+#: region_editor.cc:225
 msgid "FADE OUT"
 msgstr "DESVANECER"
 
-#: region_editor.cc:264
+#: region_editor.cc:265
 msgid "ardour: region "
 msgstr "ardour: região"
 
-#: region_editor.cc:401
+#: region_editor.cc:402
 msgid "fade in edit"
 msgstr "alterar evanescimento"
 
-#: region_editor.cc:413
+#: region_editor.cc:414
 msgid "fade out edit"
 msgstr "alterar desvanecimento"
 
-#: regionview.cc:1140
+#: regionview.cc:1146
 #, fuzzy
 msgid "add gain control point"
 msgstr "remover ponto de controlo"
 
-#: route_params_ui.cc:88
+#: route_params_ui.cc:89
 msgid "Tracks/Buses"
 msgstr "Faixas/Barramentos"
 
-#: route_params_ui.cc:108
+#: route_params_ui.cc:109
 #, fuzzy
 msgid "Pre-fader Redirects"
 msgstr "Pré-encaminhamentos"
 
-#: route_params_ui.cc:109
+#: route_params_ui.cc:110
 #, fuzzy
 msgid "Post-fader Redirects"
 msgstr "Pós-encaminhamentos"
 
-#: route_params_ui.cc:141
+#: route_params_ui.cc:144
 #, fuzzy
 msgid "ardour: track/bus inspector"
 msgstr "ardour: acrescentar faixa/barramento"
 
-#: route_params_ui.cc:142
+#: route_params_ui.cc:145
 msgid "ardour_route_parameters"
 msgstr ""
 
-#: route_params_ui.cc:199
+#: route_params_ui.cc:202
 msgid "route display list item for renamed route not found!"
 msgstr "não foi encontrado qualquer elemento de encaminhamento"
 
-#: route_params_ui.cc:451
+#: route_params_ui.cc:453
 msgid "NO TRACK"
 msgstr "SEM FAIXA"
 
-#: route_params_ui.cc:693
+#: route_params_ui.cc:695
 #, fuzzy
 msgid "ardour: track/bus inspector: "
 msgstr "ardour: acrescentar faixa/barramento"
 
-#: route_params_ui.cc:697
+#: route_params_ui.cc:699
 msgid "No Route Selected"
 msgstr "Caminho Não Seleccionado"
 
-#: route_params_ui.cc:698
+#: route_params_ui.cc:700
 #, fuzzy
 msgid "ardour: track/bus/inspector: no route selected"
 msgstr "ardour: parâmetros de encaminhamento: caminho não seleccionado"
 
 #. ctrl-shift-click applies change to all routes
-#: route_ui.cc:133
+#: route_ui.cc:134
 msgid "mute change"
 msgstr "mudo alterado"
 
 #. ctrl-shift-click applies change to all routes
 #. ctrl-alt-click: exclusively solo this track, not a toggle */
-#: route_ui.cc:208 route_ui.cc:218
+#: route_ui.cc:209 route_ui.cc:219
 msgid "solo change"
 msgstr "solo alterado"
 
-#: route_ui.cc:281
+#: route_ui.cc:282
 msgid "rec-enable change"
 msgstr "gravar alterado"
 
-#: route_ui.cc:472
+#: route_ui.cc:479
 msgid "Solo-safe"
 msgstr "solo livre"
 
-#: route_ui.cc:480 route_ui.cc:523
+#: route_ui.cc:487 route_ui.cc:530
 msgid "MIDI Bind"
 msgstr "Associação MIDI"
 
-#: route_ui.cc:494
+#: route_ui.cc:501
 msgid "Pre Fader"
 msgstr "Pré-Atenuador"
 
-#: route_ui.cc:501
+#: route_ui.cc:508
 msgid "Post Fader"
 msgstr "Pós-Atenuador"
 
-#: route_ui.cc:508
+#: route_ui.cc:515
 msgid "Control Outs"
 msgstr "Saídas de Controlo"
 
-#: route_ui.cc:515
+#: route_ui.cc:522
 msgid "Main Outs"
 msgstr "Saídas Principais"
 
-#: route_ui.cc:552
+#: route_ui.cc:559
 msgid "mix group solo  change"
 msgstr "grupo solo alterado"
 
-#: route_ui.cc:586
+#: route_ui.cc:593
 msgid "mix group mute change"
 msgstr "grupo mudo alterado"
 
-#: route_ui.cc:602
+#: route_ui.cc:609
 msgid "mix group rec-enable change"
 msgstr "grupo gravar alterado"
 
-#: route_ui.cc:619 visual_time_axis.cc:236
+#: route_ui.cc:626 visual_time_axis.cc:237
 msgid "ardour: color selection"
 msgstr "ardor: selecção de cor"
 
-#: route_ui.cc:695
+#: route_ui.cc:702
 #, fuzzy
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
@@ -5895,7 +5924,7 @@ msgstr ""
 "A lista de reprodução em uso por esta faixa pode ficar perdida.\n"
 "(esta operação não pode ser desfeita)"
 
-#: route_ui.cc:697
+#: route_ui.cc:704
 msgid ""
 "Do you really want to remove bus \"%1\" ?\n"
 "(cannot be undone)"
@@ -5903,11 +5932,11 @@ msgstr ""
 "Deseja realmente remover o barramento \"%1\" ?\n"
 "(esta operação não pode ser desfeita)"
 
-#: route_ui.cc:701 visual_time_axis.cc:278
+#: route_ui.cc:708 visual_time_axis.cc:279
 msgid "Yes, remove it."
 msgstr "Sim, remover."
 
-#: route_ui.cc:730
+#: route_ui.cc:737
 #, fuzzy
 msgid "New Name: "
 msgstr "novo nome: "
@@ -5965,147 +5994,148 @@ msgstr "Não foi possível aceder ao ficheiros audio: "
 msgid "Name for Field"
 msgstr "Nome para a região:"
 
-#: sfdb_ui.cc:333
+#: sfdb_ui.cc:335
 msgid "Split Channels"
 msgstr "Separar Canais"
 
-#: sfdb_ui.cc:340
+#: sfdb_ui.cc:342
 msgid "Create a region for each channel"
 msgstr ""
 
-#: sfdb_ui.cc:342
+#: sfdb_ui.cc:344
 msgid "Embed"
 msgstr ""
 
-#: sfdb_ui.cc:344
+#: sfdb_ui.cc:346
 #, fuzzy
 msgid "Link to an external file"
 msgstr "Inserir ficheiro audio externo"
 
-#: sfdb_ui.cc:346
+#: sfdb_ui.cc:348
 msgid "Import"
 msgstr "Importar"
 
-#: sfdb_ui.cc:348
+#: sfdb_ui.cc:350
 msgid "Copy a file to the session folder"
 msgstr ""
 
-#: sfdb_ui.cc:412
+#: sfdb_ui.cc:414
 msgid "programming error: %1"
 msgstr ""
 
-#: tempo_dialog.cc:17 tempo_dialog.cc:34
+#: tempo_dialog.cc:18 tempo_dialog.cc:35
 msgid "Beats per minute"
 msgstr "Batimentos por minuto"
 
-#: tempo_dialog.cc:20 tempo_dialog.cc:37 tempo_dialog.cc:153
-#: tempo_dialog.cc:171
+#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:203
+#: tempo_dialog.cc:221
 msgid "Bar"
 msgstr "Compasso"
 
-#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:154
-#: tempo_dialog.cc:172
+#: tempo_dialog.cc:22 tempo_dialog.cc:39 tempo_dialog.cc:204
+#: tempo_dialog.cc:222
 msgid "Beat"
 msgstr "Batimento"
 
-#: tempo_dialog.cc:23 tempo_dialog.cc:40 tempo_dialog.cc:155
-#: tempo_dialog.cc:173
+#: tempo_dialog.cc:24 tempo_dialog.cc:41 tempo_dialog.cc:205
+#: tempo_dialog.cc:223
 msgid "Location"
 msgstr "Localização"
 
-#: tempo_dialog.cc:149 tempo_dialog.cc:167
+#: tempo_dialog.cc:199 tempo_dialog.cc:217
 msgid "Meter denominator"
 msgstr "Denominador métrico"
 
-#: tempo_dialog.cc:150 tempo_dialog.cc:168
+#: tempo_dialog.cc:200 tempo_dialog.cc:218
 msgid "Beats per bar"
 msgstr "Batimentos por compasso"
 
-#: tempo_dialog.cc:186 tempo_dialog.cc:197
+#: tempo_dialog.cc:236 tempo_dialog.cc:247
 msgid "whole (1)"
 msgstr "toda (1)"
 
-#: tempo_dialog.cc:187 tempo_dialog.cc:199
+#: tempo_dialog.cc:237 tempo_dialog.cc:249
 msgid "second (2)"
 msgstr "segunda (2)"
 
-#: tempo_dialog.cc:188 tempo_dialog.cc:201
+#: tempo_dialog.cc:238 tempo_dialog.cc:251
 msgid "third (3)"
 msgstr "terça (3)"
 
-#: tempo_dialog.cc:189 tempo_dialog.cc:203 tempo_dialog.cc:211
+#: tempo_dialog.cc:239 tempo_dialog.cc:253 tempo_dialog.cc:261
 msgid "quarter (4)"
 msgstr "quarta (4)"
 
-#: tempo_dialog.cc:190 tempo_dialog.cc:205
+#: tempo_dialog.cc:240 tempo_dialog.cc:255
 msgid "eighth (8)"
 msgstr "octogésima (8)"
 
-#: tempo_dialog.cc:191 tempo_dialog.cc:207
+#: tempo_dialog.cc:241 tempo_dialog.cc:257
 msgid "sixteenth (16)"
 msgstr "hexodécima (16)"
 
-#: tempo_dialog.cc:192 tempo_dialog.cc:209
+#: tempo_dialog.cc:242 tempo_dialog.cc:259
 msgid "thirty-second (32)"
 msgstr "trigésima-segunda (32)"
 
-#: tempo_dialog.cc:321
+#: tempo_dialog.cc:420
 msgid "garbaged note type entry (%1)"
 msgstr "tipo de nota desconhecido (%1)"
 
-#: tempo_dialog.cc:331
+#: tempo_dialog.cc:430
 msgid "incomprehensible note type entry (%1)"
 msgstr "tipo de nota imcompreensível (%1)"
 
-#: time_axis_view.cc:111
+#: time_axis_view.cc:112
 msgid "gTortnam"
 msgstr ""
 
-#: time_axis_view.cc:548
+#: time_axis_view.cc:549
 msgid "Largest"
 msgstr "Enorme"
 
-#: time_axis_view.cc:549
+#: time_axis_view.cc:550
 msgid "Large"
 msgstr "Grande"
 
-#: time_axis_view.cc:550
+#: time_axis_view.cc:551
 msgid "Larger"
 msgstr "Maior"
 
-#: time_axis_view.cc:552
+#: time_axis_view.cc:553
 msgid "Smaller"
 msgstr "Menor"
 
-#: time_axis_view.cc:553
+#: time_axis_view.cc:554
 msgid "Small"
 msgstr "Pequeno"
 
-#: time_axis_view.cc:869
+#: time_axis_view.cc:870
 msgid "unknown track height name \"%1\" in XML GUI information"
 msgstr ""
 
-#: time_axis_view_item.cc:71
+#. first constructed item sets up font info
+#: time_axis_view_item.cc:79
 msgid "TimeAxisViewItemName"
 msgstr ""
 
-#: time_axis_view_item.cc:271
+#: time_axis_view_item.cc:298
 msgid "new duration %1 frames is out of bounds for %2"
 msgstr ""
 
-#: time_selection.cc:40
+#: time_selection.cc:41
 msgid "programming error: request for non-existent audio range (%1)!"
 msgstr ""
 
-#: utils.cc:106 utils.cc:149
+#: utils.cc:107 utils.cc:150
 msgid "bad XPM header %1"
 msgstr ""
 
-#: utils.cc:331
+#: utils.cc:332
 msgid "missing RGBA style for \"%1\""
 msgstr ""
 
-#: visual_time_axis.cc:275
+#: visual_time_axis.cc:276
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
 "(cannot be undone)"
@@ -6113,14 +6143,85 @@ msgstr ""
 "Deseja realmente remover o faixa \"%1\" ?\n"
 "(esta operação não pode ser desfeita)"
 
-#: visual_time_axis.cc:324
+#: visual_time_axis.cc:325
 msgid "new name: "
 msgstr "novo nome: "
 
-#: visual_time_axis.cc:335
+#: visual_time_axis.cc:336
 msgid "A track already exists with that name"
 msgstr "Já existe uma faixa com este nome"
 
+#, fuzzy
+#~ msgid "set selected trackview"
+#~ msgstr "seleccionar visualização de faixa"
+
+#, fuzzy
+#~ msgid "set selected control point"
+#~ msgstr "remover ponto de controlo"
+
+#~ msgid "set selected regionview"
+#~ msgstr "seleccionar visualização de região"
+
+#~ msgid "Start a new session\n"
+#~ msgstr "Iniciar uma nova sessão\n"
+
+#~ msgid "via Session menu"
+#~ msgstr "via menu de Sessão"
+
+#, fuzzy
+#~ msgid "<b>Advanced</b>"
+#~ msgstr "Avançado..."
+
+#, fuzzy
+#~ msgid "Select a File"
+#~ msgstr "Seleccionar tudo"
+
+#, fuzzy
+#~ msgid "Track/Bus connection options"
+#~ msgstr "Faixas/Barramentos"
+
+#~ msgid "RECORD"
+#~ msgstr "GRAVAR"
+
+#~ msgid "INPUT"
+#~ msgstr "ENTRADA"
+
+#~ msgid "OUTPUT"
+#~ msgstr "SAÍDA"
+
+#~ msgid "Gain automation mode"
+#~ msgstr "Modo de automatização de ganho"
+
+#~ msgid "Gain automation type"
+#~ msgstr "Tipo de automatização de ganho"
+
+#~ msgid "trim"
+#~ msgstr "recorte"
+
+#~ msgid "gain automation mode"
+#~ msgstr "modo de automatização de ganho"
+
+#~ msgid "gain automation state"
+#~ msgstr "ponto de automatização de ganho"
+
+#~ msgid "pan automation state"
+#~ msgstr "ponto de automatização de panorâmica"
+
+#~ msgid "REC"
+#~ msgstr "GRAV"
+
+#~ msgid "OUT"
+#~ msgstr "SAÍDA"
+
+#~ msgid "aplay"
+#~ msgstr "aRepr"
+
+#~ msgid "awrite"
+#~ msgstr "aGrav"
+
+#~ msgid "no group"
+#~ msgstr "sem grupo"
+
 #, fuzzy
 #~ msgid "normal"
 #~ msgstr "Normal"
@@ -6415,9 +6516,6 @@ msgstr "Já existe uma faixa com este nome"
 #~ msgid "AND"
 #~ msgstr "E"
 
-#~ msgid "OR"
-#~ msgstr "OU"
-
 #~ msgid "ardour: locate soundfiles"
 #~ msgstr "ardour: localizar ficheiros audio"
 
@@ -6433,9 +6531,6 @@ msgstr "Já existe uma faixa com este nome"
 #~ msgid "Ardour: Search Results"
 #~ msgstr "Ardour: Resultados da Procura"
 
-#~ msgid "Mix Groups"
-#~ msgstr "Grupos"
-
 #~ msgid "Hide All AudioTrack MixerStrips"
 #~ msgstr "Esconder painéis de mistura de todas as faixas audio"
 
@@ -6448,9 +6543,6 @@ msgstr "Já existe uma faixa com este nome"
 #~ msgid "Name for new mix group"
 #~ msgstr "Nome para o novo grupo de mistura"
 
-#~ msgid "Session name:"
-#~ msgstr "Nome de sessão:"
-
 #~ msgid "Create"
 #~ msgstr "Criar"
 
@@ -6488,19 +6580,12 @@ msgstr "Já existe uma faixa com este nome"
 #~ "Se pretende usar uma frequência de amostragem diferente\n"
 #~ "terá de sair e reiniciar o serviço JACK"
 
-#, fuzzy
-#~ msgid "Session template"
-#~ msgstr "Modelo de sessão"
-
 #~ msgid "blank"
 #~ msgstr "vazio"
 
 #~ msgid "No template - create tracks/busses manually"
 #~ msgstr "Sem modelo - criar faixas/barramentos manualmente"
 
-#~ msgid "No template"
-#~ msgstr "Sem modelo"
-
 #~ msgid "Slave to MTC"
 #~ msgstr "Escravo MTC"
 
@@ -6535,9 +6620,6 @@ msgstr "Já existe uma faixa com este nome"
 #~ msgid "Native Format"
 #~ msgstr "Formato Nativo"
 
-#~ msgid "Use as click"
-#~ msgstr "Usar como metrónomo"
-
 #~ msgid "--unknown--"
 #~ msgstr "--desconhecido--"
 
index 1bf84f864a156f277af847fa3e284e0beec088b3..7d9e33695c53500e39356c4e526126574c03bf7b 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gtk-ardour 0.413.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 18:09-0400\n"
 "PO-Revision-Date: 2004-03-31 00:45+0300\n"
 "Last-Translator: Igor Blinov pitstop@nm.ru\n"
 "Language-Team: Russian\n"
@@ -14,203 +14,203 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: about.cc:119
+#: about.cc:120
 msgid "Paul Davis"
 msgstr ""
 
-#: about.cc:120
+#: about.cc:121
 #, fuzzy
 msgid "Jesse Chappell"
 msgstr "Огромная"
 
-#: about.cc:121
+#: about.cc:122
 msgid "Taybin Rutkin"
 msgstr ""
 
-#: about.cc:122
+#: about.cc:123
 msgid "Marcus Andersson"
 msgstr ""
 
-#: about.cc:123
+#: about.cc:124
 msgid "Jeremy Hall"
 msgstr ""
 
-#: about.cc:124
+#: about.cc:125
 msgid "Steve Harris"
 msgstr ""
 
-#: about.cc:125
+#: about.cc:126
 msgid "Tim Mayberry"
 msgstr ""
 
-#: about.cc:126
+#: about.cc:127
 msgid "Mark Stewart"
 msgstr ""
 
-#: about.cc:127
+#: about.cc:128
 msgid "Sam Chessman"
 msgstr ""
 
-#: about.cc:128
+#: about.cc:129
 msgid "Jack O'Quin"
 msgstr ""
 
-#: about.cc:129
+#: about.cc:130
 msgid "Matt Krai"
 msgstr ""
 
-#: about.cc:130
+#: about.cc:131
 msgid "Ben Bell"
 msgstr ""
 
-#: about.cc:131
+#: about.cc:132
 msgid "Gerard van Dongen"
 msgstr ""
 
-#: about.cc:132
+#: about.cc:133
 msgid "Thomas Charbonnel"
 msgstr ""
 
-#: about.cc:133
+#: about.cc:134
 msgid "Nick Mainsbridge"
 msgstr ""
 
-#: about.cc:134
+#: about.cc:135
 msgid "Colin Law"
 msgstr ""
 
-#: about.cc:135
+#: about.cc:136
 msgid "Sampo Savolainen"
 msgstr ""
 
-#: about.cc:136
+#: about.cc:137
 msgid "Joshua Leach"
 msgstr ""
 
-#: about.cc:137
+#: about.cc:138
 msgid "Rob Holland"
 msgstr ""
 
-#: about.cc:138
+#: about.cc:139
 msgid "Per Sigmond"
 msgstr ""
 
-#: about.cc:139
+#: about.cc:140
 msgid "Doug Mclain"
 msgstr ""
 
-#: about.cc:140
+#: about.cc:141
 msgid "Petter Sundlöf"
 msgstr ""
 
-#: about.cc:145
+#: about.cc:146
 msgid ""
 "French:\n"
 "\tAlain Fréhel <alain.frehel@free.fr>\n"
 msgstr ""
 
-#: about.cc:146
+#: about.cc:147
 msgid ""
 "German:\n"
 "\tKarsten Petersen <kapet@kapet.de>\n"
 msgstr ""
 
-#: about.cc:147
+#: about.cc:148
 msgid ""
 "Italian:\n"
 "\tFilippo Pappalardo <filippo@email.it>\n"
 msgstr ""
 
-#: about.cc:148
+#: about.cc:149
 msgid ""
 "Portuguese:\n"
 "\tRui Nuno Capela <rncbc@rncbc.org>\n"
 msgstr ""
 
-#: about.cc:149
+#: about.cc:150
 msgid ""
 "Brazilian Portuguese:\n"
 "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
 "\tChris Ross <chris@tebibyte.org>\n"
 msgstr ""
 
-#: about.cc:151
+#: about.cc:152
 msgid ""
 "Spanish:\n"
 "\t Alex Krohn <alexkrohn@fastmail.fm>\n"
 msgstr ""
 
-#: about.cc:152
+#: about.cc:153
 msgid ""
 "Russian:\n"
 "\t Igor Blinov <pitstop@nm.ru>\n"
 msgstr ""
 
-#: about.cc:180
+#: about.cc:181
 #, fuzzy
 msgid "Copyright (C) 1999-2005 Paul Davis\n"
 msgstr "Авторское право 1999-2004 Paul Davis"
 
-#: about.cc:181
+#: about.cc:182
 msgid ""
 "Ardour comes with ABSOLUTELY NO WARRANTY\n"
 "This is free software, and you are welcome to redistribute it\n"
 "under certain conditions; see the file COPYING for details.\n"
 msgstr ""
 
-#: about.cc:187
+#: about.cc:188
 msgid ""
 "%1\n"
 "(built with ardour/gtk %2.%3.%4 libardour: %5.%6.%7)"
 msgstr ""
 
-#: actions.cc:260
+#: actions.cc:261
 #, fuzzy
 msgid "programmer error: %1 %2"
 msgstr "ошибка в программе: "
 
-#: add_route_dialog.cc:61
+#: add_route_dialog.cc:62
 msgid "ardour: add track/bus"
 msgstr "ardour: добавить трек/шину"
 
 #. path = "1"
-#: add_route_dialog.cc:62 editor_route_list.cc:72
+#: add_route_dialog.cc:63 editor_route_list.cc:73
 msgid "Tracks"
 msgstr "Треки"
 
 #. path = "0"
-#: add_route_dialog.cc:63 editor_route_list.cc:69
+#: add_route_dialog.cc:64 editor_route_list.cc:70
 msgid "Busses"
 msgstr "Шины"
 
-#: add_route_dialog.cc:95 plugin_ui.cc:832
+#: add_route_dialog.cc:96 plugin_ui.cc:833
 msgid "Add"
 msgstr "Добавить"
 
-#: add_route_dialog.cc:113
+#: add_route_dialog.cc:114
 msgid "Name (template)"
 msgstr "Имя (шаблона)"
 
-#: add_route_dialog.cc:119
+#: add_route_dialog.cc:120
 #, fuzzy
 msgid "Channel Configuration"
 msgstr "Отменить импорт"
 
-#: add_route_dialog.cc:176 editor.cc:131 editor.cc:3660 time_axis_view.cc:551
+#: add_route_dialog.cc:177 editor.cc:134 editor.cc:3688 time_axis_view.cc:552
 msgid "Normal"
 msgstr "Норм."
 
-#: add_route_dialog.cc:178
+#: add_route_dialog.cc:179
 #, fuzzy
 msgid "Tape"
 msgstr "Начало"
 
-#: add_route_dialog.cc:195
+#: add_route_dialog.cc:196
 #, fuzzy
 msgid "Mono"
 msgstr "моно"
 
-#: add_route_dialog.cc:197
+#: add_route_dialog.cc:198
 #, fuzzy
 msgid "Stereo"
 msgstr "стерео"
@@ -292,27 +292,11 @@ msgstr "КОНТРОЛЬ"
 msgid "SOLO"
 msgstr "СОЛО"
 
-#: ardour_ui.cc:207
-msgid ""
-"You cannot record-enable\n"
-"track %1\n"
-"because it has no input connections.\n"
-"You would be wasting space recording silence."
-msgstr ""
-
-#: ardour_ui.cc:236
-msgid "no vertical meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:243
-msgid "no horizontal meter strip image found"
-msgstr ""
-
-#: ardour_ui.cc:410
+#: ardour_ui.cc:375
 msgid "quit"
 msgstr "выйти"
 
-#: ardour_ui.cc:419
+#: ardour_ui.cc:384
 msgid ""
 "Ardour was unable to save your session.\n"
 "\n"
@@ -321,33 +305,33 @@ msgid ""
 "\"Just quit\" option."
 msgstr ""
 
-#: ardour_ui.cc:438
+#: ardour_ui.cc:403
 msgid "ardour: save session?"
 msgstr "ardour: сохранить сессию?"
 
-#: ardour_ui.cc:445
+#: ardour_ui.cc:410
 msgid "Don't %1"
 msgstr "Отмена"
 
-#: ardour_ui.cc:447
+#: ardour_ui.cc:412
 msgid "Just %1"
 msgstr "Да, %1"
 
-#: ardour_ui.cc:449
+#: ardour_ui.cc:414
 msgid "Save and %1"
 msgstr "Сохранить и %1"
 
-#: ardour_ui.cc:461
+#: ardour_ui.cc:426
 #, fuzzy
 msgid "session"
 msgstr "Сессия"
 
-#: ardour_ui.cc:463
+#: ardour_ui.cc:428
 #, fuzzy
 msgid "snapshot"
 msgstr "Снимок"
 
-#: ardour_ui.cc:465
+#: ardour_ui.cc:430
 #, fuzzy
 msgid ""
 "The %1\"%2\"\n"
@@ -366,80 +350,80 @@ msgstr ""
 "\n"
 "Что Вы хотите сделать?"
 
-#: ardour_ui.cc:479
+#: ardour_ui.cc:444
 msgid "Prompter"
 msgstr ""
 
-#: ardour_ui.cc:538
+#: ardour_ui.cc:503
 #, fuzzy, c-format
 msgid "disconnected"
 msgstr "Отсоединить"
 
-#: ardour_ui.cc:545
+#: ardour_ui.cc:510
 #, fuzzy, c-format
 msgid "SR: %.1f kHz / %4.1f msecs"
 msgstr "SR: %.1f кГц"
 
-#: ardour_ui.cc:549
+#: ardour_ui.cc:514
 #, c-format
 msgid "SR: %u kHz / %4.1f msecs"
 msgstr ""
 
-#: ardour_ui.cc:562
+#: ardour_ui.cc:527
 #, c-format
 msgid "DSP Load: %.1f%%"
 msgstr "Загрузка DSP: %.1f%%"
 
-#: ardour_ui.cc:572
+#: ardour_ui.cc:537
 #, fuzzy, c-format
 msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
 msgstr "Буферы p:%5.0f%% c:%5.0f%%"
 
-#: ardour_ui.cc:599
+#: ardour_ui.cc:564
 msgid "space: 24hrs+"
 msgstr "место на диске: 24 часа +"
 
-#: ardour_ui.cc:629
+#: ardour_ui.cc:594
 #, c-format
 msgid "space: %02dh:%02dm:%02ds"
 msgstr "свободное место: %02dч:%02dмин:%02dсек"
 
-#: ardour_ui.cc:668
+#: ardour_ui.cc:633
 msgid "programming error: impossible control method"
 msgstr "ошибка в программе: impossible control method"
 
-#: ardour_ui.cc:776 new_session_dialog.cc:89
+#: ardour_ui.cc:741 new_session_dialog.cc:294
 #, fuzzy
 msgid "Recent Sessions"
 msgstr "открыть сессию"
 
 #. ardour sessions are folders
-#: ardour_ui.cc:867
+#: ardour_ui.cc:834
 msgid "open session"
 msgstr "открыть сессию"
 
-#: ardour_ui.cc:873
+#: ardour_ui.cc:840
 #, fuzzy
 msgid "Ardour sessions"
 msgstr "ardour_новая_сессия"
 
-#: ardour_ui.cc:906
+#: ardour_ui.cc:873
 msgid "Patience is a virtue.\n"
 msgstr "По нитке дойдёшь и до клубка.\n"
 
-#: ardour_ui.cc:915
+#: ardour_ui.cc:882
 msgid "You cannot add a track without a session already loaded."
 msgstr "Вы не можете добавить трек пока сессия не загружена."
 
-#: ardour_ui.cc:922
+#: ardour_ui.cc:889
 msgid "could not create new audio track"
 msgstr "не удалось создать новый аудиотрек"
 
-#: ardour_ui.cc:926
+#: ardour_ui.cc:893
 msgid "could not create new audio bus"
 msgstr "не удалось создать новую аудиошину"
 
-#: ardour_ui.cc:945
+#: ardour_ui.cc:912
 msgid ""
 "There are insufficient JACK ports available\n"
 "to create a new track or bus.\n"
@@ -447,14 +431,14 @@ msgid ""
 "restart JACK with more ports."
 msgstr ""
 
-#: ardour_ui.cc:1069
+#: ardour_ui.cc:1036
 msgid ""
 "Please create 1 or more track\n"
 "before trying to record.\n"
 "Check the Session menu."
 msgstr ""
 
-#: ardour_ui.cc:1298
+#: ardour_ui.cc:1265
 #, fuzzy
 msgid ""
 "JACK has either been shutdown or it\n"
@@ -467,57 +451,55 @@ msgstr ""
 "Необходимо сохранить сессию и\n"
 "перезапустить JACK и Ardour."
 
-#: ardour_ui.cc:1315
+#: ardour_ui.cc:1282
 msgid "Unable to create all required ports"
 msgstr ""
 
-#: ardour_ui.cc:1323
+#: ardour_ui.cc:1290
 #, fuzzy
 msgid "Unable to start the session running"
 msgstr "В начало сессии"
 
-#: ardour_ui.cc:1459
+#: ardour_ui.cc:1426
 msgid "No Stream"
 msgstr "Нет потока"
 
-#: ardour_ui.cc:1486 ardour_ui.cc:1505
+#: ardour_ui.cc:1453 ardour_ui.cc:1472
 msgid "none"
 msgstr "нет"
 
-#: ardour_ui.cc:1495 ardour_ui.cc:1514 automation_time_axis.cc:183
-#: automation_time_axis.cc:212 automation_time_axis.cc:459 mixer_strip.cc:174
-#: mixer_strip.cc:186 mixer_strip.cc:881 plugin_ui.cc:391 plugin_ui.cc:634
+#: ardour_ui.cc:1462 ardour_ui.cc:1481
 msgid "off"
 msgstr "выкл"
 
-#: ardour_ui.cc:1538
+#: ardour_ui.cc:1505
 #, fuzzy
 msgid "Name of New Snapshot"
 msgstr "Имя снимка"
 
-#: ardour_ui.cc:1684
+#: ardour_ui.cc:1651
 msgid "Name for mix template:"
 msgstr "Имя mix-шаблона:"
 
-#: ardour_ui.cc:1685
+#: ardour_ui.cc:1652
 msgid "-template"
 msgstr "-шаблон"
 
-#: ardour_ui.cc:1836
+#: ardour_ui.cc:1809
 msgid ""
 "You do not have write access to this session.\n"
 "This prevents the session from being loaded."
 msgstr ""
 
-#: ardour_ui.cc:1849 ardour_ui.cc:1904
+#: ardour_ui.cc:1822 ardour_ui.cc:1877
 msgid "Session \"%1 (snapshot %2)\" did not load successfully"
 msgstr "Не удалось загрузить сессию \"%1 (снимок %2)\""
 
-#: ardour_ui.cc:1960
+#: ardour_ui.cc:1933
 msgid "No audio files were ready for cleanup"
 msgstr ""
 
-#: ardour_ui.cc:1964
+#: ardour_ui.cc:1937
 msgid ""
 "If this seems suprising, \n"
 "check for any existing snapshots.\n"
@@ -525,23 +507,23 @@ msgid ""
 "require some unused files to continue to exist."
 msgstr ""
 
-#: ardour_ui.cc:1973
+#: ardour_ui.cc:1946
 msgid "ardour: cleanup"
 msgstr "ardour: очистка"
 
-#: ardour_ui.cc:2009 ardour_ui.cc:2015
+#: ardour_ui.cc:1982 ardour_ui.cc:1988
 msgid "files were"
 msgstr ""
 
-#: ardour_ui.cc:2011 ardour_ui.cc:2017
+#: ardour_ui.cc:1984 ardour_ui.cc:1990
 msgid "file was"
 msgstr ""
 
-#: ardour_ui.cc:2058
+#: ardour_ui.cc:2031
 msgid "Are you sure you want to cleanup?"
 msgstr ""
 
-#: ardour_ui.cc:2063
+#: ardour_ui.cc:2036
 msgid ""
 "Cleanup is a destructive operation.\n"
 "ALL undo/redo information will be lost if you cleanup.\n"
@@ -549,26 +531,26 @@ msgid ""
 "location."
 msgstr ""
 
-#: ardour_ui.cc:2069
+#: ardour_ui.cc:2042
 #, fuzzy
 msgid "Clean Up"
 msgstr "Очистка"
 
-#: ardour_ui.cc:2072
+#: ardour_ui.cc:2045
 #, fuzzy
 msgid "CleanupDialog"
 msgstr "Очистка"
 
-#: ardour_ui.cc:2073
+#: ardour_ui.cc:2046
 #, fuzzy
 msgid "ardour_cleanup"
 msgstr "ardour: очистка"
 
-#: ardour_ui.cc:2092
+#: ardour_ui.cc:2065
 msgid "cleaned files"
 msgstr ""
 
-#: ardour_ui.cc:2093
+#: ardour_ui.cc:2066
 #, fuzzy
 msgid ""
 "The following %1 %2 not in use and \n"
@@ -583,12 +565,12 @@ msgstr ""
 "Последующая очистка корзины освободит\n"
 "%2 мегабайт места на диске."
 
-#: ardour_ui.cc:2118
+#: ardour_ui.cc:2091
 #, fuzzy
 msgid "deleted file"
 msgstr "удалённые файлы"
 
-#: ardour_ui.cc:2119
+#: ardour_ui.cc:2092
 #, fuzzy
 msgid ""
 "The following %1 %2 deleted from\n"
@@ -597,11 +579,11 @@ msgid ""
 msgstr ""
 "Следующие %1 файлов были удалены, освободив при этом %2 Мб места на диске"
 
-#: ardour_ui.cc:2242
+#: ardour_ui.cc:2215
 msgid "Recording was stopped because your system could not keep up."
 msgstr "Запись остановлена из-за недостаточного быстродействия системы"
 
-#: ardour_ui.cc:2265
+#: ardour_ui.cc:2238
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -610,7 +592,7 @@ msgid ""
 "quickly enough to keep up with recording.\n"
 msgstr ""
 
-#: ardour_ui.cc:2284
+#: ardour_ui.cc:2257
 msgid ""
 "The disk system on your computer\n"
 "was not able to keep up with Ardour.\n"
@@ -619,7 +601,7 @@ msgid ""
 "quickly enough to keep up with playback.\n"
 msgstr ""
 
-#: ardour_ui.cc:2310
+#: ardour_ui.cc:2283
 msgid ""
 "This session appears to have been in\n"
 "middle of recording when ardour or\n"
@@ -630,365 +612,365 @@ msgid ""
 "what you would like to do.\n"
 msgstr ""
 
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2293
 msgid "Recover from crash"
 msgstr ""
 
-#: ardour_ui.cc:2321
+#: ardour_ui.cc:2294
 msgid "Ignore crash data"
 msgstr ""
 
-#: ardour_ui.cc:2339
+#: ardour_ui.cc:2312
 #, fuzzy
 msgid "Could not disconnect from JACK"
 msgstr "Не удалось соединиться с сервером JACK как \"%1\""
 
-#: ardour_ui.cc:2352
+#: ardour_ui.cc:2325
 #, fuzzy
 msgid "Could not reconnect to JACK"
 msgstr "Не удалось соединиться с сервером JACK как \"%1\""
 
-#: ardour_ui2.cc:59
+#: ardour_ui2.cc:60
 msgid "UI: cannot setup editor"
 msgstr "Интерфейс: не удалось инициализировать редактор"
 
-#: ardour_ui2.cc:64
+#: ardour_ui2.cc:65
 msgid "UI: cannot setup mixer"
 msgstr "Интерфейс: не удалось инициализировать микшер"
 
-#: ardour_ui2.cc:90
+#: ardour_ui2.cc:91
 msgid "MMC + Local"
 msgstr ""
 
-#: ardour_ui2.cc:91
+#: ardour_ui2.cc:92
 msgid "MMC"
 msgstr "MMC"
 
-#: ardour_ui2.cc:92
+#: ardour_ui2.cc:93
 msgid "Local"
 msgstr ""
 
-#: ardour_ui2.cc:109
+#: ardour_ui2.cc:110
 msgid "MMC ID"
 msgstr "MMC идентификатор"
 
-#: ardour_ui2.cc:290
+#: ardour_ui2.cc:291
 msgid "Play from playhead"
 msgstr "Воспроизвести от указателя"
 
-#: ardour_ui2.cc:291
+#: ardour_ui2.cc:292
 msgid "Stop playback"
 msgstr "Стоп"
 
-#: ardour_ui2.cc:292
+#: ardour_ui2.cc:293
 #, fuzzy
 msgid "Play range/selection"
 msgstr "Воспроизвести выделенное"
 
-#: ardour_ui2.cc:293
+#: ardour_ui2.cc:294
 msgid "Go to start of session"
 msgstr "В начало сессии"
 
-#: ardour_ui2.cc:294
+#: ardour_ui2.cc:295
 msgid "Go to end of session"
 msgstr "В конец сессии"
 
-#: ardour_ui2.cc:295
+#: ardour_ui2.cc:296
 msgid "Play loop range"
 msgstr "Воспроизвести \"кольцо\""
 
-#: ardour_ui2.cc:296
+#: ardour_ui2.cc:297
 msgid "Return to last playback start when stopped"
 msgstr "Вернуться к точке начала воспроизведения"
 
-#: ardour_ui2.cc:297
+#: ardour_ui2.cc:298
 msgid "Start playback after any locate"
 msgstr ""
 
-#: ardour_ui2.cc:298
+#: ardour_ui2.cc:299
 msgid "Be sensible about input monitoring"
 msgstr ""
 
-#: ardour_ui2.cc:299
+#: ardour_ui2.cc:300
 msgid "Start recording at auto-punch start"
 msgstr "Начать запись с начала \"авто-врезки\""
 
-#: ardour_ui2.cc:300
+#: ardour_ui2.cc:301
 msgid "Stop recording at auto-punch end"
 msgstr "Остановить запись в конце \"авто-врезки\""
 
-#: ardour_ui2.cc:301
+#: ardour_ui2.cc:302
 msgid "Enable/Disable audio click"
 msgstr "Вкл./Выкл. метроном"
 
-#: ardour_ui2.cc:302
+#: ardour_ui2.cc:303
 msgid "Positional sync source"
 msgstr ""
 
-#: ardour_ui2.cc:303
+#: ardour_ui2.cc:304
 msgid "Does Ardour control the time?"
 msgstr ""
 
-#: ardour_ui2.cc:304
+#: ardour_ui2.cc:305
 msgid "Shuttle speed control"
 msgstr ""
 
-#: ardour_ui2.cc:305
+#: ardour_ui2.cc:306
 #, c-format
 msgid "Select semitones or %%-age for speed display"
 msgstr ""
 
-#: ardour_ui2.cc:306
+#: ardour_ui2.cc:307
 msgid "Current transport speed"
 msgstr "Текщаяя скорсть транспорта"
 
-#: ardour_ui2.cc:329
+#: ardour_ui2.cc:330
 msgid "Primary clock"
 msgstr "Основной счётчик"
 
-#: ardour_ui2.cc:330
+#: ardour_ui2.cc:331
 msgid "secondary clock"
 msgstr "дополнительный счётчик"
 
 #. XXX: this should really be saved in instant.xml or something similar and restored from there
 #. Combo's are stupid - they steal space from the entry for the button
-#: ardour_ui2.cc:387 ardour_ui2.cc:823 ardour_ui2.cc:836 ardour_ui2.cc:899
-#: ardour_ui2.cc:901
+#: ardour_ui2.cc:388 ardour_ui2.cc:833 ardour_ui2.cc:846 ardour_ui2.cc:909
+#: ardour_ui2.cc:911
 msgid "sprung"
 msgstr ""
 
-#: ardour_ui2.cc:388 ardour_ui2.cc:825 ardour_ui2.cc:847
+#: ardour_ui2.cc:389 ardour_ui2.cc:835 ardour_ui2.cc:857
 msgid "wheel"
 msgstr ""
 
-#: ardour_ui2.cc:450
+#: ardour_ui2.cc:451
 msgid "ardour: clock"
 msgstr "ardour: счётчик"
 
-#: ardour_ui2.cc:595
+#: ardour_ui2.cc:596
 msgid "Maximum speed"
 msgstr ""
 
-#: ardour_ui2.cc:813
+#: ardour_ui2.cc:823
 msgid "st"
 msgstr ""
 
-#: ardour_ui2.cc:857 ardour_ui2.cc:880 ardour_ui2.cc:897
+#: ardour_ui2.cc:867 ardour_ui2.cc:890 ardour_ui2.cc:907
 msgid "stopped"
 msgstr "остановлено"
 
-#: ardour_ui_dialogs.cc:152 playlist_selector.cc:69
+#: ardour_ui_dialogs.cc:153 playlist_selector.cc:70
 #, fuzzy
 msgid "close"
 msgstr "Закрыть"
 
-#: ardour_ui_dialogs.cc:359 ardour_ui_ed.cc:181
+#: ardour_ui_dialogs.cc:360 ardour_ui_ed.cc:184
 #, fuzzy
 msgid "Sound File Browser"
 msgstr "Аудио-библиотека"
 
 #. menus + submenus that need action items
-#: ardour_ui_ed.cc:69
+#: ardour_ui_ed.cc:72
 msgid "Session"
 msgstr "Сессия"
 
-#: ardour_ui_ed.cc:70 ardour_ui_ed.cc:127 editor.cc:1843 export_dialog.cc:350
+#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:130 editor.cc:1836 export_dialog.cc:350
 #: export_dialog.cc:1059 export_dialog.cc:1063
 msgid "Export"
 msgstr "Экспорт"
 
-#: ardour_ui_ed.cc:71
+#: ardour_ui_ed.cc:74
 msgid "Cleanup"
 msgstr "Очистка"
 
-#: ardour_ui_ed.cc:72 option_editor.cc:125
+#: ardour_ui_ed.cc:75 option_editor.cc:126
 msgid "Sync"
 msgstr "Синхр."
 
-#: ardour_ui_ed.cc:73 ardour_ui_ed.cc:74
+#: ardour_ui_ed.cc:76 ardour_ui_ed.cc:77
 #, fuzzy
 msgid "Options"
 msgstr "Редактор параметров"
 
-#: ardour_ui_ed.cc:75
+#: ardour_ui_ed.cc:78
 msgid "Help"
 msgstr ""
 
-#: ardour_ui_ed.cc:76
+#: ardour_ui_ed.cc:79
 msgid "KeyMouse Actions"
 msgstr ""
 
-#: ardour_ui_ed.cc:77
+#: ardour_ui_ed.cc:80
 #, fuzzy
 msgid "Audio File Format"
 msgstr "Аудио кадры"
 
-#: ardour_ui_ed.cc:78
+#: ardour_ui_ed.cc:81
 #, fuzzy
 msgid "Header"
 msgstr "Пред фейдер"
 
-#: ardour_ui_ed.cc:79
+#: ardour_ui_ed.cc:82
 msgid "Data"
 msgstr ""
 
-#: ardour_ui_ed.cc:80
+#: ardour_ui_ed.cc:83
 #, fuzzy
 msgid "Control Surfaces"
 msgstr "Контрольные выходы"
 
 #. the real actions
-#: ardour_ui_ed.cc:84 audio_time_axis.cc:1856 new_session_dialog.cc:342
+#: ardour_ui_ed.cc:87 audio_time_axis.cc:1854 new_session_dialog.cc:529
 msgid "New"
 msgstr "Новый"
 
-#: ardour_ui_ed.cc:86 new_session_dialog.cc:334
+#: ardour_ui_ed.cc:89 new_session_dialog.cc:517
 msgid "Open"
 msgstr "Открыть"
 
-#: ardour_ui_ed.cc:87
+#: ardour_ui_ed.cc:90
 msgid "Recent"
 msgstr "Последние"
 
-#: ardour_ui_ed.cc:88 io_selector.cc:57 io_selector.cc:791
+#: ardour_ui_ed.cc:91 io_selector.cc:58 io_selector.cc:792
 msgid "Close"
 msgstr "Закрыть"
 
-#: ardour_ui_ed.cc:91 route_params_ui.cc:512
+#: ardour_ui_ed.cc:94 route_params_ui.cc:514
 msgid "Add Track/Bus"
 msgstr "Добавить Трек/Шину"
 
-#: ardour_ui_ed.cc:102
+#: ardour_ui_ed.cc:105
 msgid "Connect"
 msgstr "Соединить"
 
 #. </CMT Additions>
-#: ardour_ui_ed.cc:110
+#: ardour_ui_ed.cc:113
 msgid "Snapshot"
 msgstr "Снимок"
 
-#: ardour_ui_ed.cc:113
+#: ardour_ui_ed.cc:116
 msgid "Save Template..."
 msgstr "Сохранить шаблон..."
 
-#: ardour_ui_ed.cc:116
+#: ardour_ui_ed.cc:119
 msgid "Export session to audiofile..."
 msgstr "Экспорт сессии в аудиофайл..."
 
-#: ardour_ui_ed.cc:119
+#: ardour_ui_ed.cc:122
 #, fuzzy
 msgid "Export selection to audiofile..."
 msgstr "Экспорт сессии в аудиофайл..."
 
-#: ardour_ui_ed.cc:123
+#: ardour_ui_ed.cc:126
 #, fuzzy
 msgid "Export range markers to audiofile..."
 msgstr "Экспорт сессии в аудиофайл..."
 
-#: ardour_ui_ed.cc:130
+#: ardour_ui_ed.cc:133
 msgid "Cleanup unused sources"
 msgstr ""
 
-#: ardour_ui_ed.cc:132
+#: ardour_ui_ed.cc:135
 msgid "Flush wastebasket"
 msgstr "Очистить корзину"
 
-#: ardour_ui_ed.cc:138 ardour_ui_options.cc:381 ardour_ui_options.cc:390
-#: ardour_ui_options.cc:462
+#: ardour_ui_ed.cc:141 ardour_ui_options.cc:408 ardour_ui_options.cc:417
+#: ardour_ui_options.cc:489
 msgid "JACK"
 msgstr "JACK"
 
-#: ardour_ui_ed.cc:139
+#: ardour_ui_ed.cc:142
 msgid "Latency"
 msgstr ""
 
-#: ardour_ui_ed.cc:141
+#: ardour_ui_ed.cc:144
 #, fuzzy
 msgid "Reconnect"
 msgstr "Соединить"
 
-#: ardour_ui_ed.cc:144 mixer_strip.cc:514 mixer_strip.cc:574
+#: ardour_ui_ed.cc:147 mixer_strip.cc:497 mixer_strip.cc:565
 msgid "Disconnect"
 msgstr "Отсоединить"
 
-#: ardour_ui_ed.cc:171
+#: ardour_ui_ed.cc:174
 msgid "Windows"
 msgstr "Окна"
 
-#: ardour_ui_ed.cc:172
+#: ardour_ui_ed.cc:175
 msgid "start prefix"
 msgstr ""
 
-#: ardour_ui_ed.cc:173
+#: ardour_ui_ed.cc:176
 msgid "Quit"
 msgstr "Выйти"
 
 #. windows visibility actions
-#: ardour_ui_ed.cc:177
+#: ardour_ui_ed.cc:180
 msgid "Maximise Editor Space"
 msgstr ""
 
-#: ardour_ui_ed.cc:179
+#: ardour_ui_ed.cc:182
 #, fuzzy
 msgid "Show Editor"
 msgstr "Редактор"
 
-#: ardour_ui_ed.cc:180
+#: ardour_ui_ed.cc:183
 #, fuzzy
 msgid "Show Mixer"
 msgstr "Микшер"
 
-#: ardour_ui_ed.cc:182
+#: ardour_ui_ed.cc:185
 msgid "Options Editor"
 msgstr "Редактор параметров"
 
-#: ardour_ui_ed.cc:183
+#: ardour_ui_ed.cc:186
 #, fuzzy
 msgid "Track/Bus Inspector"
 msgstr "Треки/Шины"
 
-#: ardour_ui_ed.cc:185
+#: ardour_ui_ed.cc:188
 msgid "Connections"
 msgstr "Соединения"
 
-#: ardour_ui_ed.cc:187
+#: ardour_ui_ed.cc:190
 msgid "Locations"
 msgstr "Интервалы"
 
-#: ardour_ui_ed.cc:189
+#: ardour_ui_ed.cc:192
 msgid "Big Clock"
 msgstr "Большой счётчик"
 
-#: ardour_ui_ed.cc:191
+#: ardour_ui_ed.cc:194
 msgid "About"
 msgstr "О программе"
 
-#: ardour_ui_ed.cc:192
+#: ardour_ui_ed.cc:195
 #, fuzzy
 msgid "Colors"
 msgstr "Цвет"
 
-#: ardour_ui_ed.cc:194
+#: ardour_ui_ed.cc:197
 #, fuzzy
 msgid "Add Audio Track"
 msgstr "Добавить Трек/Шину"
 
-#: ardour_ui_ed.cc:196
+#: ardour_ui_ed.cc:199
 #, fuzzy
 msgid "Add Audio Bus"
 msgstr "Скрыть все аудиошины"
 
-#: ardour_ui_ed.cc:198
+#: ardour_ui_ed.cc:201
 msgid "Save"
 msgstr "Сохранить"
 
-#: ardour_ui_ed.cc:200 editor_actions.cc:254
+#: ardour_ui_ed.cc:203 editor_actions.cc:255
 #, fuzzy
 msgid "Remove Last Capture"
 msgstr "Удалить последнюю запись"
 
 #. do-nothing action for the "transport" menu bar item
-#: ardour_ui_ed.cc:207
+#: ardour_ui_ed.cc:210
 #, fuzzy
 msgid "Transport"
 msgstr "Triangular"
@@ -996,73 +978,73 @@ msgstr "Triangular"
 #. these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
 #. menus and via button proxies.
 #.
-#: ardour_ui_ed.cc:213 sfdb_ui.cc:57
+#: ardour_ui_ed.cc:216 sfdb_ui.cc:57
 msgid "Stop"
 msgstr "Стоп"
 
-#: ardour_ui_ed.cc:216
+#: ardour_ui_ed.cc:219
 msgid "Roll"
 msgstr ""
 
-#: ardour_ui_ed.cc:220
+#: ardour_ui_ed.cc:223
 #, fuzzy
 msgid "Start/Stop"
 msgstr "Начало:"
 
-#: ardour_ui_ed.cc:223
+#: ardour_ui_ed.cc:226
 msgid "Stop + Forget Capture"
 msgstr ""
 
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:229
 #, fuzzy
 msgid "Play Loop Range"
 msgstr "Воспроизвести \"кольцо\""
 
-#: ardour_ui_ed.cc:229
+#: ardour_ui_ed.cc:232
 #, fuzzy
 msgid "Play Selection"
 msgstr "Воспроизвести выделенную область"
 
-#: ardour_ui_ed.cc:233
+#: ardour_ui_ed.cc:236
 #, fuzzy
 msgid "Enable Record"
 msgstr "Запись"
 
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:239
 #, fuzzy
 msgid "Rewind"
 msgstr "Область"
 
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:242
 msgid "Rewind (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:242
+#: ardour_ui_ed.cc:245
 msgid "Rewind (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:245
+#: ardour_ui_ed.cc:248
 msgid "Forward"
 msgstr ""
 
-#: ardour_ui_ed.cc:248
+#: ardour_ui_ed.cc:251
 msgid "Forward (Slow)"
 msgstr ""
 
-#: ardour_ui_ed.cc:251
+#: ardour_ui_ed.cc:254
 msgid "Forward (Fast)"
 msgstr ""
 
-#: ardour_ui_ed.cc:254
+#: ardour_ui_ed.cc:257
 msgid "Goto Zero"
 msgstr ""
 
-#: ardour_ui_ed.cc:257
+#: ardour_ui_ed.cc:260
 #, fuzzy
 msgid "Goto Start"
 msgstr "Начало:"
 
-#: ardour_ui_ed.cc:260
+#: ardour_ui_ed.cc:263
 msgid "Goto End"
 msgstr ""
 
@@ -1070,7 +1052,7 @@ msgstr ""
 #. that proxies for these action to be more compact. It would be nice to find a way to override the action
 #. name appearance on the buttons.
 #.
-#: ardour_ui_ed.cc:269
+#: ardour_ui_ed.cc:272
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1079,7 +1061,7 @@ msgstr ""
 "врезка\n"
 "до"
 
-#: ardour_ui_ed.cc:272
+#: ardour_ui_ed.cc:275
 #, fuzzy
 msgid ""
 "Punch\n"
@@ -1088,11 +1070,11 @@ msgstr ""
 "врезка\n"
 "после"
 
-#: ardour_ui_ed.cc:275 option_editor.cc:128
+#: ardour_ui_ed.cc:278 option_editor.cc:129
 msgid "Click"
 msgstr "Метроном"
 
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:281
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1101,7 +1083,7 @@ msgstr ""
 "авто\n"
 "вход"
 
-#: ardour_ui_ed.cc:281
+#: ardour_ui_ed.cc:284
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1110,7 +1092,7 @@ msgstr ""
 "авто\n"
 "воспр."
 
-#: ardour_ui_ed.cc:284
+#: ardour_ui_ed.cc:287
 #, fuzzy
 msgid ""
 "Auto\n"
@@ -1119,284 +1101,284 @@ msgstr ""
 "авто\n"
 "возврат"
 
-#: ardour_ui_ed.cc:288
+#: ardour_ui_ed.cc:291
 #, fuzzy
 msgid ""
 "Time\n"
 "master"
 msgstr "JACK-счётчик - мастер"
 
-#: ardour_ui_ed.cc:291
+#: ardour_ui_ed.cc:294
 msgid "Toggle Record Enable Track1"
 msgstr ""
 
-#: ardour_ui_ed.cc:293
+#: ardour_ui_ed.cc:296
 msgid "Toggle Record Enable Track2"
 msgstr ""
 
-#: ardour_ui_ed.cc:295
+#: ardour_ui_ed.cc:298
 msgid "Toggle Record Enable Track3"
 msgstr ""
 
-#: ardour_ui_ed.cc:297
+#: ardour_ui_ed.cc:300
 msgid "Toggle Record Enable Track4"
 msgstr ""
 
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:302
 msgid "Toggle Record Enable Track5"
 msgstr ""
 
-#: ardour_ui_ed.cc:301
+#: ardour_ui_ed.cc:304
 msgid "Toggle Record Enable Track6"
 msgstr ""
 
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:306
 msgid "Toggle Record Enable Track7"
 msgstr ""
 
-#: ardour_ui_ed.cc:305
+#: ardour_ui_ed.cc:308
 msgid "Toggle Record Enable Track8"
 msgstr ""
 
-#: ardour_ui_ed.cc:307
+#: ardour_ui_ed.cc:310
 msgid "Toggle Record Enable Track9"
 msgstr ""
 
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:312
 msgid "Toggle Record Enable Track10"
 msgstr ""
 
-#: ardour_ui_ed.cc:311
+#: ardour_ui_ed.cc:314
 msgid "Toggle Record Enable Track11"
 msgstr ""
 
-#: ardour_ui_ed.cc:313
+#: ardour_ui_ed.cc:316
 msgid "Toggle Record Enable Track12"
 msgstr ""
 
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:318
 msgid "Toggle Record Enable Track13"
 msgstr ""
 
-#: ardour_ui_ed.cc:317
+#: ardour_ui_ed.cc:320
 msgid "Toggle Record Enable Track14"
 msgstr ""
 
-#: ardour_ui_ed.cc:319
+#: ardour_ui_ed.cc:322
 msgid "Toggle Record Enable Track15"
 msgstr ""
 
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:324
 msgid "Toggle Record Enable Track16"
 msgstr ""
 
-#: ardour_ui_ed.cc:323
+#: ardour_ui_ed.cc:326
 msgid "Toggle Record Enable Track17"
 msgstr ""
 
-#: ardour_ui_ed.cc:325
+#: ardour_ui_ed.cc:328
 msgid "Toggle Record Enable Track18"
 msgstr ""
 
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:330
 msgid "Toggle Record Enable Track19"
 msgstr ""
 
-#: ardour_ui_ed.cc:329
+#: ardour_ui_ed.cc:332
 msgid "Toggle Record Enable Track20"
 msgstr ""
 
-#: ardour_ui_ed.cc:331
+#: ardour_ui_ed.cc:334
 msgid "Toggle Record Enable Track21"
 msgstr ""
 
-#: ardour_ui_ed.cc:333
+#: ardour_ui_ed.cc:336
 msgid "Toggle Record Enable Track22"
 msgstr ""
 
-#: ardour_ui_ed.cc:335
+#: ardour_ui_ed.cc:338
 msgid "Toggle Record Enable Track23"
 msgstr ""
 
-#: ardour_ui_ed.cc:337
+#: ardour_ui_ed.cc:340
 msgid "Toggle Record Enable Track24"
 msgstr ""
 
-#: ardour_ui_ed.cc:339
+#: ardour_ui_ed.cc:342
 msgid "Toggle Record Enable Track25"
 msgstr ""
 
-#: ardour_ui_ed.cc:341
+#: ardour_ui_ed.cc:344
 msgid "Toggle Record Enable Track26"
 msgstr ""
 
-#: ardour_ui_ed.cc:343
+#: ardour_ui_ed.cc:346
 msgid "Toggle Record Enable Track27"
 msgstr ""
 
-#: ardour_ui_ed.cc:345
+#: ardour_ui_ed.cc:348
 msgid "Toggle Record Enable Track28"
 msgstr ""
 
-#: ardour_ui_ed.cc:347
+#: ardour_ui_ed.cc:350
 msgid "Toggle Record Enable Track29"
 msgstr ""
 
-#: ardour_ui_ed.cc:349
+#: ardour_ui_ed.cc:352
 msgid "Toggle Record Enable Track30"
 msgstr ""
 
-#: ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:354
 msgid "Toggle Record Enable Track31"
 msgstr ""
 
-#: ardour_ui_ed.cc:353
+#: ardour_ui_ed.cc:356
 msgid "Toggle Record Enable Track32"
 msgstr ""
 
-#: ardour_ui_ed.cc:358
+#: ardour_ui_ed.cc:361
 msgid "Percentage"
 msgstr "Процентов"
 
-#: ardour_ui_ed.cc:359
+#: ardour_ui_ed.cc:362
 msgid "Semitones"
 msgstr "Полутонов"
 
-#: ardour_ui_ed.cc:363
+#: ardour_ui_ed.cc:366
 msgid "Send MTC"
 msgstr "Передача MTC"
 
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:368
 msgid "Send MMC"
 msgstr "Передача MMC"
 
-#: ardour_ui_ed.cc:367
+#: ardour_ui_ed.cc:370
 #, fuzzy
 msgid "Use MMC"
 msgstr "Передача MMC"
 
-#: ardour_ui_ed.cc:369
+#: ardour_ui_ed.cc:372
 msgid "Send MIDI feedback"
 msgstr ""
 
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:374
 #, fuzzy
 msgid "Use MIDI control"
 msgstr "MMC порт"
 
-#: ardour_ui_ed.cc:374
+#: ardour_ui_ed.cc:377
 #, fuzzy
-msgid "Connect newtrack inputs to hardware"
+msgid "Connect new track inputs to hardware"
 msgstr "Автоподсоединение новых треков"
 
-#: ardour_ui_ed.cc:392
+#: ardour_ui_ed.cc:396
 #, fuzzy
 msgid "Connect new track outputs to hardware"
 msgstr "Автоподсоединение новых треков"
 
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:398
 #, fuzzy
 msgid "Connect new track outputs to master"
 msgstr "автоматическое подключение треков к мастер-выходам"
 
-#: ardour_ui_ed.cc:396
+#: ardour_ui_ed.cc:400
 #, fuzzy
 msgid "Manually connect new track outputs"
 msgstr "ручное подключение треков к выходам"
 
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:405
 #, fuzzy
 msgid "Hardware monitoring"
 msgstr "Аппаратный контроль"
 
-#: ardour_ui_ed.cc:402
+#: ardour_ui_ed.cc:406
 #, fuzzy
 msgid "Software monitoring"
 msgstr "Использовать программный контроль"
 
-#: ardour_ui_ed.cc:403
+#: ardour_ui_ed.cc:407
 #, fuzzy
 msgid "External monitoring"
 msgstr "Аппаратный контроль"
 
 #. Configuration object options (i.e. not session specific)
-#: ardour_ui_ed.cc:407
+#: ardour_ui_ed.cc:411
 msgid "Stop plugins with transport"
 msgstr "Останавливать модули (plugins) вместе с транспортом"
 
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:412
 #, fuzzy
 msgid "Verify remove last capture"
 msgstr "Удалить последнюю запись"
 
-#: ardour_ui_ed.cc:409
+#: ardour_ui_ed.cc:413
 msgid "Stop recording on xrun"
 msgstr "Остановить запись при потере отсчётов"
 
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:414
 #, fuzzy
 msgid "Stop transport at session end"
 msgstr "Останавливать транспорт в конце сессии"
 
-#: ardour_ui_ed.cc:411
+#: ardour_ui_ed.cc:415
 msgid "-12dB gain reduce ffwd/rewind"
 msgstr ""
 
-#: ardour_ui_ed.cc:412
+#: ardour_ui_ed.cc:416
 msgid "Rec-enable stays engaged at stop"
 msgstr ""
 
 #. session options
-#: ardour_ui_ed.cc:416
+#: ardour_ui_ed.cc:420
 #, fuzzy
 msgid "Do not run plugins while recording"
 msgstr "Использовать модули (plugins) во время записи"
 
-#: ardour_ui_ed.cc:419
+#: ardour_ui_ed.cc:423
 msgid "Latched solo"
 msgstr ""
 
-#: ardour_ui_ed.cc:424
+#: ardour_ui_ed.cc:428
 #, fuzzy
 msgid "Solo in-place"
 msgstr "Соло"
 
-#: ardour_ui_ed.cc:426
+#: ardour_ui_ed.cc:430
 msgid "Solo via bus"
 msgstr ""
 
-#: ardour_ui_ed.cc:429
+#: ardour_ui_ed.cc:433
 #, fuzzy
 msgid "Automatically create crossfades"
 msgstr "Автоматический кроссфейд на перекрытии"
 
-#: ardour_ui_ed.cc:431
+#: ardour_ui_ed.cc:435
 msgid "Unmute new full crossfades"
 msgstr ""
 
-#: ardour_ui_options.cc:379 ardour_ui_options.cc:389 ardour_ui_options.cc:456
+#: ardour_ui_options.cc:406 ardour_ui_options.cc:416 ardour_ui_options.cc:483
 #, fuzzy
 msgid "Internal"
 msgstr "внутренний"
 
-#: ardour_ui_options.cc:380 ardour_ui_options.cc:459
+#: ardour_ui_options.cc:407 ardour_ui_options.cc:486
 #, fuzzy
 msgid "MTC"
 msgstr "MMC"
 
-#: audio_clock.cc:1719 editor.cc:185
+#: audio_clock.cc:1742 editor.cc:188
 msgid "SMPTE"
 msgstr "SMPTE"
 
-#: audio_clock.cc:1720 editor.cc:184 editor_rulers.cc:359
+#: audio_clock.cc:1743 editor.cc:187 editor_rulers.cc:360
 msgid "Bars:Beats"
 msgstr "Такт:Доля"
 
-#: audio_clock.cc:1721
+#: audio_clock.cc:1744
 msgid "Minutes:Seconds"
 msgstr "Минуты:Секунды"
 
-#: audio_clock.cc:1722
+#: audio_clock.cc:1745
 msgid "Audio Frames"
 msgstr "Аудио кадры"
 
@@ -1404,294 +1386,315 @@ msgstr "Аудио кадры"
 #. Slowest = 6.6dB/sec falloff at update rate of 40ms
 #. Slow    = 6.8dB/sec falloff at update rate of 40ms
 #.
-#: audio_clock.cc:1723 editor_actions.cc:374 editor_actions.cc:382
+#: audio_clock.cc:1746 editor_actions.cc:375 editor_actions.cc:383
+#: gain_meter.cc:172 panner_ui.cc:89 plugin_ui.cc:392 plugin_ui.cc:635
 msgid "Off"
 msgstr "Выкл"
 
-#: audio_clock.cc:1725
+#: audio_clock.cc:1748
 msgid "Mode"
 msgstr "Режим"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:458
+#: audio_time_axis.cc:91
 msgid "m"
 msgstr "т"
 
-#: audio_time_axis.cc:90 mixer_strip.cc:459
+#: audio_time_axis.cc:91
 msgid "s"
 msgstr "с"
 
-#: audio_time_axis.cc:90
+#: audio_time_axis.cc:91
 msgid "r"
 msgstr "з"
 
-#: audio_time_axis.cc:94
+#: audio_time_axis.cc:95
 msgid "g"
 msgstr "г"
 
 #. group
-#: audio_time_axis.cc:95
+#: audio_time_axis.cc:96
 msgid "p"
 msgstr "сп"
 
-#: audio_time_axis.cc:96 automation_time_axis.cc:31 visual_time_axis.cc:73
+#: audio_time_axis.cc:97 automation_time_axis.cc:32 visual_time_axis.cc:74
 msgid "h"
 msgstr "в"
 
 #. height
-#: audio_time_axis.cc:97
+#: audio_time_axis.cc:98
 msgid "a"
 msgstr "а"
 
-#: audio_time_axis.cc:98 visual_time_axis.cc:72
+#: audio_time_axis.cc:99 visual_time_axis.cc:73
 msgid "v"
 msgstr "п"
 
-#: audio_time_axis.cc:173
+#: audio_time_axis.cc:168 mixer_strip.cc:86
 msgid "Record"
 msgstr "Запись"
 
-#: audio_time_axis.cc:174 editor_actions.cc:36
+#: audio_time_axis.cc:169 editor_actions.cc:37 mixer_strip.cc:86
 msgid "Solo"
 msgstr "Соло"
 
-#: audio_time_axis.cc:175 editor.cc:1767 editor.cc:1866 panner_ui.cc:385
+#: audio_time_axis.cc:170 editor.cc:1760 editor.cc:1859 mixer_strip.cc:86
+#: panner_ui.cc:427
 msgid "Mute"
 msgstr "Тихо"
 
-#: audio_time_axis.cc:176
+#: audio_time_axis.cc:171
 msgid "Edit Group"
 msgstr "Группы"
 
-#: audio_time_axis.cc:177 visual_time_axis.cc:91
+#: audio_time_axis.cc:172 visual_time_axis.cc:92
 msgid "Display Height"
 msgstr "Высота дорожки"
 
-#: audio_time_axis.cc:178
+#: audio_time_axis.cc:173
 msgid "Playlist"
 msgstr "Список"
 
-#: audio_time_axis.cc:179 audio_time_axis.cc:743
+#: audio_time_axis.cc:174 audio_time_axis.cc:741
 msgid "Automation"
 msgstr "Автомат"
 
-#: audio_time_axis.cc:180 visual_time_axis.cc:92
+#: audio_time_axis.cc:175 visual_time_axis.cc:93
 msgid "Visual options"
 msgstr "Параметры отображения"
 
-#: audio_time_axis.cc:181 visual_time_axis.cc:93
+#: audio_time_axis.cc:176 visual_time_axis.cc:94
 msgid "Hide this track"
 msgstr "Скрыть трек"
 
-#: audio_time_axis.cc:337
+#: audio_time_axis.cc:333 mixer_strip.cc:927
 msgid "No group"
 msgstr "Нет группы"
 
-#: audio_time_axis.cc:704 automation_time_axis.cc:448
-#: imageframe_time_axis.cc:256 marker_time_axis.cc:210
+#: audio_time_axis.cc:702 automation_time_axis.cc:450
+#: imageframe_time_axis.cc:255 marker_time_axis.cc:211
 msgid "Height"
 msgstr "Высота"
 
-#: audio_time_axis.cc:705 color_manager.cc:40 imageframe_time_axis.cc:257
-#: marker_time_axis.cc:211
+#: audio_time_axis.cc:703 color_manager.cc:41 imageframe_time_axis.cc:256
+#: marker_time_axis.cc:212
 msgid "Color"
 msgstr "Цвет"
 
-#: audio_time_axis.cc:709
+#: audio_time_axis.cc:707
 msgid "Hide all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:710
+#: audio_time_axis.cc:708
 msgid "Show all crossfades"
 msgstr ""
 
-#: audio_time_axis.cc:714 mixer_strip.cc:1236
+#: audio_time_axis.cc:712 mixer_strip.cc:1011
 #, fuzzy
 msgid "Remote Control ID"
 msgstr "использовать контрольные выходы"
 
-#: audio_time_axis.cc:720
-msgid "show all automation"
-msgstr ""
+#: audio_time_axis.cc:718
+#, fuzzy
+msgid "Show all automation"
+msgstr "автомат"
 
-#: audio_time_axis.cc:723
+#: audio_time_axis.cc:721
 #, fuzzy
-msgid "show existing automation"
+msgid "Show existing automation"
 msgstr "использовать имеющийся шаблон"
 
-#: audio_time_axis.cc:726
-msgid "hide all automation"
-msgstr ""
+#: audio_time_axis.cc:724
+#, fuzzy
+msgid "Hide all automation"
+msgstr "очистить интервалы"
 
-#: audio_time_axis.cc:731 audio_time_axis.cc:1169 editor.cc:215
-msgid "gain"
-msgstr "усил."
+#: audio_time_axis.cc:729
+#, fuzzy
+msgid "Fader"
+msgstr "Затухание"
 
-#: audio_time_axis.cc:736 audio_time_axis.cc:1209
-msgid "pan"
+#: audio_time_axis.cc:734
+#, fuzzy
+msgid "Pan"
 msgstr "пан."
 
-#: audio_time_axis.cc:741
+#: audio_time_axis.cc:739
 msgid "Plugins"
 msgstr "Модули (плагины)"
 
-#: audio_time_axis.cc:749
+#: audio_time_axis.cc:747
 msgid "Show waveforms"
 msgstr "Отображать форму сигнала"
 
-#: audio_time_axis.cc:757
+#: audio_time_axis.cc:755
 msgid "Traditional"
 msgstr "Обычная"
 
-#: audio_time_axis.cc:760
+#: audio_time_axis.cc:758
 msgid "Rectified"
 msgstr "Увеличенная"
 
-#: audio_time_axis.cc:763
+#: audio_time_axis.cc:761
 msgid "Waveform"
 msgstr "Форма сигнала"
 
-#: audio_time_axis.cc:773
+#: audio_time_axis.cc:771
 #, fuzzy
-msgid "align with existing material"
+msgid "Align with existing material"
 msgstr "Существующий материал"
 
-#: audio_time_axis.cc:778
+#: audio_time_axis.cc:776
 #, fuzzy
-msgid "align with capture time"
+msgid "Align with capture time"
 msgstr "Время записи"
 
-#: audio_time_axis.cc:784
+#: audio_time_axis.cc:782
 #, fuzzy
 msgid "Alignment"
 msgstr "Выровнять"
 
-#: audio_time_axis.cc:790 editor.cc:523 editor_actions.cc:59
-#: mixer_strip.cc:1225
+#: audio_time_axis.cc:788 editor.cc:527 editor_actions.cc:60
+#: mixer_strip.cc:1000 mixer_ui.cc:111
 msgid "Active"
 msgstr "Активен"
 
-#: audio_time_axis.cc:795 editor.cc:1929 editor_actions.cc:319
-#: editor_markers.cc:507 imageframe_time_axis.cc:260 location_ui.cc:56
-#: marker_time_axis.cc:214 mixer_strip.cc:1239
+#: audio_time_axis.cc:793 editor.cc:1922 editor_actions.cc:320
+#: editor_markers.cc:508 imageframe_time_axis.cc:259 location_ui.cc:57
+#: marker_time_axis.cc:215 mixer_strip.cc:1014
 msgid "Remove"
 msgstr "Удалить"
 
-#: audio_time_axis.cc:835
+#: audio_time_axis.cc:833
 #, fuzzy
 msgid "Name for playlist"
 msgstr "Имя снимка"
 
-#: audio_time_axis.cc:837 audio_time_axis.cc:1853 editor_markers.cc:826
-#: editor_mouse.cc:4609 imageframe_time_axis.cc:249 marker_time_axis.cc:207
-#: meter_bridge_strip.cc:223 mixer_strip.cc:1223 redirect_box.cc:749
-#: redirect_box.cc:1063 route_ui.cc:732 visual_time_axis.cc:325
+#: audio_time_axis.cc:835 audio_time_axis.cc:1851 editor_markers.cc:827
+#: editor_mouse.cc:4673 imageframe_time_axis.cc:248 marker_time_axis.cc:208
+#: meter_bridge_strip.cc:224 mixer_strip.cc:998 redirect_box.cc:751
+#: redirect_box.cc:1065 route_ui.cc:739 visual_time_axis.cc:326
 msgid "Rename"
 msgstr "Переименовать"
 
-#: audio_time_axis.cc:870 audio_time_axis.cc:910
+#: audio_time_axis.cc:868 audio_time_axis.cc:908
 #, fuzzy
 msgid "Name for Playlist"
 msgstr "Имя снимка"
 
-#: audio_time_axis.cc:1128 visual_time_axis.cc:382
+#: audio_time_axis.cc:1126 visual_time_axis.cc:383
 msgid "a track already exists with that name"
 msgstr "трек с таким именем уже существует"
 
-#: audio_time_axis.cc:1412 editor.cc:1490 selection.cc:622
+#: audio_time_axis.cc:1167 editor.cc:218
+msgid "gain"
+msgstr "усил."
+
+#: audio_time_axis.cc:1207
+msgid "pan"
+msgstr "пан."
+
+#: audio_time_axis.cc:1410 editor.cc:1483 selection.cc:634
 msgid "programming error: "
 msgstr "ошибка в программе: "
 
-#: audio_time_axis.cc:1850
+#: audio_time_axis.cc:1848
 msgid "Current: %1"
 msgstr ""
 
-#: audio_time_axis.cc:1857
+#: audio_time_axis.cc:1855
 msgid "New Copy"
 msgstr "Новая копия"
 
-#: audio_time_axis.cc:1859
+#: audio_time_axis.cc:1857
 msgid "Clear Current"
 msgstr "Очистить текущий"
 
-#: audio_time_axis.cc:1861 editor.cc:2031 editor.cc:2107
+#: audio_time_axis.cc:1859 editor.cc:2024 editor.cc:2100
 msgid "Select"
 msgstr "Выделеннное"
 
-#: automation_line.cc:883
+#: automation_line.cc:884
 #, fuzzy
 msgid "automation event move"
 msgstr "автомат"
 
-#: automation_line.cc:885
+#: automation_line.cc:886
 #, fuzzy
 msgid "automation range drag"
 msgstr "автомат"
 
-#: automation_line.cc:1014 region_gain_line.cc:61
+#: automation_line.cc:1015 region_gain_line.cc:62
 #, fuzzy
 msgid "remove control point"
 msgstr "использовать контрольные выходы"
 
-#: automation_time_axis.cc:32 editor_ops.cc:2813
+#: automation_time_axis.cc:33 editor_ops.cc:2885
 msgid "clear"
 msgstr "очистить"
 
-#: automation_time_axis.cc:74
+#: automation_time_axis.cc:75
 msgid "track height"
 msgstr ""
 
-#: automation_time_axis.cc:75
+#: automation_time_axis.cc:76
 #, fuzzy
 msgid "automation state"
 msgstr "автомат"
 
-#: automation_time_axis.cc:76
+#: automation_time_axis.cc:77
 #, fuzzy
 msgid "clear track"
 msgstr "Скрыть трек"
 
-#: automation_time_axis.cc:77
+#: automation_time_axis.cc:78
 #, fuzzy
 msgid "hide track"
 msgstr "Скрыть трек"
 
-#: automation_time_axis.cc:185 automation_time_axis.cc:223
-#: automation_time_axis.cc:463 mixer_strip.cc:176 mixer_strip.cc:188
-#: plugin_ui.cc:394 plugin_ui.cc:636 region_editor.cc:53
-msgid "play"
-msgstr "воспроизвести"
+#: automation_time_axis.cc:184 automation_time_axis.cc:213
+#: automation_time_axis.cc:461
+msgid "Manual"
+msgstr ""
+
+#: automation_time_axis.cc:186 automation_time_axis.cc:224
+#: automation_time_axis.cc:465 editor.cc:2001 editor.cc:2082 gain_meter.cc:174
+#: panner_ui.cc:91 plugin_ui.cc:395 plugin_ui.cc:637 sfdb_ui.cc:56
+msgid "Play"
+msgstr "Воспроизвести"
 
-#: automation_time_axis.cc:187 automation_time_axis.cc:234
-#: automation_time_axis.cc:467 mixer_strip.cc:178 mixer_strip.cc:190
-#: plugin_ui.cc:397 plugin_ui.cc:638
-msgid "write"
+#: automation_time_axis.cc:188 automation_time_axis.cc:235
+#: automation_time_axis.cc:469 gain_meter.cc:176 panner_ui.cc:93
+#: plugin_ui.cc:398 plugin_ui.cc:639
+#, fuzzy
+msgid "Write"
 msgstr "запись"
 
-#: automation_time_axis.cc:189 automation_time_axis.cc:245
-#: automation_time_axis.cc:471 mixer_strip.cc:180 mixer_strip.cc:192
-#: mixer_strip.cc:887 plugin_ui.cc:400 plugin_ui.cc:640
-msgid "touch"
-msgstr ""
+#: automation_time_axis.cc:190 automation_time_axis.cc:246
+#: automation_time_axis.cc:473 gain_meter.cc:178 panner_ui.cc:95
+#: plugin_ui.cc:401 plugin_ui.cc:641
+#, fuzzy
+msgid "Touch"
+msgstr "Врезка"
 
-#: automation_time_axis.cc:256 option_editor.cc:182 option_editor.cc:188
-#: plugin_ui.cc:403
+#: automation_time_axis.cc:257 option_editor.cc:183 option_editor.cc:189
+#: plugin_ui.cc:404
 msgid "???"
 msgstr ""
 
-#: automation_time_axis.cc:270
+#: automation_time_axis.cc:271
 #, fuzzy
 msgid "clear automation"
 msgstr "очистить интервалы"
 
-#: automation_time_axis.cc:450 editor_actions.cc:317
+#: automation_time_axis.cc:452 editor_actions.cc:318
 msgid "Hide"
 msgstr "Скрыть"
 
-#: automation_time_axis.cc:452 crossfade_edit.cc:76 redirect_box.cc:1055
+#: automation_time_axis.cc:454 crossfade_edit.cc:78 redirect_box.cc:1057
 msgid "Clear"
 msgstr "Очистить"
 
-#: automation_time_axis.cc:475
+#: automation_time_axis.cc:477
 #, fuzzy
 msgid "State"
 msgstr "Начало"
@@ -1837,1604 +1840,1591 @@ msgstr ""
 msgid "color of fill"
 msgstr ""
 
-#: color_manager.cc:39
+#: color_manager.cc:40
 #, fuzzy
 msgid "Object"
 msgstr "объект"
 
-#: color_manager.cc:77
+#: color_manager.cc:78
 #, fuzzy
 msgid "cannot open color definition file %1: %2"
 msgstr "не удалось отобразить заставку (файл \"%1\")"
 
-#: crossfade_edit.cc:73
+#: crossfade_edit.cc:75
 #, fuzzy
 msgid "ardour: x-fade edit"
 msgstr "ardour: редактор"
 
-#: crossfade_edit.cc:77 panner_ui.cc:401
+#: crossfade_edit.cc:79 panner_ui.cc:443
 #, fuzzy
 msgid "Reset"
 msgstr "Огромная"
 
-#: crossfade_edit.cc:78
+#: crossfade_edit.cc:80
 #, fuzzy
 msgid "Fade"
 msgstr "Затухание"
 
-#: crossfade_edit.cc:79
+#: crossfade_edit.cc:81
 #, fuzzy
 msgid "Out (dry)"
 msgstr "в %d"
 
-#: crossfade_edit.cc:80
+#: crossfade_edit.cc:82
 #, fuzzy
 msgid "Out"
 msgstr "Выходов"
 
-#: crossfade_edit.cc:81
+#: crossfade_edit.cc:83
 #, fuzzy
 msgid "In (dry)"
 msgstr "в %d"
 
-#: crossfade_edit.cc:82
+#: crossfade_edit.cc:84
 msgid "In"
 msgstr ""
 
-#: crossfade_edit.cc:84
+#: crossfade_edit.cc:86
 #, fuzzy
 msgid "With Pre-roll"
 msgstr "откат"
 
-#: crossfade_edit.cc:85
+#: crossfade_edit.cc:87
 #, fuzzy
 msgid "With Post-roll"
 msgstr "накат"
 
-#: crossfade_edit.cc:93
+#: crossfade_edit.cc:95
 #, fuzzy
 msgid "Fade In"
 msgstr "Затухание"
 
-#: crossfade_edit.cc:94
+#: crossfade_edit.cc:96
 #, fuzzy
 msgid "Fade Out"
 msgstr "Затухание"
 
-#: crossfade_edit.cc:170 editor.cc:1842 editor_actions.cc:315
-#: option_editor.cc:129
+#: crossfade_edit.cc:172 editor.cc:1835 editor_actions.cc:316
+#: option_editor.cc:130
 msgid "Audition"
 msgstr "Аудит"
 
-#: editor.cc:101 editor.cc:3588
+#: editor.cc:104 editor.cc:3616
 msgid "Slide"
 msgstr "Скольжение"
 
-#: editor.cc:102 editor.cc:3586
+#: editor.cc:105 editor.cc:3614
 msgid "Splice"
 msgstr "Стыковка"
 
-#: editor.cc:107 editor.cc:3643 export_dialog.cc:78 export_dialog.cc:92
-#: export_dialog.cc:893 export_dialog.cc:1225
+#. note that this menu list starts at zero, not 1, because zero
+#. is a valid, if useless, ID.
+#.
+#. leave some breathing room
+#: editor.cc:110 editor.cc:3671 export_dialog.cc:78 export_dialog.cc:92
+#: export_dialog.cc:893 export_dialog.cc:1225 route_ui.cc:437
 msgid "None"
 msgstr "Нет"
 
-#: editor.cc:108 editor.cc:3631
+#: editor.cc:111 editor.cc:3659
 #, fuzzy
 msgid "CD Frames"
 msgstr "Кадр"
 
-#: editor.cc:109 editor.cc:3633
+#: editor.cc:112 editor.cc:3661
 #, fuzzy
 msgid "SMPTE Frames"
 msgstr "SMPTE Кадры/Секунды"
 
-#: editor.cc:110 editor.cc:3635
+#: editor.cc:113 editor.cc:3663
 #, fuzzy
 msgid "SMPTE Seconds"
 msgstr "SMPTE Кадры/Секунды"
 
-#: editor.cc:111 editor.cc:3637
+#: editor.cc:114 editor.cc:3665
 msgid "SMPTE Minutes"
 msgstr ""
 
-#: editor.cc:112 editor.cc:3639
+#: editor.cc:115 editor.cc:3667
 #, fuzzy
 msgid "Seconds"
 msgstr "Минуты:Секунды"
 
-#: editor.cc:113 editor.cc:3641
+#: editor.cc:116 editor.cc:3669
 #, fuzzy
 msgid "Minutes"
 msgstr "Главные выходы"
 
-#: editor.cc:114 editor.cc:3613
+#: editor.cc:117 editor.cc:3641
 msgid "Beats/32"
 msgstr "долям/32"
 
-#: editor.cc:115 editor.cc:3611
+#: editor.cc:118 editor.cc:3639
 msgid "Beats/16"
 msgstr "долям/16"
 
-#: editor.cc:116 editor.cc:3609
+#: editor.cc:119 editor.cc:3637
 msgid "Beats/8"
 msgstr "долям/8"
 
-#: editor.cc:117 editor.cc:3607
+#: editor.cc:120 editor.cc:3635
 msgid "Beats/4"
 msgstr "долям/4"
 
-#: editor.cc:118 editor.cc:3605
+#: editor.cc:121 editor.cc:3633
 msgid "Beats/3"
 msgstr "долям/3"
 
-#: editor.cc:119 editor.cc:3615
+#: editor.cc:122 editor.cc:3643
 msgid "Beats"
 msgstr "долям"
 
-#: editor.cc:120 editor.cc:3617
+#: editor.cc:123 editor.cc:3645
 msgid "Bars"
 msgstr "тактам"
 
-#: editor.cc:121 editor.cc:3619
+#: editor.cc:124 editor.cc:3647
 msgid "Marks"
 msgstr "маркерам"
 
-#: editor.cc:122 editor.cc:141 editor.cc:3621 editor.cc:3687
+#: editor.cc:125 editor.cc:144 editor.cc:3649 editor.cc:3715
 msgid "Edit Cursor"
 msgstr "курсору"
 
-#: editor.cc:123 editor.cc:3623
+#: editor.cc:126 editor.cc:3651
 msgid "Region starts"
 msgstr "нач. областей"
 
-#: editor.cc:124 editor.cc:3625
+#: editor.cc:127 editor.cc:3653
 msgid "Region ends"
 msgstr "оконч. областей"
 
-#: editor.cc:125 editor.cc:3629
+#: editor.cc:128 editor.cc:3657
 msgid "Region syncs"
 msgstr ""
 
-#: editor.cc:126 editor.cc:3627
+#: editor.cc:129 editor.cc:3655
 msgid "Region bounds"
 msgstr ""
 
-#: editor.cc:132 editor.cc:3662
+#: editor.cc:135 editor.cc:3690
 msgid "Magnetic"
 msgstr "Магн."
 
-#: editor.cc:137 editor.cc:3679 export_dialog.cc:140 export_dialog.cc:156
+#: editor.cc:140 editor.cc:3707 export_dialog.cc:140 export_dialog.cc:156
 #: export_dialog.cc:1068 export_dialog.cc:1072
 msgid "Left"
 msgstr "лев. краю"
 
-#: editor.cc:138 editor.cc:3681 export_dialog.cc:141 export_dialog.cc:157
+#: editor.cc:141 editor.cc:3709 export_dialog.cc:141 export_dialog.cc:157
 msgid "Right"
 msgstr "прав. краю"
 
-#: editor.cc:139 editor.cc:3683
+#: editor.cc:142 editor.cc:3711
 msgid "Center"
 msgstr "центру"
 
-#: editor.cc:140 editor.cc:3685
+#: editor.cc:143 editor.cc:3713
 msgid "Playhead"
 msgstr "указателю"
 
 #. time display buttons
-#: editor.cc:183
+#: editor.cc:186
 msgid "Mins:Secs"
 msgstr "Мин:Сек"
 
-#: editor.cc:186 editor_rulers.cc:353
+#: editor.cc:189 editor_rulers.cc:354
 msgid "Frames"
 msgstr "Кадр"
 
-#: editor.cc:187 editor_rulers.cc:373
+#: editor.cc:190 editor_rulers.cc:374
 msgid "Tempo"
 msgstr "Темп"
 
-#: editor.cc:188 editor_rulers.cc:367
+#: editor.cc:191 editor_rulers.cc:368
 msgid "Meter"
 msgstr "Размер"
 
-#: editor.cc:189 editor_rulers.cc:379
+#: editor.cc:192 editor_rulers.cc:380
 msgid "Location Markers"
 msgstr "Маркеры интервалов"
 
-#: editor.cc:190 editor_rulers.cc:385
+#: editor.cc:193 editor_rulers.cc:386
 msgid "Range Markers"
 msgstr ""
 
-#: editor.cc:191 editor_rulers.cc:391
+#: editor.cc:194 editor_rulers.cc:392
 msgid "Loop/Punch Ranges"
 msgstr ""
 
-#: editor.cc:213
+#: editor.cc:216
 msgid "range"
 msgstr "выделять"
 
-#: editor.cc:214
+#: editor.cc:217
 msgid "object"
 msgstr "объект"
 
-#: editor.cc:216
+#: editor.cc:219
 msgid "zoom"
 msgstr "масштаб"
 
-#: editor.cc:217
+#: editor.cc:220
 msgid "timefx"
 msgstr "эффект"
 
-#: editor.cc:218
+#: editor.cc:221
 msgid "listen"
 msgstr ""
 
-#: editor.cc:220
+#: editor.cc:223
 msgid "mode"
 msgstr "режим"
 
-#: editor.cc:221
+#: editor.cc:224
 msgid "automation"
 msgstr "автомат"
 
-#: editor.cc:223
+#: editor.cc:226
 msgid "Edit Mode"
 msgstr "Режим редактирования"
 
-#: editor.cc:224 editor_actions.cc:283
+#: editor.cc:227 editor_actions.cc:284
 msgid "Snap To"
 msgstr "Привязка к"
 
-#: editor.cc:225
+#: editor.cc:228
 msgid "Snap Mode"
 msgstr "Привязка к"
 
-#: editor.cc:226
+#: editor.cc:229
 msgid "Zoom Focus"
 msgstr "Масштабировать к"
 
 #. </CMT Additions>
 #. nudge
-#: editor.cc:234 editor.cc:1907 editor.cc:2073 editor.cc:2129
+#: editor.cc:237 editor.cc:1900 editor.cc:2066 editor.cc:2122
 msgid "Nudge"
 msgstr ""
 
-#: editor.cc:466
+#: editor.cc:470
 msgid "Zoom in"
 msgstr "Увеличить"
 
-#: editor.cc:467
+#: editor.cc:471
 msgid "Zoom out"
 msgstr "Уменьшить"
 
-#: editor.cc:470
+#: editor.cc:474
 msgid "Zoom to session"
 msgstr "Показать всё"
 
-#: editor.cc:485
+#: editor.cc:489
 msgid "Zoom Span"
 msgstr "Область просмотра"
 
-#: editor.cc:498 editor.cc:524 editor_actions.cc:61 mixer_ui.cc:85
+#: editor.cc:502 editor.cc:528 editor_actions.cc:62 mixer_ui.cc:86
+#: mixer_ui.cc:112
 #, fuzzy
 msgid "Visible"
 msgstr "отображать"
 
-#: editor.cc:499 editor.cc:522
+#: editor.cc:503 editor.cc:526
 #, fuzzy
 msgid "Name"
 msgstr "Кадр"
 
-#: editor.cc:595 editor.cc:661
+#: editor.cc:602 editor.cc:669
 #, fuzzy
 msgid "Regions"
 msgstr "Область"
 
-#: editor.cc:634 editor.cc:673
+#: editor.cc:642 editor.cc:681
 msgid "Chunks"
 msgstr "Фрагменты"
 
-#: editor.cc:664
+#: editor.cc:672
 #, fuzzy
 msgid "Tracks/Busses"
 msgstr "Треки/Шины"
 
-#: editor.cc:667
+#: editor.cc:675
 msgid "Snapshots"
 msgstr "Снимки"
 
-#: editor.cc:670
+#: editor.cc:678
 msgid "Edit Groups"
 msgstr ""
 "Ред.\n"
 "группы"
 
-#: editor.cc:719
+#: editor.cc:727
 msgid "Nudge region/selection forwards"
 msgstr ""
 
-#: editor.cc:720
+#: editor.cc:728
 msgid "Nudge region/selection backwards"
 msgstr ""
 
-#: editor.cc:727 editor_mixer.cc:298
+#: editor.cc:735 editor_mixer.cc:299
 msgid "ardour: editor"
 msgstr "ardour: редактор"
 
-#: editor.cc:728
+#: editor.cc:736
 msgid "ardour_editor"
 msgstr "ardour_редактор"
 
-#: editor.cc:1190
+#: editor.cc:1183
 msgid "ardour: editor: "
 msgstr "ardour: редактор: "
 
 #. force name
-#: editor.cc:1275 editor.cc:1284 editor_markers.cc:869
+#: editor.cc:1268 editor.cc:1277 editor_markers.cc:870
 msgid "Loop"
 msgstr "Кольцо"
 
 #. force name
-#: editor.cc:1289 editor.cc:1298 editor_markers.cc:895
+#: editor.cc:1282 editor.cc:1291 editor_markers.cc:896
 msgid "Punch"
 msgstr "Врезка"
 
-#: editor.cc:1446 editor_mouse.cc:1721
+#: editor.cc:1439 editor_mouse.cc:1742
 #, fuzzy
 msgid "programming error: fade in canvas item has no regionview data pointer!"
 msgstr "ошибка в программе: line canvas item has no line pointer!"
 
-#: editor.cc:1458 editor.cc:1475 redirect_box.cc:1071
+#: editor.cc:1451 editor.cc:1468 redirect_box.cc:1073
 msgid "Deactivate"
 msgstr "Деактивировать"
 
 #. activation
-#: editor.cc:1460 editor.cc:1477 redirect_box.cc:1069
+#: editor.cc:1453 editor.cc:1470 redirect_box.cc:1071
 msgid "Activate"
 msgstr "Активировать"
 
-#: editor.cc:1465 editor.cc:1482
+#: editor.cc:1458 editor.cc:1475
 #, fuzzy
 msgid "Linear"
 msgstr "линейное"
 
-#: editor.cc:1466 editor.cc:1483 editor_actions.cc:375
+#: editor.cc:1459 editor.cc:1476 editor_actions.cc:376
 #, fuzzy
 msgid "Slowest"
 msgstr "Меньше"
 
-#: editor.cc:1467 editor.cc:1484 editor_actions.cc:376
+#: editor.cc:1460 editor.cc:1477 editor_actions.cc:377
 #, fuzzy
 msgid "Slow"
 msgstr "Соло"
 
-#: editor.cc:1468 editor.cc:1485 editor_actions.cc:378
+#: editor.cc:1461 editor.cc:1478 editor_actions.cc:379
 #, fuzzy
 msgid "Fast"
 msgstr "Затухание"
 
-#: editor.cc:1469 editor.cc:1486 editor_actions.cc:380
+#: editor.cc:1462 editor.cc:1479 editor_actions.cc:381
 #, fuzzy
 msgid "Fastest"
 msgstr "быстрое"
 
-#: editor.cc:1596 editor.cc:1604
+#: editor.cc:1589 editor.cc:1597
 msgid "Freeze"
 msgstr "Заморозить"
 
-#: editor.cc:1600
+#: editor.cc:1593
 msgid "Unfreeze"
 msgstr "Разморозить"
 
-#: editor.cc:1769 editor.cc:1864
+#: editor.cc:1762 editor.cc:1857
 #, fuzzy
 msgid "Unmute"
 msgstr "тихо"
 
 #. non-operative menu items for menu bar
 #. show editors
-#: editor.cc:1773 editor.cc:2053 editor.cc:2755 editor_actions.cc:26
-#: editor_markers.cc:506 mixer_strip.cc:512 mixer_strip.cc:572
-#: redirect_box.cc:1077
+#: editor.cc:1766 editor.cc:2046 editor.cc:2748 editor_actions.cc:27
+#: editor_markers.cc:507 mixer_strip.cc:495 mixer_strip.cc:563
+#: redirect_box.cc:1079
 msgid "Edit"
 msgstr "Правка"
 
-#: editor.cc:1778
+#: editor.cc:1771
 msgid "Convert to short"
 msgstr ""
 
-#: editor.cc:1780
+#: editor.cc:1773
 msgid "Convert to full"
 msgstr ""
 
-#: editor.cc:1791
+#: editor.cc:1784
 #, fuzzy
 msgid "Crossfade"
 msgstr "Кроссфейд"
 
-#: editor.cc:1834
+#: editor.cc:1827
 msgid "Popup region editor"
 msgstr "Открыть редактор области"
 
-#: editor.cc:1835
+#: editor.cc:1828
 #, fuzzy
 msgid "Raise to top layer"
 msgstr "Поднять область в верхний слой"
 
-#: editor.cc:1836
+#: editor.cc:1829
 #, fuzzy
 msgid "Lower to bottom layer"
 msgstr "Опустить область в нижний слой"
 
-#: editor.cc:1838
+#: editor.cc:1831
 msgid "Define sync point"
 msgstr ""
 
-#: editor.cc:1839
+#: editor.cc:1832
 msgid "Remove sync point"
 msgstr ""
 
-#: editor.cc:1844
+#: editor.cc:1837
 #, fuzzy
 msgid "Bounce"
 msgstr "Свести выделенное"
 
-#: editor.cc:1847
+#: editor.cc:1840
 #, fuzzy
 msgid "Analyze region"
 msgstr "Воспроизвести область"
 
-#: editor.cc:1859
+#: editor.cc:1852
 msgid "Lock"
 msgstr ""
 
-#: editor.cc:1860
+#: editor.cc:1853
 msgid "Unlock"
 msgstr ""
 
-#: editor.cc:1870
+#: editor.cc:1863
 msgid "Original position"
 msgstr ""
 
-#: editor.cc:1876
+#: editor.cc:1869
 msgid "Toggle envelope visibility"
 msgstr ""
 
-#: editor.cc:1877
+#: editor.cc:1870
 msgid "Toggle envelope active"
 msgstr ""
 
-#: editor.cc:1881
+#: editor.cc:1874
 #, fuzzy
 msgid "DeNormalize"
 msgstr "Норм."
 
-#: editor.cc:1883
+#: editor.cc:1876
 msgid "Normalize"
 msgstr ""
 
-#: editor.cc:1886
+#: editor.cc:1879
 msgid "Reverse"
 msgstr ""
 
 #. range related stuff
-#: editor.cc:1892
+#: editor.cc:1885
 #, fuzzy
 msgid "Add Range Markers"
 msgstr "Маркеры интервалов"
 
-#: editor.cc:1893
+#: editor.cc:1886
 #, fuzzy
 msgid "Set Range"
 msgstr "Разделить область"
 
-#: editor.cc:1902
+#: editor.cc:1895
 msgid "Nudge fwd"
 msgstr ""
 
-#: editor.cc:1903
+#: editor.cc:1896
 msgid "Nudge bwd"
 msgstr ""
 
-#: editor.cc:1904
+#: editor.cc:1897
 msgid "Nudge fwd by capture offset"
 msgstr ""
 
-#: editor.cc:1905
+#: editor.cc:1898
 msgid "Nudge bwd by capture offset"
 msgstr ""
 
-#: editor.cc:1914
+#: editor.cc:1907
 msgid "Start to edit cursor"
 msgstr "От начала до курсора"
 
-#: editor.cc:1915
+#: editor.cc:1908
 msgid "Edit cursor to end"
 msgstr "От курсора до конца"
 
-#: editor.cc:1917
+#: editor.cc:1910 gain_meter.cc:181 gain_meter.cc:813 panner_ui.cc:98
+#: panner_ui.cc:803
 msgid "Trim"
 msgstr ""
 
-#: editor.cc:1920
+#: editor.cc:1913
 msgid "Split"
 msgstr "Склеить"
 
-#: editor.cc:1923
+#: editor.cc:1916
 msgid "Make mono regions"
 msgstr "Создать моно-области"
 
-#: editor.cc:1926
+#: editor.cc:1919
 msgid "Duplicate"
 msgstr "Размножить"
 
-#: editor.cc:1927
+#: editor.cc:1920
 msgid "Fill Track"
 msgstr "Заполнить трек"
 
-#: editor.cc:1931
+#: editor.cc:1924
 msgid "Destroy"
 msgstr ""
 
-#: editor.cc:1961
+#: editor.cc:1954
 #, fuzzy
 msgid "Play range"
 msgstr "Воспроизвести \"кольцо\""
 
-#: editor.cc:1962
+#: editor.cc:1955
 msgid "Loop range"
 msgstr ""
 
-#: editor.cc:1966
+#: editor.cc:1959
 #, fuzzy
 msgid "Analyze range"
 msgstr "Воспроизвести \"кольцо\""
 
-#: editor.cc:1970
+#: editor.cc:1963
 #, fuzzy
 msgid "Separate range to track"
 msgstr "Разделить область"
 
-#: editor.cc:1971
+#: editor.cc:1964
 #, fuzzy
 msgid "Separate range to region list"
 msgstr "Воспроизвести выделенную область"
 
-#: editor.cc:1974
+#: editor.cc:1967
 #, fuzzy
 msgid "Select all in range"
 msgstr "Выделить всё"
 
-#: editor.cc:1976 editor.cc:2021
+#: editor.cc:1969 editor.cc:2014
 #, fuzzy
 msgid "Set range to loop range"
 msgstr "выбрать окно просмотра"
 
-#: editor.cc:1977 editor.cc:2022
+#: editor.cc:1970 editor.cc:2015
 #, fuzzy
 msgid "Set range to punch range"
 msgstr "Выбрать текущий интервал"
 
-#: editor.cc:1979
+#: editor.cc:1972
 #, fuzzy
 msgid "Crop region to range"
 msgstr "Обрезать область по выделенному"
 
-#: editor.cc:1980
+#: editor.cc:1973
 #, fuzzy
 msgid "Fill range with region"
 msgstr "Создать область"
 
-#: editor.cc:1981
+#: editor.cc:1974
 #, fuzzy
 msgid "Duplicate range"
 msgstr "Размножить"
 
-#: editor.cc:1982
+#: editor.cc:1975
 #, fuzzy
 msgid "Create chunk from range"
 msgstr "Создать фрагмент из выделенного"
 
-#: editor.cc:1984
+#: editor.cc:1977
 msgid "Bounce range"
 msgstr ""
 
-#: editor.cc:1985
+#: editor.cc:1978
 #, fuzzy
 msgid "Export range"
 msgstr "Экспорт области"
 
-#: editor.cc:1987
+#: editor.cc:1980
 #, fuzzy
 msgid "Range"
 msgstr "выделять"
 
-#: editor.cc:2002 editor.cc:2087
+#: editor.cc:1995 editor.cc:2080
 #, fuzzy
 msgid "Play from edit cursor"
 msgstr "Воспроизвести от курсора"
 
-#: editor.cc:2003 editor.cc:2088
+#: editor.cc:1996 editor.cc:2081
 msgid "Play from start"
 msgstr "Воспроизвести с начала"
 
-#: editor.cc:2004
+#: editor.cc:1997
 #, fuzzy
 msgid "Play region"
 msgstr "Воспроизвести область"
 
-#: editor.cc:2006
+#: editor.cc:1999
 msgid "Loop Region"
 msgstr "\"Закольцевать\" область"
 
-#: editor.cc:2008 editor.cc:2089 sfdb_ui.cc:56
-msgid "Play"
-msgstr "Воспроизвести"
-
-#: editor.cc:2016 editor.cc:2097
+#: editor.cc:2009 editor.cc:2090
 #, fuzzy
 msgid "Select All in track"
 msgstr "Выделить всё"
 
-#: editor.cc:2017 editor.cc:2098 redirect_box.cc:1065
+#: editor.cc:2010 editor.cc:2091 redirect_box.cc:1067
 #, fuzzy
 msgid "Select All"
 msgstr "Выделить всё"
 
-#: editor.cc:2018 editor.cc:2099
+#: editor.cc:2011 editor.cc:2092
 #, fuzzy
 msgid "Invert selection in track"
 msgstr "Скрыть трек"
 
-#: editor.cc:2019 editor.cc:2100
+#: editor.cc:2012 editor.cc:2093
 #, fuzzy
 msgid "Invert selection"
 msgstr "Свести выделенное"
 
-#: editor.cc:2024 editor.cc:2102
+#: editor.cc:2017 editor.cc:2095
 #, fuzzy
 msgid "Select all after edit cursor"
 msgstr "От начала до курсора"
 
-#: editor.cc:2025 editor.cc:2103
+#: editor.cc:2018 editor.cc:2096
 #, fuzzy
 msgid "Select all before edit cursor"
 msgstr "От начала до курсора"
 
-#: editor.cc:2026 editor.cc:2104
+#: editor.cc:2019 editor.cc:2097
 #, fuzzy
 msgid "Select all after playhead"
 msgstr "Воспроизвести от указателя"
 
-#: editor.cc:2027 editor.cc:2105
+#: editor.cc:2020 editor.cc:2098
 #, fuzzy
 msgid "Select all before playhead"
 msgstr "Воспроизвести от указателя"
 
-#: editor.cc:2028
+#: editor.cc:2021
 #, fuzzy
 msgid "Select all between cursors"
 msgstr "От начала до курсора"
 
 #. standard editing stuff
-#: editor.cc:2039 editor.cc:2115 editor.cc:3455 editor_actions.cc:213
-#: redirect_box.cc:1058
+#: editor.cc:2032 editor.cc:2108 editor.cc:3483 editor_actions.cc:214
+#: redirect_box.cc:1060
 msgid "Cut"
 msgstr "Вырезать"
 
-#: editor.cc:2040 editor.cc:2116 editor.cc:3457 editor_actions.cc:218
-#: redirect_box.cc:1060
+#: editor.cc:2033 editor.cc:2109 editor.cc:3485 editor_actions.cc:219
+#: redirect_box.cc:1062
 msgid "Copy"
 msgstr "Копировать"
 
-#: editor.cc:2041
+#: editor.cc:2034
 #, fuzzy
 msgid "Paste at edit cursor"
 msgstr "От начала до курсора"
 
-#: editor.cc:2042
+#: editor.cc:2035
 #, fuzzy
 msgid "Paste at mouse"
 msgstr "использовать мастер-выходы"
 
-#: editor.cc:2046 editor.cc:3462
+#: editor.cc:2039 editor.cc:3490
 msgid "Align"
 msgstr "Выровнять"
 
-#: editor.cc:2047 editor.cc:3464
+#: editor.cc:2040 editor.cc:3492
 msgid "Align Relative"
 msgstr "Выровнять относительно"
 
-#: editor.cc:2051
+#: editor.cc:2044
 msgid "Insert chunk"
 msgstr "Вставить фрагмент"
 
-#: editor.cc:2058
+#: editor.cc:2051
 #, fuzzy
 msgid "Insert Selected Region"
 msgstr "Воспроизвести выделенную область"
 
-#: editor.cc:2059
+#: editor.cc:2052
 msgid "Insert Existing Audio"
 msgstr ""
 
-#: editor.cc:2068 editor.cc:2124
+#: editor.cc:2061 editor.cc:2117
 msgid "Nudge entire track fwd"
 msgstr ""
 
-#: editor.cc:2069 editor.cc:2125
+#: editor.cc:2062 editor.cc:2118
 msgid "Nudge track after edit cursor fwd"
 msgstr ""
 
-#: editor.cc:2070 editor.cc:2126
+#: editor.cc:2063 editor.cc:2119
 msgid "Nudge entire track bwd"
 msgstr ""
 
-#: editor.cc:2071 editor.cc:2127
+#: editor.cc:2064 editor.cc:2120
 msgid "Nudge track after edit cursor bwd"
 msgstr ""
 
-#: editor.cc:2117 editor.cc:3459 editor_actions.cc:220 redirect_box.cc:1062
+#: editor.cc:2110 editor.cc:3487 editor_actions.cc:221 redirect_box.cc:1064
 msgid "Paste"
 msgstr "Вставить"
 
-#: editor.cc:2637
+#: editor.cc:2630
 msgid "select/move objects"
 msgstr "выбирать/двигать объекты"
 
-#: editor.cc:2638
+#: editor.cc:2631
 msgid "select/move ranges"
 msgstr "выбирать/двигать диапазоны"
 
-#: editor.cc:2639
+#: editor.cc:2632
 msgid "draw gain automation"
 msgstr ""
 
-#: editor.cc:2640
+#: editor.cc:2633
 msgid "select zoom range"
 msgstr "выбрать окно просмотра"
 
-#: editor.cc:2641
+#: editor.cc:2634
 msgid "stretch/shrink regions"
 msgstr "растянуть/сжать области"
 
-#: editor.cc:2642
+#: editor.cc:2635
 #, fuzzy
 msgid "listen to specific regions"
 msgstr "Воспроизвести выделенную область"
 
-#: editor.cc:2753
+#: editor.cc:2746
 msgid "Start:"
 msgstr "Начало:"
 
-#: editor.cc:2754
+#: editor.cc:2747
 msgid "End:"
 msgstr "Конец:"
 
-#: editor.cc:3097
-#, fuzzy
-msgid "set selected trackview"
-msgstr "Вставить выбранное"
-
-#: editor.cc:3137
-#, fuzzy
-msgid "set selected control point"
-msgstr "использовать контрольные выходы"
-
-#: editor.cc:3246
-#, fuzzy
-msgid "set selected regionview"
-msgstr "Воспроизвести выделенную область"
-
-#: editor.cc:3334 editor.cc:3374
+#: editor.cc:3362 editor.cc:3402
 #, fuzzy
 msgid "set selected regions"
 msgstr "Воспроизвести выделенную область"
 
-#: editor.cc:3430 editor_actions.cc:203
+#: editor.cc:3458 editor_actions.cc:204
 msgid "Undo"
 msgstr "Отменить"
 
-#: editor.cc:3432
+#: editor.cc:3460
 msgid "Undo (%1)"
 msgstr "Отменить (%1)"
 
-#: editor.cc:3442 editor_actions.cc:205
+#: editor.cc:3470 editor_actions.cc:206
 msgid "Redo"
 msgstr "Вернуть"
 
-#: editor.cc:3444
+#: editor.cc:3472
 msgid "Redo (%1)"
 msgstr "Вернуть (%1)"
 
-#: editor.cc:3478
+#: editor.cc:3506
 msgid "... as new track"
 msgstr ""
 
-#: editor.cc:3479
+#: editor.cc:3507
 #, fuzzy
 msgid "... as new region"
 msgstr "прослушать область"
 
-#: editor.cc:3481
+#: editor.cc:3509
 msgid "Import audio (copy)"
 msgstr "Импортировать аудио (копировать)"
 
-#: editor.cc:3484
+#: editor.cc:3512
 msgid "Remove last capture"
 msgstr "Удалить последнюю запись"
 
-#: editor.cc:3508
+#: editor.cc:3536
 msgid "Duplicate how many times?"
 msgstr "Количество повторов?"
 
-#: editor.cc:3994
+#: editor.cc:4022
 msgid ""
 "Playlist %1 is currently unused.\n"
 "If left alone, no audio files used by it will be cleaned.\n"
 "If deleted, audio files used by it alone by will cleaned."
 msgstr ""
 
-#: editor.cc:4002
+#: editor.cc:4030
 #, fuzzy
 msgid "Delete playlist"
 msgstr "Имя снимка"
 
-#: editor.cc:4003
+#: editor.cc:4031
 #, fuzzy
 msgid "Keep playlist"
 msgstr "Имя снимка"
 
-#: editor.cc:4004 editor_audio_import.cc:237 editor_ops.cc:1976
-#: editor_timefx.cc:52 export_dialog.cc:971 io_selector.cc:58
-#: io_selector.cc:792 redirect_box.cc:901 tempo_dialog.cc:19
-#: tempo_dialog.cc:36 tempo_dialog.cc:152 tempo_dialog.cc:170
+#: editor.cc:4032 editor_audio_import.cc:236 editor_ops.cc:2048
+#: editor_timefx.cc:71 export_dialog.cc:971 io_selector.cc:59
+#: io_selector.cc:793 redirect_box.cc:903 tempo_dialog.cc:20
+#: tempo_dialog.cc:37 tempo_dialog.cc:202 tempo_dialog.cc:220
 msgid "Cancel"
 msgstr "Отмена"
 
-#: editor.cc:4171
+#: editor.cc:4199
 #, fuzzy
 msgid "new playlists"
 msgstr "Имя снимка"
 
-#: editor.cc:4179
+#: editor.cc:4207
 #, fuzzy
 msgid "copy playlists"
 msgstr "Имя снимка"
 
-#: editor.cc:4187
+#: editor.cc:4215
 #, fuzzy
 msgid "clear playlists"
 msgstr "Имя снимка"
 
-#: editor_actions.cc:27
+#: editor_actions.cc:28
 #, fuzzy
 msgid "Select regions"
 msgstr "Воспроизвести выделенную область"
 
-#: editor_actions.cc:28
+#: editor_actions.cc:29
 #, fuzzy
 msgid "Select range operations"
 msgstr "Воспроизвести выделенную область"
 
-#: editor_actions.cc:29
+#: editor_actions.cc:30
 #, fuzzy
 msgid "Move edit cursor"
 msgstr "От начала до курсора"
 
-#: editor_actions.cc:30
+#: editor_actions.cc:31
 #, fuzzy
 msgid "Region operations"
 msgstr "Области/создание"
 
-#: editor_actions.cc:31
+#: editor_actions.cc:32
 msgid "Tools"
 msgstr ""
 
-#: editor_actions.cc:32
+#: editor_actions.cc:33
 msgid "View"
 msgstr ""
 
-#: editor_actions.cc:33
+#: editor_actions.cc:34
 #, fuzzy
 msgid "ZoomFocus"
 msgstr "Масштабировать к"
 
-#: editor_actions.cc:34
+#: editor_actions.cc:35
 #, fuzzy
 msgid "Meter hold"
 msgstr "Размер"
 
-#: editor_actions.cc:35
+#: editor_actions.cc:36
 msgid "Meter falloff"
 msgstr ""
 
-#: editor_actions.cc:37
+#: editor_actions.cc:38
 #, fuzzy
 msgid "Crossfades"
 msgstr "Кроссфейд"
 
-#: editor_actions.cc:38
+#: editor_actions.cc:39
 #, fuzzy
 msgid "Monitoring"
 msgstr "Аппаратный контроль"
 
-#: editor_actions.cc:39
+#: editor_actions.cc:40
 #, fuzzy
 msgid "Autoconnect"
 msgstr "Соединить"
 
-#: editor_actions.cc:40
+#: editor_actions.cc:41
 #, fuzzy
 msgid "Layering"
 msgstr "Слой"
 
-#: editor_actions.cc:41
+#: editor_actions.cc:42
 #, fuzzy
 msgid "Metering"
 msgstr "Размер"
 
-#: editor_actions.cc:42
+#: editor_actions.cc:43
 msgid "Fall off rate"
 msgstr ""
 
-#: editor_actions.cc:43
+#: editor_actions.cc:44
 msgid "Hold Time"
 msgstr ""
 
-#: editor_actions.cc:44
+#: editor_actions.cc:45
 msgid "Add Existing Audio"
 msgstr ""
 
 #. add named actions for the editor
-#: editor_actions.cc:49
+#: editor_actions.cc:50
 #, fuzzy
 msgid "Show Editor Mixer"
 msgstr "Показать все каналы аудиотреков"
 
-#: editor_actions.cc:54
+#: editor_actions.cc:55
 #, fuzzy
 msgid "Span Entire Overlap"
 msgstr "Поднять область на один слой"
 
-#: editor_actions.cc:56 editor_actions.cc:383
+#: editor_actions.cc:57 editor_actions.cc:384
 #, fuzzy
 msgid "Short"
 msgstr "порт"
 
-#: editor_actions.cc:63
+#: editor_actions.cc:64
 msgid "Created Automatically"
 msgstr ""
 
-#: editor_actions.cc:66
+#: editor_actions.cc:67
 msgid "Playhead to Next Region Start"
 msgstr ""
 
-#: editor_actions.cc:68
+#: editor_actions.cc:69
 msgid "Playhead to Next Region End"
 msgstr ""
 
-#: editor_actions.cc:70
+#: editor_actions.cc:71
 msgid "Playhead to Next Region Sync"
 msgstr ""
 
-#: editor_actions.cc:73
+#: editor_actions.cc:74
 msgid "Playhead to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:75
+#: editor_actions.cc:76
 msgid "Playhead to Previous Region End"
 msgstr ""
 
-#: editor_actions.cc:77
+#: editor_actions.cc:78
 msgid "Playhead to Previous Region Sync"
 msgstr ""
 
-#: editor_actions.cc:80
+#: editor_actions.cc:81
 #, fuzzy
 msgid "Edit Cursor to Next Region Start"
 msgstr "От курсора до конца"
 
-#: editor_actions.cc:82
+#: editor_actions.cc:83
 #, fuzzy
 msgid "Edit Cursor to Next Region End"
 msgstr "От курсора до конца"
 
-#: editor_actions.cc:84
+#: editor_actions.cc:85
 #, fuzzy
 msgid "Edit Cursor to Next Region Sync"
 msgstr "От курсора до конца"
 
-#: editor_actions.cc:87
+#: editor_actions.cc:88
 msgid "Edit Cursor to Previous Region Start"
 msgstr ""
 
-#: editor_actions.cc:89
+#: editor_actions.cc:90
 #, fuzzy
 msgid "Edit Cursor to Previous Region End"
 msgstr "От курсора до конца"
 
-#: editor_actions.cc:91
+#: editor_actions.cc:92
 #, fuzzy
 msgid "Edit Cursor to Previous Region Sync"
 msgstr "От курсора до конца"
 
-#: editor_actions.cc:94
+#: editor_actions.cc:95
 msgid "Playhead to Range Start"
 msgstr ""
 
-#: editor_actions.cc:96
+#: editor_actions.cc:97
 #, fuzzy
 msgid "Playhead to Range End"
 msgstr "Воспроизвести \"кольцо\""
 
-#: editor_actions.cc:99
+#: editor_actions.cc:100
 #, fuzzy
 msgid "Edit Cursor to Range Start"
 msgstr "От курсора до конца"
 
-#: editor_actions.cc:101
+#: editor_actions.cc:102
 #, fuzzy
 msgid "Edit Cursor to Range End"
 msgstr "От курсора до конца"
 
-#: editor_actions.cc:104 editor_ops.cc:1300
+#: editor_actions.cc:105 editor_ops.cc:1363
 #, fuzzy
 msgid "select all"
 msgstr "Выделить всё"
 
-#: editor_actions.cc:106
+#: editor_actions.cc:107
 #, fuzzy
 msgid "Select All After Edit Cursor"
 msgstr "Воспроизвести от курсора"
 
-#: editor_actions.cc:108
+#: editor_actions.cc:109
 msgid "Select All Before Edit Cursor"
 msgstr ""
 
-#: editor_actions.cc:111
+#: editor_actions.cc:112
 #, fuzzy
 msgid "Select All After Playhead"
 msgstr "Воспроизвести от указателя"
 
-#: editor_actions.cc:113
+#: editor_actions.cc:114
 #, fuzzy
 msgid "Select All Before Playhead"
 msgstr "Воспроизвести от указателя"
 
-#: editor_actions.cc:115
+#: editor_actions.cc:116
 #, fuzzy
 msgid "Select All Between Cursors"
 msgstr "Воспроизвести от курсора"
 
-#: editor_actions.cc:118
+#: editor_actions.cc:119
 #, fuzzy
 msgid "Select All in Punch Range"
 msgstr "Выбрать текущий интервал"
 
-#: editor_actions.cc:120
+#: editor_actions.cc:121
 #, fuzzy
 msgid "Select All in Loop Range"
 msgstr "выбрать окно просмотра"
 
-#: editor_actions.cc:123
+#: editor_actions.cc:124
 msgid "Jump Forward to Mark"
 msgstr ""
 
-#: editor_actions.cc:125
+#: editor_actions.cc:126
 msgid "Jump Backward to Mark"
 msgstr ""
 
-#: editor_actions.cc:127
+#: editor_actions.cc:128
 #, fuzzy
 msgid "Add Location from Playhead"
 msgstr "Воспроизвести от указателя"
 
-#: editor_actions.cc:130
+#: editor_actions.cc:131
 msgid "Nudge Forward"
 msgstr ""
 
-#: editor_actions.cc:132
+#: editor_actions.cc:133
 msgid "Nudge Next Forward"
 msgstr ""
 
-#: editor_actions.cc:134
+#: editor_actions.cc:135
 #, fuzzy
 msgid "Nudge Backward"
 msgstr "Скрыть трек"
 
-#: editor_actions.cc:136
+#: editor_actions.cc:137
 #, fuzzy
 msgid "Nudge Next Backward"
 msgstr "Скрыть трек"
 
-#: editor_actions.cc:139
+#: editor_actions.cc:140
 #, fuzzy
 msgid "Zoom Out"
 msgstr "Уменьшить"
 
-#: editor_actions.cc:141
+#: editor_actions.cc:142
 #, fuzzy
 msgid "Zoom In"
 msgstr "Увеличить"
 
-#: editor_actions.cc:143
+#: editor_actions.cc:144
 #, fuzzy
 msgid "Zoom to Session"
 msgstr "Показать всё"
 
-#: editor_actions.cc:146
+#: editor_actions.cc:147
 #, fuzzy
 msgid "Scroll Tracks Up"
 msgstr "Заполнить трек"
 
-#: editor_actions.cc:148
+#: editor_actions.cc:149
 msgid "Scroll Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:150
+#: editor_actions.cc:151
 #, fuzzy
 msgid "Step Tracks Up"
 msgstr "Скрыть трек"
 
-#: editor_actions.cc:152
+#: editor_actions.cc:153
 msgid "Step Tracks Down"
 msgstr ""
 
-#: editor_actions.cc:155
+#: editor_actions.cc:156
 msgid "Scroll Backward"
 msgstr ""
 
-#: editor_actions.cc:157
+#: editor_actions.cc:158
 msgid "Scroll Forward"
 msgstr ""
 
-#: editor_actions.cc:159
+#: editor_actions.cc:160
 msgid "goto"
 msgstr ""
 
-#: editor_actions.cc:161
+#: editor_actions.cc:162
 #, fuzzy
 msgid "Center Playhead"
 msgstr "указателю"
 
-#: editor_actions.cc:163
+#: editor_actions.cc:164
 #, fuzzy
 msgid "Center Edit Cursor"
 msgstr "курсору"
 
-#: editor_actions.cc:165
+#: editor_actions.cc:166
 #, fuzzy
 msgid "Playhead Forward"
 msgstr "указателю"
 
-#: editor_actions.cc:167
+#: editor_actions.cc:168
 #, fuzzy
 msgid "Playhead Backward"
 msgstr "указателю"
 
-#: editor_actions.cc:169
+#: editor_actions.cc:170
 #, fuzzy
 msgid "Playhead to Edit"
 msgstr "указателю"
 
-#: editor_actions.cc:171
+#: editor_actions.cc:172
 #, fuzzy
 msgid "Edit to Playhead"
 msgstr "Воспроизвести от указателя"
 
-#: editor_actions.cc:174
+#: editor_actions.cc:175
 #, fuzzy
 msgid "Align Regions Start"
 msgstr "нач. областей"
 
-#: editor_actions.cc:176
+#: editor_actions.cc:177
 #, fuzzy
 msgid "Align Regions Start Relative"
 msgstr "Выровнять относительно"
 
-#: editor_actions.cc:178
+#: editor_actions.cc:179
 #, fuzzy
 msgid "Align Regions End"
 msgstr "прослушать область"
 
-#: editor_actions.cc:180
+#: editor_actions.cc:181
 #, fuzzy
 msgid "Align Regions End Relative"
 msgstr "Выровнять относительно"
 
-#: editor_actions.cc:183
+#: editor_actions.cc:184
 #, fuzzy
 msgid "Align Regions Sync"
 msgstr "прослушать область"
 
-#: editor_actions.cc:185
+#: editor_actions.cc:186
 #, fuzzy
 msgid "Align Regions Sync Relative"
 msgstr "Выровнять относительно"
 
-#: editor_actions.cc:188
+#: editor_actions.cc:189
 #, fuzzy
 msgid "Audition at Mouse"
 msgstr "Аудит"
 
-#: editor_actions.cc:190
+#: editor_actions.cc:191
 #, fuzzy
 msgid "Brush at Mouse"
 msgstr "использовать мастер-выходы"
 
-#: editor_actions.cc:192
+#: editor_actions.cc:193
 #, fuzzy
 msgid "Set Edit Cursor"
 msgstr "курсору"
 
-#: editor_actions.cc:194
+#: editor_actions.cc:195
 #, fuzzy
 msgid "Mute/Unmute Region"
 msgstr "Создать область"
 
-#: editor_actions.cc:196
+#: editor_actions.cc:197
 #, fuzzy
 msgid "Set Playhead"
 msgstr "указателю"
 
-#: editor_actions.cc:198
+#: editor_actions.cc:199
 #, fuzzy
 msgid "Split Region"
 msgstr "Разделить область"
 
-#: editor_actions.cc:200
+#: editor_actions.cc:201
 #, fuzzy
 msgid "Set Region Sync Position"
 msgstr "по расположению области"
 
-#: editor_actions.cc:208
+#: editor_actions.cc:209
 #, fuzzy
 msgid "Export Session"
 msgstr "Экспорт области"
 
-#: editor_actions.cc:210
+#: editor_actions.cc:211
 #, fuzzy
 msgid "Export Range"
 msgstr "Разделить область"
 
 #. Note: for now, editor-delete does the exact same thing as editor-cut
-#: editor_actions.cc:216
+#: editor_actions.cc:217
 #, fuzzy
 msgid "Delete"
 msgstr "удалить"
 
-#: editor_actions.cc:222
+#: editor_actions.cc:223
 #, fuzzy
 msgid "Duplicate Region"
 msgstr "Разделить область"
 
-#: editor_actions.cc:224
+#: editor_actions.cc:225
 #, fuzzy
 msgid "Duplicate Range"
 msgstr "Размножить"
 
-#: editor_actions.cc:226
+#: editor_actions.cc:227
 msgid "Insert Region"
 msgstr "Вставить область"
 
-#: editor_actions.cc:228
+#: editor_actions.cc:229
 #, fuzzy
 msgid "Reverse Region"
 msgstr "Разделить область"
 
-#: editor_actions.cc:230
+#: editor_actions.cc:231
 #, fuzzy
 msgid "Normalize Region"
 msgstr "Создать область"
 
-#: editor_actions.cc:232
+#: editor_actions.cc:233
 #, fuzzy
 msgid "crop"
 msgstr "копировать"
 
-#: editor_actions.cc:234
+#: editor_actions.cc:235
 #, fuzzy
 msgid "Insert Chunk"
 msgstr "Вставить фрагмент"
 
-#: editor_actions.cc:237
+#: editor_actions.cc:238
 #, fuzzy
 msgid "Split at edit cursor"
 msgstr "От начала до курсора"
 
-#: editor_actions.cc:240
+#: editor_actions.cc:241
 #, fuzzy
 msgid "Start Range"
 msgstr "Разделить область"
 
-#: editor_actions.cc:242
+#: editor_actions.cc:243
 msgid "Finish Range"
 msgstr ""
 
-#: editor_actions.cc:244
+#: editor_actions.cc:245
 msgid "Finish add Range"
 msgstr ""
 
-#: editor_actions.cc:247
+#: editor_actions.cc:248
 msgid "Extend Range to End of Region"
 msgstr ""
 
-#: editor_actions.cc:249
+#: editor_actions.cc:250
 #, fuzzy
 msgid "Extend Range to Start of Region"
 msgstr "В начало сессии"
 
-#: editor_actions.cc:252
+#: editor_actions.cc:253
 #, fuzzy
 msgid "Follow Playhead"
 msgstr "Следовать за указателем"
 
-#: editor_actions.cc:260
+#: editor_actions.cc:261
 #, fuzzy
 msgid "Zoom Focus Left"
 msgstr "Масштабировать к"
 
-#: editor_actions.cc:262
+#: editor_actions.cc:263
 #, fuzzy
 msgid "Zoom Focus Right"
 msgstr "Масштабировать к"
 
-#: editor_actions.cc:264
+#: editor_actions.cc:265
 #, fuzzy
 msgid "Zoom Focus Center"
 msgstr "Масштабировать к"
 
-#: editor_actions.cc:266
+#: editor_actions.cc:267
 #, fuzzy
 msgid "Zoom Focus Playhead"
 msgstr "Масштабировать к"
 
-#: editor_actions.cc:268
+#: editor_actions.cc:269
 #, fuzzy
 msgid "Zoom Focus Edit"
 msgstr "Масштабировать к"
 
-#: editor_actions.cc:274
+#: editor_actions.cc:275
 msgid "Object Tool"
 msgstr ""
 
-#: editor_actions.cc:275
+#: editor_actions.cc:276
 #, fuzzy
 msgid "Range Tool"
 msgstr "выделять"
 
-#: editor_actions.cc:276
+#: editor_actions.cc:277
 msgid "Gain Tool"
 msgstr ""
 
-#: editor_actions.cc:277
+#: editor_actions.cc:278
 #, fuzzy
 msgid "Zoom Tool"
 msgstr "Уменьшить"
 
-#: editor_actions.cc:278
+#: editor_actions.cc:279
 msgid "Timefx Tool"
 msgstr ""
 
-#: editor_actions.cc:285
+#: editor_actions.cc:286
 #, fuzzy
 msgid "Snap to frame"
 msgstr "Привязка к"
 
-#: editor_actions.cc:286
+#: editor_actions.cc:287
 #, fuzzy
 msgid "Snap to cd frame"
 msgstr "Привязка к"
 
-#: editor_actions.cc:287
+#: editor_actions.cc:288
 #, fuzzy
 msgid "Snap to SMPTE frame"
 msgstr "SMPTE Кадры/Секунды"
 
-#: editor_actions.cc:288
+#: editor_actions.cc:289
 #, fuzzy
 msgid "Snap to SMPTE seconds"
 msgstr "SMPTE Кадры/Секунды"
 
-#: editor_actions.cc:289
+#: editor_actions.cc:290
 msgid "Snap to SMPTE minutes"
 msgstr ""
 
-#: editor_actions.cc:290
+#: editor_actions.cc:291
 #, fuzzy
 msgid "Snap to seconds"
 msgstr "Минуты:Секунды"
 
-#: editor_actions.cc:291
+#: editor_actions.cc:292
 msgid "Snap to minutes"
 msgstr ""
 
-#: editor_actions.cc:292
+#: editor_actions.cc:293
 #, fuzzy
 msgid "Snap to thirtyseconds"
 msgstr "тридцать-вторых (32)"
 
-#: editor_actions.cc:293
+#: editor_actions.cc:294
 msgid "Snap to asixteenthbeat"
 msgstr ""
 
-#: editor_actions.cc:294
+#: editor_actions.cc:295
 msgid "Snap to eighths"
 msgstr ""
 
-#: editor_actions.cc:295
+#: editor_actions.cc:296
 msgid "Snap to quarters"
 msgstr ""
 
-#: editor_actions.cc:296
+#: editor_actions.cc:297
 #, fuzzy
 msgid "Snap to thirds"
 msgstr "Привязка к"
 
-#: editor_actions.cc:297
+#: editor_actions.cc:298
 #, fuzzy
 msgid "Snap to beat"
 msgstr "Привязка к"
 
-#: editor_actions.cc:298
+#: editor_actions.cc:299
 #, fuzzy
 msgid "Snap to bar"
 msgstr "Привязка к"
 
-#: editor_actions.cc:299
+#: editor_actions.cc:300
 #, fuzzy
 msgid "Snap to mark"
 msgstr "добавить маркер"
 
-#: editor_actions.cc:300
+#: editor_actions.cc:301
 #, fuzzy
 msgid "Snap to edit cursor"
 msgstr "От начала до курсора"
 
-#: editor_actions.cc:301
+#: editor_actions.cc:302
 #, fuzzy
 msgid "Snap to region start"
 msgstr "нач. областей"
 
-#: editor_actions.cc:302
+#: editor_actions.cc:303
 #, fuzzy
 msgid "Snap to region end"
 msgstr "оконч. областей"
 
-#: editor_actions.cc:303
+#: editor_actions.cc:304
 #, fuzzy
 msgid "Snap to region sync"
 msgstr "Создать моно-области"
 
-#: editor_actions.cc:304
+#: editor_actions.cc:305
 msgid "Snap to region boundary"
 msgstr ""
 
 #. the region list popup menu
-#: editor_actions.cc:313
+#: editor_actions.cc:314
 #, fuzzy
 msgid "Sort"
 msgstr "порт"
 
-#: editor_actions.cc:321
+#: editor_actions.cc:322
 msgid "Show all"
 msgstr "Показать всё"
 
-#: editor_actions.cc:322
+#: editor_actions.cc:323
 #, fuzzy
 msgid "Show automatic regions"
 msgstr "автомат"
 
-#: editor_actions.cc:324
+#: editor_actions.cc:325
 msgid "Ascending"
 msgstr "по возрастанию"
 
-#: editor_actions.cc:326
+#: editor_actions.cc:327
 msgid "Descending"
 msgstr "по убыванию"
 
-#: editor_actions.cc:329
+#: editor_actions.cc:330
 msgid "By Region Name"
 msgstr "по имени области"
 
-#: editor_actions.cc:331
+#: editor_actions.cc:332
 msgid "By Region Length"
 msgstr "по длине области"
 
-#: editor_actions.cc:333
+#: editor_actions.cc:334
 msgid "By Region Position"
 msgstr "по расположению области"
 
-#: editor_actions.cc:335
+#: editor_actions.cc:336
 msgid "By Region Timestamp"
 msgstr "по времени создания области"
 
-#: editor_actions.cc:337
+#: editor_actions.cc:338
 msgid "By Region Start in File"
 msgstr "по началу области в файле"
 
-#: editor_actions.cc:339
+#: editor_actions.cc:340
 msgid "By Region End in File"
 msgstr "по концу области в файле"
 
-#: editor_actions.cc:341
+#: editor_actions.cc:342
 msgid "By Source File Name"
 msgstr "по имени файла"
 
-#: editor_actions.cc:343
+#: editor_actions.cc:344
 msgid "By Source File Length"
 msgstr "по размеру файла"
 
-#: editor_actions.cc:345
+#: editor_actions.cc:346
 msgid "By Source File Creation Date"
 msgstr "по дате создания исходного файла"
 
-#: editor_actions.cc:347
+#: editor_actions.cc:348
 msgid "By Source Filesystem"
 msgstr "по расположению файла"
 
 #. the next two are duplicate items with different names for use in two different contexts
-#: editor_actions.cc:353
+#: editor_actions.cc:354
 #, fuzzy
 msgid "Add External Audio"
 msgstr "Добавить во внешний список областей"
 
-#: editor_actions.cc:355
+#: editor_actions.cc:356
 #, fuzzy
 msgid "as Region(s)"
 msgstr "Воспроизвести выделенную область"
 
-#: editor_actions.cc:357
+#: editor_actions.cc:358
 #, fuzzy
 msgid "as Tracks"
 msgstr "Треки"
 
-#: editor_actions.cc:359
+#: editor_actions.cc:360
 #, fuzzy
 msgid "to Tracks"
 msgstr "Треки"
 
-#: editor_actions.cc:362
+#: editor_actions.cc:363
 #, fuzzy
 msgid "Show Waveforms"
 msgstr "Отображать форму сигнала"
 
-#: editor_actions.cc:363
+#: editor_actions.cc:364
 #, fuzzy
 msgid "Show Waveforms While Recording"
 msgstr "Отображать форму сигнала"
 
-#: editor_actions.cc:364
+#: editor_actions.cc:365
 #, fuzzy
 msgid "Show Measures"
 msgstr "Показывать линии тактов"
 
-#: editor_actions.cc:377 editor_actions.cc:384
+#: editor_actions.cc:378 editor_actions.cc:385
 msgid "Medium"
 msgstr ""
 
-#: editor_actions.cc:379
+#: editor_actions.cc:380
 #, fuzzy
 msgid "Faster"
 msgstr "Затухание"
 
-#: editor_actions.cc:385
+#: editor_actions.cc:386
 msgid "Long"
 msgstr ""
 
-#: editor_actions.cc:389
+#: editor_actions.cc:390
 #, fuzzy
 msgid "Later is Higher"
 msgstr "Опустить область на один слой"
 
-#: editor_actions.cc:390
+#: editor_actions.cc:391
 #, fuzzy
 msgid "Most Recently Moved/Added is Higher"
 msgstr "Опустить область на один слой"
 
-#: editor_actions.cc:391
+#: editor_actions.cc:392
 #, fuzzy
 msgid "Most Recently Added is Higher"
 msgstr "Опустить область на один слой"
@@ -3449,39 +3439,39 @@ msgstr "Вы не можете импортировать аудиофайл п
 msgid "Add existing audio to session"
 msgstr "использовать имеющийся шаблон"
 
-#: editor_audio_import.cc:143
+#: editor_audio_import.cc:142
 #, fuzzy
 msgid "ardour: importing %1"
 msgstr "ardour: экспорт"
 
-#: editor_audio_import.cc:147
+#: editor_audio_import.cc:146
 msgid "Cancel Import"
 msgstr "Отменить импорт"
 
-#: editor_audio_import.cc:225
+#: editor_audio_import.cc:224
 #, fuzzy
 msgid "Editor: cannot open file \"%1\", (%2)"
 msgstr "Редактор: не удалось открыть файл \"%1\" (%2)"
 
-#: editor_audio_import.cc:233
+#: editor_audio_import.cc:232
 #, fuzzy
 msgid "Cancel entire import"
 msgstr "Отменить импорт"
 
-#: editor_audio_import.cc:234
+#: editor_audio_import.cc:233
 #, fuzzy
 msgid "Don't embed it"
 msgstr "Отмена"
 
-#: editor_audio_import.cc:235
+#: editor_audio_import.cc:234
 msgid "Embed all without questions"
 msgstr ""
 
-#: editor_audio_import.cc:240
+#: editor_audio_import.cc:239
 msgid "Embed it anyway"
 msgstr ""
 
-#: editor_audio_import.cc:243
+#: editor_audio_import.cc:242
 #, fuzzy
 msgid ""
 "%1\n"
@@ -3490,75 +3480,63 @@ msgstr ""
 "Выбранный аудиофайл имеет частоту дискретизации данных\n"
 "отличную от текущей сессии!"
 
-#: editor_audio_import.cc:276
+#: editor_audio_import.cc:275
 msgid "could not open %1"
 msgstr "не удалось открыть %1"
 
-#: editor_audio_import.cc:321
+#: editor_audio_import.cc:320
 #, fuzzy
 msgid "insert sndfile"
 msgstr "Вставить внешний аудиофайл"
 
 #. stuff for the verbose canvas cursor
-#: editor_canvas.cc:117
+#: editor_canvas.cc:118
 msgid "VerboseCanvasCursor"
 msgstr ""
 
-#: editor_canvas.cc:285
-msgid "Start a new session\n"
-msgstr "Начать новую сессию\n"
-
-#: editor_canvas.cc:285
-msgid "via Session menu"
-msgstr "в меню \"Сессия\""
-
-#: editor_canvas.cc:288
-msgid "FirstActionMessage"
-msgstr ""
-
-#: editor_edit_groups.cc:52 mixer_ui.cc:732
+#: editor_edit_groups.cc:53 mixer_ui.cc:736
 #, fuzzy
 msgid "Activate All"
 msgstr "Активировать"
 
-#: editor_edit_groups.cc:53 mixer_ui.cc:733
+#: editor_edit_groups.cc:54 mixer_ui.cc:737
 #, fuzzy
 msgid "Disable All"
 msgstr "Отсоединить"
 
-#: editor_edit_groups.cc:55 mixer_ui.cc:735
+#: editor_edit_groups.cc:56 mixer_ui.cc:739
 #, fuzzy
 msgid "Add group"
 msgstr "Нет группы"
 
-#: editor_edit_groups.cc:225 mixer_ui.cc:964
+#: editor_edit_groups.cc:229 mixer_ui.cc:970
 #, fuzzy
 msgid "unnamed"
 msgstr "Переименовать"
 
-#: editor_edit_groups.cc:252 mixer_ui.cc:830
+#: editor_edit_groups.cc:258 mixer_ui.cc:834
 msgid "-all-"
 msgstr "-все-"
 
-#: editor_export_audio.cc:64
+#: editor_export_audio.cc:65
 msgid ""
 "There is no selection to export.\n"
 "\n"
 "Select a selection using the range mouse mode"
 msgstr ""
 
-#: editor_export_audio.cc:109
+#: editor_export_audio.cc:110
 msgid ""
 "There are no ranges to export.\n"
 "\n"
 "Create 1 or more ranges by dragging the mouse in the range bar"
 msgstr ""
 
-#: editor_imageframe.cc:624 editor_imageframe.cc:654
+#: editor_imageframe.cc:625 editor_imageframe.cc:655
 msgid "programming error: no ImageFrameView selected"
 msgstr "ошибка в программе: no ImageFrameView selected"
 
-#: editor_imageframe.cc:847 editor_imageframe.cc:869
+#: editor_imageframe.cc:848 editor_imageframe.cc:870
 msgid "programming error: no MarkerView selected"
 msgstr "ошибка в программе: no MarkerView selected"
 
@@ -3567,141 +3545,141 @@ msgstr "ошибка в программе: no MarkerView selected"
 msgid "mute region"
 msgstr "отключить воспроизведение этой области"
 
-#: editor_keys.cc:45
+#: editor_keys.cc:46
 #, fuzzy
 msgid "keyboard selection"
 msgstr "Выделить по интервалу"
 
-#: editor_markers.cc:291 editor_ops.cc:1227 editor_ops.cc:1240
-#: editor_ops.cc:1258 location_ui.cc:773
+#: editor_markers.cc:292 editor_ops.cc:1290 editor_ops.cc:1303
+#: editor_ops.cc:1321 location_ui.cc:774
 msgid "add marker"
 msgstr "добавить маркер"
 
-#: editor_markers.cc:306 editor_markers.cc:379 editor_markers.cc:551
-#: editor_markers.cc:569 editor_markers.cc:588 editor_markers.cc:607
-#: editor_markers.cc:637 editor_markers.cc:665 editor_markers.cc:693
-#: editor_markers.cc:731 editor_markers.cc:758 editor_markers.cc:781
-#: editor_markers.cc:800 editor_mouse.cc:1994 editor_mouse.cc:4237
+#: editor_markers.cc:307 editor_markers.cc:380 editor_markers.cc:552
+#: editor_markers.cc:570 editor_markers.cc:589 editor_markers.cc:608
+#: editor_markers.cc:638 editor_markers.cc:666 editor_markers.cc:694
+#: editor_markers.cc:732 editor_markers.cc:759 editor_markers.cc:782
+#: editor_markers.cc:801 editor_mouse.cc:2015 editor_mouse.cc:4275
 msgid "programming error: marker canvas item has no marker object pointer!"
 msgstr "ошибка в программе: marker canvas item has no marker object pointer!"
 
-#: editor_markers.cc:330 location_ui.cc:655
+#: editor_markers.cc:331 location_ui.cc:656
 msgid "remove marker"
 msgstr ""
 
-#: editor_markers.cc:457
+#: editor_markers.cc:458
 #, fuzzy
 msgid "Locate to Mark"
 msgstr "Маркеры интервалов"
 
-#: editor_markers.cc:458
+#: editor_markers.cc:459
 #, fuzzy
 msgid "Play from Mark"
 msgstr "Воспроизвести с начала"
 
-#: editor_markers.cc:459
+#: editor_markers.cc:460
 #, fuzzy
 msgid "Set Mark from Playhead"
 msgstr "Воспроизвести от указателя"
 
-#: editor_markers.cc:463
+#: editor_markers.cc:464
 #, fuzzy
 msgid "Rename Mark"
 msgstr "Переименовать"
 
-#: editor_markers.cc:464
+#: editor_markers.cc:465
 #, fuzzy
 msgid "Hide Mark"
 msgstr "Скрыть трек"
 
-#: editor_markers.cc:465
+#: editor_markers.cc:466
 #, fuzzy
 msgid "Remove Mark"
 msgstr "Удалить поле"
 
-#: editor_markers.cc:478 editor_markers.cc:534
+#: editor_markers.cc:479 editor_markers.cc:535
 #, fuzzy
 msgid "Locate to Range Mark"
 msgstr "Маркеры интервалов"
 
-#: editor_markers.cc:479 editor_markers.cc:535
+#: editor_markers.cc:480 editor_markers.cc:536
 #, fuzzy
 msgid "Play from Range Mark"
 msgstr "Воспроизвести \"кольцо\""
 
-#: editor_markers.cc:480
+#: editor_markers.cc:481
 #, fuzzy
 msgid "Loop Range"
 msgstr "Воспроизвести \"кольцо\""
 
-#: editor_markers.cc:481 editor_markers.cc:536
+#: editor_markers.cc:482 editor_markers.cc:537
 #, fuzzy
 msgid "Set Range Mark from Playhead"
 msgstr "Воспроизвести от указателя"
 
-#: editor_markers.cc:482 editor_markers.cc:537
+#: editor_markers.cc:483 editor_markers.cc:538
 #, fuzzy
 msgid "Set Range from Range Selection"
 msgstr "Воспроизвести выделенное"
 
-#: editor_markers.cc:486
+#: editor_markers.cc:487
 #, fuzzy
 msgid "Rename Range"
 msgstr "Переименовать"
 
-#: editor_markers.cc:487 editor_markers.cc:539
+#: editor_markers.cc:488 editor_markers.cc:540
 #, fuzzy
 msgid "Hide Range"
 msgstr "выделять"
 
-#: editor_markers.cc:488
+#: editor_markers.cc:489
 #, fuzzy
 msgid "Remove Range"
 msgstr "Удалить поле"
 
-#: editor_markers.cc:492 editor_markers.cc:541
+#: editor_markers.cc:493 editor_markers.cc:542
 #, fuzzy
 msgid "Separate Regions in Range"
 msgstr "Создать область из выделенного"
 
-#: editor_markers.cc:493 editor_markers.cc:542
+#: editor_markers.cc:494 editor_markers.cc:543
 #, fuzzy
 msgid "Select All in Range"
 msgstr "Выделить всё"
 
-#: editor_markers.cc:519
+#: editor_markers.cc:520
 msgid "Set Loop Range"
 msgstr ""
 
-#: editor_markers.cc:520
+#: editor_markers.cc:521
 msgid "Set Punch Range"
 msgstr ""
 
-#: editor_markers.cc:814
+#: editor_markers.cc:815
 #, fuzzy
 msgid "New Name:"
 msgstr "новое имя: "
 
-#: editor_markers.cc:817
+#: editor_markers.cc:818
 msgid "ardour: rename mark"
 msgstr "ardour: переименовать маркер"
 
-#: editor_markers.cc:819
+#: editor_markers.cc:820
 #, fuzzy
 msgid "ardour: rename range"
 msgstr "ardour: переименовать область"
 
-#: editor_markers.cc:839
+#: editor_markers.cc:840
 #, fuzzy
 msgid "rename marker"
 msgstr "добавить маркер"
 
-#: editor_markers.cc:864
+#: editor_markers.cc:865
 #, fuzzy
 msgid "set loop range"
 msgstr "выбрать окно просмотра"
 
-#: editor_markers.cc:890
+#: editor_markers.cc:891
 #, fuzzy
 msgid "set punch range"
 msgstr "Выбрать текущий интервал"
@@ -3710,71 +3688,76 @@ msgstr "Выбрать текущий интервал"
 msgid "Editor::event_frame() used on unhandled event type %1"
 msgstr "Editor::event_frame() used on unhandled event type %1"
 
-#: editor_mouse.cc:1589
+#: editor_mouse.cc:313
+#, fuzzy
+msgid "select on click"
+msgstr "Использовать как щелчок метронома"
+
+#: editor_mouse.cc:1590
 msgid "programming error: start_grab called without drag item"
 msgstr "ошибка в программе: start_grab called without drag item"
 
-#: editor_mouse.cc:1793
+#: editor_mouse.cc:1814
 #, fuzzy
 msgid "change fade in length"
 msgstr "редактировать введение в уровень"
 
-#: editor_mouse.cc:1811
+#: editor_mouse.cc:1832
 #, fuzzy
 msgid "programming error: fade out canvas item has no regionview data pointer!"
 msgstr "ошибка в программе: cursor canvas item has no cursor data pointer!"
 
-#: editor_mouse.cc:1885
+#: editor_mouse.cc:1906
 #, fuzzy
 msgid "change fade out length"
 msgstr "редактировать сведение в ноль"
 
-#: editor_mouse.cc:1904
+#: editor_mouse.cc:1925
 msgid "programming error: cursor canvas item has no cursor data pointer!"
 msgstr "ошибка в программе: cursor canvas item has no cursor data pointer!"
 
-#: editor_mouse.cc:2119
+#: editor_mouse.cc:2142
 #, fuzzy
 msgid "move marker"
 msgstr "Удалить поле"
 
-#: editor_mouse.cc:2142 editor_mouse.cc:2173 editor_tempodisplay.cc:461
+#: editor_mouse.cc:2165 editor_mouse.cc:2196 editor_tempodisplay.cc:459
 msgid ""
 "programming error: meter marker canvas item has no marker object pointer!"
 msgstr ""
 "ошибка в программе: meter marker canvas item has no marker object pointer!"
 
-#: editor_mouse.cc:2241
+#: editor_mouse.cc:2264
 #, fuzzy
 msgid "copy meter mark"
 msgstr "добавить маркер"
 
-#: editor_mouse.cc:2251
+#: editor_mouse.cc:2274
 msgid "move meter mark"
 msgstr ""
 
-#: editor_mouse.cc:2266 editor_mouse.cc:2299 editor_tempodisplay.cc:327
-#: editor_tempodisplay.cc:411 editor_tempodisplay.cc:430
+#: editor_mouse.cc:2289 editor_mouse.cc:2322 editor_tempodisplay.cc:331
+#: editor_tempodisplay.cc:409 editor_tempodisplay.cc:428
 msgid ""
 "programming error: tempo marker canvas item has no marker object pointer!"
 msgstr ""
 "ошибка в программе: tempo marker canvas item has no marker object pointer!"
 
-#: editor_mouse.cc:2271 editor_mouse.cc:2304 editor_tempodisplay.cc:332
-#: editor_tempodisplay.cc:416
+#: editor_mouse.cc:2294 editor_mouse.cc:2327 editor_tempodisplay.cc:336
+#: editor_tempodisplay.cc:414
 msgid "programming error: marker for tempo is not a tempo marker!"
 msgstr "ошибка в программе: marker for tempo is not a tempo marker!"
 
-#: editor_mouse.cc:2371
+#: editor_mouse.cc:2394
 #, fuzzy
 msgid "copy tempo mark"
 msgstr "добавить маркер"
 
-#: editor_mouse.cc:2381
+#: editor_mouse.cc:2404
 msgid "move tempo mark"
 msgstr ""
 
-#: editor_mouse.cc:2395 editor_mouse.cc:2414 editor_mouse.cc:2427
+#: editor_mouse.cc:2418 editor_mouse.cc:2437 editor_mouse.cc:2450
 msgid ""
 "programming error: control point canvas item has no control point object "
 "pointer!"
@@ -3782,348 +3765,349 @@ msgstr ""
 "ошибка в программе: control point canvas item has no control point object "
 "pointer!"
 
-#: editor_mouse.cc:2525
+#: editor_mouse.cc:2555
 msgid "programming error: line canvas item has no line pointer!"
 msgstr "ошибка в программе: line canvas item has no line pointer!"
 
-#: editor_mouse.cc:2634
+#: editor_mouse.cc:2664
 #, fuzzy
 msgid "move region(s)"
 msgstr "Создать область"
 
-#. this is committed in the grab finished callback.
-#: editor_mouse.cc:2646
-msgid "Drag region copy"
-msgstr ""
-
-#: editor_mouse.cc:2758
+#: editor_mouse.cc:2727
 #, fuzzy
 msgid "Drag region brush"
 msgstr "прослушать область"
 
+#. don't copy again
+#. this is committed in the grab finished callback.
+#: editor_mouse.cc:2751
+msgid "Drag region copy"
+msgstr ""
+
 #. A selection grab currently creates two undo/redo operations, one for
 #. creating the new region and another for moving it.
 #.
-#: editor_mouse.cc:3574
+#: editor_mouse.cc:3609
 #, fuzzy
 msgid "selection grab"
 msgstr "Выделенное"
 
-#: editor_mouse.cc:3615
+#: editor_mouse.cc:3650
 #, fuzzy
 msgid "cancel selection"
 msgstr "Воспроизвести выделенное"
 
-#: editor_mouse.cc:3722
+#: editor_mouse.cc:3760
 #, fuzzy
 msgid "range selection"
 msgstr "Воспроизвести выделенное"
 
-#: editor_mouse.cc:3738
+#: editor_mouse.cc:3776
 #, fuzzy
 msgid "trim selection start"
 msgstr "Выделить по интервалу"
 
-#: editor_mouse.cc:3754
+#: editor_mouse.cc:3792
 #, fuzzy
 msgid "trim selection end"
 msgstr "Выделить по интервалу"
 
-#: editor_mouse.cc:3771
+#: editor_mouse.cc:3809
 #, fuzzy
 msgid "move selection"
 msgstr "Свести выделенное"
 
-#: editor_mouse.cc:4157
+#: editor_mouse.cc:4195
 #, fuzzy
 msgid "Start point trim"
 msgstr "От начала до курсора"
 
-#: editor_mouse.cc:4185
+#: editor_mouse.cc:4223
 msgid "End point trim"
 msgstr ""
 
-#: editor_mouse.cc:4224
+#: editor_mouse.cc:4262
 msgid "trimmed region"
 msgstr ""
 
-#: editor_mouse.cc:4363
+#: editor_mouse.cc:4400
 #, fuzzy
 msgid "new range marker"
 msgstr "Маркеры интервалов"
 
-#: editor_mouse.cc:4578
+#: editor_mouse.cc:4642
 #, fuzzy
 msgid "select regions"
 msgstr "Воспроизвести выделенную область"
 
-#: editor_mouse.cc:4607
+#: editor_mouse.cc:4671
 msgid "Name for region:"
 msgstr "Имя области: "
 
-#: editor_mouse.cc:4671
+#: editor_mouse.cc:4735
 #, fuzzy
 msgid "timestretch"
 msgstr "ardour: эффект timestretch"
 
-#: editor_ops.cc:132
+#: editor_ops.cc:195
 #, fuzzy
 msgid "split"
 msgstr "Склеить"
 
-#: editor_ops.cc:168
+#: editor_ops.cc:231
 #, fuzzy
 msgid "remove region"
 msgstr "Создать область"
 
-#: editor_ops.cc:187
+#: editor_ops.cc:250
 msgid ""
 " This is destructive, will possibly delete audio files\n"
 "It cannot be undone\n"
 "Do you really want to destroy %1 ?"
 msgstr ""
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "these regions"
 msgstr "Воспроизвести выделенную область"
 
-#: editor_ops.cc:191
+#: editor_ops.cc:254
 #, fuzzy
 msgid "this region"
 msgstr "отключить воспроизведение этой области"
 
-#: editor_ops.cc:193 editor_ops.cc:3229 route_ui.cc:700
-#: visual_time_axis.cc:277
+#: editor_ops.cc:256 editor_ops.cc:3318 route_ui.cc:707
+#: visual_time_axis.cc:278
 msgid "No, do nothing."
 msgstr "Нет"
 
-#: editor_ops.cc:196
+#: editor_ops.cc:259
 #, fuzzy
 msgid "Yes, destroy them."
 msgstr "Да"
 
-#: editor_ops.cc:198 editor_ops.cc:3230
+#: editor_ops.cc:261 editor_ops.cc:3319
 msgid "Yes, destroy it."
 msgstr "Да"
 
-#: editor_ops.cc:289 editor_ops.cc:317
+#: editor_ops.cc:352 editor_ops.cc:380
 #, fuzzy
 msgid "extend selection"
 msgstr "Выделить по интервалу"
 
-#: editor_ops.cc:333 editor_ops.cc:367 editor_ops.cc:411 editor_ops.cc:437
+#: editor_ops.cc:396 editor_ops.cc:430 editor_ops.cc:474 editor_ops.cc:500
 msgid "nudge forward"
 msgstr ""
 
-#: editor_ops.cc:501
+#: editor_ops.cc:564
 msgid "build_region_boundary_cache called with snap_type = %1"
 msgstr "build_region_boundary_cache called with snap_type = %1"
 
-#: editor_ops.cc:1354
+#: editor_ops.cc:1420
 #, fuzzy
 msgid "select all within"
 msgstr "Выделить всё"
 
-#: editor_ops.cc:1380
+#: editor_ops.cc:1452
 #, fuzzy
 msgid "set selection from region"
 msgstr "Создать область из выделенного"
 
-#: editor_ops.cc:1413
+#: editor_ops.cc:1485
 #, fuzzy
 msgid "set selection from range"
 msgstr "Создать область из выделенного"
 
-#: editor_ops.cc:1443
+#: editor_ops.cc:1515
 #, fuzzy
 msgid "select all from range"
 msgstr "выбрать окно просмотра"
 
-#: editor_ops.cc:1465
+#: editor_ops.cc:1537
 #, fuzzy
 msgid "select all from punch"
 msgstr "Выделить всё"
 
-#: editor_ops.cc:1487
+#: editor_ops.cc:1559
 #, fuzzy
 msgid "select all from loop"
 msgstr "Выделить всё"
 
-#: editor_ops.cc:1501
+#: editor_ops.cc:1573
 #, fuzzy
 msgid "select all after cursor"
 msgstr "От начала до курсора"
 
-#: editor_ops.cc:1506
+#: editor_ops.cc:1578
 #, fuzzy
 msgid "select all before cursor"
 msgstr "Воспроизвести от курсора"
 
-#: editor_ops.cc:1536
+#: editor_ops.cc:1608
 #, fuzzy
 msgid "select all between cursors"
 msgstr "Воспроизвести от курсора"
 
-#: editor_ops.cc:1667
+#: editor_ops.cc:1739
 msgid "clear markers"
 msgstr "очистить маркеры"
 
-#: editor_ops.cc:1679
+#: editor_ops.cc:1751
 msgid "clear ranges"
 msgstr ""
 
-#: editor_ops.cc:1698
+#: editor_ops.cc:1770
 msgid "clear locations"
 msgstr "очистить интервалы"
 
-#: editor_ops.cc:1748
+#: editor_ops.cc:1820
 #, fuzzy
 msgid "insert dragged region"
 msgstr "Вставить область"
 
-#: editor_ops.cc:1784
+#: editor_ops.cc:1856
 #, fuzzy
 msgid "insert region"
 msgstr "Вставить область"
 
-#: editor_ops.cc:1975 io_selector.cc:57 io_selector.cc:791
+#: editor_ops.cc:2047 io_selector.cc:58 io_selector.cc:792
 msgid "OK"
 msgstr "ОК"
 
-#: editor_ops.cc:1982
+#: editor_ops.cc:2054
 msgid "ardour: rename region"
 msgstr "ardour: переименовать область"
 
-#: editor_ops.cc:2205 editor_ops.cc:2254
+#: editor_ops.cc:2277 editor_ops.cc:2326
 #, fuzzy
 msgid "separate"
 msgstr "Разделить область"
 
-#: editor_ops.cc:2316
+#: editor_ops.cc:2388
 #, fuzzy
 msgid "trim to selection"
 msgstr "Выделить по интервалу"
 
-#: editor_ops.cc:2356
+#: editor_ops.cc:2428
 msgid "region fill"
 msgstr ""
 
-#: editor_ops.cc:2415
+#: editor_ops.cc:2487
 #, fuzzy
 msgid "fill selection"
 msgstr "Закольцевать выделенное"
 
-#: editor_ops.cc:2436
+#: editor_ops.cc:2508
 #, fuzzy
 msgid "Programming error. that region doesn't cover that position"
 msgstr "ошибка в программе: location/marker map does not contain location!"
 
-#: editor_ops.cc:2439
+#: editor_ops.cc:2511
 #, fuzzy
 msgid "set region sync position"
 msgstr "Области/положение"
 
-#: editor_ops.cc:2454
+#: editor_ops.cc:2526
 msgid "Place the edit cursor at the desired sync point"
 msgstr "Поместите курсор на точку синхронизации"
 
-#: editor_ops.cc:2459
+#: editor_ops.cc:2531
 #, fuzzy
 msgid "set sync from edit cursor"
 msgstr "Воспроизвести от курсора"
 
-#: editor_ops.cc:2471
+#: editor_ops.cc:2543
 msgid "remove sync"
 msgstr ""
 
-#: editor_ops.cc:2485
+#: editor_ops.cc:2557
 msgid "naturalize"
 msgstr ""
 
-#: editor_ops.cc:2549
+#: editor_ops.cc:2621
 #, fuzzy
 msgid "align selection (relative)"
 msgstr "Выровнять относительно"
 
-#: editor_ops.cc:2577
+#: editor_ops.cc:2649
 #, fuzzy
 msgid "align selection"
 msgstr "Свести выделенное"
 
-#: editor_ops.cc:2589
+#: editor_ops.cc:2661
 #, fuzzy
 msgid "align region"
 msgstr "прослушать область"
 
-#: editor_ops.cc:2636 editor_ops.cc:2661
+#: editor_ops.cc:2708 editor_ops.cc:2733
 #, fuzzy
 msgid "trim to edit"
 msgstr "От начала до курсора"
 
-#: editor_ops.cc:2712
+#: editor_ops.cc:2784
 #, fuzzy
 msgid "ardour: freeze"
 msgstr "ardour: "
 
-#: editor_ops.cc:2717
+#: editor_ops.cc:2789
 #, fuzzy
 msgid "Cancel Freeze"
 msgstr "Отмена"
 
-#: editor_ops.cc:2754
+#: editor_ops.cc:2826
 #, fuzzy
 msgid "bounce range"
 msgstr "Выбрать текущий интервал"
 
-#: editor_ops.cc:2807
+#: editor_ops.cc:2879
 msgid "cut"
 msgstr "вырезать"
 
-#: editor_ops.cc:2810
+#: editor_ops.cc:2882
 msgid "copy"
 msgstr "копировать"
 
-#: editor_ops.cc:2823
+#: editor_ops.cc:2895
 msgid " objects"
 msgstr "объекты"
 
-#: editor_ops.cc:2849
+#: editor_ops.cc:2921
 msgid " range"
 msgstr ""
 
-#: editor_ops.cc:3006
+#: editor_ops.cc:3078
 #, fuzzy
 msgid "paste"
 msgstr "Вставить"
 
-#: editor_ops.cc:3044
+#: editor_ops.cc:3116
 #, fuzzy
 msgid "paste chunk"
 msgstr "Создать фрагмент"
 
 #. clear (below) will clear the argument list
-#: editor_ops.cc:3085
+#: editor_ops.cc:3157
 #, fuzzy
 msgid "duplicate region"
 msgstr "Разделить область"
 
-#: editor_ops.cc:3130
+#: editor_ops.cc:3202
 #, fuzzy
 msgid "duplicate selection"
 msgstr "Свести выделенное"
 
-#: editor_ops.cc:3170
+#: editor_ops.cc:3259
 #, fuzzy
 msgid "clear playlist"
 msgstr "Имя снимка"
 
-#: editor_ops.cc:3199
+#: editor_ops.cc:3288
 #, fuzzy
 msgid "nudge track"
 msgstr "Скрыть трек"
 
-#: editor_ops.cc:3226
+#: editor_ops.cc:3315
 msgid ""
 "Do you really want to destroy the last capture?\n"
 "(This is destructive and cannot be undone)"
@@ -4131,171 +4115,168 @@ msgstr ""
 "Последнюю запись будет удалена. Вы уверены?\n"
 "(отмена операции невозможна)"
 
-#: editor_ops.cc:3254
+#: editor_ops.cc:3343
 #, fuzzy
 msgid "normalize"
 msgstr "Норм."
 
-#: editor_ops.cc:3301
+#: editor_ops.cc:3390
 msgid "reverse regions"
 msgstr ""
 
-#: editor_region_list.cc:93 editor_region_list.cc:98 editor_region_list.cc:101
-#: location_ui.cc:55
+#: editor_region_list.cc:98 editor_region_list.cc:103
+#: editor_region_list.cc:106 location_ui.cc:56
 msgid "Hidden"
 msgstr "Скрытый"
 
 #. added a new fresh one at the end
-#: editor_route_list.cc:101 editor_route_list.cc:102 editor_route_list.cc:246
+#: editor_route_list.cc:102 editor_route_list.cc:103 editor_route_list.cc:247
 msgid "editor"
 msgstr "редактор"
 
-#: editor_route_list.cc:309 mixer_ui.cc:695
+#: editor_route_list.cc:310 mixer_ui.cc:699
 msgid "Show All"
 msgstr "Показать всё"
 
-#: editor_route_list.cc:310 mixer_ui.cc:696
+#: editor_route_list.cc:311 mixer_ui.cc:700
 msgid "Hide All"
 msgstr "Скрыть всё"
 
-#: editor_route_list.cc:311 mixer_ui.cc:697
+#: editor_route_list.cc:312 mixer_ui.cc:701
 #, fuzzy
 msgid "Show All Audio Tracks"
 msgstr "Показать все аудиошины"
 
-#: editor_route_list.cc:312 mixer_ui.cc:698
+#: editor_route_list.cc:313 mixer_ui.cc:702
 #, fuzzy
 msgid "Hide All Audio Tracks"
 msgstr "Скрыть все аудиошины"
 
-#: editor_route_list.cc:313 mixer_ui.cc:699
+#: editor_route_list.cc:314 mixer_ui.cc:703
 #, fuzzy
 msgid "Show All Audio Busses"
 msgstr "Показать все аудиошины"
 
-#: editor_route_list.cc:314 mixer_ui.cc:700
+#: editor_route_list.cc:315 mixer_ui.cc:704
 #, fuzzy
 msgid "Hide All Audio Busses"
 msgstr "Скрыть все аудиошины"
 
-#: editor_rulers.cc:311
+#: editor_rulers.cc:312
 #, fuzzy
 msgid "New location marker"
 msgstr "Маркеры интервалов"
 
-#: editor_rulers.cc:312
+#: editor_rulers.cc:313
 #, fuzzy
 msgid "Clear all locations"
 msgstr "очистить интервалы"
 
 #. ruler_items.push_back (MenuElem (_("New Range")));
-#: editor_rulers.cc:317
+#: editor_rulers.cc:318
 #, fuzzy
 msgid "Clear all ranges"
 msgstr "Воспроизвести \"кольцо\""
 
-#: editor_rulers.cc:326
+#: editor_rulers.cc:327
 #, fuzzy
 msgid "New Tempo"
 msgstr "Новый темп"
 
-#: editor_rulers.cc:327
+#: editor_rulers.cc:328
 #, fuzzy
 msgid "Clear tempo"
 msgstr "Новый темп"
 
-#: editor_rulers.cc:332
+#: editor_rulers.cc:333
 #, fuzzy
 msgid "New Meter"
 msgstr "Размер"
 
-#: editor_rulers.cc:333
+#: editor_rulers.cc:334
 #, fuzzy
 msgid "Clear meter"
 msgstr "очистить маркеры"
 
-#: editor_rulers.cc:341
+#: editor_rulers.cc:342
 #, fuzzy
 msgid "Min:Secs"
 msgstr "Мин:Сек"
 
-#: editor_selection_list.cc:110
+#: editor_selection_list.cc:108
 #, fuzzy
 msgid "Name for Chunk:"
 msgstr "имя фрагмента:"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 #, fuzzy
 msgid "Create Chunk"
 msgstr "Создать фрагмент"
 
-#: editor_selection_list.cc:113
+#: editor_selection_list.cc:111
 msgid "Forget it"
 msgstr "Забыть"
 
-#: editor_tempodisplay.cc:249 editor_tempodisplay.cc:289
+#: editor_tempodisplay.cc:253 editor_tempodisplay.cc:293
 msgid "add"
 msgstr "добавить"
 
-#: editor_tempodisplay.cc:271
+#: editor_tempodisplay.cc:275
 #, fuzzy
 msgid "add tempo mark"
 msgstr "добавить маркер"
 
-#: editor_tempodisplay.cc:311
+#: editor_tempodisplay.cc:315
 #, fuzzy
 msgid "add meter mark"
 msgstr "добавить маркер"
 
-#: editor_tempodisplay.cc:344 editor_tempodisplay.cc:375
+#: editor_tempodisplay.cc:348 editor_tempodisplay.cc:376
 msgid "done"
 msgstr "готово"
 
-#: editor_tempodisplay.cc:365 editor_tempodisplay.cc:396
+#: editor_tempodisplay.cc:366 editor_tempodisplay.cc:394
 msgid "replace tempo mark"
 msgstr ""
 
-#: editor_tempodisplay.cc:435 editor_tempodisplay.cc:466
+#: editor_tempodisplay.cc:433 editor_tempodisplay.cc:464
 msgid "programming error: marker for meter is not a meter marker!"
 msgstr "ошибка в программе: marker for meter is not a meter marker!"
 
-#: editor_tempodisplay.cc:445 editor_tempodisplay.cc:478
+#: editor_tempodisplay.cc:443 editor_tempodisplay.cc:476
 #, fuzzy
 msgid "remove tempo mark"
 msgstr "Да, удалить всё"
 
-#: editor_timefx.cc:50
+#: editor_timefx.cc:51
 msgid "Quick but Ugly"
 msgstr "Быстро и грубо"
 
-#: editor_timefx.cc:51
+#: editor_timefx.cc:52
 msgid "Skip Anti-aliasing"
 msgstr "Без фильтрации"
 
-#: editor_timefx.cc:53
-msgid "Stretch/Shrink it"
-msgstr "Растянуть/Сжать"
-
-#: editor_timefx.cc:57
+#: editor_timefx.cc:56
 msgid "ardour: timestretch"
 msgstr "ardour: эффект timestretch"
 
-#: editor_timefx.cc:58
+#: editor_timefx.cc:57
 msgid "TimeStretchDialog"
 msgstr "TimeStretchDialog"
 
-#: editor_timefx.cc:80 editor_timefx.cc:81 editor_timefx.cc:82
-#: editor_timefx.cc:83
+#: editor_timefx.cc:70
+msgid "Stretch/Shrink it"
+msgstr "Растянуть/Сжать"
+
+#: editor_timefx.cc:73 editor_timefx.cc:74
 msgid "TimeStretchButton"
 msgstr "TimeStretchButton"
 
-#: editor_timefx.cc:84
+#: editor_timefx.cc:75
 msgid "TimeStretchProgress"
 msgstr "TimeStretchProgress"
 
-#. GTK2FIX
-#. current_timestretch->close ();
-#: editor_timefx.cc:153
+#: editor_timefx.cc:139
 msgid "timestretch cannot be started - thread creation error"
 msgstr ""
 
@@ -4429,7 +4410,7 @@ msgstr ""
 msgid "Export to File"
 msgstr "Экспорт на CD"
 
-#: export_dialog.cc:113 option_editor.cc:82 option_editor.cc:83
+#: export_dialog.cc:113 option_editor.cc:83 option_editor.cc:84
 msgid "Browse"
 msgstr "Обзор"
 
@@ -4445,7 +4426,8 @@ msgstr "ardour: экспорт"
 msgid "ardour_export"
 msgstr "ardour_экспорт"
 
-#: export_dialog.cc:139 export_dialog.cc:155
+#: export_dialog.cc:139 export_dialog.cc:155 mixer_strip.cc:124
+#: mixer_strip.cc:767
 #, fuzzy
 msgid "Output"
 msgstr "Выходов"
@@ -4482,145 +4464,75 @@ msgstr ""
 msgid "File already exists, do you want to overwrite it?"
 msgstr ""
 
-#: export_dialog.cc:1159 export_range_markers_dialog.cc:154
+#: export_dialog.cc:1159 export_range_markers_dialog.cc:153
 msgid "Cannot write file in: "
 msgstr ""
 
 #. warning dialog
-#: export_range_markers_dialog.cc:136
+#: export_range_markers_dialog.cc:135
 msgid "Please enter a valid target directory."
 msgstr ""
 
-#: export_range_markers_dialog.cc:144
+#: export_range_markers_dialog.cc:143
 msgid ""
 "Please select an existing target directory. Files\n"
 "are not allowed!"
 msgstr ""
 
-#: gain_automation_time_axis.cc:61
+#: gain_automation_time_axis.cc:62
 #, fuzzy
 msgid "add gain automation event"
 msgstr "автомат"
 
-#: gain_meter.cc:66
+#: gain_meter.cc:67
 msgid "cannot find images for fader slider"
 msgstr ""
 
-#: gain_meter.cc:73
+#: gain_meter.cc:74
 msgid "cannot find images for fader rail"
 msgstr ""
 
-#: gain_meter.cc:88
-msgid "dbFS"
-msgstr ""
-
-#: gain_meter.cc:89 gain_meter.cc:143 gain_meter.cc:704
-msgid "pre"
-msgstr ""
-
-#: gain_meter.cc:139 gain_meter.cc:700
-#, fuzzy
-msgid "input"
-msgstr "%1 вход"
-
-#: gain_meter.cc:147 gain_meter.cc:708
-#, fuzzy
-msgid "post"
-msgstr "порт"
-
-#. TRANSLATORS: this string should be longest of the strings
-#. used to describe meter points. In english, its "input".
-#.
-#: gain_meter.cc:155
-msgid "tupni"
-msgstr ""
-
-#: gain_meter.cc:174 gain_meter.cc:458 gain_meter.cc:480 gain_meter.cc:525
+#: gain_meter.cc:130 gain_meter.cc:339 gain_meter.cc:494 gain_meter.cc:539
 #, fuzzy
 msgid "-inf"
 msgstr "в"
 
-#: glade/new_session_dialog.glade.h:1
+#: gain_meter.cc:140
 #, fuzzy
-msgid "<b>Advanced</b>"
-msgstr "Дополнительно..."
-
-#: glade/new_session_dialog.glade.h:2
-msgid "<b>Input</b>"
-msgstr ""
+msgid "Fader automation mode"
+msgstr "автомат"
 
-#: glade/new_session_dialog.glade.h:3
+#: gain_meter.cc:141
 #, fuzzy
-msgid "<b>Output</b>"
-msgstr "��ыходов"
+msgid "Fader automation type"
+msgstr "��втомат"
 
-#: glade/new_session_dialog.glade.h:4
-#, fuzzy
-msgid "Automatically connect inputs"
-msgstr "автоматическое подключение треков ко входам"
+#. XXX it might different in different languages
+#: gain_meter.cc:182 gain_meter.cc:817 panner_ui.cc:99 panner_ui.cc:807
+msgid "Abs"
+msgstr ""
 
-#: glade/new_session_dialog.glade.h:5
+#: gain_meter.cc:472
 #, fuzzy
-msgid "Automatically connect outputs"
-msgstr "ручное подключение треков к выходам"
+msgid "-Inf"
+msgstr "в"
 
-#: glade/new_session_dialog.glade.h:6
+#: gain_meter.cc:781 mixer_strip.cc:770 panner_ui.cc:771
 #, fuzzy
-msgid "Channel Count"
-msgstr "��тменить импорт"
+msgid "O"
+msgstr "��ЛИ"
 
-#: glade/new_session_dialog.glade.h:7
-msgid "Connect to Master Bus"
+#: gain_meter.cc:784 panner_ui.cc:774
+msgid "P"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:8
-msgid "Connect to physical outputs"
+#: gain_meter.cc:787 panner_ui.cc:777
+msgid "T"
 msgstr ""
 
-#: glade/new_session_dialog.glade.h:9
-#, fuzzy
-msgid "Create Control Bus"
-msgstr "Контрольные выходы"
-
-#: glade/new_session_dialog.glade.h:10
-#, fuzzy
-msgid "Create Master Bus"
-msgstr "использовать мастер-выходы"
-
-#: glade/new_session_dialog.glade.h:11
-#, fuzzy
-msgid "New Session"
-msgstr "Сессия"
-
-#: glade/new_session_dialog.glade.h:12
-#, fuzzy
-msgid "Open Recent Session"
-msgstr "открыть сессию"
-
-#: glade/new_session_dialog.glade.h:13
-#, fuzzy
-msgid "Open Session"
-msgstr "открыть сессию"
-
-#: glade/new_session_dialog.glade.h:14
-#, fuzzy
-msgid "Port limit"
-msgstr "Забыть"
-
-#: glade/new_session_dialog.glade.h:15
-#, fuzzy
-msgid "Select a File"
-msgstr "Выделить всё"
-
-#: glade/new_session_dialog.glade.h:16
-#, fuzzy
-msgid "Select a Session"
-msgstr "Воспроизвести выделенную область"
-
-#: glade/new_session_dialog.glade.h:17
-#, fuzzy
-msgid "Track/Bus connection options"
-msgstr "Треки/Шины"
+#: gain_meter.cc:790 panner_ui.cc:780
+msgid "W"
+msgstr ""
 
 #: gtk-custom-ruler.c:126
 #, fuzzy
@@ -4667,235 +4579,235 @@ msgid "Draw current ruler position"
 msgstr ""
 
 #. end-of-file, other end closed or shutdown?
-#: imageframe_socket_handler.cc:126
+#: imageframe_socket_handler.cc:127
 msgid "Image Compositor Socket has been shutdown/closed"
 msgstr ""
 
-#: imageframe_time_axis.cc:287
+#: imageframe_time_axis.cc:286
 #, fuzzy
 msgid "0.5 seconds"
 msgstr "Минуты:Секунды"
 
-#: imageframe_time_axis.cc:288 marker_time_axis.cc:241
+#: imageframe_time_axis.cc:287 marker_time_axis.cc:242
 #, fuzzy
 msgid "1 seconds"
 msgstr "Минуты:Секунды"
 
-#: imageframe_time_axis.cc:289 marker_time_axis.cc:242
+#: imageframe_time_axis.cc:288 marker_time_axis.cc:243
 #, fuzzy
 msgid "1.5 seconds"
 msgstr "Минуты:Секунды"
 
-#: imageframe_time_axis.cc:290 marker_time_axis.cc:243
+#: imageframe_time_axis.cc:289 marker_time_axis.cc:244
 #, fuzzy
 msgid "2 seconds"
 msgstr "Минуты:Секунды"
 
-#: imageframe_time_axis.cc:291 marker_time_axis.cc:244
+#: imageframe_time_axis.cc:290 marker_time_axis.cc:245
 #, fuzzy
 msgid "2.5 seconds"
 msgstr "Минуты:Секунды"
 
-#: imageframe_time_axis.cc:292 marker_time_axis.cc:245
+#: imageframe_time_axis.cc:291 marker_time_axis.cc:246
 #, fuzzy
 msgid "3 seconds"
 msgstr "Минуты:Секунды"
 
 #. duration_items.push_back(SeparatorElem()) ;
 #. duration_items.push_back(MenuElem (_("custom"), mem_fun(*this, &ImageFrameTimeAxis::set_marker_duration_custom))) ;
-#: imageframe_time_axis.cc:297 marker_time_axis.cc:250
+#: imageframe_time_axis.cc:296 marker_time_axis.cc:251
 msgid "Duration (sec)"
 msgstr ""
 
-#: imageframe_time_axis.cc:302
+#: imageframe_time_axis.cc:301
 #, fuzzy
 msgid "Remove Frame"
 msgstr "Удалить поле"
 
-#: imageframe_time_axis.cc:305
+#: imageframe_time_axis.cc:304
 #, fuzzy
 msgid "Image Frame"
 msgstr "Кадр"
 
-#: imageframe_time_axis.cc:306 marker_time_axis.cc:256
+#: imageframe_time_axis.cc:305 marker_time_axis.cc:257
 #, fuzzy
 msgid "Rename Track"
 msgstr "Переименовать"
 
-#: io_selector.cc:59 io_selector.cc:793
+#: io_selector.cc:60 io_selector.cc:794
 #, fuzzy
 msgid "Rescan"
 msgstr "обновить"
 
-#: io_selector.cc:67
+#: io_selector.cc:68
 msgid "%1 input"
 msgstr "%1 вход"
 
-#: io_selector.cc:69
+#: io_selector.cc:70
 msgid "%1 output"
 msgstr "%1 выход"
 
-#: io_selector.cc:141 route_params_ui.cc:106
+#: io_selector.cc:142 route_params_ui.cc:107
 msgid "Inputs"
 msgstr "Входов"
 
-#: io_selector.cc:141 route_params_ui.cc:107
+#: io_selector.cc:142 route_params_ui.cc:108
 msgid "Outputs"
 msgstr "Выходов"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Input"
 msgstr "добавить вход"
 
-#: io_selector.cc:142
+#: io_selector.cc:143
 #, fuzzy
 msgid "Add Output"
 msgstr "добавить выход"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Input"
 msgstr "Удалить"
 
-#: io_selector.cc:143
+#: io_selector.cc:144
 #, fuzzy
 msgid "Remove Output"
 msgstr "# Выходов"
 
-#: io_selector.cc:144
+#: io_selector.cc:145
 #, fuzzy
 msgid "Disconnect All"
 msgstr "Отсоединить"
 
-#: io_selector.cc:158
+#: io_selector.cc:159
 msgid "Available connections"
 msgstr "Доступные соединения"
 
-#: io_selector.cc:554 io_selector.cc:573
+#: io_selector.cc:555 io_selector.cc:574
 msgid "There are no more JACK ports available."
 msgstr ""
 
-#: io_selector.cc:648 io_selector.cc:675 io_selector.cc:728
+#: io_selector.cc:649 io_selector.cc:676 io_selector.cc:729
 msgid "port"
 msgstr "порт"
 
-#: io_selector.cc:797
+#: io_selector.cc:798
 msgid "ardour: "
 msgstr "ardour: "
 
-#: keyboard.cc:297
+#: keyboard.cc:299
 msgid "KeyboardTarget: keyname \"%1\" is unknown."
 msgstr "KeyboardTarget: \"%1\" - неизвестное имя."
 
-#: keyboard.cc:523
+#: keyboard.cc:525
 msgid ""
 "Your system is completely broken - NumLock uses \"%1\"as its modifier. This "
 "is madness - see the man page for xmodmap to find out how to fix this."
 msgstr ""
 
-#: keyboard.cc:531
+#: keyboard.cc:533
 msgid ""
 "Your system generates \"%1\" when the NumLock key is pressed. This can cause "
 "problems when editing so Ardour will use %2 to mean Meta rather than %1"
 msgstr ""
 
-#: keyboard.cc:592
+#: keyboard.cc:594
 msgid "You have %1 keys bound to \"mod1\""
 msgstr "Для \"mod1\" назначено кнопок: %1"
 
-#: keyboard.cc:607
+#: keyboard.cc:609
 msgid "You have %1 keys bound to \"mod2\""
 msgstr "Для \"mod2\" назначено кнопок: %1"
 
-#: keyboard.cc:622
+#: keyboard.cc:624
 msgid "You have %1 keys bound to \"mod3\""
 msgstr "Для \"mod3\" назначено кнопок: %1"
 
-#: keyboard.cc:637
+#: keyboard.cc:639
 msgid "You have %1 keys bound to \"mod4\""
 msgstr "Для \"mod4\" назначено кнопок: %1"
 
-#: keyboard.cc:652
+#: keyboard.cc:654
 msgid "You have %1 keys bound to \"mod5\""
 msgstr "Для \"mod5\" назначено кнопок: %1"
 
-#: location_ui.cc:47 location_ui.cc:50
+#: location_ui.cc:48 location_ui.cc:51
 msgid "Set"
 msgstr ""
 
-#: location_ui.cc:48 location_ui.cc:51
+#: location_ui.cc:49 location_ui.cc:52
 msgid "Go"
 msgstr ""
 
-#: location_ui.cc:54
+#: location_ui.cc:55
 msgid "CD"
 msgstr "CD"
 
-#: location_ui.cc:57
+#: location_ui.cc:58
 msgid "SCMS"
 msgstr ""
 
-#: location_ui.cc:58
+#: location_ui.cc:59
 msgid "Pre-Emphasis"
 msgstr ""
 
-#: location_ui.cc:569
+#: location_ui.cc:570
 msgid "Add New Location"
 msgstr "Добавить новый интервал"
 
-#: location_ui.cc:570
+#: location_ui.cc:571
 msgid "Add New Range"
 msgstr ""
 
-#: location_ui.cc:574
+#: location_ui.cc:575
 msgid "ardour: locations"
 msgstr "ardour: интервалы"
 
-#: location_ui.cc:575
+#: location_ui.cc:576
 msgid "ardour_locations"
 msgstr "ardour_интервалы"
 
-#: location_ui.cc:603
+#: location_ui.cc:604
 #, fuzzy
 msgid "Location (CD Index) Markers"
 msgstr "Маркеры интервалов"
 
-#: location_ui.cc:623
+#: location_ui.cc:624
 msgid "Range (CD Track) Markers"
 msgstr ""
 
-#: location_ui.cc:789
+#: location_ui.cc:790
 msgid "add range marker"
 msgstr ""
 
-#: main.cc:71
+#: main.cc:72
 msgid "ardour is killing itself for a clean exit\n"
 msgstr "ardour: принудительное завершение работы\n"
 
-#: main.cc:80
+#: main.cc:81
 msgid "stopping user interface\n"
 msgstr "завершение работы...\n"
 
 #. XXX its doubtful that snprintf() is async-safe
-#: main.cc:99
+#: main.cc:100
 #, fuzzy, c-format
 msgid "%d(%d): received signal %d\n"
 msgstr "%d: принят сигнал %d\n"
 
-#: main.cc:185
+#: main.cc:186
 msgid "cannot become new process group leader (%1)"
 msgstr ""
 
-#: main.cc:212
+#: main.cc:213
 msgid "cannot setup signal handling for %1"
 msgstr "cannot setup signal handling for %1"
 
-#: main.cc:223
+#: main.cc:224
 msgid "cannot set default signal mask (%1)"
 msgstr "cannot set default signal mask (%1)"
 
-#: main.cc:253
+#: main.cc:254
 #, fuzzy
 msgid ""
 "Without a UI style file, ardour will look strange.\n"
@@ -4905,12 +4817,12 @@ msgstr ""
 "без файла определяющего стиль отображения.\n"
 "Пожалуйста, укажите его (файл) в переменной окружения ARDOUR_UI_RC"
 
-#: main.cc:273
+#: main.cc:276
 #, fuzzy
 msgid "Ardour could not connect to JACK."
 msgstr "Не удалось соединиться с сервером JACK как \"%1\""
 
-#: main.cc:277
+#: main.cc:280
 #, fuzzy
 msgid ""
 "There are several possible reasons:\n"
@@ -4930,387 +4842,466 @@ msgstr ""
 "\n"
 "Пожалуйста, проверьте все варианты, возможно потребуется (пере)запуск JACK."
 
-#: main.cc:324
+#: main.cc:310
+msgid "could not load command line session \"%1\""
+msgstr "не удалось загрузить сессию \"%1\", указанную в командной строке"
+
+#. it wasn't new, but we require a new session
+#: main.cc:330
+msgid ""
+"\n"
+"\n"
+"A session named \"%1\" already exists.\n"
+"To avoid this message, start ardour as \"ardour %1"
+msgstr ""
+
+#: main.cc:341
+msgid ""
+"\n"
+"\n"
+"No session named \"%1\" exists.\n"
+"To create it from the command line, start ardour as \"ardour --new %1"
+msgstr ""
+
+#: main.cc:405
 msgid "Ardour/GTK "
 msgstr "Ardour/GTK "
 
-#: main.cc:326
+#: main.cc:407
 msgid ""
 "\n"
 "   (built using "
 msgstr ""
 
-#: main.cc:330
+#: main.cc:411
 #, fuzzy
 msgid " with libardour "
 msgstr " работает с libardour "
 
-#: main.cc:335
+#: main.cc:416
 msgid " and GCC version "
 msgstr ""
 
-#: main.cc:345
+#: main.cc:426
 #, fuzzy
-msgid "Copyright (C) 1999-2005 Paul Davis"
+msgid "Copyright (C) 1999-2006 Paul Davis"
 msgstr "Авторское право 1999-2004 Paul Davis"
 
-#: main.cc:346
+#: main.cc:427
 msgid ""
 "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
 "Baker"
 msgstr ""
 
-#: main.cc:348
+#: main.cc:429
 msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
 msgstr "Ardour распространяется БЕЗ ВСЯКИХ ГАРАНТИЙ"
 
-#: main.cc:349
+#: main.cc:430
 msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 msgstr ""
 
-#: main.cc:350
+#: main.cc:431
 msgid "This is free software, and you are welcome to redistribute it "
 msgstr "Это свободное программное обеспечение, Вы можете распространять его"
 
-#: main.cc:351
+#: main.cc:432
 #, fuzzy
 msgid "under certain conditions; see the source for copying conditions."
 msgstr "на определённых условиях; подробнее об этом читайте в файле COPYING."
 
-#: main.cc:360
+#: main.cc:441
 msgid "could not create ARDOUR GUI"
 msgstr "не удалось создать графический интерфейс для ARDOUR"
 
-#: main.cc:378
+#: main.cc:459
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr "Не удалось соединиться с сервером JACK как \"%1\""
 
-#: main.cc:381
+#: main.cc:462
 msgid "could not initialize Ardour."
 msgstr "не удалось запустить Ardour."
 
-#: main.cc:392
-msgid "could not load command line session \"%1\""
-msgstr "не удалось загрузить сессию \"%1\", указанную в командной строке"
+#: marker.cc:244
+#, fuzzy
+msgid "MarkerText"
+msgstr "маркерам"
 
-#. it wasn't new, but we require a new session
-#: main.cc:412
-msgid ""
-"\n"
-"\n"
-"A session named \"%1\" already exists.\n"
-"To avoid this message, start ardour as \"ardour %1"
-msgstr ""
-
-#: main.cc:423
-msgid ""
-"\n"
-"\n"
-"No session named \"%1\" exists.\n"
-"To create it from the command line, start ardour as \"ardour --new %1"
-msgstr ""
-
-#: marker.cc:244
-#, fuzzy
-msgid "MarkerText"
-msgstr "маркерам"
-
-#: marker_time_axis.cc:253
+#: marker_time_axis.cc:254
 #, fuzzy
 msgid "Remove Marker"
 msgstr "Удалить поле"
 
-#: marker_time_axis.cc:255
+#: marker_time_axis.cc:256
 #, fuzzy
 msgid "Marker"
 msgstr "маркерам"
 
-#: meter_bridge.cc:77
+#: meter_bridge.cc:78
 msgid "ardour: meter bridge"
 msgstr "ardour: индикатор уровня"
 
-#: meter_bridge.cc:78
+#: meter_bridge.cc:79
 msgid "ardour_meter_bridge"
 msgstr "ardour_индикатор_уровня"
 
-#: meter_bridge_strip.cc:79 meter_bridge_strip.cc:93
+#: meter_bridge_strip.cc:80 meter_bridge_strip.cc:94
 #, c-format
 msgid "# of %u-sample overs"
 msgstr ""
 
-#: meter_bridge_strip.cc:221
+#: meter_bridge_strip.cc:222
 #, fuzzy
 msgid "New Name for Meter:"
 msgstr "Новое имя индикатора:"
 
-#: mixer_strip.cc:85 mixer_strip.cc:437 region_editor.cc:46
-msgid "mute"
-msgstr "тихо"
-
-#: mixer_strip.cc:85 mixer_strip.cc:438
-msgid "solo"
-msgstr "соло"
-
-#: mixer_strip.cc:85 mixer_strip.cc:436
-msgid "RECORD"
-msgstr "ЗАПИСЬ"
+#: mixer_strip.cc:95 mixer_strip.cc:140 mixer_strip.cc:1227
+msgid "pre"
+msgstr ""
 
-#: mixer_strip.cc:96 mixer_strip.cc:441 mixer_strip.cc:1064
+#: mixer_strip.cc:96 mixer_strip.cc:822
 msgid "Comments"
 msgstr ""
 
-#: mixer_strip.cc:120 mixer_strip.cc:752
-msgid "INPUT"
-msgstr "ВХОД"
-
-#: mixer_strip.cc:125 mixer_strip.cc:773
-msgid "OUTPUT"
-msgstr "ВЫХОД"
-
-#: mixer_strip.cc:140
+#: mixer_strip.cc:119
 #, fuzzy
-msgid "Pan automation mode"
-msgstr "��втомат"
+msgid "Input"
+msgstr "��ходов"
 
-#: mixer_strip.cc:141
+#: mixer_strip.cc:136 mixer_strip.cc:1223
 #, fuzzy
-msgid "Gain automation mode"
-msgstr "автомат"
+msgid "input"
+msgstr "%1 вход"
 
-#: mixer_strip.cc:143
+#: mixer_strip.cc:144 mixer_strip.cc:1231
 #, fuzzy
-msgid "Pan automation type"
-msgstr "��втомат"
+msgid "post"
+msgstr "��орт"
 
-#: mixer_strip.cc:144
-#, fuzzy
-msgid "Gain automation type"
-msgstr "автомат"
+#. TRANSLATORS: this string should be longest of the strings
+#. used to describe meter points. In english, its "input".
+#.
+#: mixer_strip.cc:152
+msgid "tupni"
+msgstr ""
 
-#: mixer_strip.cc:183 mixer_strip.cc:195 mixer_strip.cc:913
-msgid "trim"
+#: mixer_strip.cc:207
+msgid "Varispeed"
 msgstr ""
 
-#. XXX it might different in different languages
-#: mixer_strip.cc:184 mixer_strip.cc:196 mixer_strip.cc:917
-msgid "abs"
+#: mixer_strip.cc:233 mixer_strip.cc:836
+msgid "Click to Add/Edit Comments"
 msgstr ""
 
-#: mixer_strip.cc:203
-#, fuzzy
-msgid "gain automation mode"
-msgstr "автомат"
+#: mixer_strip.cc:374
+msgid "unknown strip width \"%1\" in XML GUI information"
+msgstr "неизвестная ширина трека \"%1\" в XML описании"
 
-#: mixer_strip.cc:204
+#: mixer_strip.cc:417
 #, fuzzy
-msgid "pan automation mode"
-msgstr "��втомат"
+msgid "record"
+msgstr "��апись"
 
-#: mixer_strip.cc:205
-#, fuzzy
-msgid "gain automation state"
-msgstr "автомат"
+#: mixer_strip.cc:418 region_editor.cc:47
+msgid "mute"
+msgstr "тихо"
 
-#: mixer_strip.cc:206
-#, fuzzy
-msgid "pan automation state"
-msgstr "автомат"
+#: mixer_strip.cc:419
+msgid "solo"
+msgstr "соло"
 
-#: mixer_strip.cc:223
-msgid "varispeed"
+#: mixer_strip.cc:422
+msgid "comments"
 msgstr ""
 
-#: mixer_strip.cc:245 mixer_strip.cc:1078
-msgid "Click to Add/Edit Comments"
+#: mixer_strip.cc:424
+msgid "*comments*"
 msgstr ""
 
-#: mixer_strip.cc:393
-msgid "unknown strip width \"%1\" in XML GUI information"
-msgstr "неизвестная ширина трека \"%1\" в XML описании"
+#: mixer_strip.cc:438
+#, fuzzy
+msgid "Rec"
+msgstr "обновить"
 
-#: mixer_strip.cc:443 mixer_strip.cc:1062
-msgid "*Comments*"
+#: mixer_strip.cc:439
+msgid "M"
 msgstr ""
 
-#: mixer_strip.cc:457
-msgid "REC"
-msgstr "ЗАП"
+#: mixer_strip.cc:440
+msgid "S"
+msgstr ""
 
-#: mixer_strip.cc:462 mixer_strip.cc:1072
+#: mixer_strip.cc:443 mixer_strip.cc:830
 #, fuzzy
 msgid "Cmt"
 msgstr "вырезать"
 
-#: mixer_strip.cc:464 mixer_strip.cc:1070
+#: mixer_strip.cc:445 mixer_strip.cc:828
 msgid "*Cmt*"
 msgstr ""
 
-#: mixer_strip.cc:503 mixer_strip.cc:562 redirect_box.cc:1004
+#: mixer_strip.cc:483 mixer_strip.cc:549 redirect_box.cc:1006
 msgid "Not connected to JACK - no I/O changes are possible"
 msgstr ""
 
-#: mixer_strip.cc:569
+#: mixer_strip.cc:560
 msgid "Track"
 msgstr "Трек"
 
-#: mixer_strip.cc:593 mixer_strip.cc:609
+#: mixer_strip.cc:588 mixer_strip.cc:604
 msgid "could not register new ports required for that connection"
 msgstr ""
 
-#: mixer_strip.cc:755
-msgid "IN"
-msgstr "ВХ"
-
-#: mixer_strip.cc:776
-msgid "OUT"
-msgstr "ВЫХ"
-
-#: mixer_strip.cc:884
-msgid "aplay"
-msgstr "авоспр"
+#: mixer_strip.cc:747
+#, fuzzy
+msgid " Input"
+msgstr "# Входов"
 
-#: mixer_strip.cc:890
+#: mixer_strip.cc:750
 #, fuzzy
-msgid "awrite"
-msgstr "запись"
+msgid "I"
+msgstr "ВХ"
+
+#: mixer_strip.cc:820
+msgid "*Comments*"
+msgstr ""
 
-#: mixer_strip.cc:1095
+#: mixer_strip.cc:859
 #, fuzzy
 msgid ": comment editor"
 msgstr "Интерфейс: не удалось инициализировать редактор"
 
-#: mixer_strip.cc:1157 mixer_strip.cc:1178
-msgid "no group"
-msgstr "нет группы"
+#: mixer_strip.cc:953
+msgid "Grp"
+msgstr ""
 
-#: mixer_strip.cc:1181
+#: mixer_strip.cc:956
 msgid "~G"
 msgstr "нГр"
 
-#: mixer_strip.cc:1229
+#: mixer_strip.cc:1004
 #, fuzzy
 msgid "Invert Polarity"
 msgstr "полярность"
 
-#: mixer_ui.cc:84
+#: mixer_ui.cc:85
 msgid "Strips"
 msgstr "Каналы"
 
-#: mixer_ui.cc:108
-msgid "groupname"
-msgstr ""
-
-#: mixer_ui.cc:109 region_editor.cc:48 region_editor.cc:191
-#: region_editor.cc:225
-msgid "active"
-msgstr "активно"
-
-#: mixer_ui.cc:110 region_editor.cc:49
-msgid "visible"
-msgstr "отображать"
+#: mixer_ui.cc:110
+#, fuzzy
+msgid "Group"
+msgstr "Mix группы"
 
-#: mixer_ui.cc:207 mixer_ui.cc:366
+#: mixer_ui.cc:211 mixer_ui.cc:370
 msgid "ardour: mixer"
 msgstr "ardour: микшер"
 
-#: mixer_ui.cc:208
+#: mixer_ui.cc:212
 msgid "ardour_mixer"
 msgstr "ardour_микшер"
 
-#: mixer_ui.cc:342
+#: mixer_ui.cc:346
 msgid "ardour: mixer: "
 msgstr "ardour: микшер: "
 
-#: mixer_ui.cc:569
+#: mixer_ui.cc:573
 msgid "signal"
 msgstr "сигнал"
 
-#: mixer_ui.cc:719
+#: mixer_ui.cc:723
 msgid "track display list item for renamed strip not found!"
 msgstr ""
 
-#: option_editor.cc:75
+#: new_session_dialog.cc:39
+#, fuzzy
+msgid "New Session Name :"
+msgstr "Имя сессии:"
+
+#: new_session_dialog.cc:41
+msgid "Create Session Directory In :"
+msgstr ""
+
+#: new_session_dialog.cc:43
+#, fuzzy
+msgid "Use Session Template :"
+msgstr "использовать имеющийся шаблон"
+
+#: new_session_dialog.cc:45
+#, fuzzy
+msgid "Channel Count"
+msgstr "Отменить импорт"
+
+#: new_session_dialog.cc:46
+#, fuzzy
+msgid "Create Monitor Bus"
+msgstr "Контрольные выходы"
+
+#: new_session_dialog.cc:53
+#, fuzzy
+msgid "Create Master Bus"
+msgstr "использовать мастер-выходы"
+
+#: new_session_dialog.cc:55
+#, fuzzy
+msgid "Automatically Connect Inputs"
+msgstr "автоматическое подключение треков ко входам"
+
+#: new_session_dialog.cc:56 new_session_dialog.cc:67
+#, fuzzy
+msgid "Port Limit"
+msgstr "Забыть"
+
+#: new_session_dialog.cc:64
+#, fuzzy
+msgid "<b>Track/Bus Inputs</b>"
+msgstr "Треки/Шины"
+
+#: new_session_dialog.cc:66
+#, fuzzy
+msgid "Automatically Connect Outputs"
+msgstr "ручное подключение треков к выходам"
+
+#: new_session_dialog.cc:75
+msgid "Connect to Master Bus"
+msgstr ""
+
+#: new_session_dialog.cc:76
+msgid "Connect to Physical Outputs"
+msgstr ""
+
+#: new_session_dialog.cc:80
+#, fuzzy
+msgid "<b>Track/Bus Outputs</b>"
+msgstr "Выходов"
+
+#: new_session_dialog.cc:83
+#, fuzzy
+msgid "Advanced Options"
+msgstr "Редактор параметров"
+
+#: new_session_dialog.cc:91
+#, fuzzy
+msgid "Open Recent Session"
+msgstr "открыть сессию"
+
+#: new_session_dialog.cc:127
+#, fuzzy
+msgid "Open Session File :"
+msgstr "открыть сессию"
+
+#: new_session_dialog.cc:274
+#, fuzzy
+msgid "New Session"
+msgstr "Сессия"
+
+#: new_session_dialog.cc:276
+#, fuzzy
+msgid "Open Session"
+msgstr "открыть сессию"
+
+#: new_session_dialog.cc:281
+#, fuzzy
+msgid "ardour: session control"
+msgstr "ardour_новая_сессия"
+
+#: new_session_dialog.cc:310
+#, fuzzy
+msgid "select template"
+msgstr "-шаблон"
+
+#: new_session_dialog.cc:316
+#, fuzzy
+msgid "select session file"
+msgstr "Воспроизвести выделенную область"
+
+#: new_session_dialog.cc:325
+#, fuzzy
+msgid "select directory"
+msgstr "Воспроизвести выделенную область"
+
+#: option_editor.cc:76
 #, fuzzy
 msgid "SMPTE offset is negative"
 msgstr "Смещение SMPTE"
 
-#: option_editor.cc:101
+#: option_editor.cc:102
 msgid "ardour: options editor"
 msgstr "adour: редактор параметров"
 
-#: option_editor.cc:102
+#: option_editor.cc:103
 msgid "ardour_option_editor"
 msgstr "adour_редактор_параметров"
 
-#: option_editor.cc:126
+#: option_editor.cc:127
 msgid "Paths/Files"
 msgstr "Пути/Файлы"
 
-#: option_editor.cc:127
+#: option_editor.cc:128
 msgid "Kbd/Mouse"
 msgstr "Клавиатура/Мышь"
 
-#: option_editor.cc:130
+#: option_editor.cc:131
 msgid "Layers & Fades"
 msgstr ""
 
-#: option_editor.cc:134
+#: option_editor.cc:135
 msgid "MIDI"
 msgstr "MIDI"
 
-#: option_editor.cc:176
+#: option_editor.cc:177
 msgid "24 FPS"
 msgstr ""
 
-#: option_editor.cc:178
+#: option_editor.cc:179
 msgid "25 FPS"
 msgstr ""
 
-#: option_editor.cc:180
+#: option_editor.cc:181
 msgid "30 FPS"
 msgstr ""
 
-#: option_editor.cc:186
+#: option_editor.cc:187
 msgid "30 FPS drop"
 msgstr ""
 
-#: option_editor.cc:243
+#: option_editor.cc:244
 msgid "session RAID path"
 msgstr "путь к файлам RAID сессий"
 
-#: option_editor.cc:248
+#: option_editor.cc:249
 #, fuzzy
 msgid "Soundfile Search Paths"
 msgstr "Аудио-библиотека"
 
-#: option_editor.cc:253
+#: option_editor.cc:254
 #, fuzzy
 msgid "Paths"
 msgstr "Пути/Файлы"
 
-#: option_editor.cc:267 option_editor.cc:273 option_editor.cc:724
-#: option_editor.cc:751
+#: option_editor.cc:268 option_editor.cc:274 option_editor.cc:723
+#: option_editor.cc:750
 msgid "internal"
 msgstr "внутренний"
 
-#: option_editor.cc:286
+#: option_editor.cc:287
 msgid "Short crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:298
+#: option_editor.cc:299
 msgid "Destructive crossfade length (msecs)"
 msgstr ""
 
-#: option_editor.cc:366
+#: option_editor.cc:367
 msgid "SMPTE Frames/second"
 msgstr "SMPTE Кадры/Секунды"
 
-#: option_editor.cc:367
+#: option_editor.cc:368
 msgid "SMPTE Offset"
 msgstr "Смещение SMPTE"
 
-#: option_editor.cc:461 option_editor.cc:468 option_editor.cc:471
-#: option_editor.cc:617
+#: option_editor.cc:462 option_editor.cc:469 option_editor.cc:472
+#: option_editor.cc:618
 #, fuzzy
 msgid "online"
 msgstr "линейное"
@@ -5318,12 +5309,12 @@ msgstr "линейное"
 #. remember, we have to handle the i18n case where the relative
 #. lengths of the strings in language N is different than in english.
 #.
-#: option_editor.cc:468 option_editor.cc:469 option_editor.cc:614
+#: option_editor.cc:469 option_editor.cc:470 option_editor.cc:615
 #, fuzzy
 msgid "offline"
 msgstr "линейное"
 
-#: option_editor.cc:669
+#: option_editor.cc:670
 msgid "Choose Click"
 msgstr ""
 
@@ -5332,15 +5323,15 @@ msgstr ""
 msgid "Choose Click Emphasis"
 msgstr "Использовать как акцентирующий щелчок метронома"
 
-#: option_editor.cc:804
+#: option_editor.cc:803
 msgid "Click audio file"
 msgstr "Файл щелчков метронома"
 
-#: option_editor.cc:810
+#: option_editor.cc:809
 msgid "Click emphasis audiofile"
 msgstr "Файл акцентирующих щелчков метронома"
 
-#: option_editor.cc:847
+#: option_editor.cc:846
 msgid ""
 "The auditioner is a dedicated mixer strip used\n"
 "for listening to specific regions outside the context\n"
@@ -5352,35 +5343,35 @@ msgstr ""
 "вне общего контекста микса. Его можно соединить как любой\n"
 "другой канал микшера."
 
-#: option_editor.cc:920
+#: option_editor.cc:919
 msgid "Edit using"
 msgstr "Редактировать сочетание"
 
-#: option_editor.cc:927 option_editor.cc:954
+#: option_editor.cc:926 option_editor.cc:953
 msgid "+ button"
 msgstr "+ клавиша"
 
-#: option_editor.cc:947
+#: option_editor.cc:946
 msgid "Delete using"
 msgstr "Удалить сочетание"
 
-#: option_editor.cc:974
+#: option_editor.cc:973
 msgid "Ignore snap using"
 msgstr "Не использовать \"снимки\""
 
-#: opts.cc:47
+#: opts.cc:46
 msgid "Usage: "
 msgstr "Использование: "
 
-#: opts.cc:48
+#: opts.cc:47
 msgid "  -v, --version                    Show version information\n"
 msgstr "  -v, --version                    Информация о версии программы\n"
 
-#: opts.cc:49
+#: opts.cc:48
 msgid "  -h, --help                       Print this message\n"
 msgstr "  -h, --help                       Показать это сообщение\n"
 
-#: opts.cc:50
+#: opts.cc:49
 msgid ""
 "  -b, --bindings                   Print all possible keyboard binding "
 "names\n"
@@ -5388,12 +5379,12 @@ msgstr ""
 "  -b, --bindings                   Показать все доступные \"горячие\" "
 "клавиши\n"
 
-#: opts.cc:51
+#: opts.cc:50
 #, fuzzy
 msgid "  -n, --show-splash                Show splash screen\n"
 msgstr "  -n, --no-splash                  Не показывать заставку\n"
 
-#: opts.cc:52
+#: opts.cc:51
 #, fuzzy
 msgid ""
 "  -c, --name  name                 Use a specific jack client name, default "
@@ -5402,7 +5393,7 @@ msgstr ""
 "  -c, --jack-client-name  имя     Использовать другое имя jack-клиента, "
 "ardour по умолчанию\n"
 
-#: opts.cc:53
+#: opts.cc:52
 #, fuzzy
 msgid ""
 "  -N, --new session-name           Create a new session from the command "
@@ -5410,197 +5401,212 @@ msgid ""
 msgstr ""
 "  [имя-сессии]                     Загрузить сессию с указанным именем\n"
 
-#: opts.cc:54
+#: opts.cc:53
 msgid ""
 "  -o, --use-hw-optimizations        Try to use h/w specific optimizations\n"
 msgstr ""
 
-#: opts.cc:56
+#: opts.cc:55
 #, fuzzy
 msgid "  -V, --novst                      Do not use VST support\n"
 msgstr "  -n, --no-splash                  Не показывать заставку\n"
 
-#: opts.cc:58
+#: opts.cc:57
 msgid "  [session-name]                   Name of session to load\n"
 msgstr ""
 "  [имя-сессии]                     Загрузить сессию с указанным именем\n"
 
-#: opts.cc:59
+#: opts.cc:58
 msgid "  -C, --curvetest filename         Curve algorithm debugger\n"
 msgstr ""
 
-#: opts.cc:60
+#: opts.cc:59
 #, fuzzy
 msgid "  -g, --gtktheme                   Allow GTK to load a theme\n"
 msgstr "  -h, --help                       Показать это сообщение\n"
 
-#: pan_automation_time_axis.cc:59
+#: pan_automation_time_axis.cc:60
 msgid "You can't graphically edit panning of more than stream"
 msgstr ""
 
-#: pan_automation_time_axis.cc:79
+#: pan_automation_time_axis.cc:80
 #, fuzzy
 msgid "add pan automation event"
 msgstr "автомат"
 
-#: panner2d.cc:588 panner_ui.cc:393 plugin_ui.cc:833
+#: panner2d.cc:589 panner_ui.cc:435 plugin_ui.cc:834
 #, fuzzy
 msgid "Bypass"
 msgstr "обход"
 
-#: panner_ui.cc:57 panner_ui.cc:187
+#: panner_ui.cc:58 panner_ui.cc:225
 #, fuzzy
 msgid "link"
 msgstr "в"
 
+#: panner_ui.cc:69
+#, fuzzy
+msgid "Pan automation mode"
+msgstr "автомат"
+
 #: panner_ui.cc:70
+#, fuzzy
+msgid "Pan automation type"
+msgstr "автомат"
+
+#: panner_ui.cc:81
 msgid "panning link control"
 msgstr ""
 
-#: panner_ui.cc:72
+#: panner_ui.cc:83
 msgid "panning link direction"
 msgstr ""
 
-#: panner_ui.cc:197
+#: panner_ui.cc:235
 msgid "L"
 msgstr ""
 
-#: panner_ui.cc:296
+#: panner_ui.cc:335
+#, c-format
+msgid "panner for channel %lu"
+msgstr ""
+
+#: panner_ui.cc:337
 #, c-format
 msgid "panner for channel %u"
 msgstr ""
 
-#: panner_ui.cc:403
+#: panner_ui.cc:445
 #, fuzzy
 msgid "Reset all"
 msgstr "Огромная"
 
-#: playlist_selector.cc:51
+#: playlist_selector.cc:52
 #, fuzzy
 msgid "ardour: playlists"
 msgstr "ardour: модули (plugins)"
 
-#: playlist_selector.cc:58
+#: playlist_selector.cc:59
 msgid "Playlists grouped by track"
 msgstr ""
 
-#: playlist_selector.cc:97
+#: playlist_selector.cc:98
 #, fuzzy
 msgid "ardour: playlist for "
 msgstr "ardour: редактор: "
 
-#: playlist_selector.cc:113
+#: playlist_selector.cc:114
 #, fuzzy
 msgid "Other tracks"
 msgstr "Скрыть трек"
 
-#: playlist_selector.cc:129
+#: playlist_selector.cc:130
 msgid "unassigned"
 msgstr ""
 
-#: plugin_selector.cc:42
+#: plugin_selector.cc:43
 msgid "ardour: plugins"
 msgstr "ardour: модули (plugins)"
 
-#: plugin_selector.cc:55
+#: plugin_selector.cc:56
 #, fuzzy
 msgid "Available LADSPA Plugins"
 msgstr "Доступные LADSPA модули"
 
-#: plugin_selector.cc:56
+#: plugin_selector.cc:57
 msgid "Type"
 msgstr "Тип"
 
-#: plugin_selector.cc:57 plugin_selector.cc:80
+#: plugin_selector.cc:58 plugin_selector.cc:81
 msgid "# Inputs"
 msgstr "# Входов"
 
-#: plugin_selector.cc:58 plugin_selector.cc:81
+#: plugin_selector.cc:59 plugin_selector.cc:82
 msgid "# Outputs"
 msgstr "# Выходов"
 
-#: plugin_selector.cc:67
+#: plugin_selector.cc:68
 msgid "Plugins to be Connected to Insert"
 msgstr ""
 
-#: plugin_selector.cc:79
+#: plugin_selector.cc:80
 #, fuzzy
 msgid "Available plugins"
 msgstr "Доступные LADSPA модули"
 
-#: plugin_selector.cc:97
+#: plugin_selector.cc:98
 msgid "Add a plugin to the effect list"
 msgstr "Добавить модуль в список эффектов"
 
-#: plugin_selector.cc:99
+#: plugin_selector.cc:102
 msgid "Remove a plugin from the effect list"
 msgstr "Удалить модуль из списка эффектов"
 
-#: plugin_selector.cc:101
+#: plugin_selector.cc:104
 msgid "Update available plugins"
 msgstr "Обновить доступные модули"
 
-#: plugin_selector.cc:123
+#: plugin_selector.cc:126
 #, fuzzy
 msgid "LADSPA"
 msgstr "ADAT"
 
-#: plugin_selector.cc:126
+#: plugin_selector.cc:129
 #, fuzzy
 msgid "VST"
 msgstr "УСТАНОВИТЬ"
 
-#: plugin_ui.cc:83
+#: plugin_ui.cc:84
 msgid ""
 "unknown type of editor-supplying plugin (note: no VST support in this "
 "version of ardour)"
 msgstr ""
 
-#: plugin_ui.cc:138
+#: plugin_ui.cc:139
 msgid "<span size=\"large\">Presets</span>"
 msgstr ""
 
-#: plugin_ui.cc:229
+#: plugin_ui.cc:230
 #, fuzzy
 msgid "Controls"
 msgstr "Контрольные выходы"
 
-#: plugin_ui.cc:266
+#: plugin_ui.cc:267
 msgid "Plugin Editor: could not build control element for port %1"
 msgstr "Редактор модулей: невозможно создать эффект для порта %1"
 
-#: plugin_ui.cc:357
+#: plugin_ui.cc:358
 #, fuzzy
-msgid "automation control"
+msgid "Automation control"
 msgstr "автомат"
 
-#: plugin_ui.cc:853
+#: plugin_ui.cc:854
 msgid "Plugin preset %1 not found"
 msgstr ""
 
-#: plugin_ui.cc:863
+#: plugin_ui.cc:864
 #, fuzzy
 msgid "Name of New Preset:"
 msgstr "Имя нового соединения:"
 
-#: redirect_automation_line.cc:53
+#: redirect_automation_line.cc:54
 msgid "redirect automation created for non-plugin"
 msgstr ""
 
-#: redirect_automation_time_axis.cc:93
+#: redirect_automation_time_axis.cc:94
 msgid "add automation event to "
 msgstr ""
 
-#: redirect_box.cc:222
+#: redirect_box.cc:223
 msgid "New send"
 msgstr ""
 
-#: redirect_box.cc:223
+#: redirect_box.cc:224
 #, fuzzy
 msgid "Show send controls"
 msgstr "использовать контрольные выходы"
 
-#: redirect_box.cc:377
+#: redirect_box.cc:383
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5611,7 +5617,7 @@ msgid ""
 "part of the signal."
 msgstr ""
 
-#: redirect_box.cc:389
+#: redirect_box.cc:395
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "The plugin has %2 inputs\n"
@@ -5623,7 +5629,7 @@ msgid ""
 "support this type of configuration."
 msgstr ""
 
-#: redirect_box.cc:402
+#: redirect_box.cc:408
 msgid ""
 "You attempted to add a plugin (%1).\n"
 "\n"
@@ -5636,34 +5642,34 @@ msgid ""
 "Ardour does not understand what to do in such situations.\n"
 msgstr ""
 
-#: redirect_box.cc:493
+#: redirect_box.cc:495
 msgid "Pre-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:496
+#: redirect_box.cc:498
 msgid "Post-fader inserts, sends & plugins:"
 msgstr ""
 
-#: redirect_box.cc:642
+#: redirect_box.cc:644
 msgid ""
 "You cannot reorder this set of redirects\n"
 "in that way because the inputs and\n"
 "outputs do not work correctly."
 msgstr ""
 
-#: redirect_box.cc:747
+#: redirect_box.cc:749
 #, fuzzy
 msgid "rename redirect"
 msgstr "ardour: переименовать область"
 
-#: redirect_box.cc:824 redirect_box.cc:872
+#: redirect_box.cc:826 redirect_box.cc:874
 msgid ""
 "Copying the set of redirects on the clipboard failed,\n"
 "probably because the I/O configuration of the plugins\n"
 "could not match the configuration of this track."
 msgstr ""
 
-#: redirect_box.cc:894
+#: redirect_box.cc:896
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this track?\n"
@@ -5672,7 +5678,7 @@ msgstr ""
 "Вы действительно хотите удалить трек \"%1\" ?\n"
 "(отмена невозможна)"
 
-#: redirect_box.cc:897
+#: redirect_box.cc:899
 #, fuzzy
 msgid ""
 "Do you really want to remove all redirects from this bus?\n"
@@ -5681,246 +5687,258 @@ msgstr ""
 "Вы действительно хотите удалить трек \"%1\" ?\n"
 "(отмена невозможна)"
 
-#: redirect_box.cc:902
+#: redirect_box.cc:904
 #, fuzzy
 msgid "Yes, remove them all"
 msgstr "Да, удалить."
 
-#: redirect_box.cc:938
+#: redirect_box.cc:940
 #, fuzzy
 msgid "ardour: %1"
 msgstr "ardour: "
 
-#: redirect_box.cc:980
+#: redirect_box.cc:982
 #, fuzzy
 msgid "ardour: %1: %2 (by %3)"
 msgstr "ardour: "
 
 #. new stuff
-#: redirect_box.cc:1052
+#: redirect_box.cc:1054
 msgid "New Plugin ..."
 msgstr ""
 
-#: redirect_box.cc:1053
+#: redirect_box.cc:1055
 #, fuzzy
 msgid "New Insert"
 msgstr "новый вход"
 
-#: redirect_box.cc:1054
+#: redirect_box.cc:1056
 msgid "New Send ..."
 msgstr ""
 
-#: redirect_box.cc:1066
+#: redirect_box.cc:1068
 #, fuzzy
 msgid "Deselect All"
 msgstr "Выделить всё"
 
-#: redirect_box.cc:1073
+#: redirect_box.cc:1075
 #, fuzzy
 msgid "Activate all"
 msgstr "Активировать"
 
-#: redirect_box.cc:1074
+#: redirect_box.cc:1076
 #, fuzzy
 msgid "Deactivate all"
 msgstr "Деактивировать"
 
-#: region_editor.cc:44
+#: region_editor.cc:45
 msgid "NAME:"
 msgstr "ИМЯ:"
 
-#: region_editor.cc:45
+#: region_editor.cc:46
 msgid "lock"
 msgstr "фикс."
 
-#: region_editor.cc:47
+#: region_editor.cc:48
 msgid "opaque"
 msgstr "затенить"
 
-#: region_editor.cc:52
+#: region_editor.cc:49 region_editor.cc:192 region_editor.cc:226
+msgid "active"
+msgstr "активно"
+
+#: region_editor.cc:50
+msgid "visible"
+msgstr "отображать"
+
+#: region_editor.cc:53
 msgid "Layer"
 msgstr "Слой"
 
-#: region_editor.cc:60
+#: region_editor.cc:54
+msgid "play"
+msgstr "воспроизвести"
+
+#: region_editor.cc:61
 msgid "ENVELOPE"
 msgstr "ОГИБАЮЩАЯ"
 
-#: region_editor.cc:106
+#: region_editor.cc:107
 msgid "mute this region"
 msgstr "отключить воспроизведение этой области"
 
-#: region_editor.cc:107
+#: region_editor.cc:108
 msgid "regions underneath this one cannot be heard"
 msgstr "области ниже этой не могут быть прослушаны"
 
-#: region_editor.cc:108
+#: region_editor.cc:109
 msgid "prevent any changes to this region"
 msgstr "запретить любые изменения этой области"
 
-#: region_editor.cc:109
+#: region_editor.cc:110
 msgid "use the gain envelope during playback"
 msgstr "использовать огибающую при воспроизведении"
 
-#: region_editor.cc:110
+#: region_editor.cc:111
 msgid "show the gain envelope"
 msgstr "отображать огибающую"
 
-#: region_editor.cc:111
+#: region_editor.cc:112
 msgid "use fade in curve during playback"
 msgstr "использовать вводную кривую при воспроизведении"
 
-#: region_editor.cc:112
+#: region_editor.cc:113
 msgid "use fade out curve during playback"
 msgstr "использовать выводную кривую при воспроизведении"
 
-#: region_editor.cc:113
+#: region_editor.cc:114
 msgid "audition this region"
 msgstr "прослушать область"
 
-#: region_editor.cc:146
+#: region_editor.cc:147
 msgid "START:"
 msgstr "НАЧАЛО:"
 
-#: region_editor.cc:148
+#: region_editor.cc:149
 msgid "END:"
 msgstr "КОНЕЦ:"
 
-#: region_editor.cc:150
+#: region_editor.cc:151
 msgid "LENGTH:"
 msgstr "ДЛИНА:"
 
-#: region_editor.cc:190
+#: region_editor.cc:191
 msgid "FADE IN"
 msgstr "ВВЕДЕНИЕ В УРОВЕНЬ"
 
-#: region_editor.cc:192 region_editor.cc:226
+#: region_editor.cc:193 region_editor.cc:227
 msgid "msecs"
 msgstr "мсек"
 
-#: region_editor.cc:224
+#: region_editor.cc:225
 msgid "FADE OUT"
 msgstr "СВЕДЕНИЕ В НОЛЬ"
 
-#: region_editor.cc:264
+#: region_editor.cc:265
 msgid "ardour: region "
 msgstr "ardour: область "
 
-#: region_editor.cc:401
+#: region_editor.cc:402
 msgid "fade in edit"
 msgstr "редактировать введение в уровень"
 
-#: region_editor.cc:413
+#: region_editor.cc:414
 msgid "fade out edit"
 msgstr "редактировать сведение в ноль"
 
-#: regionview.cc:1140
+#: regionview.cc:1146
 #, fuzzy
 msgid "add gain control point"
 msgstr "использовать контрольные выходы"
 
-#: route_params_ui.cc:88
+#: route_params_ui.cc:89
 msgid "Tracks/Buses"
 msgstr "Треки/Шины"
 
-#: route_params_ui.cc:108
+#: route_params_ui.cc:109
 #, fuzzy
 msgid "Pre-fader Redirects"
 msgstr "Предобработка"
 
-#: route_params_ui.cc:109
+#: route_params_ui.cc:110
 #, fuzzy
 msgid "Post-fader Redirects"
 msgstr "Постобработка"
 
-#: route_params_ui.cc:141
+#: route_params_ui.cc:144
 #, fuzzy
 msgid "ardour: track/bus inspector"
 msgstr "ardour: добавить трек/шину"
 
-#: route_params_ui.cc:142
+#: route_params_ui.cc:145
 msgid "ardour_route_parameters"
 msgstr "ardour_параметры_маршрутов"
 
-#: route_params_ui.cc:199
+#: route_params_ui.cc:202
 msgid "route display list item for renamed route not found!"
 msgstr ""
 
-#: route_params_ui.cc:451
+#: route_params_ui.cc:453
 msgid "NO TRACK"
 msgstr "НЕТ ТРЕКОВ"
 
-#: route_params_ui.cc:693
+#: route_params_ui.cc:695
 #, fuzzy
 msgid "ardour: track/bus inspector: "
 msgstr "ardour: добавить трек/шину"
 
-#: route_params_ui.cc:697
+#: route_params_ui.cc:699
 msgid "No Route Selected"
 msgstr "Нет выбранных маршрутов"
 
-#: route_params_ui.cc:698
+#: route_params_ui.cc:700
 #, fuzzy
 msgid "ardour: track/bus/inspector: no route selected"
 msgstr "ardour: параметры маршрутов: нет выбранных маршрутов"
 
 #. ctrl-shift-click applies change to all routes
-#: route_ui.cc:133
+#: route_ui.cc:134
 msgid "mute change"
 msgstr ""
 
 #. ctrl-shift-click applies change to all routes
 #. ctrl-alt-click: exclusively solo this track, not a toggle */
-#: route_ui.cc:208 route_ui.cc:218
+#: route_ui.cc:209 route_ui.cc:219
 msgid "solo change"
 msgstr ""
 
-#: route_ui.cc:281
+#: route_ui.cc:282
 msgid "rec-enable change"
 msgstr ""
 
-#: route_ui.cc:472
+#: route_ui.cc:479
 #, fuzzy
 msgid "Solo-safe"
 msgstr "Соло"
 
-#: route_ui.cc:480 route_ui.cc:523
+#: route_ui.cc:487 route_ui.cc:530
 #, fuzzy
 msgid "MIDI Bind"
 msgstr "MIDI"
 
-#: route_ui.cc:494
+#: route_ui.cc:501
 msgid "Pre Fader"
 msgstr "Пред фейдер"
 
-#: route_ui.cc:501
+#: route_ui.cc:508
 msgid "Post Fader"
 msgstr "Пост фейдер"
 
-#: route_ui.cc:508
+#: route_ui.cc:515
 msgid "Control Outs"
 msgstr "Контрольные выходы"
 
-#: route_ui.cc:515
+#: route_ui.cc:522
 msgid "Main Outs"
 msgstr "Главные выходы"
 
-#: route_ui.cc:552
+#: route_ui.cc:559
 msgid "mix group solo  change"
 msgstr ""
 
-#: route_ui.cc:586
+#: route_ui.cc:593
 msgid "mix group mute change"
 msgstr ""
 
-#: route_ui.cc:602
+#: route_ui.cc:609
 msgid "mix group rec-enable change"
 msgstr ""
 
-#: route_ui.cc:619 visual_time_axis.cc:236
+#: route_ui.cc:626 visual_time_axis.cc:237
 msgid "ardour: color selection"
 msgstr "ardour: выбор цвета"
 
-#: route_ui.cc:695
+#: route_ui.cc:702
 #, fuzzy
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
@@ -5931,7 +5949,7 @@ msgstr ""
 "Вы действительно хотите удалить трек \"%1\" ?\n"
 "(отмена невозможна)"
 
-#: route_ui.cc:697
+#: route_ui.cc:704
 msgid ""
 "Do you really want to remove bus \"%1\" ?\n"
 "(cannot be undone)"
@@ -5939,11 +5957,11 @@ msgstr ""
 "Вы действительно хотите удалить шину \"%1\" ?\n"
 "(отмена невозможна)"
 
-#: route_ui.cc:701 visual_time_axis.cc:278
+#: route_ui.cc:708 visual_time_axis.cc:279
 msgid "Yes, remove it."
 msgstr "Да, удалить."
 
-#: route_ui.cc:730
+#: route_ui.cc:737
 #, fuzzy
 msgid "New Name: "
 msgstr "новое имя: "
@@ -6002,148 +6020,149 @@ msgstr "Файл недоступен: "
 msgid "Name for Field"
 msgstr "Имя области: "
 
-#: sfdb_ui.cc:333
+#: sfdb_ui.cc:335
 msgid "Split Channels"
 msgstr ""
 
-#: sfdb_ui.cc:340
+#: sfdb_ui.cc:342
 msgid "Create a region for each channel"
 msgstr ""
 
-#: sfdb_ui.cc:342
+#: sfdb_ui.cc:344
 msgid "Embed"
 msgstr ""
 
-#: sfdb_ui.cc:344
+#: sfdb_ui.cc:346
 #, fuzzy
 msgid "Link to an external file"
 msgstr "Вставить внешний аудиофайл"
 
-#: sfdb_ui.cc:346
+#: sfdb_ui.cc:348
 msgid "Import"
 msgstr "Импорт"
 
-#: sfdb_ui.cc:348
+#: sfdb_ui.cc:350
 msgid "Copy a file to the session folder"
 msgstr ""
 
-#: sfdb_ui.cc:412
+#: sfdb_ui.cc:414
 #, fuzzy
 msgid "programming error: %1"
 msgstr "ошибка в программе: "
 
-#: tempo_dialog.cc:17 tempo_dialog.cc:34
+#: tempo_dialog.cc:18 tempo_dialog.cc:35
 msgid "Beats per minute"
 msgstr "Ударов в минуту"
 
-#: tempo_dialog.cc:20 tempo_dialog.cc:37 tempo_dialog.cc:153
-#: tempo_dialog.cc:171
+#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:203
+#: tempo_dialog.cc:221
 msgid "Bar"
 msgstr "Такт"
 
-#: tempo_dialog.cc:21 tempo_dialog.cc:38 tempo_dialog.cc:154
-#: tempo_dialog.cc:172
+#: tempo_dialog.cc:22 tempo_dialog.cc:39 tempo_dialog.cc:204
+#: tempo_dialog.cc:222
 msgid "Beat"
 msgstr "Доля"
 
-#: tempo_dialog.cc:23 tempo_dialog.cc:40 tempo_dialog.cc:155
-#: tempo_dialog.cc:173
+#: tempo_dialog.cc:24 tempo_dialog.cc:41 tempo_dialog.cc:205
+#: tempo_dialog.cc:223
 msgid "Location"
 msgstr "Расположение"
 
-#: tempo_dialog.cc:149 tempo_dialog.cc:167
+#: tempo_dialog.cc:199 tempo_dialog.cc:217
 msgid "Meter denominator"
 msgstr "Знаменатель размера"
 
-#: tempo_dialog.cc:150 tempo_dialog.cc:168
+#: tempo_dialog.cc:200 tempo_dialog.cc:218
 msgid "Beats per bar"
 msgstr "Долей на такт"
 
-#: tempo_dialog.cc:186 tempo_dialog.cc:197
+#: tempo_dialog.cc:236 tempo_dialog.cc:247
 msgid "whole (1)"
 msgstr "целых (1)"
 
-#: tempo_dialog.cc:187 tempo_dialog.cc:199
+#: tempo_dialog.cc:237 tempo_dialog.cc:249
 msgid "second (2)"
 msgstr "половины (2)"
 
-#: tempo_dialog.cc:188 tempo_dialog.cc:201
+#: tempo_dialog.cc:238 tempo_dialog.cc:251
 msgid "third (3)"
 msgstr "трети (3)"
 
-#: tempo_dialog.cc:189 tempo_dialog.cc:203 tempo_dialog.cc:211
+#: tempo_dialog.cc:239 tempo_dialog.cc:253 tempo_dialog.cc:261
 msgid "quarter (4)"
 msgstr "четверти (4)"
 
-#: tempo_dialog.cc:190 tempo_dialog.cc:205
+#: tempo_dialog.cc:240 tempo_dialog.cc:255
 msgid "eighth (8)"
 msgstr "восьмых (8)"
 
-#: tempo_dialog.cc:191 tempo_dialog.cc:207
+#: tempo_dialog.cc:241 tempo_dialog.cc:257
 msgid "sixteenth (16)"
 msgstr "шестьнадцатых (16)"
 
-#: tempo_dialog.cc:192 tempo_dialog.cc:209
+#: tempo_dialog.cc:242 tempo_dialog.cc:259
 msgid "thirty-second (32)"
 msgstr "тридцать-вторых (32)"
 
-#: tempo_dialog.cc:321
+#: tempo_dialog.cc:420
 msgid "garbaged note type entry (%1)"
 msgstr "неясное определение ноты (%1)"
 
-#: tempo_dialog.cc:331
+#: tempo_dialog.cc:430
 msgid "incomprehensible note type entry (%1)"
 msgstr "некорректное определение ноты (%1)"
 
-#: time_axis_view.cc:111
+#: time_axis_view.cc:112
 msgid "gTortnam"
 msgstr ""
 
-#: time_axis_view.cc:548
+#: time_axis_view.cc:549
 msgid "Largest"
 msgstr "Огромная"
 
-#: time_axis_view.cc:549
+#: time_axis_view.cc:550
 msgid "Large"
 msgstr "Большая"
 
-#: time_axis_view.cc:550
+#: time_axis_view.cc:551
 msgid "Larger"
 msgstr "Больше"
 
-#: time_axis_view.cc:552
+#: time_axis_view.cc:553
 msgid "Smaller"
 msgstr "Меньше"
 
-#: time_axis_view.cc:553
+#: time_axis_view.cc:554
 msgid "Small"
 msgstr "Маленькая"
 
-#: time_axis_view.cc:869
+#: time_axis_view.cc:870
 msgid "unknown track height name \"%1\" in XML GUI information"
 msgstr "неизвестное имя ширины трека \"%1\" в XML описании"
 
-#: time_axis_view_item.cc:71
+#. first constructed item sets up font info
+#: time_axis_view_item.cc:79
 msgid "TimeAxisViewItemName"
 msgstr ""
 
-#: time_axis_view_item.cc:271
+#: time_axis_view_item.cc:298
 msgid "new duration %1 frames is out of bounds for %2"
 msgstr ""
 
-#: time_selection.cc:40
+#: time_selection.cc:41
 msgid "programming error: request for non-existent audio range (%1)!"
 msgstr "ошибка в программе: request for non-existent audio range (%1)!"
 
-#: utils.cc:106 utils.cc:149
+#: utils.cc:107 utils.cc:150
 msgid "bad XPM header %1"
 msgstr "ошибка в XPM заголовке %1"
 
-#: utils.cc:331
+#: utils.cc:332
 msgid "missing RGBA style for \"%1\""
 msgstr ""
 
-#: visual_time_axis.cc:275
+#: visual_time_axis.cc:276
 msgid ""
 "Do you really want to remove track \"%1\" ?\n"
 "(cannot be undone)"
@@ -6151,14 +6170,89 @@ msgstr ""
 "Вы действительно хотите удалить трек \"%1\" ?\n"
 "(отмена невозможна)"
 
-#: visual_time_axis.cc:324
+#: visual_time_axis.cc:325
 msgid "new name: "
 msgstr "новое имя: "
 
-#: visual_time_axis.cc:335
+#: visual_time_axis.cc:336
 msgid "A track already exists with that name"
 msgstr "Трек с таким именем уже существует"
 
+#, fuzzy
+#~ msgid "set selected trackview"
+#~ msgstr "Вставить выбранное"
+
+#, fuzzy
+#~ msgid "set selected control point"
+#~ msgstr "использовать контрольные выходы"
+
+#, fuzzy
+#~ msgid "set selected regionview"
+#~ msgstr "Воспроизвести выделенную область"
+
+#~ msgid "Start a new session\n"
+#~ msgstr "Начать новую сессию\n"
+
+#~ msgid "via Session menu"
+#~ msgstr "в меню \"Сессия\""
+
+#, fuzzy
+#~ msgid "<b>Advanced</b>"
+#~ msgstr "Дополнительно..."
+
+#, fuzzy
+#~ msgid "Select a File"
+#~ msgstr "Выделить всё"
+
+#, fuzzy
+#~ msgid "Track/Bus connection options"
+#~ msgstr "Треки/Шины"
+
+#~ msgid "RECORD"
+#~ msgstr "ЗАПИСЬ"
+
+#~ msgid "INPUT"
+#~ msgstr "ВХОД"
+
+#~ msgid "OUTPUT"
+#~ msgstr "ВЫХОД"
+
+#, fuzzy
+#~ msgid "Gain automation mode"
+#~ msgstr "автомат"
+
+#, fuzzy
+#~ msgid "Gain automation type"
+#~ msgstr "автомат"
+
+#, fuzzy
+#~ msgid "gain automation mode"
+#~ msgstr "автомат"
+
+#, fuzzy
+#~ msgid "gain automation state"
+#~ msgstr "автомат"
+
+#, fuzzy
+#~ msgid "pan automation state"
+#~ msgstr "автомат"
+
+#~ msgid "REC"
+#~ msgstr "ЗАП"
+
+#~ msgid "OUT"
+#~ msgstr "ВЫХ"
+
+#~ msgid "aplay"
+#~ msgstr "авоспр"
+
+#, fuzzy
+#~ msgid "awrite"
+#~ msgstr "запись"
+
+#~ msgid "no group"
+#~ msgstr "нет группы"
+
 #, fuzzy
 #~ msgid "normal"
 #~ msgstr "Норм."
@@ -6438,9 +6532,6 @@ msgstr "Трек с таким именем уже существует"
 #~ msgid "AND"
 #~ msgstr "И"
 
-#~ msgid "OR"
-#~ msgstr "ИЛИ"
-
 #~ msgid "ardour: locate soundfiles"
 #~ msgstr "ardour: расположение звуковых файлов"
 
@@ -6461,9 +6552,6 @@ msgstr "Трек с таким именем уже существует"
 #~ msgid "***"
 #~ msgstr "***"
 
-#~ msgid "Mix Groups"
-#~ msgstr "Mix группы"
-
 #~ msgid "Hide All AudioTrack MixerStrips"
 #~ msgstr "Скрыть все каналы аудиотреков"
 
@@ -6476,9 +6564,6 @@ msgstr "Трек с таким именем уже существует"
 #~ msgid "Name for new mix group"
 #~ msgstr "Имя новой mix группы"
 
-#~ msgid "Session name:"
-#~ msgstr "Имя сессии:"
-
 #~ msgid "Create"
 #~ msgstr "Создать"
 
@@ -6510,17 +6595,9 @@ msgstr "Трек с таким именем уже существует"
 #~ "Если вы хотите использовать другую частоту дискретизации,\n"
 #~ "вам необходимо закрыть Ardour и перезапустить JACK"
 
-#, fuzzy
-#~ msgid "Session template"
-#~ msgstr "использовать имеющийся шаблон"
-
 #~ msgid "blank"
 #~ msgstr "пустой"
 
-#, fuzzy
-#~ msgid "No template"
-#~ msgstr "-шаблон"
-
 #, fuzzy
 #~ msgid "Slave to MTC"
 #~ msgstr "Передача MTC"
@@ -6546,9 +6623,6 @@ msgstr "Трек с таким именем уже существует"
 #~ msgid "Native Format"
 #~ msgstr "Внутренний формат"
 
-#~ msgid "Use as click"
-#~ msgstr "Использовать как щелчок метронома"
-
 #~ msgid "--unknown--"
 #~ msgstr "--неизвестный--"
 
index 57b1c07967e849ff04df58bfff45ef78a915aa3c..8971e8ff10245f9105e670321bb90650c4d3de91 100644 (file)
@@ -32,6 +32,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 RedirectAutomationLine::RedirectAutomationLine (const string & name, Redirect& rd, uint32_t port, Session& s,
                                                
index 3933359db024f7450eccc531fe6fc85cd4c0151b..ad39f6625cae4fd977aafa3c4cde12f9cf3dce18 100644 (file)
@@ -53,8 +53,6 @@ class RedirectAutomationLine : public AutomationLine
 
        void view_to_model_y (double&);
        void model_to_view_y (double&);
-       void change_model (uint32_t, double x, double y);
-       void change_model_range (uint32_t, uint32_t, double delta);
 };
 
 #endif /* __ardour_gtk_region_gain_line_h__ */
index 798d132a4ae2d420d5ebf2dbdc407ec0cf4fb88d..e1b71310ac1bae7030a170c40d5dcb92f3950424 100644 (file)
@@ -29,6 +29,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 
 RedirectAutomationTimeAxisView::RedirectAutomationTimeAxisView (Session& s, Route& r, PublicEditor& e, TimeAxisView& parent, Canvas& canvas, std::string n,
index f186fab2d5be97ae7c638b2bdb17f21530e30b20..f5cb9522e06caf72c237fe2a888d6dfa8414df74 100644 (file)
@@ -38,7 +38,7 @@
 #include <ardour/audioengine.h>
 #include <ardour/route.h>
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/send.h>
 #include <ardour/insert.h>
 #include <ardour/ladspa_plugin.h>
@@ -65,6 +65,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace Glib;
 using namespace Gtkmm2ext;
index 73aa3465d974a260c716de3c3c81560acef2094d..413ff01753453ef83a7405c030d748c9bd310226 100644 (file)
@@ -33,6 +33,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace std;
 
index 059289acd4516d160fdb913e718175ae356f4eba..bba9410ffba344e4a4a4121eba9993e61e2625c6 100644 (file)
@@ -16,6 +16,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 AudioRegionGainLine::AudioRegionGainLine (const string & name, Session& s, AudioRegionView& r, ArdourCanvas::Group& parent, Curve& c)
   : AutomationLine (name, r.get_time_axis_view(), parent, c),
index b3ceb8516ff92c8afe65ec0acc6f478b658ec8fa..751584cab7a5ddfe6ff9c13b308b1b6ef89c2eba 100644 (file)
@@ -6,6 +6,7 @@
 #include "region_selection.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 
 
index dbca103239c31b791a5cd6bd28e642cd74bcddf2..114aaf5da37f2232d66c512c404bb47f3fddda87 100644 (file)
@@ -27,7 +27,8 @@
 
 #include <ardour/playlist.h>
 #include <ardour/audioregion.h>
-#include <ardour/diskstream.h>
+#include <ardour/audiosource.h>
+#include <ardour/audio_diskstream.h>
 
 #include "streamview.h"
 #include "regionview.h"
@@ -48,6 +49,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Editing;
 using namespace ArdourCanvas;
 
@@ -1233,12 +1235,6 @@ AudioRegionView::set_waveform_shape (WaveformShape shape)
        }
 }
 
-std::string
-AudioRegionView::get_item_name ()
-{
-       return region.name();
-}
-
 void
 AudioRegionView::move (double x_delta, double y_delta)
 {
index cb71a8f3a789bc7c1cba233b3ae1d194a5a7f114..f49b46aea4373056ab36dde420f4c666fea48748 100644 (file)
@@ -63,7 +63,6 @@ class AudioRegionView : public TimeAxisViewItem
     bool is_valid() const { return valid; }
     void set_valid (bool yn) { valid = yn; }
 
-    std::string get_item_name();
     void set_height (double);
     void set_samples_per_unit (double);
     bool set_duration (jack_nframes_t, void*);
index aee247df026b500193e217e045f858a3b276fb18..d6ec7eab6c6042d3d5c1bbbc06a8958de24ac8d6 100644 (file)
@@ -26,7 +26,7 @@
 
 #include <ardour/session.h>
 #include <ardour/session_route.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/plugin.h>
 #include <ardour/plugin_manager.h>
 #include <ardour/ardour.h>
@@ -52,6 +52,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Gtk;
 using namespace sigc;
 
index cefe7985cbdad8b24921d805f654c822b7493b71..6d315e0aaecd10429b5570d4cbf626d5c16c0144 100644 (file)
@@ -31,6 +31,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 
 RouteRedirectSelection&
index 05f36831759ba54f7886139b36da5f459196c903..4559058b8d4b4b420859edfdb9b7a1e648729b7a 100644 (file)
 
 #include <ardour/route.h>
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 
 #include "i18n.h"
 using namespace sigc;
 using namespace Gtk;
 using namespace Gtkmm2ext;
 using namespace ARDOUR;
+using namespace PBD;
 
 
 RouteUI::RouteUI (ARDOUR::Route& rt, ARDOUR::Session& sess, const char* m_name,
@@ -433,7 +434,13 @@ RouteUI::refresh_remote_control_menu ()
 
        limit += 4; /* leave some breathing room */
        
-       for (uint32_t i = 0; i < limit; ++i) {
+       rc_items.push_back (RadioMenuElem (rc_group, _("None")));
+       if (_route.remote_control_id() == 0) {
+               rc_active = dynamic_cast<CheckMenuItem*> (&rc_items.back());
+               rc_active->set_active ();
+       }
+               
+       for (uint32_t i = 1; i < limit; ++i) {
                snprintf (buf, sizeof (buf), "%u", i);
                rc_items.push_back (RadioMenuElem (rc_group, buf));
                rc_active = dynamic_cast<RadioMenuItem*>(&rc_items.back());
@@ -872,7 +879,7 @@ RouteUI::is_audio_track () const
        return dynamic_cast<AudioTrack*>(&_route) != 0;
 }
 
-DiskStream*
+AudioDiskstream*
 RouteUI::get_diskstream () const
 {
        AudioTrack *at;
index b7a5b059f02b337cdf501984aee8f3be24575ca5..69c9b7f5a9ac92f0788e2f4183fb028517774c99 100644 (file)
@@ -50,7 +50,7 @@ class RouteUI : public virtual AxisView
        virtual ~RouteUI();
 
        bool is_audio_track() const;
-       ARDOUR::DiskStream* get_diskstream() const;
+       ARDOUR::AudioDiskstream* get_diskstream() const;
 
        ARDOUR::Route& route() const { return _route; }
        ARDOUR::AudioTrack* audio_track() const;
@@ -116,7 +116,7 @@ class RouteUI : public virtual AxisView
 
        sigc::connection blink_connection;
 
-       void rec_enable_button_blink (bool onoff, ARDOUR::DiskStream *, Gtk::Widget *w);
+       void rec_enable_button_blink (bool onoff, ARDOUR::AudioDiskstream *, Gtk::Widget *w);
        
        void remove_this_route ();
        static gint idle_remove_this_route (RouteUI *);
index fdd6f7ff9f1fc298a29e45ae60aab8f4cbede3cc..b4be7090e25609b695398244033607630d9a7694 100644 (file)
@@ -21,7 +21,9 @@
 #ifndef __ardour_gtk_selectable_h__
 #define __ardour_gtk_selectable_h__
 
-class Selectable 
+#include <sigc++/signal.h>
+
+class Selectable : public virtual sigc::trackable
 {
   public:
        Selectable() {
@@ -30,10 +32,20 @@ class Selectable
 
        virtual ~Selectable() {}
 
-       virtual void set_selected (bool) {
-               _selected = true;
+       virtual void set_selected (bool yn) {
+               if (yn != _selected) {
+                       _selected = true;
+                       Selected (_selected); /* EMIT_SIGNAL */
+               }
+       }
+
+       bool get_selected() const {
+               return _selected;
        }
 
+       /** Emitted when the selected status of this Selectable changes */
+       sigc::signal<void, bool> Selected ;
+
   protected:
        bool _selected;
 };
index 3c1aea1ec85caa30ff33236cf07a925c7e8311e8..2e4ed8a1176caba4287e60b7d9f78199ba21ac8c 100644 (file)
@@ -33,6 +33,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 
 struct AudioRangeComparator {
index 8ce3838176b25e960a61d18ff7c58057a25930d8..be95f753e74b134edaf1c5a3167d3e460fd3387c 100644 (file)
@@ -28,6 +28,7 @@
 #include "gui_thread.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 SendUI::SendUI (Send& s, Session& se)
        : _send (s),
index 947f470ac8f342144a17892bd764520362f0234c..79546880de0644c3f04719b48ed4831bf2d69c0f 100644 (file)
@@ -31,7 +31,7 @@
 
 #include <ardour/audio_library.h>
 #include <ardour/audioregion.h>
-#include <ardour/externalsource.h>
+#include <ardour/audiofilesource.h>
 
 #include "ardour_ui.h"
 #include "gui_thread.h"
@@ -42,6 +42,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace std;
 
 SoundFileBox::SoundFileBox ()
@@ -122,7 +123,7 @@ SoundFileBox::setup_labels (string filename)
        path = filename;
 
        string error_msg;
-       if(!ExternalSource::get_soundfile_info (filename, sf_info, error_msg)) {
+       if(!AudioFileSource::get_soundfile_info (filename, sf_info, error_msg)) {
                return false;
        }
 
@@ -187,12 +188,12 @@ SoundFileBox::play_btn_clicked ()
 
        if (region_cache.find (path) == region_cache.end()) {
                AudioRegion::SourceList srclist;
-               ExternalSource* sfs;
+               AudioFileSource* afs;
 
                for (int n = 0; n < sf_info.channels; ++n) {
                        try {
-                               sfs = ExternalSource::create (path+":"+string_compose("%1", n), false);
-                               srclist.push_back(sfs);
+                               afs = AudioFileSource::create (path+":"+string_compose("%1", n));
+                               srclist.push_back(afs);
 
                        } catch (failed_constructor& err) {
                                error << _("Could not access soundfile: ") << path << endmsg;
index 769e4ff02d9e4c587e735570f140b0ff49a4ff45..79c73b97ac9b5f800bbe7701e304488289f17b17 100644 (file)
@@ -40,7 +40,7 @@
 #include <gtkmm/treeview.h>
 
 #include <ardour/session.h>
-#include <ardour/externalsource.h>
+#include <ardour/audiofilesource.h>
 
 #include "ardour_dialog.h"
 #include "editing.h"
@@ -69,7 +69,7 @@ class SoundFileBox : public Gtk::VBox
 
     LabelModelColumns label_columns;
     
-       ARDOUR::SoundFileInfo sf_info;
+    ARDOUR::SoundFileInfo sf_info;
 
     pid_t current_pid;
 
index bceaf09f99a5e21063e34ea26b5e6bf1da836842..a60e0d59e78fd9c474b49c7d19f4621052981ed4 100644 (file)
@@ -6,7 +6,8 @@
 
 #include <ardour/audioplaylist.h>
 #include <ardour/audioregion.h>
-#include <ardour/diskstream.h>
+#include <ardour/audiosource.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/audio_track.h>
 #include <ardour/playlist_templates.h>
 #include <ardour/source.h>
@@ -28,6 +29,7 @@
 #include "color.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Editing;
 
 StreamView::StreamView (AudioTimeAxisView& tv)
@@ -311,7 +313,7 @@ StreamView::undisplay_diskstream ()
 }
 
 void
-StreamView::display_diskstream (DiskStream *ds)
+StreamView::display_diskstream (AudioDiskstream *ds)
 {
        playlist_change_connection.disconnect();
        playlist_changed (ds);
@@ -337,7 +339,7 @@ StreamView::playlist_modified ()
 }
 
 void
-StreamView::playlist_changed (DiskStream *ds)
+StreamView::playlist_changed (AudioDiskstream *ds)
 {
        ENSURE_GUI_THREAD (bind (mem_fun (*this, &StreamView::playlist_changed), ds));
 
@@ -491,7 +493,7 @@ StreamView::diskstream_changed (void *src_ignored)
        AudioTrack *at;
 
        if ((at = _trackview.audio_track()) != 0) {
-               DiskStream& ds = at->disk_stream();
+               AudioDiskstream& ds = at->disk_stream();
                /* XXX grrr: when will SigC++ allow me to bind references? */
                Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun (*this, &StreamView::display_diskstream), &ds));
        } else {
@@ -547,7 +549,7 @@ StreamView::set_selected_regionviews (AudioRegionSelection& regions)
                }
                
                // cerr << "\tregion " << (*i)->region.name() << " selected = " << selected << endl;
-               (*i)->set_selected (selected, this);
+               (*i)->set_selected (selected);
        }
 }
 
@@ -634,7 +636,7 @@ StreamView::setup_rec_box ()
                                peak_ready_connections.clear();
                                        
                                for (uint32_t n=0; n < _trackview.get_diskstream()->n_channels(); ++n) {
-                                       Source *src = (Source *) _trackview.get_diskstream()->write_source (n);
+                                       AudioSource *src = (AudioSource *) _trackview.get_diskstream()->write_source (n);
                                        if (src) {
                                                sources.push_back (src);
                                                peak_ready_connections.push_back (src->PeakRangeReady.connect (bind (mem_fun (*this, &StreamView::rec_peak_range_ready), src))); 
@@ -662,7 +664,7 @@ StreamView::setup_rec_box ()
                        AudioTrack* at;
 
                        at = _trackview.audio_track(); /* we know what it is already */
-                       DiskStream& ds = at->disk_stream();
+                       AudioDiskstream& ds = at->disk_stream();
                        jack_nframes_t frame_pos = ds.current_capture_start ();
                        gdouble xstart = _trackview.editor.frame_to_pixel (frame_pos);
                        gdouble xend;
index eb17083de11685628b2c465150cfc68aff560013..00ec2d93f2a8a13b52a52fd10f935b805caaf87f 100644 (file)
@@ -37,7 +37,7 @@ namespace Gdk {
 
 namespace ARDOUR {
        class Route;
-       class DiskStream;
+       class AudioDiskstream;
        class Crossfade;
        class PeakData;
        class AudioRegion;
@@ -151,12 +151,12 @@ class StreamView : public sigc::trackable
        void remove_audio_region_view (ARDOUR::AudioRegion* );
        void remove_audio_rec_region (ARDOUR::AudioRegion*);
 
-       void display_diskstream (ARDOUR::DiskStream* );
+       void display_diskstream (ARDOUR::AudioDiskstream* );
        void undisplay_diskstream ();
        void redisplay_diskstream ();
        void diskstream_changed (void* );
        void playlist_state_changed (ARDOUR::Change);
-       void playlist_changed (ARDOUR::DiskStream* );
+       void playlist_changed (ARDOUR::AudioDiskstream* );
        void playlist_modified ();
 
        bool crossfades_visible;
index 19276223ef1f4ebf87a21281d241681ceb468b70..641d06735015936efcfbe1384707ad402a8b224d 100644 (file)
@@ -27,7 +27,8 @@
 
 #include <ardour/playlist.h>
 #include <ardour/audioregion.h>
-#include <ardour/diskstream.h>
+#include <ardour/audiosource.h>
+#include <ardour/audio_diskstream.h>
 
 #include "taperegionview.h"
 #include "audio_time_axis.h"
@@ -37,6 +38,7 @@
 
 using namespace sigc;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Editing;
 using namespace ArdourCanvas;
 
index 9f5fbda13f0bf341cc9dcd5a631d2a9377435ac2..7eb03625801e077dd3e26c60c82cf48b4be0b201 100644 (file)
@@ -11,6 +11,7 @@
 using namespace Gtk;
 using namespace Gtkmm2ext;
 using namespace ARDOUR;
+using namespace PBD;
 
 TempoDialog::TempoDialog (TempoMap& map, jack_nframes_t frame, const string & action)
        : ArdourDialog ("tempo dialog"),
index 1b6c1f390c8e8f9ebf80a313fea80665d76d2fcf..b5ab5baa1098a6868cacc0ffda3ef24dc2558400 100644 (file)
@@ -55,6 +55,7 @@ using namespace Gtk;
 using namespace Gdk;
 using namespace sigc; 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace Editing;
 using namespace ArdourCanvas;
 
index f54688ddfb2b1f7dbf53124c01cf3d4e4e6974b5..abab306a84d548044c3ea11b58c746895e42aa93 100644 (file)
@@ -38,6 +38,7 @@
 using namespace std;
 using namespace Editing;
 using namespace Glib;
+using namespace PBD;
 
 //------------------------------------------------------------------------------
 /** Initialize const static memeber data */
@@ -484,26 +485,14 @@ TimeAxisViewItem::get_item_name() const
  * @param src the identity of the object that initiated the change
  */
 void
-TimeAxisViewItem::set_selected(bool yn, void* src)
+TimeAxisViewItem::set_selected(bool yn)
 {
        if (_selected != yn) {
-               _selected = yn ;
+               Selectable::set_selected (yn);
                set_frame_color ();
-               Selected (_selected) ; /* EMIT_SIGNAL */
        }
 }
 
-/**
- * Returns whether this item is currently selected.
- *
- * @return true if this item is currently selected, false otherwise
- */
-bool
-TimeAxisViewItem::get_selected() const
-{
-       return (_selected) ;
-}
-
 void 
 TimeAxisViewItem::set_should_show_selection (bool yn)
 {
index c9e4fd5dd5883243966cf7f7a6841a114c60567b..b23350eef721f6fa4b1d7053d73436524c7c17cc 100644 (file)
@@ -21,8 +21,6 @@
 #ifndef __gtk_ardour_time_axis_view_item_h__
 #define __gtk_ardour_time_axis_view_item_h__
 
-#include <sigc++/signal.h>
-
 #include <jack/jack.h>
 #include <string>
 
@@ -38,7 +36,7 @@ class TimeAxisView;
  * A base class for 'items' that may appear upon a TimeAxisView
  *
  */
-class TimeAxisViewItem : public sigc::trackable, public Selectable
+class TimeAxisViewItem : public Selectable
 {
    public:
        virtual ~TimeAxisViewItem() ;
@@ -170,9 +168,8 @@ class TimeAxisViewItem : public sigc::trackable, public Selectable
      * Set to true to indicate that this item is currently selected
      *
      * @param yn true if this item is currently selected
-     * @param src the identity of the object that initiated the change
      */
-    virtual void set_selected(bool yn, void* src) ;
+    virtual void set_selected(bool yn) ;
 
     /**
      * Set to true to indicate that this item should show its selection status
@@ -181,13 +178,6 @@ class TimeAxisViewItem : public sigc::trackable, public Selectable
      */
     virtual void set_should_show_selection (bool yn) ;
     
-    /**
-     * Returns whether this item is currently selected.
-     *
-     * @return true if this item is currently selected, false otherwise
-     */
-    bool get_selected() const ; 
-    
     //---------------------------------------------------------------------------------------//
     // Parent Component Methods
     
@@ -319,10 +309,6 @@ class TimeAxisViewItem : public sigc::trackable, public Selectable
     /** Emitted when the mionimum item duration is changed */
     sigc::signal<void,jack_nframes_t,void*> MinDurationChanged ;
     
-    /** Emitted when the selected status of this item changes */
-    sigc::signal<void, bool> Selected ;
-    
-
   protected:
     
     enum Visibility {
index 0d1b94e8a0ae140dd9d0ccb5be63fe2ad9f6ffc9..518e04cccb3056647415cb72c85a90ad8af8ac1b 100644 (file)
@@ -28,6 +28,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 AudioRange&
 TimeSelection::operator[] (uint32_t which)
index c1ad4f6ca7fd0bde94fbe210f8dec032c698ed22..91cb7ad58b21bf30c595cfbe9d3710b05428d326 100644 (file)
@@ -43,6 +43,7 @@ using namespace std;
 using namespace Gtk;
 using namespace sigc;
 using namespace Glib;
+using namespace PBD;
 
 ustring
 fit_to_pixels (const ustring& str, int pixel_width, Pango::FontDescription& font, int& actual_width)
index b6c96c55abfd5c71b6e896812354e526b08ca881..c27ed33089bdab3ee2ce10ea3eb5c257ff7f80d2 100644 (file)
@@ -55,6 +55,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 using namespace sigc;
 using namespace Gtk;
        
index 8b40e27070787d623c20f5bd097a7c2828f5c023..7adf702f4d38a843fbeb7a3f75188623e96ad0a5 100644 (file)
@@ -19,7 +19,7 @@
 */
 
 #include <fst.h>
-
+#include <gtk/gtksocket.h>
 #include <ardour/insert.h>
 #include <ardour/vst_plugin.h>
 
@@ -29,6 +29,7 @@
 
 using namespace Gtk;
 using namespace ARDOUR;
+using namespace PBD;
 
 VSTPluginUI::VSTPluginUI (PluginInsert& pi, VSTPlugin& vp)
        : PlugUIBase (pi),
@@ -60,16 +61,12 @@ VSTPluginUI::get_preferred_height ()
 int
 VSTPluginUI::package (Gtk::Window& win)
 {
-       /* for GTK+2, remove this: you cannot add to a realized socket */
-
-       //socket.realize ();
-
        /* forward configure events to plugin window */
 
-       win.signal_configure_event().connect (bind (mem_fun (*this, &VSTPluginUI::configure_handler), &socket));
+       win.signal_configure_event().connect (bind (mem_fun (*this, &VSTPluginUI::configure_handler), &socket), false);
 
-       /* XXX in GTK2, use add_id() instead of steal, although add_id()
-          assumes that the window's owner understands the XEmbed protocol.
+       /*
+          this assumes that the window's owner understands the XEmbed protocol.
        */
        
        socket.add_id (fst_get_XID (vst.fst()));
@@ -77,45 +74,42 @@ VSTPluginUI::package (Gtk::Window& win)
        return 0;
 }
 
-gboolean
+bool
 VSTPluginUI::configure_handler (GdkEventConfigure* ev, Gtk::Socket *socket)
 {
        XEvent event;
-
        gint x, y;
+       GdkWindow* w;
 
-       if (socket->gobj() == NULL) {
-               return FALSE;
+       if (socket == 0 || ((w = socket->gobj()->plug_window) == 0)) {
+               return false;
        }
 
        event.xconfigure.type = ConfigureNotify;
-       event.xconfigure.event = GDK_WINDOW_XWINDOW (socket->get_window()->gobj());
-       event.xconfigure.window = GDK_WINDOW_XWINDOW (socket->get_window()->gobj());
+       event.xconfigure.event = GDK_WINDOW_XWINDOW (w);
+       event.xconfigure.window = GDK_WINDOW_XWINDOW (w);
 
        /* The ICCCM says that synthetic events should have root relative
         * coordinates. We still aren't really ICCCM compliant, since
         * we don't send events when the real toplevel is moved.
         */
        gdk_error_trap_push ();
-       gdk_window_get_origin (socket->get_window()->gobj(), &x, &y);
+       gdk_window_get_origin (w, &x, &y);
        gdk_error_trap_pop ();
 
        event.xconfigure.x = x;
        event.xconfigure.y = y;
-       event.xconfigure.width = GTK_WIDGET(socket)->allocation.width;
-       event.xconfigure.height = GTK_WIDGET(socket)->allocation.height;
+       event.xconfigure.width = GTK_WIDGET(socket->gobj())->allocation.width;
+       event.xconfigure.height = GTK_WIDGET(socket->gobj())->allocation.height;
 
        event.xconfigure.border_width = 0;
        event.xconfigure.above = None;
        event.xconfigure.override_redirect = False;
 
        gdk_error_trap_push ();
-       XSendEvent (GDK_WINDOW_XDISPLAY (socket->get_window()->gobj()),
-                   GDK_WINDOW_XWINDOW (socket->get_window()->gobj()),
-                   False, StructureNotifyMask, &event);
-       // gdk_display_sync (GDK_WINDOW_XDISPLAY (socket->plug_window));
+       XSendEvent (GDK_WINDOW_XDISPLAY (w), GDK_WINDOW_XWINDOW (w), False, StructureNotifyMask, &event);
        gdk_error_trap_pop ();
 
-       return FALSE;
+       return false;
 }
 
index 0fb5cfc78880f088e68f3cffa8998b6ac062174e..605911d7ef4c71342689c14e1414195a253fbcd4 100644 (file)
@@ -27,12 +27,15 @@ ardour.Append(POTFILE = domain + '.pot')
 ardour.Append(CPPPATH = '#libs/surfaces/control_protocol')
 
 ardour_files=Split("""
+audio_diskstream.cc
 audio_library.cc
 audio_playlist.cc
 audio_track.cc
 audioengine.cc
+audiofilesource.cc
 audiofilter.cc
 audioregion.cc
+audiosource.cc
 auditioner.cc
 automation.cc
 automation_event.cc
@@ -44,9 +47,6 @@ curve.cc
 cycle_timer.cc
 default_click.cc
 destructive_filesource.cc
-diskstream.cc
-externalsource.cc
-filesource.cc
 gain.cc
 gdither.cc
 globals.cc
@@ -103,6 +103,7 @@ extra_sources = [ ]
 
 if ardour['VST']:
        extra_sources += vst_files
+       ardour.Append(CCFLAGS="-DVST_SUPPORT", CPPPATH="#libs/fst")
 
 if ardour['LIBLO']:
     extra_sources += osc_files
@@ -178,15 +179,14 @@ if conf.CheckCHeader('/System/Library/Frameworks/CoreMIDI.framework/Headers/Core
 if conf.CheckCHeader('/System/Library/Frameworks/AudioToolbox.framework/Headers/ExtendedAudioFile.h') and ardour['COREAUDIO'] == 1:
     ardour.Append(CXXFLAGS="-DHAVE_COREAUDIO")    
     ardour.Append(LINKFLAGS="-framework AudioToolbox")
+    extra_sources += coreaudio_files
     
 
 if env['CONFIG_ARCH'] == 'apple':
     # this next line avoids issues with circular dependencies between libardour and libardour_cp.
     # it is based on the (entirely reasonable) assumption that a system with CoreAudio is OS X
     #
-    print 'APPLE CONFIG'
     ardour.Append(LINKFLAGS='-undefined suppress -flat_namespace') 
-    extra_sources += coreaudio_files
 
 ardour = conf.Finish ()
 
@@ -201,8 +201,8 @@ ardour.Merge ([
             libraries['pbd3'],
             libraries['soundtouch'],
             libraries['midi++2'],
-             libraries['glib2'],
-             libraries['glibmm2']
+            libraries['glib2'],
+            libraries['glibmm2']
             ])
 
 if ardour['LIBLO']:
index fee6c601a2ebf1c1c390d5dc892e31e584ed4c28..c0dfea9a950e9edccc885a363dcbdc933feaf728 100644 (file)
@@ -45,7 +45,7 @@ namespace ARDOUR {
 
        static const jack_nframes_t max_frames = JACK_MAX_FRAMES;
 
-       int init (AudioEngine&, bool with_vst, bool try_optimization, void (*sighandler)(int,siginfo_t*,void*) = 0);
+       int init (AudioEngine&, bool with_vst, bool try_optimization);
        int cleanup ();
 
        
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h
new file mode 100644 (file)
index 0000000..9355a3f
--- /dev/null
@@ -0,0 +1,447 @@
+/*
+    Copyright (C) 2000 Paul Davis 
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id: diskstream.h 579 2006-06-12 19:56:37Z essej $
+*/
+
+#ifndef __ardour_diskstream_h__
+#define __ardour_diskstream_h__
+
+#include <sigc++/signal.h>
+
+#include <cmath>
+#include <string>
+#include <queue>
+#include <map>
+#include <vector>
+
+#include <time.h>
+
+#include <pbd/fastlog.h>
+#include <pbd/ringbufferNPT.h>
+
+#include <ardour/ardour.h>
+#include <ardour/configuration.h>
+#include <ardour/session.h>
+#include <ardour/route_group.h>
+#include <ardour/route.h>
+#include <ardour/port.h>
+#include <ardour/utils.h>
+#include <ardour/stateful.h>
+
+struct tm;
+
+namespace ARDOUR {
+
+class AudioEngine;
+class Send;
+class Session;
+class AudioPlaylist;
+class AudioFileSource;
+class IO;
+
+class AudioDiskstream : public Stateful, public sigc::trackable
+{      
+  public:
+       enum Flag {
+               Recordable = 0x1,
+               Hidden = 0x2,
+               Destructive = 0x4
+       };
+
+       AudioDiskstream (Session &, const string& name, Flag f = Recordable);
+       AudioDiskstream (Session &, const XMLNode&);
+
+       string name() const { return _name; }
+
+       ARDOUR::IO* io() const { return _io; }
+       void set_io (ARDOUR::IO& io);
+
+       AudioDiskstream& ref() { _refcnt++; return *this; }
+       void unref() { if (_refcnt) _refcnt--; if (_refcnt == 0) delete this; }
+       uint32_t refcnt() const { return _refcnt; }
+
+       float playback_buffer_load() const;
+       float capture_buffer_load() const;
+
+       void set_flag (Flag f) {
+               _flags |= f;
+       }
+
+       void unset_flag (Flag f) {
+               _flags &= ~f;
+       }
+
+       AlignStyle alignment_style() const { return _alignment_style; }
+       void set_align_style (AlignStyle);
+       void set_persistent_align_style (AlignStyle);
+
+       bool hidden() const { return _flags & Hidden; }
+       bool recordable() const { return _flags & Recordable; }
+       bool destructive() const { return _flags & Destructive; }
+
+       void set_destructive (bool yn);
+
+       jack_nframes_t roll_delay() const { return _roll_delay; }
+       void set_roll_delay (jack_nframes_t);
+
+       int set_name (string str, void* src);
+
+       string input_source (uint32_t n=0) const {
+               if (n < channels.size()) {
+                       return channels[n].source ? channels[n].source->name() : "";
+               } else {
+                       return ""; 
+               }
+       }
+
+       Port *input_source_port (uint32_t n=0) const { 
+               if (n < channels.size()) return channels[n].source; return 0; 
+       }
+
+       void set_record_enabled (bool yn, void *src);
+       bool record_enabled() const { return g_atomic_int_get (&_record_enabled); }
+       void punch_in ();
+       void punch_out ();
+
+       bool  reversed() const { return _actual_speed < 0.0f; }
+       double speed() const { return _visible_speed; }
+       void set_speed (double);
+
+       float peak_power(uint32_t n=0) { 
+               float x = channels[n].peak_power;
+               channels[n].peak_power = 0.0f;
+               if (x > 0.0f) {
+                       return 20.0f * fast_log10(x);
+               } else {
+                       return minus_infinity();
+               }
+       }
+
+       int  use_playlist (AudioPlaylist *);
+       int use_new_playlist ();
+       int use_copy_playlist ();
+
+       void start_scrub (jack_nframes_t where);
+       void end_scrub ();
+
+       Sample *playback_buffer (uint32_t n=0) {
+               if (n < channels.size())
+                       return channels[n].current_playback_buffer;
+               return 0;
+       }
+       
+       Sample *capture_buffer (uint32_t n=0) {
+               if (n < channels.size())
+                       return channels[n].current_capture_buffer;
+               return 0;
+       }
+
+       AudioPlaylist *playlist () { return _playlist; }
+
+       AudioFileSource *write_source (uint32_t n=0) {
+               if (n < channels.size())
+                       return channels[n].write_source;
+               return 0;
+       }
+
+       jack_nframes_t current_capture_start() const { return capture_start_frame; }
+       jack_nframes_t current_capture_end() const { return capture_start_frame + capture_captured; }
+       jack_nframes_t get_capture_start_frame (uint32_t n=0);
+       jack_nframes_t get_captured_frames (uint32_t n=0);
+       
+       uint32_t n_channels() { return _n_channels; }
+
+       int add_channel ();
+       int remove_channel ();
+       
+       static void set_disk_io_chunk_frames (uint32_t n) {
+               disk_io_chunk_frames = n;
+       }
+
+       static jack_nframes_t disk_io_frames() { return disk_io_chunk_frames; }
+       
+       sigc::signal<void,void*> record_enable_changed;
+       sigc::signal<void>       speed_changed;
+       sigc::signal<void,void*> reverse_changed;
+       sigc::signal<void>       PlaylistChanged;
+       sigc::signal<void>       AlignmentStyleChanged;
+
+       static sigc::signal<void> DiskOverrun;
+       static sigc::signal<void> DiskUnderrun;
+       static sigc::signal<void,AudioDiskstream*> AudioDiskstreamCreated;   // XXX use a ref with sigc2
+       static sigc::signal<void,list<AudioFileSource*>*> DeleteSources;
+
+       /* stateful */
+
+       XMLNode& get_state(void);
+       int set_state(const XMLNode& node);
+
+       void monitor_input (bool);
+
+       jack_nframes_t capture_offset() const { return _capture_offset; }
+       void           set_capture_offset ();
+
+       static void swap_by_ptr (Sample *first, Sample *last) {
+               while (first < last) {
+                       Sample tmp = *first;
+                       *first++ = *last;
+                       *last-- = tmp;
+               }
+       }
+
+       static void swap_by_ptr (Sample *first, Sample *last, jack_nframes_t n) {
+               while (n--) {
+                       Sample tmp = *first;
+                       *first++ = *last;
+                       *last-- = tmp;
+               }
+       }
+
+       bool slaved() const { return _slaved; }
+       void set_slaved(bool yn) { _slaved = yn; }
+
+       int set_loop (Location *loc);
+       sigc::signal<void,Location *> LoopSet;
+
+       std::list<Region*>& last_capture_regions () {
+               return _last_capture_regions;
+       }
+
+       void handle_input_change (IOChange, void *src);
+
+       id_t id() const { return _id; }
+
+       XMLNode* deprecated_io_node;
+
+  protected:
+       friend class Session;
+
+       /* the Session is the only point of access for these
+          because they require that the Session is "inactive"
+          while they are called.
+       */
+
+       void set_pending_overwrite (bool);
+       int  overwrite_existing_buffers ();
+       void reverse_scrub_buffer (bool to_forward);
+       void set_block_size (jack_nframes_t);
+       int  internal_playback_seek (jack_nframes_t distance);
+       int  can_internal_playback_seek (jack_nframes_t distance);
+       int  rename_write_sources ();
+       void reset_write_sources (bool, bool force = false);
+       void non_realtime_input_change ();
+
+       uint32_t read_data_count() const { return _read_data_count; }
+       uint32_t write_data_count() const { return _write_data_count; }
+
+  protected:
+       friend class Auditioner;
+       int  seek (jack_nframes_t which_sample, bool complete_refill = false);
+
+  protected:
+       friend class AudioTrack;
+
+       void prepare ();
+       int  process (jack_nframes_t transport_frame, jack_nframes_t nframes, jack_nframes_t offset, bool can_record, bool rec_monitors_input);
+       bool commit  (jack_nframes_t nframes);
+       void recover (); /* called if commit will not be called, but process was */
+
+  private:
+
+       /* use unref() to destroy a diskstream */
+
+       ~AudioDiskstream();
+
+       enum TransitionType {
+               CaptureStart = 0,
+               CaptureEnd
+       };
+       
+       struct CaptureTransition {
+
+               TransitionType   type;
+               // the start or end file frame pos
+               jack_nframes_t   capture_val;
+       };
+       
+       struct ChannelInfo {
+
+               Sample     *playback_wrap_buffer;
+               Sample     *capture_wrap_buffer;
+               Sample     *speed_buffer;
+
+               float       peak_power;
+
+               AudioFileSource   *fades_source;
+               AudioFileSource   *write_source;
+
+               Port         *source;
+               Sample       *current_capture_buffer;
+               Sample       *current_playback_buffer;
+
+               RingBufferNPT<Sample> *playback_buf;
+               RingBufferNPT<Sample> *capture_buf;
+
+               Sample* scrub_buffer;
+               Sample* scrub_forward_buffer;
+               Sample* scrub_reverse_buffer;
+
+               RingBufferNPT<Sample>::rw_vector playback_vector;
+               RingBufferNPT<Sample>::rw_vector capture_vector;
+
+               RingBufferNPT<CaptureTransition> * capture_transition_buf;
+               // the following are used in the butler thread only
+               jack_nframes_t                     curr_capture_cnt;
+       };
+
+       typedef vector<ChannelInfo> ChannelList;
+
+
+       string            _name;
+       ARDOUR::Session&  _session;
+       ARDOUR::IO*       _io;
+       ChannelList        channels;
+       uint32_t      _n_channels;
+       id_t              _id;
+
+       mutable gint             _record_enabled;
+       AudioPlaylist*           _playlist;
+       double                   _visible_speed;
+       double                   _actual_speed;
+       /* items needed for speed change logic */
+       bool                     _buffer_reallocation_required;
+       bool                     _seek_required;
+       
+       bool                      force_refill;
+       jack_nframes_t            capture_start_frame;
+       jack_nframes_t            capture_captured;
+       bool                      was_recording;
+       jack_nframes_t            adjust_capture_position;
+       jack_nframes_t           _capture_offset;
+       jack_nframes_t           _roll_delay;
+       jack_nframes_t            first_recordable_frame;
+       jack_nframes_t            last_recordable_frame;
+       int                       last_possibly_recording;
+       AlignStyle               _alignment_style;
+       bool                     _scrubbing;
+       bool                     _slaved;
+       bool                     _processed;
+       Location*                 loop_location;
+       jack_nframes_t            overwrite_frame;
+       off_t                     overwrite_offset;
+       bool                      pending_overwrite;
+       bool                      overwrite_queued;
+       IOChange                  input_change_pending;
+       jack_nframes_t            wrap_buffer_size;
+       jack_nframes_t            speed_buffer_size;
+
+       uint64_t                  last_phase;
+       uint64_t                  phi;
+       
+       jack_nframes_t            file_frame;           
+       jack_nframes_t            playback_sample;
+       jack_nframes_t            playback_distance;
+
+       uint32_t                 _read_data_count;
+       uint32_t                 _write_data_count;
+
+       bool                      in_set_state;
+       AlignStyle               _persistent_alignment_style;
+       bool                      first_input_change;
+
+       Glib::Mutex  state_lock;
+
+       jack_nframes_t scrub_start;
+       jack_nframes_t scrub_buffer_size;
+       jack_nframes_t scrub_offset;
+       uint32_t _refcnt;
+
+       sigc::connection ports_created_c;
+       sigc::connection plmod_connection;
+       sigc::connection plstate_connection;
+       sigc::connection plgone_connection;
+
+       /* the two central butler operations */
+
+       int do_flush (char * workbuf, bool force = false);
+       int do_refill (Sample *mixdown_buffer, float *gain_buffer, char *workbuf);
+
+       int read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, char * workbuf, jack_nframes_t& start, jack_nframes_t cnt, 
+                 ChannelInfo& channel_info, int channel, bool reversed);
+
+       uint32_t i_am_the_modifier;
+       
+       /* XXX fix this redundancy ... */
+
+       void playlist_changed (Change);
+       void playlist_modified ();
+       void playlist_deleted (Playlist*);
+       void session_controls_changed (Session::ControlType);
+
+       void finish_capture (bool rec_monitors_input);
+       void clean_up_capture (struct tm&, time_t, bool abort);
+       void transport_stopped (struct tm&, time_t, bool abort);
+
+       struct CaptureInfo {
+           uint32_t start;
+           uint32_t frames;
+       };
+
+       vector<CaptureInfo*> capture_info;
+       Glib::Mutex  capture_info_lock;
+       
+       void init (Flag);
+
+       void init_channel (ChannelInfo &chan);
+       void destroy_channel (ChannelInfo &chan);
+       
+       static jack_nframes_t disk_io_chunk_frames;
+
+       int use_new_write_source (uint32_t n=0);
+       int use_new_fade_source (uint32_t n=0);
+
+       int find_and_use_playlist (const string&);
+
+       void allocate_temporary_buffers ();
+
+       unsigned char _flags;
+
+       int  create_input_port ();
+       int  connect_input_port ();
+       int  seek_unlocked (jack_nframes_t which_sample);
+
+       int ports_created ();
+
+       bool realtime_set_speed (double, bool global_change);
+       void non_realtime_set_speed ();
+
+       std::list<Region*> _last_capture_regions;
+       std::vector<AudioFileSource*> capturing_sources;
+       int use_pending_capture_data (XMLNode& node);
+
+       void get_input_sources ();
+       void check_record_status (jack_nframes_t transport_frame, jack_nframes_t nframes, bool can_record);
+       void set_align_style_from_io();
+       void setup_destructive_playlist ();
+       void use_destructive_playlist ();
+};
+
+}; /* namespace ARDOUR */
+
+#endif /* __ardour_diskstream_h__ */
index c7af9fc5d81794e0bf6651b9024b4d57677a75b2..1c17cbc85991e91e8356211d6ef0a954ce3d0d7b 100644 (file)
@@ -26,7 +26,7 @@
 namespace ARDOUR {
 
 class Session;
-class DiskStream;
+class AudioDiskstream;
 class AudioPlaylist;
 class RouteGroup;
 
@@ -52,8 +52,8 @@ class AudioTrack : public Route
        bool can_record() const { return true; }
        void set_record_enable (bool yn, void *src);
 
-       DiskStream& disk_stream() const { return *diskstream; }
-       int set_diskstream (DiskStream&, void *);
+       AudioDiskstream& disk_stream() const { return *diskstream; }
+       int set_diskstream (AudioDiskstream&, void *);
        int use_diskstream (string name);
        int use_diskstream (id_t id);
 
@@ -99,7 +99,7 @@ class AudioTrack : public Route
        void set_meter_point (MeterPoint, void* src);
 
   protected:
-       DiskStream *diskstream;
+       AudioDiskstream *diskstream;
        MeterPoint _saved_meter_point;
        TrackMode _mode;
 
diff --git a/libs/ardour/ardour/audiofilesource.h b/libs/ardour/ardour/audiofilesource.h
new file mode 100644 (file)
index 0000000..ecbac56
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+    Copyright (C) 2006 Paul Davis 
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __ardour_audiofilesource_h__ 
+#define __ardour_audiofilesource_h__
+
+#include <time.h>
+
+#include <ardour/audiosource.h>
+
+namespace ARDOUR {
+
+struct SoundFileInfo {
+    float       samplerate;
+    uint16_t    channels;
+    int64_t     length;
+    std::string format_name;
+};
+
+class AudioFileSource : public AudioSource {
+  public:
+       enum Flag {
+               Writable = 0x1,
+               CanRename = 0x2,
+               Broadcast = 0x4,
+               Removable = 0x8,
+               RemovableIfEmpty = 0x10,
+               RemoveAtDestroy = 0x20,
+               BuildPeaks = 0x40
+       };
+
+       virtual ~AudioFileSource ();
+
+       int set_name (string newname, bool destructive);
+
+       string path() const { return _path; }
+       string peak_path (string audio_path);
+       string old_peak_path (string audio_path);
+
+       static void set_peak_dir (string dir) { peak_dir = dir; }
+
+       /* factory for an existing but not-used-in-session audio file. this exists
+          because there maybe multiple back-end derivations of AudioFileSource,
+          some of which can handle formats that cannot be handled by others.
+          For example, CoreAudioFileSource can handle MP3 files, which SndFileSource
+          cannot.
+        */
+
+       static AudioFileSource* create (string path_plus_channel);
+       static AudioFileSource* create (const XMLNode&);
+
+       static bool get_soundfile_info (string path, SoundFileInfo& _info, string& error);
+
+       void set_allow_remove_if_empty (bool yn);
+       void mark_for_remove();
+
+       /* this block of methods do nothing for regular file sources, but are significant
+          for files used in destructive recording.
+       */
+
+       virtual jack_nframes_t last_capture_start_frame() const { return 0; }
+       virtual void           mark_capture_start (jack_nframes_t) {}
+       virtual void           mark_capture_end () {}
+       virtual void           clear_capture_marks() {}
+
+       virtual int update_header (jack_nframes_t when, struct tm&, time_t) = 0;
+       virtual int flush_header () = 0;
+
+       int move_to_trash (const string trash_dir_name);
+
+       static bool is_empty (string path);
+       void mark_streaming_write_completed ();
+
+       void   mark_take (string);
+       string take_id() const { return _take_id; }
+
+       static void set_bwf_country_code (string x);
+       static void set_bwf_organization_code (string x);
+       static void set_bwf_serial_number (int);
+       
+       static void set_search_path (string);
+       static void set_header_position_offset (jack_nframes_t offset, bool negative);
+
+       static sigc::signal<void,struct tm*, time_t> HeaderPositionOffsetChanged;
+
+       XMLNode& get_state ();
+       int set_state (const XMLNode&);
+
+       /* this should really be protected, but C++ is getting stricter
+          and creating slots from protected member functions is starting
+          to cause issues.
+       */
+
+       void handle_header_position_change (struct tm*, time_t tnow);
+
+  protected:
+       
+       /* constructor to be called for existing external-to-session files */
+
+       AudioFileSource (std::string path, Flag flags);
+
+       /* constructor to be called for new in-session files */
+
+       AudioFileSource (std::string path, Flag flags,
+                        SampleFormat samp_format, HeaderFormat hdr_format);
+
+       /* constructor to be called for existing in-session files */
+
+       AudioFileSource (const XMLNode&);
+
+       int init (string idstr, bool must_exist);
+
+       uint16_t       channel;
+       string        _path;
+       Flag          _flags;
+       string        _take_id;
+       bool           allow_remove_if_empty;
+       uint64_t       timeline_position;
+
+       static string peak_dir;
+       static string search_path;
+
+       static char bwf_country_code[3];
+       static char bwf_organization_code[4];
+       static char bwf_serial_number[13];
+
+       static uint64_t header_position_offset;
+       static bool     header_position_negative;
+
+       virtual void set_timeline_position (jack_nframes_t pos);
+       virtual void set_header_timeline_position () = 0;
+
+       bool find (std::string path, bool must_exist, bool& is_new);
+       bool removable() const;
+       bool writable() const { return _flags & Writable; }
+};
+
+}; /* namespace ARDOUR */
+
+#endif /* __ardour_audiofilesource_h__ */
+
index d0fc275cf6a2d94895f2532fff685620613b80a4..02e5e6f06171c03ae3e540570d50168a11736a0b 100644 (file)
@@ -28,7 +28,6 @@ namespace ARDOUR {
 
 class AudioRegion;
 class Session;
-class FileSource;
 
 class AudioFilter {
 
@@ -37,7 +36,6 @@ class AudioFilter {
                : session (s){}
        virtual ~AudioFilter() {}
 
-
        virtual int run (ARDOUR::AudioRegion&) = 0;
        std::vector<ARDOUR::AudioRegion*> results;
 
index f210fa595be3a1f91da145b244c68ceb312d7dca..009aa4b5b0da34b3f1acf55cba17dfa5025c3d1e 100644 (file)
@@ -27,7 +27,6 @@
 #include <pbd/undo.h>
 
 #include <ardour/ardour.h>
-#include <ardour/source.h>
 #include <ardour/gain.h>
 #include <ardour/region.h>
 #include <ardour/export.h>
@@ -40,6 +39,7 @@ class Route;
 class Playlist;
 class Session;
 class AudioFilter;
+class AudioSource;
 
 struct AudioRegionState : public RegionState 
 {
@@ -56,7 +56,7 @@ struct AudioRegionState : public RegionState
 class AudioRegion : public Region
 {
   public:
-       typedef vector<Source *> SourceList;
+       typedef vector<AudioSource *> SourceList;
 
        static Change FadeInChanged;
        static Change FadeOutChanged;
@@ -66,12 +66,12 @@ class AudioRegion : public Region
        static Change ScaleAmplitudeChanged;
        static Change EnvelopeChanged;
 
-       AudioRegion (Source&, jack_nframes_t start, jack_nframes_t length, bool announce = true);
-       AudioRegion (Source&, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
+       AudioRegion (AudioSource&, jack_nframes_t start, jack_nframes_t length, bool announce = true);
+       AudioRegion (AudioSource&, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
        AudioRegion (SourceList &, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
        AudioRegion (const AudioRegion&, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
        AudioRegion (const AudioRegion&);
-       AudioRegion (Source&, const XMLNode&);
+       AudioRegion (AudioSource&, const XMLNode&);
        AudioRegion (SourceList &, const XMLNode&);
        ~AudioRegion();
 
@@ -85,7 +85,7 @@ class AudioRegion : public Region
 
        void lock_sources ();
        void unlock_sources ();
-       Source& source (uint32_t n=0) const { if (n < sources.size()) return *sources[n]; else return *sources[0]; } 
+       AudioSource& source (uint32_t n=0) const { if (n < sources.size()) return *sources[n]; else return *sources[0]; } 
 
        void set_scale_amplitude (gain_t);
        gain_t scale_amplitude() const { return _scale_amplitude; }
diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h
new file mode 100644 (file)
index 0000000..1dcf5b4
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+    Copyright (C) 2000 Paul Davis 
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id: audio_source.h 486 2006-04-27 09:04:24Z pauld $
+*/
+
+#ifndef __ardour_audio_source_h__
+#define __ardour_audio_source_h__
+
+#include <list>
+#include <vector>
+#include <string>
+
+#include <time.h>
+
+#include <glibmm/thread.h>
+
+#include <sigc++/signal.h>
+
+#include <ardour/source.h>
+#include <ardour/ardour.h>
+#include <ardour/stateful.h>
+#include <pbd/xml++.h>
+
+using std::list;
+using std::vector;
+using std::string;
+
+namespace ARDOUR {
+
+const jack_nframes_t frames_per_peak = 256;
+
+class AudioSource : public Source
+{
+  public:
+       AudioSource (string name);
+       AudioSource (const XMLNode&);
+       virtual ~AudioSource ();
+
+       /* returns the number of items in this `audio_source' */
+
+       virtual jack_nframes_t length() const {
+               return _length;
+       }
+
+       virtual jack_nframes_t available_peaks (double zoom) const;
+
+       virtual jack_nframes_t read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
+       virtual jack_nframes_t write (Sample *src, jack_nframes_t cnt, char * workbuf);
+
+       virtual float sample_rate () const = 0;
+
+       virtual void mark_for_remove() = 0;
+       virtual void mark_streaming_write_completed () {}
+
+       void set_captured_for (string str) { _captured_for = str; }
+       string captured_for() const { return _captured_for; }
+
+       uint32_t read_data_count() const { return _read_data_count; }
+       uint32_t write_data_count() const { return _write_data_count; }
+
+       int  read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t start, jack_nframes_t cnt, double samples_per_unit) const;
+       int  build_peaks ();
+       bool peaks_ready (sigc::slot<void>, sigc::connection&) const;
+
+       static sigc::signal<void,AudioSource*> AudioSourceCreated;
+              
+       mutable sigc::signal<void>  PeaksReady;
+       mutable sigc::signal<void,jack_nframes_t,jack_nframes_t>  PeakRangeReady;
+       
+       XMLNode& get_state ();
+       int set_state (const XMLNode&);
+
+       static int  start_peak_thread ();
+       static void stop_peak_thread ();
+
+       int rename_peakfile (std::string newpath);
+
+       static void set_build_missing_peakfiles (bool yn) {
+               _build_missing_peakfiles = yn;
+       }
+
+       static void set_build_peakfiles (bool yn) {
+               _build_peakfiles = yn;
+       }
+
+  protected:
+       static bool _build_missing_peakfiles;
+       static bool _build_peakfiles;
+
+       bool                _peaks_built;
+       mutable Glib::Mutex _lock;
+       jack_nframes_t      _length;
+       bool                 next_peak_clear_should_notify;
+       string               peakpath;
+       string              _captured_for;
+
+       mutable uint32_t _read_data_count;  // modified in read()
+       mutable uint32_t _write_data_count; // modified in write()
+
+       int initialize_peakfile (bool newfile, string path);
+       void build_peaks_from_scratch ();
+
+       int  do_build_peak (jack_nframes_t, jack_nframes_t);
+
+       virtual jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const = 0;
+       virtual jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt, char * workbuf) = 0;
+       virtual string peak_path(string audio_path) = 0;
+       virtual string old_peak_path(string audio_path) = 0;
+       
+       void update_length (jack_nframes_t pos, jack_nframes_t cnt);
+
+       static pthread_t peak_thread;
+       static bool      have_peak_thread;
+       static void*     peak_thread_work(void*);
+
+       static int peak_request_pipe[2];
+
+       struct PeakRequest {
+           enum Type {
+                   Build,
+                   Quit
+           };
+       };
+
+       static vector<AudioSource*> pending_peak_sources;
+       static Glib::Mutex* pending_peak_sources_lock;
+
+       static void queue_for_peaks (AudioSource&);
+       static void clear_queue_for_peaks ();
+       
+       struct PeakBuildRecord {
+           jack_nframes_t frame;
+           jack_nframes_t cnt;
+
+           PeakBuildRecord (jack_nframes_t f, jack_nframes_t c) 
+                   : frame (f), cnt (c) {}
+           PeakBuildRecord (const PeakBuildRecord& other) {
+                   frame = other.frame;
+                   cnt = other.cnt;
+           }
+       };
+
+       list<AudioSource::PeakBuildRecord *> pending_peak_builds;
+
+  private:
+       bool file_changed (string path);
+};
+
+}
+
+#endif /* __ardour_audio_source_h__ */
diff --git a/libs/ardour/ardour/constsource.h b/libs/ardour/ardour/constsource.h
deleted file mode 100644 (file)
index d000afb..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-    Copyright (C) 2000 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#ifndef __playlist_const_buffer_h__ 
-#define __playlist_const_buffer_h__
-
-#include <string>
-#include <cstdlib>
-
-#include "edl.h"
-
-namespace EDL {
-
-class ConstSource : public Source {
-  public:
-       ConstSource (const gchar *id) {
-               _type = Source::Const;
-               value = strtod (id, 0);
-               strncpy (idstr, id, 15);
-               idstr[15] = '\0';
-       }
-       
-       const gchar * const id() { return idstr; }
-
-       uint32_t length() { return ~0U; }
-
-       uint32_t read (Source::Data *dst, uint32_t start, uint32_t cnt) {
-               uint32_t n = cnt;
-               while (n--) *dst++ = value;
-               return cnt;
-       }
-       void peak (guint8 *max, guint8 *min, uint32_t start, uint32_t cnt) {
-               *max = *min = (guint8) value;
-       }
-
-  private:
-       Source::Data value;
-       gchar idstr[16];
-};
-
-}; /* namespace EDL */
-
-#endif /* __playlist_const_buffer_h__ */
index 736ea32df796994fb848935ab896ed6ddafc4f46..81f1a140503587b56957c63280c9f8d0eaa6f428 100644 (file)
 #ifndef __coreaudio_source_h__ 
 #define __coreaudio_source_h__
 
-#include <ardour/externalsource.h>
+#include <ardour/audiofilesource.h>
 #include <AudioToolbox/ExtendedAudioFile.h>
 
 namespace ARDOUR {
 
-class CoreAudioSource : public ExternalSource {
+class CoreAudioSource : public AudioFileSource {
   public:
        CoreAudioSource (const string& path_plus_channel, bool build_peak = true);
        CoreAudioSource (const XMLNode&);
        ~CoreAudioSource ();
 
-       jack_nframes_t read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
        float sample_rate() const;
+       int update_header (jack_nframes_t when, struct tm&, time_t);
+
+  protected:
+       jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
 
   private:
        ExtAudioFileRef af;
index 1ec7c7490385301a1d3ce1ff32cdb7b5ad9950c8..b9cbbbf0a8ded5550947f0a33c45228309cf6b0a 100644 (file)
 #define __ardour_cycle_timer_h__
 
 #include <string>
-#include <cstdio>
+#include <iostream>
 
 #include <ardour/cycles.h>
 
-using std::string;
-
 class CycleTimer {
   private:
        static float cycles_per_usec;
-       uint32_t long entry;
-       uint32_t long exit;
-       string _name;
+       cycles_t _entry;
+       cycles_t _exit;
+       std::string _name;
        
   public:
-       CycleTimer(string name) : _name (name){
+       CycleTimer(std::string name) : _name (name){
                if (cycles_per_usec == 0) {
                        cycles_per_usec = get_mhz ();
                }
-               entry = get_cycles();
+               _entry = get_cycles();
        }
        ~CycleTimer() {
-               exit = get_cycles();
-               printf ("%s: %.9f usecs (%lu-%lu)\n", _name.c_str(), (float) (exit - entry) / cycles_per_usec, entry, exit);
+               _exit = get_cycles();
+               std::cerr << _name << ": " << (float) (_exit - _entry) / cycles_per_usec << " (" <<  _entry << ", " << _exit << ')' << endl;
        }
 
        static float get_mhz ();
index dbaf379257ad0023cbc82432a610c308b3fc1e43..c92a0762eed484c7078d3f7cb895951c8a751521 100644 (file)
 
 #include <string>
 
-#include <ardour/filesource.h>
+#include <ardour/sndfilesource.h>
 
 struct tm;
 
 namespace ARDOUR {
 
-class DestructiveFileSource : public FileSource {
+class DestructiveFileSource : public SndFileSource {
   public:
-       DestructiveFileSource (std::string path, jack_nframes_t rate, bool repair_first = false, SampleFormat samp_format=FormatInt24);
-       DestructiveFileSource (const XMLNode&, jack_nframes_t rate);
+       DestructiveFileSource (std::string path, SampleFormat samp_format, HeaderFormat hdr_format, jack_nframes_t rate,
+                              Flag flags = AudioFileSource::Flag (AudioFileSource::Writable|
+                                                                  AudioFileSource::BuildPeaks));
+
+       DestructiveFileSource (const XMLNode&);
        ~DestructiveFileSource ();
 
-       int  seek (jack_nframes_t frame);
        jack_nframes_t last_capture_start_frame() const;
        void mark_capture_start (jack_nframes_t);
        void mark_capture_end ();
        void clear_capture_marks();
 
-       jack_nframes_t write (Sample *src, jack_nframes_t cnt, char * workbuf);
-
        XMLNode& get_state ();
 
        static void setup_standard_crossfades (jack_nframes_t sample_rate);
 
+  protected:
+       jack_nframes_t write_unlocked (Sample *src, jack_nframes_t cnt, char * workbuf);
+
   private:
        static jack_nframes_t xfade_frames;
        static gain_t* out_coefficient;
@@ -59,7 +62,7 @@ class DestructiveFileSource : public FileSource {
        Sample*        xfade_buf;
 
        jack_nframes_t crossfade (Sample* data, jack_nframes_t cnt, int dir, char * workbuf);
-
+       void set_timeline_position (jack_nframes_t);
 };
 
 }
diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h
deleted file mode 100644 (file)
index 316daba..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
-    Copyright (C) 2000 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#ifndef __ardour_diskstream_h__
-#define __ardour_diskstream_h__
-
-#include <sigc++/signal.h>
-
-#include <cmath>
-#include <string>
-#include <queue>
-#include <map>
-#include <vector>
-
-#include <time.h>
-
-#include <pbd/fastlog.h>
-#include <pbd/ringbufferNPT.h>
-
-#include <ardour/ardour.h>
-#include <ardour/configuration.h>
-#include <ardour/session.h>
-#include <ardour/route_group.h>
-#include <ardour/route.h>
-#include <ardour/port.h>
-#include <ardour/utils.h>
-#include <ardour/stateful.h>
-
-struct tm;
-
-namespace ARDOUR {
-
-class AudioEngine;
-class Send;
-class Session;
-class AudioPlaylist;
-class FileSource;
-class IO;
-
-class DiskStream : public Stateful, public sigc::trackable
-{      
-  public:
-       enum Flag {
-               Recordable = 0x1,
-               Hidden = 0x2,
-               Destructive = 0x4
-       };
-
-       DiskStream (Session &, const string& name, Flag f = Recordable);
-       DiskStream (Session &, const XMLNode&);
-
-       string name() const { return _name; }
-
-       ARDOUR::IO* io() const { return _io; }
-       void set_io (ARDOUR::IO& io);
-
-       DiskStream& ref() { _refcnt++; return *this; }
-       void unref() { if (_refcnt) _refcnt--; if (_refcnt == 0) delete this; }
-       uint32_t refcnt() const { return _refcnt; }
-
-       float playback_buffer_load() const;
-       float capture_buffer_load() const;
-
-       void set_flag (Flag f) {
-               _flags |= f;
-       }
-
-       void unset_flag (Flag f) {
-               _flags &= ~f;
-       }
-
-       AlignStyle alignment_style() const { return _alignment_style; }
-       void set_align_style (AlignStyle);
-       void set_persistent_align_style (AlignStyle);
-
-       bool hidden() const { return _flags & Hidden; }
-       bool recordable() const { return _flags & Recordable; }
-       bool destructive() const { return _flags & Destructive; }
-
-       void set_destructive (bool yn);
-
-       jack_nframes_t roll_delay() const { return _roll_delay; }
-       void set_roll_delay (jack_nframes_t);
-
-       int set_name (string str, void* src);
-
-       string input_source (uint32_t n=0) const {
-               if (n < channels.size()) {
-                       return channels[n].source ? channels[n].source->name() : "";
-               } else {
-                       return ""; 
-               }
-       }
-
-       Port *input_source_port (uint32_t n=0) const { 
-               if (n < channels.size()) return channels[n].source; return 0; 
-       }
-
-       void set_record_enabled (bool yn, void *src);
-       bool record_enabled() const { return g_atomic_int_get (&_record_enabled); }
-       void punch_in ();
-       void punch_out ();
-
-       bool  reversed() const { return _actual_speed < 0.0f; }
-       double speed() const { return _visible_speed; }
-       void set_speed (double);
-
-       float peak_power(uint32_t n=0) { 
-               float x = channels[n].peak_power;
-               channels[n].peak_power = 0.0f;
-               if (x > 0.0f) {
-                       return 20.0f * fast_log10(x);
-               } else {
-                       return minus_infinity();
-               }
-       }
-
-       int  use_playlist (AudioPlaylist *);
-       int use_new_playlist ();
-       int use_copy_playlist ();
-
-       void start_scrub (jack_nframes_t where);
-       void end_scrub ();
-
-       Sample *playback_buffer (uint32_t n=0) {
-               if (n < channels.size())
-                       return channels[n].current_playback_buffer;
-               return 0;
-       }
-       
-       Sample *capture_buffer (uint32_t n=0) {
-               if (n < channels.size())
-                       return channels[n].current_capture_buffer;
-               return 0;
-       }
-
-       AudioPlaylist *playlist () { return _playlist; }
-
-       FileSource *write_source (uint32_t n=0) {
-               if (n < channels.size())
-                       return channels[n].write_source;
-               return 0;
-       }
-
-       jack_nframes_t current_capture_start() const { return capture_start_frame; }
-       jack_nframes_t current_capture_end() const { return capture_start_frame + capture_captured; }
-       jack_nframes_t get_capture_start_frame (uint32_t n=0);
-       jack_nframes_t get_captured_frames (uint32_t n=0);
-       
-       uint32_t n_channels() { return _n_channels; }
-
-       int add_channel ();
-       int remove_channel ();
-       
-       static void set_disk_io_chunk_frames (uint32_t n) {
-               disk_io_chunk_frames = n;
-       }
-
-       static jack_nframes_t disk_io_frames() { return disk_io_chunk_frames; }
-       
-       sigc::signal<void,void*> record_enable_changed;
-       sigc::signal<void>       speed_changed;
-       sigc::signal<void,void*> reverse_changed;
-       sigc::signal<void>       PlaylistChanged;
-       sigc::signal<void>       AlignmentStyleChanged;
-
-       static sigc::signal<void> DiskOverrun;
-       static sigc::signal<void> DiskUnderrun;
-       static sigc::signal<void,DiskStream*> DiskStreamCreated;   // XXX use a ref with sigc2
-       static sigc::signal<void,list<Source*>*> DeleteSources;
-
-       /* stateful */
-
-       XMLNode& get_state(void);
-       int set_state(const XMLNode& node);
-
-       void monitor_input (bool);
-
-       jack_nframes_t capture_offset() const { return _capture_offset; }
-       void           set_capture_offset ();
-
-       static void swap_by_ptr (Sample *first, Sample *last) {
-               while (first < last) {
-                       Sample tmp = *first;
-                       *first++ = *last;
-                       *last-- = tmp;
-               }
-       }
-
-       static void swap_by_ptr (Sample *first, Sample *last, jack_nframes_t n) {
-               while (n--) {
-                       Sample tmp = *first;
-                       *first++ = *last;
-                       *last-- = tmp;
-               }
-       }
-
-       bool slaved() const { return _slaved; }
-       void set_slaved(bool yn) { _slaved = yn; }
-
-       int set_loop (Location *loc);
-       sigc::signal<void,Location *> LoopSet;
-
-       std::list<Region*>& last_capture_regions () {
-               return _last_capture_regions;
-       }
-
-       void handle_input_change (IOChange, void *src);
-
-       id_t id() const { return _id; }
-
-       XMLNode* deprecated_io_node;
-
-  protected:
-       friend class Session;
-
-       /* the Session is the only point of access for these
-          because they require that the Session is "inactive"
-          while they are called.
-       */
-
-       void set_pending_overwrite (bool);
-       int  overwrite_existing_buffers ();
-       void reverse_scrub_buffer (bool to_forward);
-       void set_block_size (jack_nframes_t);
-       int  internal_playback_seek (jack_nframes_t distance);
-       int  can_internal_playback_seek (jack_nframes_t distance);
-       int  rename_write_sources ();
-       void reset_write_sources (bool, bool force = false);
-       void non_realtime_input_change ();
-
-       uint32_t read_data_count() const { return _read_data_count; }
-       uint32_t write_data_count() const { return _write_data_count; }
-
-  protected:
-       friend class Auditioner;
-       int  seek (jack_nframes_t which_sample, bool complete_refill = false);
-
-  protected:
-       friend class AudioTrack;
-
-       void prepare ();
-       int  process (jack_nframes_t transport_frame, jack_nframes_t nframes, jack_nframes_t offset, bool can_record, bool rec_monitors_input);
-       bool commit  (jack_nframes_t nframes);
-       void recover (); /* called if commit will not be called, but process was */
-
-  private:
-
-       /* use unref() to destroy a diskstream */
-
-       ~DiskStream();
-
-       enum TransitionType {
-               CaptureStart = 0,
-               CaptureEnd
-       };
-       
-       struct CaptureTransition {
-
-               TransitionType   type;
-               // the start or end file frame pos
-               jack_nframes_t   capture_val;
-       };
-       
-       struct ChannelInfo {
-
-               Sample     *playback_wrap_buffer;
-               Sample     *capture_wrap_buffer;
-               Sample     *speed_buffer;
-
-               float       peak_power;
-
-               FileSource   *fades_source;
-               FileSource   *write_source;
-
-               Port         *source;
-               Sample       *current_capture_buffer;
-               Sample       *current_playback_buffer;
-
-               RingBufferNPT<Sample> *playback_buf;
-               RingBufferNPT<Sample> *capture_buf;
-
-               Sample* scrub_buffer;
-               Sample* scrub_forward_buffer;
-               Sample* scrub_reverse_buffer;
-
-               RingBufferNPT<Sample>::rw_vector playback_vector;
-               RingBufferNPT<Sample>::rw_vector capture_vector;
-
-               RingBufferNPT<CaptureTransition> * capture_transition_buf;
-               // the following are used in the butler thread only
-               jack_nframes_t                     curr_capture_cnt;
-       };
-
-       typedef vector<ChannelInfo> ChannelList;
-
-
-       string            _name;
-       ARDOUR::Session&  _session;
-       ARDOUR::IO*       _io;
-       ChannelList        channels;
-       uint32_t      _n_channels;
-       id_t              _id;
-
-       mutable gint             _record_enabled;
-       AudioPlaylist*           _playlist;
-       double                   _visible_speed;
-       double                   _actual_speed;
-       /* items needed for speed change logic */
-       bool                     _buffer_reallocation_required;
-       bool                     _seek_required;
-       
-       bool                      force_refill;
-       jack_nframes_t            capture_start_frame;
-       jack_nframes_t            capture_captured;
-       bool                      was_recording;
-       jack_nframes_t            adjust_capture_position;
-       jack_nframes_t           _capture_offset;
-       jack_nframes_t           _roll_delay;
-       jack_nframes_t            first_recordable_frame;
-       jack_nframes_t            last_recordable_frame;
-       int                       last_possibly_recording;
-       AlignStyle               _alignment_style;
-       bool                     _scrubbing;
-       bool                     _slaved;
-       bool                     _processed;
-       Location*                 loop_location;
-       jack_nframes_t            overwrite_frame;
-       off_t                     overwrite_offset;
-       bool                      pending_overwrite;
-       bool                      overwrite_queued;
-       IOChange                  input_change_pending;
-       jack_nframes_t            wrap_buffer_size;
-       jack_nframes_t            speed_buffer_size;
-
-       uint64_t                  last_phase;
-       uint64_t                  phi;
-       
-       jack_nframes_t            file_frame;           
-       jack_nframes_t            playback_sample;
-       jack_nframes_t            playback_distance;
-
-       uint32_t                 _read_data_count;
-       uint32_t                 _write_data_count;
-
-       bool                      in_set_state;
-       AlignStyle               _persistent_alignment_style;
-       bool                      first_input_change;
-
-       Glib::Mutex  state_lock;
-
-       jack_nframes_t scrub_start;
-       jack_nframes_t scrub_buffer_size;
-       jack_nframes_t scrub_offset;
-       uint32_t _refcnt;
-
-       sigc::connection ports_created_c;
-       sigc::connection plmod_connection;
-       sigc::connection plstate_connection;
-       sigc::connection plgone_connection;
-
-       /* the two central butler operations */
-
-       int do_flush (char * workbuf, bool force = false);
-       int do_refill (Sample *mixdown_buffer, float *gain_buffer, char *workbuf);
-
-       int read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, char * workbuf, jack_nframes_t& start, jack_nframes_t cnt, 
-                 ChannelInfo& channel_info, int channel, bool reversed);
-
-       uint32_t i_am_the_modifier;
-       
-       /* XXX fix this redundancy ... */
-
-       void playlist_changed (Change);
-       void playlist_modified ();
-       void playlist_deleted (Playlist*);
-       void session_controls_changed (Session::ControlType);
-
-       void finish_capture (bool rec_monitors_input);
-       void clean_up_capture (struct tm&, time_t, bool abort);
-       void transport_stopped (struct tm&, time_t, bool abort);
-
-       struct CaptureInfo {
-           uint32_t start;
-           uint32_t frames;
-       };
-
-       vector<CaptureInfo*> capture_info;
-       Glib::Mutex  capture_info_lock;
-       
-       void init (Flag);
-
-       void init_channel (ChannelInfo &chan);
-       void destroy_channel (ChannelInfo &chan);
-       
-       static jack_nframes_t disk_io_chunk_frames;
-
-       int use_new_write_source (uint32_t n=0);
-       int use_new_fade_source (uint32_t n=0);
-
-       int find_and_use_playlist (const string&);
-
-       void allocate_temporary_buffers ();
-
-       unsigned char _flags;
-
-       int  create_input_port ();
-       int  connect_input_port ();
-       int  seek_unlocked (jack_nframes_t which_sample);
-
-       int ports_created ();
-
-       bool realtime_set_speed (double, bool global_change);
-       void non_realtime_set_speed ();
-
-       std::list<Region*> _last_capture_regions;
-       std::vector<FileSource*> capturing_sources;
-       int use_pending_capture_data (XMLNode& node);
-
-       void get_input_sources ();
-       void check_record_status (jack_nframes_t transport_frame, jack_nframes_t nframes, bool can_record);
-       void set_align_style_from_io();
-       void setup_destructive_playlist ();
-       void use_destructive_playlist ();
-};
-
-}; /* namespace ARDOUR */
-
-#endif /* __ardour_diskstream_h__ */
diff --git a/libs/ardour/ardour/externalsource.h b/libs/ardour/ardour/externalsource.h
deleted file mode 100644 (file)
index 17504d0..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-    Copyright (C) 2006 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#ifndef __external_source_h__ 
-#define __external_source_h__
-
-#include <ardour/source.h>
-
-namespace ARDOUR {
-
-struct SoundFileInfo {
-    float    samplerate;
-    uint16_t channels;
-    int64_t length;
-    std::string format_name;
-};
-
-class ExternalSource : public Source {
-  public:
-       virtual ~ExternalSource ();
-
-       string path() const { return _path; }
-
-       virtual jack_nframes_t read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const = 0;
-
-       void mark_for_remove() {} // we never remove external sndfiles 
-       string peak_path(string audio_path);
-       string old_peak_path(string audio_path);
-
-       static void set_peak_dir (string dir) { peak_dir = dir; }
-
-       static ExternalSource* create (const string& path_plus_channel, bool build_peak = true);
-       static ExternalSource* create (const XMLNode& node);
-       static bool get_soundfile_info (string path, SoundFileInfo& _info, string& error);
-
-  protected:
-       ExternalSource (const string& path_plus_channel, bool build_peak = true);
-       ExternalSource (const XMLNode&);
-
-       static string peak_dir;
-
-       uint16_t channel;
-       string  _path;
-
-       jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
-};
-
-}; /* namespace ARDOUR */
-
-#endif /* __external_source_h__ */
-
diff --git a/libs/ardour/ardour/filesource.h b/libs/ardour/ardour/filesource.h
deleted file mode 100644 (file)
index 28a01f0..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-    Copyright (C) 2000 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#ifndef __playlist_file_buffer_h__ 
-#define __playlist_file_buffer_h__
-
-// darwin supports 64 by default and doesn't provide wrapper functions.
-#if defined (__APPLE__)
-typedef off_t off64_t;
-#define open64 open
-#define close64 close
-#define lseek64 lseek
-#define pread64 pread
-#define pwrite64 pwrite
-#endif
-
-#include <vector>
-#include <string>
-
-#include <ardour/source.h>
-
-struct tm;
-
-using std::string;
-
-namespace ARDOUR {
-
-class FileSource : public Source {
-  public:
-       FileSource (string path, jack_nframes_t rate, bool repair_first = false, SampleFormat samp_format=FormatFloat);
-       FileSource (const XMLNode&, jack_nframes_t rate);
-       ~FileSource ();
-
-       int set_name (std::string str, bool destructive);
-
-       void set_allow_remove_if_empty (bool yn);
-
-       jack_nframes_t length() const { return _length; }
-       jack_nframes_t read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
-       jack_nframes_t write (Sample *src, jack_nframes_t cnt, char * workbuf);
-       void           mark_for_remove();
-       string         peak_path(string audio_path);
-       string         path() const { return _path; }
-       float sample_rate () const;
-
-       virtual int            seek (jack_nframes_t frame) {return 0; }
-       virtual jack_nframes_t last_capture_start_frame() const { return 0; }
-       virtual void           mark_capture_start (jack_nframes_t) {}
-       virtual void           mark_capture_end () {}
-       virtual void           clear_capture_marks() {}
-
-       int update_header (jack_nframes_t when, struct tm&, time_t);
-
-       int move_to_trash (const string trash_dir_name);
-
-       static bool is_empty (string path);
-       void mark_streaming_write_completed ();
-
-       void   mark_take (string);
-       string take_id() const { return _take_id; }
-
-       static void set_bwf_country_code (string x);
-       static void set_bwf_organization_code (string x);
-       static void set_bwf_serial_number (int);
-       
-       static void set_search_path (string);
-
-  protected:
-       int            fd;
-       string        _path;
-       bool           remove_at_unref;
-       bool           is_bwf;
-       off64_t        data_offset;
-       string        _take_id;
-       SampleFormat  _sample_format;
-       int           _sample_size;
-       bool           allow_remove_if_empty;
-
-       static char bwf_country_code[3];
-       static char bwf_organization_code[4];
-       static char bwf_serial_number[13];
-
-       struct GenericChunk {
-           char    id[4];
-           int32_t  size; 
-       };
-
-       struct WAVEChunk : public GenericChunk {
-           char    text[4];      /* wave pseudo-chunk id "WAVE" */
-       };
-
-       struct FMTChunk : public GenericChunk {
-           int16_t   formatTag;           /* format tag; currently pcm   */
-           int16_t   nChannels;           /* number of channels         */
-           uint32_t  nSamplesPerSec;      /* sample rate in hz          */
-           int32_t   nAvgBytesPerSec;     /* average bytes per second   */
-           int16_t   nBlockAlign;         /* number of bytes per sample */
-           int16_t   nBitsPerSample;      /* number of bits in a sample */
-       };
-
-       struct BroadcastChunk : public GenericChunk {
-           char   description[256];
-           char   originator[32];
-           char   originator_reference[32];
-           char   origination_date[10];
-           char   origination_time[8];
-           int32_t time_reference_low;
-           int32_t time_reference_high;
-           int16_t version;               /* 1.0 because we have umid and 190 bytes of "reserved" */
-           char   umid[64];
-           char   reserved[190];
-           /* we don't treat coding history as part of the struct */
-       };
-
-       struct ChunkInfo {
-           std::string name;
-           uint32_t    size;
-           off64_t     offset;
-           
-           ChunkInfo (string s, uint32_t sz, off64_t o) 
-                   : name (s), size (sz), offset (o) {}
-       };
-
-       vector<ChunkInfo> chunk_info;
-       
-       struct {
-           WAVEChunk               wave;
-           FMTChunk                format;
-           GenericChunk            data;
-           BroadcastChunk          bext;
-           vector<string>          coding_history;
-           bool                    bigendian;
-       } header;
-
-       int init (string, bool must_exist, jack_nframes_t);
-       jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
-
-       ssize_t file_write (Sample *src, jack_nframes_t framepos, jack_nframes_t cnt, char * workbuf) {
-               switch (_sample_format) {
-               case FormatInt24: return write_pcm_24(src, framepos, cnt, workbuf);
-               default: return write_float(src, framepos, cnt, workbuf);
-               };
-       }
-       
-       ssize_t file_read  (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const  {
-               switch (_sample_format) {
-               case FormatInt24: return read_pcm_24(dst, start, cnt, workbuf);
-               default: return read_float(dst, start, cnt, workbuf);
-               };
-       }
-       
-       ssize_t write_float(Sample *src, jack_nframes_t framepos, jack_nframes_t cnt, char * workbuf);
-       ssize_t read_float (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
-        ssize_t write_pcm_24(Sample *src, jack_nframes_t framepos, jack_nframes_t cnt, char * workbuf);
-       ssize_t read_pcm_24 (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
-       
-       int discover_chunks (bool silent);
-       ChunkInfo* lookup_chunk (string name);
-
-       int write_header ();
-       int read_header (bool silent);
-
-       int check_header (jack_nframes_t rate, bool silent);
-       int fill_header (jack_nframes_t rate);
-       
-       int read_broadcast_data (ChunkInfo&);
-       void compute_header_size ();
-       
-       static const int32_t wave_header_size = sizeof (WAVEChunk) + sizeof (FMTChunk) + sizeof (GenericChunk);
-       static const int32_t bwf_header_size = wave_header_size + sizeof (BroadcastChunk);
-
-       static string search_path;
-
-       int repair (string, jack_nframes_t);
-
-       void swap_endian (GenericChunk & chunk) const;
-       void swap_endian (FMTChunk & chunk) const;
-       void swap_endian (BroadcastChunk & chunk) const;
-       void swap_endian (Sample *buf, jack_nframes_t cnt) const;
-};
-
-}
-
-#endif /* __playlist_file_buffer_h__ */
index c80a7abfaa2de19d3a40c167152030589ee8caf0..8ae45fe65c1b42fa28bf1ef931e955f512828f0f 100644 (file)
@@ -321,7 +321,6 @@ public:
 
        Change               restore_state (State&);
        StateManager::State* state_factory (std::string why) const;
-       void                 send_state_changed();
 
        bool get_midi_node_info (XMLNode * node, MIDI::eventType & ev, MIDI::channel_t & chan, MIDI::byte & additional);
        bool set_midi_node_info (XMLNode * node, MIDI::eventType ev, MIDI::channel_t chan, MIDI::byte additional);
index 69ec76eac6ca80b4044a583c3d56a626bce356e0..0a34f44a41bfa35a273b4a25c3031e694ce0a5a9 100644 (file)
@@ -32,7 +32,7 @@
 
 #include <ardour/types.h>
 
-#include "basic_ui.h"
+#include <control_protocol/basic_ui.h>
 
 namespace ARDOUR {
        class Session;
index d322f564eed7be4245a1678ebe45935882767879..c653c8502e07ded5ec6db448f072d2a2a6b44ea7 100644 (file)
@@ -37,7 +37,6 @@
 #include <ardour/crossfade_compare.h>
 #include <ardour/location.h>
 #include <ardour/stateful.h>
-#include <ardour/source.h>
 #include <ardour/state_manager.h>
 
 namespace ARDOUR  {
index 3c94dad6fd0de0bc6793d13538cb050dd6a52101..aae776625e6c45703c99fa8b8b9a3d02461b6b70 100644 (file)
@@ -233,7 +233,6 @@ class Region : public Stateful, public StateManager
        /* state management */
 
        void send_change (Change);
-       void send_state_changed ();
 
        /* derived classes need these during their own state management calls */
 
index 5699d9ef14a89bca6ed16d6052c4ca219a0f96c7..5686dfc9081937c02c6a62d9bbf0db23f39fb5ac 100644 (file)
@@ -95,7 +95,7 @@ class Route : public IO
        virtual bool can_record() const { return false; }
        virtual void set_record_enable (bool yn, void *src) {}
        virtual bool record_enabled() const { return false; }
-       virtual void transport_stopped (bool abort, bool did_locate, bool flush_redirects);
+       virtual void handle_transport_stopped (bool abort, bool did_locate, bool flush_redirects);
        virtual void set_pending_declick (int);
 
        /* end of vfunc-based API */
diff --git a/libs/ardour/ardour/seqsource.h b/libs/ardour/ardour/seqsource.h
deleted file mode 100644 (file)
index 7e38d27..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-    Copyright (C) 2000 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#ifndef __playlist_seqsource_h__ 
-#define __playlist_seqsource_h__
-
-#include <string>
-
-#include "edl.h"
-
-namespace EDL {
-
-class PlaylistSource : public Source {
-  public:
-       PlaylistSource (Playlist&);
-       ~PlaylistSource ();
-
-       const gchar * const id() { return playlist.name().c_str(); }
-       uint32_t length() { return playlist.length(); }
-       uint32_t read (Source::Data *dst, uint32_t start, uint32_t cnt) {
-               return playlist.read (dst, start, cnt, false);
-       }
-       uint32_t write (Source::Data *src, uint32_t where, uint32_t cnt) {
-               return playlist.write (src, where, cnt);
-       }
-
-//     int read_peaks (peak_data_t *, uint32_t npeaks, uint32_t start, uint32_t cnt);
-//     int build_peak (uint32_t first_frame, uint32_t cnt);
-
-  protected:
-
-  private:
-       Playlist& playlist;
-};
-
-}; /* namespace EDL */
-
-#endif /* __playlist_seqsource_h__ */
index 3d164a4b059a3e67f3c7f5b0df5dd4f178b1bb3c..971e141363cf0d3f6b08be0a0c46c48436e336d1 100644 (file)
@@ -60,11 +60,12 @@ namespace ARDOUR {
 class Port;
 class AudioEngine;
 class Slave;
-class DiskStream;      
+class AudioDiskstream; 
 class Route;
 class AuxInput;
 class Source;
-class FileSource;
+class AudioSource;
+class AudioFileSource;
 class Auditioner;
 class Insert;
 class Send;
@@ -261,25 +262,30 @@ class Session : public sigc::trackable, public Stateful
        vector<Sample*>& get_silent_buffers (uint32_t howmany);
        vector<Sample*>& get_send_buffers () { return _send_buffers; }
 
-       DiskStream    *diskstream_by_id (id_t id);
-       DiskStream    *diskstream_by_name (string name);
+       AudioDiskstream    *diskstream_by_id (id_t id);
+       AudioDiskstream    *diskstream_by_name (string name);
 
        bool have_captured() const { return _have_captured; }
 
        void refill_all_diskstream_buffers ();
        uint32_t diskstream_buffer_size() const { return dstream_buffer_size; }
-       uint32_t get_next_diskstream_id() const { return n_diskstreams(); }
-       uint32_t n_diskstreams() const;
        
-       typedef list<DiskStream *> DiskStreamList;
+       /* XXX fix required here when we get new diskstream types *, but
+          not sure of the direction to take this in until then.
+       */
+
+       uint32_t get_next_diskstream_id() const { return n_audio_diskstreams(); }
+       uint32_t n_audio_diskstreams() const;
+       
+       typedef list<AudioDiskstream *> AudioDiskstreamList;
 
-       Session::DiskStreamList disk_streams() const {
+       Session::AudioDiskstreamList audio_disk_streams() const {
                Glib::RWLock::ReaderLock lm (diskstream_lock);
-               return diskstreams; /* XXX yes, force a copy */
+               return audio_diskstreams; /* XXX yes, force a copy */
        }
 
-       void foreach_diskstream (void (DiskStream::*func)(void));
-       template<class T> void foreach_diskstream (T *obj, void (T::*func)(DiskStream&));
+       void foreach_audio_diskstream (void (AudioDiskstream::*func)(void));
+       template<class T> void foreach_audio_diskstream (T *obj, void (T::*func)(AudioDiskstream&));
 
        typedef list<Route *> RouteList;
 
@@ -344,7 +350,7 @@ class Session : public sigc::trackable, public Stateful
        sigc::signal<void> HaltOnXrun;
 
        sigc::signal<void,Route*> RouteAdded;
-       sigc::signal<void,DiskStream*> DiskStreamAdded;
+       sigc::signal<void,AudioDiskstream*> AudioDiskstreamAdded;
 
        void request_roll ();
        void request_bounded_roll (jack_nframes_t start, jack_nframes_t end);
@@ -356,15 +362,15 @@ class Session : public sigc::trackable, public Stateful
        void goto_start () { request_locate (start_location->start(), false); }
        void use_rf_shuttle_speed ();
        void request_transport_speed (float speed);
-       void request_overwrite_buffer (DiskStream*);
-       void request_diskstream_speed (DiskStream&, float speed);
+       void request_overwrite_buffer (AudioDiskstream*);
+       void request_diskstream_speed (AudioDiskstream&, float speed);
        void request_input_change_handling ();
 
        bool locate_pending() const { return static_cast<bool>(post_transport_work&PostTransportLocate); }
        bool transport_locked () const;
 
        int wipe ();
-       int wipe_diskstream (DiskStream *);
+       int wipe_diskstream (AudioDiskstream *);
 
        int remove_region_from_region_list (Region&);
 
@@ -584,25 +590,13 @@ class Session : public sigc::trackable, public Stateful
        int  set_smpte_type (float fps, bool drop_frames);
 
        void bbt_time (jack_nframes_t when, BBT_Time&);
+       void smpte_to_sample( SMPTE::Time& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes ) const;
+       void sample_to_smpte( jack_nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes ) const;
+       void smpte_time (SMPTE::Time &);
+       void smpte_time (jack_nframes_t when, SMPTE::Time&);
+       void smpte_time_subframes (jack_nframes_t when, SMPTE::Time&);
 
-       ARDOUR::smpte_wrap_t smpte_increment( SMPTE_Time& smpte ) const;
-       ARDOUR::smpte_wrap_t smpte_decrement( SMPTE_Time& smpte ) const;
-       ARDOUR::smpte_wrap_t smpte_increment_subframes( SMPTE_Time& smpte ) const;
-       ARDOUR::smpte_wrap_t smpte_decrement_subframes( SMPTE_Time& smpte ) const;
-       ARDOUR::smpte_wrap_t smpte_increment_seconds( SMPTE_Time& smpte ) const;
-       ARDOUR::smpte_wrap_t smpte_increment_minutes( SMPTE_Time& smpte ) const;
-       ARDOUR::smpte_wrap_t smpte_increment_hours( SMPTE_Time& smpte ) const;
-       void smpte_frames_floor( SMPTE_Time& smpte ) const;
-       void smpte_seconds_floor( SMPTE_Time& smpte ) const;
-       void smpte_minutes_floor( SMPTE_Time& smpte ) const;
-       void smpte_hours_floor( SMPTE_Time& smpte ) const;
-       void smpte_to_sample( SMPTE_Time& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes ) const;
-       void sample_to_smpte( jack_nframes_t sample, SMPTE_Time& smpte, bool use_offset, bool use_subframes ) const;
-       void smpte_time (SMPTE_Time &);
-       void smpte_time (jack_nframes_t when, SMPTE_Time&);
-       void smpte_time_subframes (jack_nframes_t when, SMPTE_Time&);
-
-       void smpte_duration (jack_nframes_t, SMPTE_Time&) const;
+       void smpte_duration (jack_nframes_t, SMPTE::Time&) const;
        void smpte_duration_string (char *, jack_nframes_t) const;
 
        void           set_smpte_offset (jack_nframes_t);
@@ -612,7 +606,7 @@ class Session : public sigc::trackable, public Stateful
 
        jack_nframes_t convert_to_frames_at (jack_nframes_t position, AnyTime&);
 
-       sigc::signal<void> SMPTEOffsetChanged;
+       static sigc::signal<void> SMPTEOffsetChanged;
        sigc::signal<void> SMPTETypeChanged;
 
        void        request_slave_source (SlaveSource, jack_nframes_t pos = 0);
@@ -668,8 +662,9 @@ class Session : public sigc::trackable, public Stateful
        int start_audio_export (ARDOUR::AudioExportSpecification&);
        int stop_audio_export (ARDOUR::AudioExportSpecification&);
        
-       void add_source (Source *);
-       int  remove_file_source (FileSource&);
+       void add_audio_source (AudioSource *);
+       void remove_source (Source *);
+       int  cleanup_audio_file_source (AudioFileSource&);
 
        struct cleanup_report {
            vector<string> paths;
@@ -701,7 +696,8 @@ class Session : public sigc::trackable, public Stateful
        sigc::signal<void,Source *> SourceAdded;
        sigc::signal<void,Source *> SourceRemoved;
 
-       FileSource *create_file_source (ARDOUR::DiskStream&, int32_t chan, bool destructive);
+       AudioFileSource *create_audio_source_for_session (ARDOUR::AudioDiskstream&, uint32_t which_channel, bool destructive);
+
        Source *get_source (ARDOUR::id_t);
 
        /* playlist management */
@@ -745,8 +741,8 @@ class Session : public sigc::trackable, public Stateful
 
        /* flattening stuff */
 
-       int write_one_track (AudioTrack&, jack_nframes_t start, jack_nframes_t cnt, bool overwrite, vector<Source*>&,
-                            InterThreadInfo& wot);
+       int write_one_audio_track (AudioTrack&, jack_nframes_t start, jack_nframes_t cnt, bool overwrite, vector<AudioSource*>&,
+                                  InterThreadInfo& wot);
        int freeze (InterThreadInfo&);
 
        /* session-wide solo/mute/rec-enable */
@@ -972,7 +968,7 @@ class Session : public sigc::trackable, public Stateful
        void set_frame_rate (jack_nframes_t nframes);
 
   protected:
-       friend class DiskStream;
+       friend class AudioDiskstream;
        void stop_butler ();
        void wait_till_butler_finished();
 
@@ -1338,7 +1334,7 @@ class Session : public sigc::trackable, public Stateful
        MIDI::byte mtc_smpte_bits;   /* encoding of SMTPE type for MTC */
        MIDI::byte midi_msg[16];
        jack_nframes_t  outbound_mtc_smpte_frame;
-       SMPTE_Time transmitting_smpte_time;
+       SMPTE::Time transmitting_smpte_time;
        int next_quarter_frame_to_send;
        
        double _frames_per_smpte_frame; /* has to be floating point because of drop frame */
@@ -1354,7 +1350,7 @@ class Session : public sigc::trackable, public Stateful
 
        bool       last_smpte_valid;
        jack_nframes_t  last_smpte_when;
-       SMPTE_Time last_smpte;
+       SMPTE::Time last_smpte;
 
        int send_full_time_code ();
        int send_midi_time_code ();
@@ -1434,12 +1430,12 @@ class Session : public sigc::trackable, public Stateful
        bool waiting_to_start;
 
        void set_auto_loop (bool yn);
-       void overwrite_some_buffers (DiskStream*);
+       void overwrite_some_buffers (AudioDiskstream*);
        void flush_all_redirects ();
        void locate (jack_nframes_t, bool with_roll, bool with_flush, bool with_loop=false);
        void start_locate (jack_nframes_t, bool with_roll, bool with_flush, bool with_loop=false);
        void force_locate (jack_nframes_t frame, bool with_roll = false);
-       void set_diskstream_speed (DiskStream*, float speed);
+       void set_diskstream_speed (AudioDiskstream*, float speed);
        void set_transport_speed (float speed, bool abort = false);
        void stop_transport (bool abort = false);
        void start_transport ();
@@ -1470,10 +1466,10 @@ class Session : public sigc::trackable, public Stateful
 
        /* disk-streams */
 
-       DiskStreamList  diskstreams; 
+       AudioDiskstreamList  audio_diskstreams; 
        mutable Glib::RWLock diskstream_lock;
        uint32_t dstream_buffer_size;
-       void add_diskstream (DiskStream*);
+       void add_diskstream (AudioDiskstream*);
        int  load_diskstreams (const XMLNode&);
 
        /* routes stuff */
@@ -1515,16 +1511,14 @@ class Session : public sigc::trackable, public Stateful
 
        /* SOURCES */
        
-       mutable Glib::Mutex source_lock;
-       typedef std::map<id_t, Source *>    SourceList;
+       mutable Glib::Mutex audio_source_lock;
+       typedef std::map<id_t, AudioSource *>    AudioSourceList;
 
-       SourceList sources;
+       AudioSourceList audio_sources;
 
        int load_sources (const XMLNode& node);
        XMLNode& get_sources_as_xml ();
 
-       void remove_source (Source *);
-
        Source *XMLSourceFactory (const XMLNode&);
 
        /* PLAYLISTS */
@@ -1543,7 +1537,7 @@ class Session : public sigc::trackable, public Stateful
        Playlist *XMLPlaylistFactory (const XMLNode&);
 
        void playlist_length_changed (Playlist *);
-       void diskstream_playlist_changed (DiskStream *);
+       void diskstream_playlist_changed (AudioDiskstream *);
 
        /* NAMED SELECTIONS */
 
index 3c888c92c30131ddbb0b7768f99ab7a4199340b5..33fc5419ba348cbf2477b6008a138f8252573d46 100644 (file)
 #define __ardour_session_diskstream_h__
 
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 
 namespace ARDOUR {
 
 template<class T> void 
-Session::foreach_diskstream (T *obj, void (T::*func)(DiskStream&)) 
+Session::foreach_audio_diskstream (T *obj, void (T::*func)(AudioDiskstream&)) 
 {
        Glib::RWLock::ReaderLock lm (diskstream_lock);
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); i++) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); i++) {
                if (!(*i)->hidden()) {
                        (obj->*func) (**i);
                }
diff --git a/libs/ardour/ardour/silentsource.h b/libs/ardour/ardour/silentsource.h
deleted file mode 100644 (file)
index 0079e5f..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-    Copyright (C) 2000 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#ifndef __playlist_const_buffer_h__ 
-#define __playlist_const_buffer_h__
-
-#include <string>
-#include <cstdlib>
-
-#include "source.h"
-
-namespace ARDOUR {
-
-class SilentSource : public Source {
-  public:
-       SilentSource () {
-               _name = "Silent Source";
-       }
-       
-       static bool is_silent_source (const string& name) {
-               return name == "Silent Source";
-       }
-       
-       jack_nframes_t length() { return ~0U; }
-
-       jack_nframes_t read (Source::Data *dst, jack_nframes_t start, jack_nframes_t cnt) {
-               jack_nframes_t n = cnt;
-               while (n--) *dst++ = 0;
-               return cnt;
-       }
-
-       void peak (guint8 *max, guint8 *min, jack_nframes_t start, jack_nframes_t cnt) {
-               *max = *min = 0;
-       }
-};
-
-}
-
-#endif /* __playlist_const_buffer_h__ */
index 5d11c9ef095e6be2599dd40abd88cca875205c63..d146bb57938ed64c9bfd38f610392dea51a518df 100644 (file)
 
 #include <sndfile.h>
 
-#include <ardour/externalsource.h>
+#include <ardour/audiofilesource.h>
 
 namespace ARDOUR {
 
-class SndFileSource : public ExternalSource {
+class SndFileSource : public AudioFileSource {
   public:
-       SndFileSource (const string& path_plus_channel, bool build_peak = true);
+       /* constructor to be called for existing external-to-session files */
+
+       SndFileSource (std::string path, Flag flags);
+
+       /* constructor to be called for new in-session files */
+
+       SndFileSource (std::string path, SampleFormat samp_format, HeaderFormat hdr_format, jack_nframes_t rate, 
+                      Flag flags = AudioFileSource::Flag (AudioFileSource::Writable|
+                                                          AudioFileSource::Removable|
+                                                          AudioFileSource::RemovableIfEmpty|
+                                                          AudioFileSource::CanRename|
+                                                          AudioFileSource::BuildPeaks));
+                      
+       /* constructor to be called for existing in-session files */
+       
        SndFileSource (const XMLNode&);
+
        ~SndFileSource ();
 
-       jack_nframes_t length() const { return _info.frames; } 
-       jack_nframes_t read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
        float sample_rate () const;
+       int update_header (jack_nframes_t when, struct tm&, time_t);
+       int flush_header ();
+
+       static Flag default_in_session_flags();
+
+  protected:
+       void set_header_timeline_position ();
+
+       jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const;
+       jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt, char * workbuf);
+
+       jack_nframes_t write_float (Sample* data, jack_nframes_t pos, jack_nframes_t cnt);
 
   private:
        SNDFILE *sf;
        SF_INFO _info;
+       SF_BROADCAST_INFO *_broadcast_info;
 
-       mutable float *tmpbuf;
-       mutable jack_nframes_t tmpbufsize;
-       mutable Glib::Mutex _tmpbuf_lock;
+       mutable float *interleave_buf;
+       mutable jack_nframes_t interleave_bufsize;
 
-       void init (const string &str, bool build_peak);
+       void init (const string &str);
+       int open();
+       void close();
+       int setup_broadcast_info (jack_nframes_t when, struct tm&, time_t);
 };
 
 }; /* namespace ARDOUR */
index 3781950fbf979a2a5422df049c43f5f1f5d6f9f1..f3133c71cd9618b038d20903b9b5c39e933afa2a 100644 (file)
 #ifndef __ardour_source_h__
 #define __ardour_source_h__
 
-#include <list>
-#include <vector>
 #include <string>
 
-#include <ctime>
-
 #include <sigc++/signal.h>
 
-#include <glibmm/thread.h>
-
 #include <ardour/ardour.h>
 #include <ardour/stateful.h>
-#include <pbd/xml++.h>
-
-using std::list;
-using std::vector;
-using std::string;
 
 namespace ARDOUR {
 
-struct PeakData {
-    typedef Sample PeakDatum;
-
-    PeakDatum min;
-    PeakDatum max;
-};
-
-const jack_nframes_t frames_per_peak = 256;
-
 class Source : public Stateful, public sigc::trackable
 {
   public:
-       Source (bool announce=true);
+       Source (std::string name);
        Source (const XMLNode&);
        virtual ~Source ();
 
-       const string& name() const { return _name; }
+       std::string name() const { return _name; }
+       int set_name (std::string str, bool destructive);
 
        ARDOUR::id_t  id() const   { return _id; }
 
-       /* returns the number of items in this `source' */
-
-       virtual jack_nframes_t length() const {
-               return _length;
-       }
-
-       virtual jack_nframes_t available_peaks (double zoom) const;
-
-       virtual jack_nframes_t read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const {
-               return 0;
-       }
-
-       virtual jack_nframes_t write (Sample *src, jack_nframes_t cnt, char * workbuf) {
-               return 0;
-       }
-
-       virtual float sample_rate () const { return 0; }
-
        uint32_t use_cnt() const { return _use_cnt; }
        void use ();
        void release ();
 
-       virtual void mark_for_remove() = 0;
-       virtual void mark_streaming_write_completed () {}
-
        time_t timestamp() const { return _timestamp; }
        void stamp (time_t when) { _timestamp = when; }
 
-       void set_captured_for (string str) { _captured_for = str; }
-       string captured_for() const { return _captured_for; }
-
-       uint32_t read_data_count() const { return _read_data_count; }
-       uint32_t write_data_count() const { return _write_data_count; }
-
-       int  read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t start, jack_nframes_t cnt, double samples_per_unit) const;
-       int  build_peaks ();
-       bool peaks_ready (sigc::slot<void>, sigc::connection&) const;
-
-       static sigc::signal<void,Source*> SourceCreated;
-              
-       sigc::signal<void,Source *> GoingAway;
-       mutable sigc::signal<void>  PeaksReady;
-       mutable sigc::signal<void,jack_nframes_t,jack_nframes_t>  PeakRangeReady;
-       
        XMLNode& get_state ();
        int set_state (const XMLNode&);
 
-       static int  start_peak_thread ();
-       static void stop_peak_thread ();
-
-       int rename_peakfile (std::string newpath);
-
-       static void set_build_missing_peakfiles (bool yn) {
-               _build_missing_peakfiles = yn;
-       }
-       static void set_build_peakfiles (bool yn) {
-               _build_peakfiles = yn;
-       }
+       sigc::signal<void,Source *> GoingAway;
 
   protected:
-       static bool _build_missing_peakfiles;
-       static bool _build_peakfiles;
-
        string            _name;
-       uint32_t     _use_cnt;
-       bool              _peaks_built;
-       mutable Glib::Mutex _lock;
-       jack_nframes_t    _length;
-       bool               next_peak_clear_should_notify;
-       string             peakpath;
+       uint32_t          _use_cnt;
        time_t            _timestamp;
-       string            _captured_for;
-
-       mutable uint32_t _read_data_count;  // modified in read()
-       mutable uint32_t _write_data_count; // modified in write()
-
-       int initialize_peakfile (bool newfile, string path);
-       void build_peaks_from_scratch ();
-
-       int  do_build_peak (jack_nframes_t, jack_nframes_t);
-       virtual jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const = 0;
-       virtual string peak_path(string audio_path) = 0;
-
-       static pthread_t peak_thread;
-       static bool      have_peak_thread;
-       static void*     peak_thread_work(void*);
-
-       static int peak_request_pipe[2];
-
-       struct PeakRequest {
-           enum Type {
-                   Build,
-                   Quit
-           };
-       };
-
-       static vector<Source*> pending_peak_sources;
-       static Glib::StaticMutex pending_peak_sources_lock;
-
-       static void queue_for_peaks (Source&);
-       static void clear_queue_for_peaks ();
-       
-       struct PeakBuildRecord {
-           jack_nframes_t frame;
-           jack_nframes_t cnt;
-
-           PeakBuildRecord (jack_nframes_t f, jack_nframes_t c) 
-                   : frame (f), cnt (c) {}
-           PeakBuildRecord (const PeakBuildRecord& other) {
-                   frame = other.frame;
-                   cnt = other.cnt;
-           }
-       };
-
-       list<Source::PeakBuildRecord *> pending_peak_builds;
 
   private:
        ARDOUR::id_t _id;
-       
-       bool file_changed (string path);
 };
 
 }
index 3d7ab4b59a35be30d89187b9da92d56c9b053c8e..a0a209b569248ee87a6a40cb65b0c7e22944216d 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <inttypes.h>
 #include <jack/types.h>
+#include <control_protocol/smpte.h>
 #include <map>
 
 #if __GNUC__ < 3
@@ -98,34 +99,7 @@ namespace ARDOUR {
                Normal,
                Destructive
        };
-
-       enum smpte_wrap_t {
-               smpte_wrap_none = 0,
-               smpte_wrap_frames,
-               smpte_wrap_seconds,
-               smpte_wrap_minutes,
-               smpte_wrap_hours
-       };
-
-       struct SMPTE_Time {
-               bool negative;
-               uint32_t hours;
-               uint32_t minutes;
-               uint32_t seconds;
-               uint32_t frames;
-               uint32_t subframes; // mostly not used
-
-               SMPTE_Time() {
-                       negative = false;
-                       hours = 0;
-                       minutes = 0;
-                       seconds = 0;
-                       frames = 0;
-                       subframes = 0;
-               }
-               
-       };
-
+       
        struct BBT_Time {
            uint32_t bars;
            uint32_t beats;
@@ -164,7 +138,7 @@ namespace ARDOUR {
 
            Type type;
 
-           SMPTE_Time     smpte;
+           SMPTE::Time    smpte;
            BBT_Time       bbt;
 
            union { 
@@ -255,10 +229,18 @@ namespace ARDOUR {
                BWF,
                WAVE,
                WAVE64,
+               CAF,
+               AIFF,
                iXML,
                RF64
        };
 
+       struct PeakData {
+           typedef Sample PeakDatum;
+           
+           PeakDatum min;
+           PeakDatum max;
+       };
 };
 
 std::istream& operator>>(std::istream& o, ARDOUR::SampleFormat& sf);
diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc
new file mode 100644 (file)
index 0000000..69f00ef
--- /dev/null
@@ -0,0 +1,2563 @@
+/*
+    Copyright (C) 2000-2003 Paul Davis 
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id: diskstream.cc 567 2006-06-07 14:54:12Z trutkin $
+*/
+
+#include <fstream>
+#include <cstdio>
+#include <unistd.h>
+#include <cmath>
+#include <cerrno>
+#include <string>
+#include <climits>
+#include <fcntl.h>
+#include <cstdlib>
+#include <ctime>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#include <pbd/error.h>
+#include <pbd/basename.h>
+#include <glibmm/thread.h>
+#include <pbd/xml++.h>
+
+#include <ardour/ardour.h>
+#include <ardour/audioengine.h>
+#include <ardour/audio_diskstream.h>
+#include <ardour/utils.h>
+#include <ardour/configuration.h>
+#include <ardour/audiofilesource.h>
+#include <ardour/destructive_filesource.h>
+#include <ardour/send.h>
+#include <ardour/audioplaylist.h>
+#include <ardour/cycle_timer.h>
+#include <ardour/audioregion.h>
+
+#include "i18n.h"
+#include <locale.h>
+
+using namespace std;
+using namespace ARDOUR;
+using namespace PBD;
+
+jack_nframes_t AudioDiskstream::disk_io_chunk_frames;
+
+sigc::signal<void,AudioDiskstream*>    AudioDiskstream::AudioDiskstreamCreated;
+sigc::signal<void,list<AudioFileSource*>*> AudioDiskstream::DeleteSources;
+sigc::signal<void>                AudioDiskstream::DiskOverrun;
+sigc::signal<void>                AudioDiskstream::DiskUnderrun;
+
+AudioDiskstream::AudioDiskstream (Session &sess, const string &name, Flag flag)
+       : _name (name),
+         _session (sess)
+{
+       /* prevent any write sources from being created */
+
+       in_set_state = true;
+
+       init (flag);
+       use_new_playlist ();
+
+       in_set_state = false;
+
+       AudioDiskstreamCreated (this); /* EMIT SIGNAL */
+}
+       
+AudioDiskstream::AudioDiskstream (Session& sess, const XMLNode& node)
+       : _session (sess)
+       
+{
+       in_set_state = true;
+       init (Recordable);
+
+       if (set_state (node)) {
+               in_set_state = false;
+               throw failed_constructor();
+       }
+
+       in_set_state = false;
+
+       if (destructive()) {
+               use_destructive_playlist ();
+       }
+
+       AudioDiskstreamCreated (this); /* EMIT SIGNAL */
+}
+
+void
+AudioDiskstream::init_channel (ChannelInfo &chan)
+{
+       chan.playback_wrap_buffer = 0;
+       chan.capture_wrap_buffer = 0;
+       chan.speed_buffer = 0;
+       chan.peak_power = 0.0f;
+       chan.write_source = 0;
+       chan.source = 0;
+       chan.current_capture_buffer = 0;
+       chan.current_playback_buffer = 0;
+       chan.curr_capture_cnt = 0;
+       
+       chan.playback_buf = new RingBufferNPT<Sample> (_session.diskstream_buffer_size());
+       chan.capture_buf = new RingBufferNPT<Sample> (_session.diskstream_buffer_size());
+       chan.capture_transition_buf = new RingBufferNPT<CaptureTransition> (128);
+       
+       
+       /* touch the ringbuffer buffers, which will cause
+          them to be mapped into locked physical RAM if
+          we're running with mlockall(). this doesn't do
+          much if we're not.  
+       */
+       memset (chan.playback_buf->buffer(), 0, sizeof (Sample) * chan.playback_buf->bufsize());
+       memset (chan.capture_buf->buffer(), 0, sizeof (Sample) * chan.capture_buf->bufsize());
+       memset (chan.capture_transition_buf->buffer(), 0, sizeof (CaptureTransition) * chan.capture_transition_buf->bufsize());
+}
+
+
+void
+AudioDiskstream::init (Flag f)
+{
+       _id = new_id();
+       _refcnt = 0;
+       _flags = f;
+       _io = 0;
+       _alignment_style = ExistingMaterial;
+       _persistent_alignment_style = ExistingMaterial;
+       first_input_change = true;
+       _playlist = 0;
+       i_am_the_modifier = 0;
+       g_atomic_int_set (&_record_enabled, 0);
+       was_recording = false;
+       capture_start_frame = 0;
+       capture_captured = 0;
+       _visible_speed = 1.0f;
+       _actual_speed = 1.0f;
+       _buffer_reallocation_required = false;
+       _seek_required = false;
+       first_recordable_frame = max_frames;
+       last_recordable_frame = max_frames;
+       _roll_delay = 0;
+       _capture_offset = 0;
+       _processed = false;
+       _slaved = false;
+       adjust_capture_position = 0;
+       last_possibly_recording = 0;
+       loop_location = 0;
+       wrap_buffer_size = 0;
+       speed_buffer_size = 0;
+       last_phase = 0;
+       phi = (uint64_t) (0x1000000);
+       file_frame = 0;
+       playback_sample = 0;
+       playback_distance = 0;
+       _read_data_count = 0;
+       _write_data_count = 0;
+       deprecated_io_node = 0;
+
+       /* there are no channels at this point, so these
+          two calls just get speed_buffer_size and wrap_buffer
+          size setup without duplicating their code.
+       */
+
+       set_block_size (_session.get_block_size());
+       allocate_temporary_buffers ();
+
+       pending_overwrite = false;
+       overwrite_frame = 0;
+       overwrite_queued = false;
+       input_change_pending = NoChange;
+
+       add_channel ();
+       _n_channels = 1;
+}
+
+void
+AudioDiskstream::destroy_channel (ChannelInfo &chan)
+{
+       if (chan.write_source) {
+               chan.write_source->release ();
+               chan.write_source = 0;
+       }
+               
+       if (chan.speed_buffer) {
+               delete [] chan.speed_buffer;
+       }
+
+       if (chan.playback_wrap_buffer) {
+               delete [] chan.playback_wrap_buffer;
+       }
+       if (chan.capture_wrap_buffer) {
+               delete [] chan.capture_wrap_buffer;
+       }
+       
+       delete chan.playback_buf;
+       delete chan.capture_buf;
+       delete chan.capture_transition_buf;
+       
+       chan.playback_buf = 0;
+       chan.capture_buf = 0;
+}
+
+AudioDiskstream::~AudioDiskstream ()
+{
+       Glib::Mutex::Lock lm (state_lock);
+
+       if (_playlist) {
+               _playlist->unref ();
+       }
+
+       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+               destroy_channel((*chan));
+       }
+       
+       channels.clear();
+}
+
+void
+AudioDiskstream::handle_input_change (IOChange change, void *src)
+{
+       Glib::Mutex::Lock lm (state_lock);
+
+       if (!(input_change_pending & change)) {
+               input_change_pending = IOChange (input_change_pending|change);
+               _session.request_input_change_handling ();
+       }
+}
+
+void
+AudioDiskstream::non_realtime_input_change ()
+{
+       { 
+               Glib::Mutex::Lock lm (state_lock);
+
+               if (input_change_pending == NoChange) {
+                       return;
+               }
+
+               if (input_change_pending & ConfigurationChanged) {
+
+                       if (_io->n_inputs() > _n_channels) {
+                               
+                               // we need to add new channel infos
+                               
+                               int diff = _io->n_inputs() - channels.size();
+                               
+                               for (int i = 0; i < diff; ++i) {
+                                       add_channel ();
+                               }
+                               
+               } else if (_io->n_inputs() < _n_channels) {
+                               
+                               // we need to get rid of channels
+                               
+                               int diff = channels.size() - _io->n_inputs();
+                               
+                               for (int i = 0; i < diff; ++i) {
+                                       remove_channel ();
+                               }
+                       }
+               } 
+
+               get_input_sources ();
+               set_capture_offset ();
+               
+               if (first_input_change) {
+                       set_align_style (_persistent_alignment_style);
+                       first_input_change = false;
+               } else {
+                       set_align_style_from_io ();
+               }
+
+               input_change_pending = NoChange;
+       }
+
+       /* reset capture files */
+
+       reset_write_sources (false);
+
+       /* now refill channel buffers */
+
+       if (speed() != 1.0f || speed() != -1.0f) {
+               seek ((jack_nframes_t) (_session.transport_frame() * (double) speed()));
+       }
+       else {
+               seek (_session.transport_frame());
+       }
+}
+
+void
+AudioDiskstream::get_input_sources ()
+{
+       uint32_t ni = _io->n_inputs();
+       
+       for (uint32_t n = 0; n < ni; ++n) {
+               
+               const char **connections = _io->input(n)->get_connections ();
+               ChannelInfo& chan = channels[n];
+               
+               if (connections == 0 || connections[0] == 0) {
+                       
+                       if (chan.source) {
+                               // _source->disable_metering ();
+                       }
+                       
+                       chan.source = 0;
+                       
+               } else {
+                       chan.source = _session.engine().get_port_by_name (connections[0]);
+               }
+               
+               if (connections) {
+                       free (connections);
+               }
+       }
+}              
+
+int
+AudioDiskstream::find_and_use_playlist (const string& name)
+{
+       Playlist* pl;
+       AudioPlaylist* playlist;
+               
+       if ((pl = _session.get_playlist (name)) == 0) {
+               error << string_compose(_("AudioDiskstream: Session doesn't know about a Playlist called \"%1\""), name) << endmsg;
+               return -1;
+       }
+
+       if ((playlist = dynamic_cast<AudioPlaylist*> (pl)) == 0) {
+               error << string_compose(_("AudioDiskstream: Playlist \"%1\" isn't an audio playlist"), name) << endmsg;
+               return -1;
+       }
+
+       return use_playlist (playlist);
+}
+
+int
+AudioDiskstream::use_playlist (AudioPlaylist* playlist)
+{
+       {
+               Glib::Mutex::Lock lm (state_lock);
+
+               if (playlist == _playlist) {
+                       return 0;
+               }
+
+               plstate_connection.disconnect();
+               plmod_connection.disconnect ();
+               plgone_connection.disconnect ();
+
+               if (_playlist) {
+                       _playlist->unref();
+               }
+                       
+               _playlist = playlist;
+               _playlist->ref();
+
+               if (!in_set_state && recordable()) {
+                       reset_write_sources (false);
+               }
+               
+               plstate_connection = _playlist->StateChanged.connect (mem_fun (*this, &AudioDiskstream::playlist_changed));
+               plmod_connection = _playlist->Modified.connect (mem_fun (*this, &AudioDiskstream::playlist_modified));
+               plgone_connection = _playlist->GoingAway.connect (mem_fun (*this, &AudioDiskstream::playlist_deleted));
+       }
+
+       if (!overwrite_queued) {
+               _session.request_overwrite_buffer (this);
+               overwrite_queued = true;
+       }
+       
+       PlaylistChanged (); /* EMIT SIGNAL */
+       _session.set_dirty ();
+
+       return 0;
+}
+
+void
+AudioDiskstream::playlist_deleted (Playlist* pl)
+{
+       /* this catches an ordering issue with session destruction. playlists 
+          are destroyed before diskstreams. we have to invalidate any handles
+          we have to the playlist.
+       */
+
+       _playlist = 0;
+}
+
+int
+AudioDiskstream::use_new_playlist ()
+{
+       string newname;
+       AudioPlaylist* playlist;
+
+       if (!in_set_state && destructive()) {
+               return 0;
+       }
+
+       if (_playlist) {
+               newname = Playlist::bump_name (_playlist->name(), _session);
+       } else {
+               newname = Playlist::bump_name (_name, _session);
+       }
+
+       if ((playlist = new AudioPlaylist (_session, newname, hidden())) != 0) {
+               playlist->set_orig_diskstream_id (id());
+               return use_playlist (playlist);
+       } else { 
+               return -1;
+       }
+}
+
+int
+AudioDiskstream::use_copy_playlist ()
+{
+       if (destructive()) {
+               return 0;
+       }
+
+       if (_playlist == 0) {
+               error << string_compose(_("AudioDiskstream %1: there is no existing playlist to make a copy of!"), _name) << endmsg;
+               return -1;
+       }
+
+       string newname;
+       AudioPlaylist* playlist;
+
+       newname = Playlist::bump_name (_playlist->name(), _session);
+       
+       if ((playlist  = new AudioPlaylist (*_playlist, newname)) != 0) {
+               playlist->set_orig_diskstream_id (id());
+               return use_playlist (playlist);
+       } else { 
+               return -1;
+       }
+}
+
+void
+AudioDiskstream::setup_destructive_playlist ()
+{
+       AudioRegion::SourceList srcs;
+
+       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+               srcs.push_back ((*chan).write_source);
+       }
+
+       /* a single full-sized region */
+
+       AudioRegion* region = new AudioRegion (srcs, 0, max_frames, _name);
+       _playlist->add_region (*region, 0);             
+}
+
+void
+AudioDiskstream::use_destructive_playlist ()
+{
+       /* use the sources associated with the single full-extent region */
+       
+       Playlist::RegionList* rl = _playlist->regions_at (0);
+
+       if (rl->empty()) {
+               reset_write_sources (false, true);
+               return;
+       }
+
+       AudioRegion* region = dynamic_cast<AudioRegion*> (rl->front());
+
+       if (region == 0) {
+               throw failed_constructor();
+       }
+
+       delete rl;
+
+       uint32_t n;
+       ChannelList::iterator chan;
+
+       for (n = 0, chan = channels.begin(); chan != channels.end(); ++chan, ++n) {
+               (*chan).write_source = dynamic_cast<AudioFileSource*>(&region->source (n));
+               (*chan).write_source->set_allow_remove_if_empty (false);
+       }
+
+       /* the source list will never be reset for a destructive track */
+}
+
+void
+AudioDiskstream::set_io (IO& io)
+{
+       _io = &io;
+       set_align_style_from_io ();
+}
+
+int
+AudioDiskstream::set_name (string str, void *src)
+{
+       if (str != _name) {
+               _playlist->set_name (str);
+               _name = str;
+               
+               if (!in_set_state && recordable()) {
+                       /* rename existing capture files so that they have the correct name */
+                       return rename_write_sources ();
+               } else {
+                       return -1;
+               }
+       }
+
+       return 0;
+}
+
+void
+AudioDiskstream::set_speed (double sp)
+{
+       _session.request_diskstream_speed (*this, sp);
+
+       /* to force a rebuffering at the right place */
+       playlist_modified();
+}
+
+bool
+AudioDiskstream::realtime_set_speed (double sp, bool global)
+{
+       bool changed = false;
+       double new_speed = sp * _session.transport_speed();
+       
+       if (_visible_speed != sp) {
+               _visible_speed = sp;
+               changed = true;
+       }
+       
+       if (new_speed != _actual_speed) {
+               
+               jack_nframes_t required_wrap_size = (jack_nframes_t) floor (_session.get_block_size() * 
+                                                                           fabs (new_speed)) + 1;
+               
+               if (required_wrap_size > wrap_buffer_size) {
+                       _buffer_reallocation_required = true;
+               }
+               
+               _actual_speed = new_speed;
+               phi = (uint64_t) (0x1000000 * fabs(_actual_speed));
+       }
+
+       if (changed) {
+               if (!global) {
+                       _seek_required = true;
+               }
+                speed_changed (); /* EMIT SIGNAL */
+       }
+
+       return _buffer_reallocation_required || _seek_required;
+}
+
+void
+AudioDiskstream::non_realtime_set_speed ()
+{
+       if (_buffer_reallocation_required)
+       {
+               Glib::Mutex::Lock lm (state_lock);
+               allocate_temporary_buffers ();
+
+               _buffer_reallocation_required = false;
+       }
+
+       if (_seek_required) {
+               if (speed() != 1.0f || speed() != -1.0f) {
+                       seek ((jack_nframes_t) (_session.transport_frame() * (double) speed()), true);
+               }
+               else {
+                       seek (_session.transport_frame(), true);
+               }
+
+               _seek_required = false;
+       }
+}
+
+void
+AudioDiskstream::prepare ()
+{
+       _processed = false;
+       playback_distance = 0;
+}
+
+void
+AudioDiskstream::check_record_status (jack_nframes_t transport_frame, jack_nframes_t nframes, bool can_record)
+{
+       int possibly_recording;
+       int rolling;
+       int change;
+       const int transport_rolling = 0x4;
+       const int track_rec_enabled = 0x2;
+       const int global_rec_enabled = 0x1;
+
+       /* merge together the 3 factors that affect record status, and compute
+          what has changed.
+       */
+
+       rolling = _session.transport_speed() != 0.0f;
+       possibly_recording = (rolling << 2) | (record_enabled() << 1) | can_record;
+       change = possibly_recording ^ last_possibly_recording;
+
+       if (possibly_recording == last_possibly_recording) {
+               return;
+       }
+
+       /* change state */
+
+       /* if per-track or global rec-enable turned on while the other was already on, we've started recording */
+
+       if ((change & track_rec_enabled) && record_enabled() && (!(change & global_rec_enabled) && can_record) || 
+           ((change & global_rec_enabled) && can_record && (!(change & track_rec_enabled) && record_enabled()))) {
+               
+               /* starting to record: compute first+last frames */
+
+               first_recordable_frame = transport_frame + _capture_offset;
+               last_recordable_frame = max_frames;
+               capture_start_frame = transport_frame;
+
+               if (!(last_possibly_recording & transport_rolling) && (possibly_recording & transport_rolling)) {
+
+                       /* was stopped, now rolling (and recording) */
+
+                       if (_alignment_style == ExistingMaterial) {
+                               first_recordable_frame += _session.worst_output_latency();
+                       } else {
+                               first_recordable_frame += _roll_delay;
+                       }
+
+               } else {
+
+                       /* was rolling, but record state changed */
+
+                       if (_alignment_style == ExistingMaterial) {
+
+
+                               if (!_session.get_punch_in()) {
+
+                                       /* manual punch in happens at the correct transport frame
+                                          because the user hit a button. but to get alignment correct 
+                                          we have to back up the position of the new region to the 
+                                          appropriate spot given the roll delay.
+                                       */
+
+                                       capture_start_frame -= _roll_delay;
+
+                                       /* XXX paul notes (august 2005): i don't know why
+                                          this is needed.
+                                       */
+
+                                       first_recordable_frame += _capture_offset;
+
+                               } else {
+
+                                       /* autopunch toggles recording at the precise
+                                          transport frame, and then the DS waits
+                                          to start recording for a time that depends
+                                          on the output latency.
+                                       */
+
+                                       first_recordable_frame += _session.worst_output_latency();
+                               }
+
+                       } else {
+
+                               if (_session.get_punch_in()) {
+                                       first_recordable_frame += _roll_delay;
+                               } else {
+                                       capture_start_frame -= _roll_delay;
+                               }
+                       }
+                       
+               }
+
+               if (_flags & Recordable) {
+                       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+                               
+                               RingBufferNPT<CaptureTransition>::rw_vector transvec;
+                               (*chan).capture_transition_buf->get_write_vector(&transvec);
+                               
+                               if (transvec.len[0] > 0) {
+                                       transvec.buf[0]->type = CaptureStart;
+                                       transvec.buf[0]->capture_val = capture_start_frame;
+                                       (*chan).capture_transition_buf->increment_write_ptr(1);
+                               }
+                               else {
+                                       // bad!
+                                       fatal << X_("programming error: capture_transition_buf is full on rec start!  inconceivable!") 
+                                             << endmsg;
+                               }
+                       }
+               }
+
+       } else if (!record_enabled() || !can_record) {
+               
+               /* stop recording */
+
+               last_recordable_frame = transport_frame + _capture_offset;
+               
+               if (_alignment_style == ExistingMaterial) {
+                       last_recordable_frame += _session.worst_output_latency();
+               } else {
+                       last_recordable_frame += _roll_delay;
+               }
+       }
+
+       last_possibly_recording = possibly_recording;
+}
+
+int
+AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes, jack_nframes_t offset, bool can_record, bool rec_monitors_input)
+{
+       uint32_t n;
+       ChannelList::iterator c;
+       int ret = -1;
+       jack_nframes_t rec_offset = 0;
+       jack_nframes_t rec_nframes = 0;
+       bool nominally_recording;
+       bool re = record_enabled ();
+       bool collect_playback = false;
+
+       /* if we've already processed the frames corresponding to this call,
+          just return. this allows multiple routes that are taking input
+          from this diskstream to call our ::process() method, but have
+          this stuff only happen once. more commonly, it allows both
+          the AudioTrack that is using this AudioDiskstream *and* the Session
+          to call process() without problems.
+       */
+
+       if (_processed) {
+               return 0;
+       }
+
+       check_record_status (transport_frame, nframes, can_record);
+
+       nominally_recording = (can_record && re);
+
+       if (nframes == 0) {
+               _processed = true;
+               return 0;
+       }
+
+       /* This lock is held until the end of AudioDiskstream::commit, so these two functions
+          must always be called as a pair. The only exception is if this function
+          returns a non-zero value, in which case, ::commit should not be called.
+       */
+
+        // If we can't take the state lock return.
+       if (!state_lock.trylock()) {
+               return 1;
+       }
+
+       adjust_capture_position = 0;
+
+       for (c = channels.begin(); c != channels.end(); ++c) {
+               (*c).current_capture_buffer = 0;
+               (*c).current_playback_buffer  = 0;
+       }
+
+       if (nominally_recording || (_session.get_record_enabled() && _session.get_punch_in())) {
+               OverlapType ot;
+               
+               ot = coverage (first_recordable_frame, last_recordable_frame, transport_frame, transport_frame + nframes);
+
+               switch (ot) {
+               case OverlapNone:
+                       rec_nframes = 0;
+                       break;
+                       
+               case OverlapInternal:
+               /*     ----------    recrange
+                         |---|       transrange
+               */
+                       rec_nframes = nframes;
+                       rec_offset = 0;
+                       break;
+                       
+               case OverlapStart:
+                       /*    |--------|    recrange
+                            -----|          transrange
+                       */
+                       rec_nframes = transport_frame + nframes - first_recordable_frame;
+                       if (rec_nframes) {
+                               rec_offset = first_recordable_frame - transport_frame;
+                       }
+                       break;
+                       
+               case OverlapEnd:
+                       /*    |--------|    recrange
+                                 |--------  transrange
+                       */
+                       rec_nframes = last_recordable_frame - transport_frame;
+                       rec_offset = 0;
+                       break;
+                       
+               case OverlapExternal:
+                       /*    |--------|    recrange
+                            --------------  transrange
+                       */
+                       rec_nframes = last_recordable_frame - last_recordable_frame;
+                       rec_offset = first_recordable_frame - transport_frame;
+                       break;
+               }
+
+               if (rec_nframes && !was_recording) {
+                       capture_captured = 0;
+                       was_recording = true;
+               }
+       }
+
+
+       if (can_record && !_last_capture_regions.empty()) {
+               _last_capture_regions.clear ();
+       }
+
+       if (nominally_recording || rec_nframes) {
+
+               for (n = 0, c = channels.begin(); c != channels.end(); ++c, ++n) {
+                       
+                       ChannelInfo& chan (*c);
+               
+                       chan.capture_buf->get_write_vector (&chan.capture_vector);
+
+                       if (rec_nframes <= chan.capture_vector.len[0]) {
+                               
+                               chan.current_capture_buffer = chan.capture_vector.buf[0];
+
+                               /* note: grab the entire port buffer, but only copy what we were supposed to for recording, and use
+                                  rec_offset
+                               */
+
+                               memcpy (chan.current_capture_buffer, _io->input(n)->get_buffer (rec_nframes) + offset + rec_offset, sizeof (Sample) * rec_nframes);
+
+                       } else {
+
+                               jack_nframes_t total = chan.capture_vector.len[0] + chan.capture_vector.len[1];
+
+                               if (rec_nframes > total) {
+                                       DiskOverrun ();
+                                       goto out;
+                               }
+
+                               Sample* buf = _io->input (n)->get_buffer (nframes) + offset;
+                               jack_nframes_t first = chan.capture_vector.len[0];
+
+                               memcpy (chan.capture_wrap_buffer, buf, sizeof (Sample) * first);
+                               memcpy (chan.capture_vector.buf[0], buf, sizeof (Sample) * first);
+                               memcpy (chan.capture_wrap_buffer+first, buf + first, sizeof (Sample) * (rec_nframes - first));
+                               memcpy (chan.capture_vector.buf[1], buf + first, sizeof (Sample) * (rec_nframes - first));
+                               
+                               chan.current_capture_buffer = chan.capture_wrap_buffer;
+                       }
+               }
+
+       } else {
+
+               if (was_recording) {
+                       finish_capture (rec_monitors_input);
+               }
+
+       }
+       
+       if (rec_nframes) {
+               
+               /* data will be written to disk */
+
+               if (rec_nframes == nframes && rec_offset == 0) {
+
+                       for (c = channels.begin(); c != channels.end(); ++c) {
+                               (*c).current_playback_buffer = (*c).current_capture_buffer;
+                       }
+
+                       playback_distance = nframes;
+
+               } else {
+
+
+                       /* we can't use the capture buffer as the playback buffer, because
+                          we recorded only a part of the current process' cycle data
+                          for capture.
+                       */
+
+                       collect_playback = true;
+               }
+
+               adjust_capture_position = rec_nframes;
+
+       } else if (nominally_recording) {
+
+               /* can't do actual capture yet - waiting for latency effects to finish before we start*/
+
+               for (c = channels.begin(); c != channels.end(); ++c) {
+                       (*c).current_playback_buffer = (*c).current_capture_buffer;
+               }
+
+               playback_distance = nframes;
+
+       } else {
+
+               collect_playback = true;
+       }
+
+       if (collect_playback) {
+
+               /* we're doing playback */
+
+               jack_nframes_t necessary_samples;
+
+               /* no varispeed playback if we're recording, because the output .... TBD */
+
+               if (rec_nframes == 0 && _actual_speed != 1.0f) {
+                       necessary_samples = (jack_nframes_t) floor ((nframes * fabs (_actual_speed))) + 1;
+               } else {
+                       necessary_samples = nframes;
+               }
+               
+               for (c = channels.begin(); c != channels.end(); ++c) {
+                       (*c).playback_buf->get_read_vector (&(*c).playback_vector);
+               }
+
+               n = 0;                  
+
+               for (c = channels.begin(); c != channels.end(); ++c, ++n) {
+               
+                       ChannelInfo& chan (*c);
+
+                       if (necessary_samples <= chan.playback_vector.len[0]) {
+
+                               chan.current_playback_buffer = chan.playback_vector.buf[0];
+
+                       } else {
+                               jack_nframes_t total = chan.playback_vector.len[0] + chan.playback_vector.len[1];
+                               
+                               if (necessary_samples > total) {
+                                       DiskUnderrun ();
+                                       goto out;
+                                       
+                               } else {
+                                       
+                                       memcpy ((char *) chan.playback_wrap_buffer, chan.playback_vector.buf[0],
+                                               chan.playback_vector.len[0] * sizeof (Sample));
+                                       memcpy (chan.playback_wrap_buffer + chan.playback_vector.len[0], chan.playback_vector.buf[1], 
+                                               (necessary_samples - chan.playback_vector.len[0]) * sizeof (Sample));
+                                       
+                                       chan.current_playback_buffer = chan.playback_wrap_buffer;
+                               }
+                       }
+               } 
+
+               if (rec_nframes == 0 && _actual_speed != 1.0f && _actual_speed != -1.0f) {
+                       
+                       uint64_t phase = last_phase;
+                       jack_nframes_t i = 0;
+
+                       // Linearly interpolate into the alt buffer
+                       // using 40.24 fixp maths (swh)
+
+                       for (c = channels.begin(); c != channels.end(); ++c) {
+
+                               float fr;
+                               ChannelInfo& chan (*c);
+
+                               i = 0;
+                               phase = last_phase;
+
+                               for (jack_nframes_t outsample = 0; outsample < nframes; ++outsample) {
+                                       i = phase >> 24;
+                                       fr = (phase & 0xFFFFFF) / 16777216.0f;
+                                       chan.speed_buffer[outsample] = 
+                                               chan.current_playback_buffer[i] * (1.0f - fr) +
+                                               chan.current_playback_buffer[i+1] * fr;
+                                       phase += phi;
+                               }
+                               
+                               chan.current_playback_buffer = chan.speed_buffer;
+                       }
+
+                       playback_distance = i + 1;
+                       last_phase = (phase & 0xFFFFFF);
+
+               } else {
+                       playback_distance = nframes;
+               }
+
+       }
+
+       ret = 0;
+
+  out:
+       _processed = true;
+
+       if (ret) {
+
+               /* we're exiting with failure, so ::commit will not
+                  be called. unlock the state lock.
+               */
+               
+               state_lock.unlock();
+       } 
+
+       return ret;
+}
+
+void
+AudioDiskstream::recover ()
+{
+       state_lock.unlock();
+       _processed = false;
+}
+
+bool
+AudioDiskstream::commit (jack_nframes_t nframes)
+{
+       bool need_butler = false;
+
+       if (_actual_speed < 0.0) {
+               playback_sample -= playback_distance;
+       } else {
+               playback_sample += playback_distance;
+       }
+
+       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+
+               (*chan).playback_buf->increment_read_ptr (playback_distance);
+               
+               if (adjust_capture_position) {
+                       (*chan).capture_buf->increment_write_ptr (adjust_capture_position);
+               }
+       }
+       
+       if (adjust_capture_position != 0) {
+               capture_captured += adjust_capture_position;
+               adjust_capture_position = 0;
+       }
+       
+       if (_slaved) {
+               need_butler = channels[0].playback_buf->write_space() >= channels[0].playback_buf->bufsize() / 2;
+       } else {
+               need_butler = channels[0].playback_buf->write_space() >= disk_io_chunk_frames
+                       || channels[0].capture_buf->read_space() >= disk_io_chunk_frames;
+       }
+
+       state_lock.unlock();
+
+       _processed = false;
+
+       return need_butler;
+}
+
+void
+AudioDiskstream::set_pending_overwrite (bool yn)
+{
+       /* called from audio thread, so we can use the read ptr and playback sample as we wish */
+       
+       pending_overwrite = yn;
+
+       overwrite_frame = playback_sample;
+       overwrite_offset = channels.front().playback_buf->get_read_ptr();
+}
+
+int
+AudioDiskstream::overwrite_existing_buffers ()
+{
+       Sample* mixdown_buffer;
+       float* gain_buffer;
+       char * workbuf;
+       int ret = -1;
+       bool reversed = (_visible_speed * _session.transport_speed()) < 0.0f;
+
+       overwrite_queued = false;
+
+       /* assume all are the same size */
+       jack_nframes_t size = channels[0].playback_buf->bufsize();
+       
+       mixdown_buffer = new Sample[size];
+       gain_buffer = new float[size];
+       workbuf = new char[size*4];
+       
+       /* reduce size so that we can fill the buffer correctly. */
+       size--;
+       
+       uint32_t n=0;
+       jack_nframes_t start;
+
+       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan, ++n) {
+
+               start = overwrite_frame;
+               jack_nframes_t cnt = size;
+               
+               /* to fill the buffer without resetting the playback sample, we need to
+                  do it one or two chunks (normally two).
+
+                  |----------------------------------------------------------------------|
+
+                                      ^
+                                      overwrite_offset
+                   |<- second chunk->||<----------------- first chunk ------------------>|
+                  
+               */
+               
+               jack_nframes_t to_read = size - overwrite_offset;
+
+               if (read ((*chan).playback_buf->buffer() + overwrite_offset, mixdown_buffer, gain_buffer, workbuf,
+                         start, to_read, *chan, n, reversed)) {
+                       error << string_compose(_("AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"),
+                                        _id, size, playback_sample) << endmsg;
+                       goto out;
+               }
+                       
+               if (cnt > to_read) {
+
+                       cnt -= to_read;
+               
+                       if (read ((*chan).playback_buf->buffer(), mixdown_buffer, gain_buffer, workbuf,
+                                 start, cnt, *chan, n, reversed)) {
+                               error << string_compose(_("AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"),
+                                                _id, size, playback_sample) << endmsg;
+                               goto out;
+                       }
+               }
+       }
+
+       ret = 0;
+  out:
+       pending_overwrite = false;
+       delete [] gain_buffer;
+       delete [] mixdown_buffer;
+       delete [] workbuf;
+       return ret;
+}
+
+int
+AudioDiskstream::seek (jack_nframes_t frame, bool complete_refill)
+{
+       Glib::Mutex::Lock lm (state_lock);
+       uint32_t n;
+       int ret;
+       ChannelList::iterator chan;
+
+       for (n = 0, chan = channels.begin(); chan != channels.end(); ++chan, ++n) {
+               (*chan).playback_buf->reset ();
+               (*chan).capture_buf->reset ();
+       }
+       
+       playback_sample = frame;
+       file_frame = frame;
+
+       if (complete_refill) {
+               while ((ret = do_refill (0, 0, 0)) > 0);
+       } else {
+               ret = do_refill (0, 0, 0);
+       }
+
+       return ret;
+}
+
+int
+AudioDiskstream::can_internal_playback_seek (jack_nframes_t distance)
+{
+       ChannelList::iterator chan;
+
+       for (chan = channels.begin(); chan != channels.end(); ++chan) {
+               if ((*chan).playback_buf->read_space() < distance) {
+                       return false;
+               } 
+       }
+       return true;
+}
+
+int
+AudioDiskstream::internal_playback_seek (jack_nframes_t distance)
+{
+       ChannelList::iterator chan;
+
+       for (chan = channels.begin(); chan != channels.end(); ++chan) {
+               (*chan).playback_buf->increment_read_ptr (distance);
+       }
+
+       first_recordable_frame += distance;
+       playback_sample += distance;
+       
+       return 0;
+}
+
+int
+AudioDiskstream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, char * workbuf, jack_nframes_t& start, jack_nframes_t cnt, 
+                 ChannelInfo& channel_info, int channel, bool reversed)
+{
+       jack_nframes_t this_read = 0;
+       bool reloop = false;
+       jack_nframes_t loop_end = 0;
+       jack_nframes_t loop_start = 0;
+       jack_nframes_t loop_length = 0;
+       jack_nframes_t offset = 0;
+       Location *loc = 0;
+
+       if (!reversed) {
+               /* Make the use of a Location atomic for this read operation.
+                  
+                  Note: Locations don't get deleted, so all we care about
+                  when I say "atomic" is that we are always pointing to
+                  the same one and using a start/length values obtained
+                  just once.
+               */
+               
+               if ((loc = loop_location) != 0) {
+                       loop_start = loc->start();
+                       loop_end = loc->end();
+                       loop_length = loop_end - loop_start;
+               }
+               
+               /* if we are looping, ensure that the first frame we read is at the correct
+                  position within the loop.
+               */
+               
+               if (loc && start >= loop_end) {
+                       //cerr << "start adjusted from " << start;
+                       start = loop_start + ((start - loop_start) % loop_length);
+                       //cerr << "to " << start << endl;
+               }
+               //cerr << "start is " << start << "  loopstart: " << loop_start << "  loopend: " << loop_end << endl;
+       }
+
+       while (cnt) {
+
+               /* take any loop into account. we can't read past the end of the loop. */
+
+               if (loc && (loop_end - start < cnt)) {
+                       this_read = loop_end - start;
+                       //cerr << "reloop true: thisread: " << this_read << "  cnt: " << cnt << endl;
+                       reloop = true;
+               } else {
+                       reloop = false;
+                       this_read = cnt;
+               }
+
+               if (this_read == 0) {
+                       break;
+               }
+
+               this_read = min(cnt,this_read);
+
+               if (_playlist->read (buf+offset, mixdown_buffer, gain_buffer, workbuf, start, this_read, channel) != this_read) {
+                       error << string_compose(_("AudioDiskstream %1: cannot read %2 from playlist at frame %3"), _id, this_read, 
+                                        start) << endmsg;
+                       return -1;
+               }
+
+               _read_data_count = _playlist->read_data_count();
+               
+               if (reversed) {
+
+                       /* don't adjust start, since caller has already done that
+                        */
+
+                       swap_by_ptr (buf, buf + this_read - 1);
+                       
+               } else {
+                       
+                       /* if we read to the end of the loop, go back to the beginning */
+                       
+                       if (reloop) {
+                               start = loop_start;
+                       } else {
+                               start += this_read;
+                       }
+               } 
+
+               cnt -= this_read;
+               offset += this_read;
+       }
+
+       return 0;
+}
+
+int
+AudioDiskstream::do_refill (Sample* mixdown_buffer, float* gain_buffer, char * workbuf)
+{
+       int32_t ret = 0;
+       jack_nframes_t to_read;
+       RingBufferNPT<Sample>::rw_vector vector;
+       bool free_mixdown;
+       bool free_gain;
+       bool free_workbuf;
+       bool reversed = (_visible_speed * _session.transport_speed()) < 0.0f;
+       jack_nframes_t total_space;
+       jack_nframes_t zero_fill;
+       uint32_t chan_n;
+       ChannelList::iterator i;
+       jack_nframes_t ts;
+
+       channels.front().playback_buf->get_write_vector (&vector);
+       
+       if ((total_space = vector.len[0] + vector.len[1]) == 0) {
+               return 0;
+       }
+       
+       /* if there are 2+ chunks of disk i/o possible for
+          this track, let the caller know so that it can arrange
+          for us to be called again, ASAP.
+       */
+       
+       if (total_space >= (_slaved?3:2) * disk_io_chunk_frames) {
+               ret = 1;
+       }
+       
+       /* if we're running close to normal speed and there isn't enough 
+          space to do disk_io_chunk_frames of I/O, then don't bother.  
+          
+          at higher speeds, just do it because the sync between butler
+          and audio thread may not be good enough.
+       */
+       
+       if ((total_space < disk_io_chunk_frames) && fabs (_actual_speed) < 2.0f) {
+               return 0;
+       }
+       
+       /* when slaved, don't try to get too close to the read pointer. this
+          leaves space for the buffer reversal to have something useful to
+          work with.
+       */
+       
+       if (_slaved && total_space < (channels.front().playback_buf->bufsize() / 2)) {
+               return 0;
+       }
+
+       total_space = min (disk_io_chunk_frames, total_space);
+
+       if (reversed) {
+
+               if (file_frame == 0) {
+
+                       /* at start: nothing to do but fill with silence */
+
+                       for (chan_n = 0, i = channels.begin(); i != channels.end(); ++i, ++chan_n) {
+                                       
+                               ChannelInfo& chan (*i);
+                               chan.playback_buf->get_write_vector (&vector);
+                               memset (vector.buf[0], 0, sizeof(Sample) * vector.len[0]);
+                               if (vector.len[1]) {
+                                       memset (vector.buf[1], 0, sizeof(Sample) * vector.len[1]);
+                               }
+                               chan.playback_buf->increment_write_ptr (vector.len[0] + vector.len[1]);
+                       }
+                       return 0;
+               }
+
+               if (file_frame < total_space) {
+
+                       /* too close to the start: read what we can, 
+                          and then zero fill the rest 
+                       */
+
+                       zero_fill = total_space - file_frame;
+                       total_space = file_frame;
+                       file_frame = 0;
+
+               } else {
+                       
+                       /* move read position backwards because we are going
+                          to reverse the data.
+                       */
+                       
+                       file_frame -= total_space;
+                       zero_fill = 0;
+               }
+
+       } else {
+
+               if (file_frame == max_frames) {
+
+                       /* at end: nothing to do but fill with silence */
+                       
+                       for (chan_n = 0, i = channels.begin(); i != channels.end(); ++i, ++chan_n) {
+                                       
+                               ChannelInfo& chan (*i);
+                               chan.playback_buf->get_write_vector (&vector);
+                               memset (vector.buf[0], 0, sizeof(Sample) * vector.len[0]);
+                               if (vector.len[1]) {
+                                       memset (vector.buf[1], 0, sizeof(Sample) * vector.len[1]);
+                               }
+                               chan.playback_buf->increment_write_ptr (vector.len[0] + vector.len[1]);
+                       }
+                       return 0;
+               }
+               
+               if (file_frame > max_frames - total_space) {
+
+                       /* to close to the end: read what we can, and zero fill the rest */
+
+                       zero_fill = total_space - (max_frames - file_frame);
+                       total_space = max_frames - file_frame;
+
+               } else {
+                       zero_fill = 0;
+               }
+       }
+
+       /* Please note: the code to allocate buffers isn't run
+          during normal butler thread operation. Its there
+          for other times when we need to call do_refill()
+          from somewhere other than the butler thread.
+       */
+
+       if (mixdown_buffer == 0) {
+               mixdown_buffer = new Sample[disk_io_chunk_frames];
+               free_mixdown = true;
+       } else {
+               free_mixdown = false;
+       }
+
+       if (gain_buffer == 0) {
+               gain_buffer = new float[disk_io_chunk_frames];
+               free_gain = true;
+       } else {
+               free_gain = false;
+       }
+
+       if (workbuf == 0) {
+               workbuf = new char[disk_io_chunk_frames * 4];
+               free_workbuf = true;
+       } else {
+               free_workbuf = false;
+       }
+       
+       jack_nframes_t file_frame_tmp = 0;
+
+       for (chan_n = 0, i = channels.begin(); i != channels.end(); ++i, ++chan_n) {
+
+               ChannelInfo& chan (*i);
+               Sample* buf1;
+               Sample* buf2;
+               jack_nframes_t len1, len2;
+
+               chan.playback_buf->get_write_vector (&vector);
+
+               ts = total_space;
+               file_frame_tmp = file_frame;
+
+               if (reversed) {
+                       buf1 = vector.buf[1];
+                       len1 = vector.len[1];
+                       buf2 = vector.buf[0];
+                       len2 = vector.len[0];
+               } else {
+                       buf1 = vector.buf[0];
+                       len1 = vector.len[0];
+                       buf2 = vector.buf[1];
+                       len2 = vector.len[1];
+               }
+
+
+               to_read = min (ts, len1);
+               to_read = min (to_read, disk_io_chunk_frames);
+
+               if (to_read) {
+
+                       if (read (buf1, mixdown_buffer, gain_buffer, workbuf, file_frame_tmp, to_read, chan, chan_n, reversed)) {
+                               ret = -1;
+                               goto out;
+                       }
+                       
+                       chan.playback_buf->increment_write_ptr (to_read);
+                       ts -= to_read;
+               }
+
+               to_read = min (ts, len2);
+
+               if (to_read) {
+
+                       
+                       /* we read all of vector.len[0], but it wasn't an entire disk_io_chunk_frames of data,
+                          so read some or all of vector.len[1] as well.
+                       */
+
+                       if (read (buf2, mixdown_buffer, gain_buffer, workbuf, file_frame_tmp, to_read, chan, chan_n, reversed)) {
+                               ret = -1;
+                               goto out;
+                       }
+               
+                       chan.playback_buf->increment_write_ptr (to_read);
+               }
+
+               if (zero_fill) {
+                       /* do something */
+               }
+
+       }
+       
+       file_frame = file_frame_tmp;
+
+  out:
+       if (free_mixdown) {
+               delete [] mixdown_buffer;
+       }
+       if (free_gain) {
+               delete [] gain_buffer;
+       }
+       if (free_workbuf) {
+               delete [] workbuf;
+       }
+
+       return ret;
+}      
+
+int
+AudioDiskstream::do_flush (char * workbuf, bool force_flush)
+{
+       uint32_t to_write;
+       int32_t ret = 0;
+       RingBufferNPT<Sample>::rw_vector vector;
+       RingBufferNPT<CaptureTransition>::rw_vector transvec;
+       jack_nframes_t total;
+       
+       /* important note: this function will write *AT MOST* 
+          disk_io_chunk_frames of data to disk. it will never 
+          write more than that. if its writes that much and there 
+          is more than that waiting to be written, it will return 1,
+          otherwise 0 on success or -1 on failure.
+
+          if there is less than disk_io_chunk_frames to be written, 
+          no data will be written at all unless `force_flush' is true.  
+       */
+
+       _write_data_count = 0;
+
+       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+       
+               (*chan).capture_buf->get_read_vector (&vector);
+
+               total = vector.len[0] + vector.len[1];
+
+               
+               if (total == 0 || (total < disk_io_chunk_frames && !force_flush && was_recording)) {
+                       goto out;
+               }
+
+               
+               /* if there are 2+ chunks of disk i/o possible for
+                  this track, let the caller know so that it can arrange
+                  for us to be called again, ASAP.
+                  
+                  if we are forcing a flush, then if there is* any* extra
+                  work, let the caller know.
+
+                  if we are no longer recording and there is any extra work,
+                  let the caller know too.
+               */
+
+               if (total >= 2 * disk_io_chunk_frames || ((force_flush || !was_recording) && total > disk_io_chunk_frames)) {
+                       ret = 1;
+               } 
+
+               to_write = min (disk_io_chunk_frames, (jack_nframes_t) vector.len[0]);
+               
+               
+               // check the transition buffer when recording destructive
+               // important that we get this after the capture buf
+
+               if (destructive()) {
+                       (*chan).capture_transition_buf->get_read_vector(&transvec);
+                       size_t transcount = transvec.len[0] + transvec.len[1];
+                       bool have_start = false;
+                       size_t ti;
+
+                       for (ti=0; ti < transcount; ++ti) {
+                               CaptureTransition & captrans = (ti < transvec.len[0]) ? transvec.buf[0][ti] : transvec.buf[1][ti-transvec.len[0]];
+                               
+                               if (captrans.type == CaptureStart) {
+                                       // by definition, the first data we got above represents the given capture pos
+
+                                       (*chan).write_source->mark_capture_start (captrans.capture_val);
+                                       (*chan).curr_capture_cnt = 0;
+
+                                       have_start = true;
+                               }
+                               else if (captrans.type == CaptureEnd) {
+
+                                       // capture end, the capture_val represents total frames in capture
+
+                                       if (captrans.capture_val <= (*chan).curr_capture_cnt + to_write) {
+
+                                               // shorten to make the write a perfect fit
+                                               uint32_t nto_write = (captrans.capture_val - (*chan).curr_capture_cnt); 
+
+                                               if (nto_write < to_write) {
+                                                       ret = 1; // should we?
+                                               }
+                                               to_write = nto_write;
+
+                                               (*chan).write_source->mark_capture_end ();
+                                               
+                                               // increment past this transition, but go no further
+                                               ++ti;
+                                               break;
+                                       }
+                                       else {
+                                               // actually ends just beyond this chunk, so force more work
+                                               ret = 1;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (ti > 0) {
+                               (*chan).capture_transition_buf->increment_read_ptr(ti);
+                       }
+               }
+
+               if ((!(*chan).write_source) || (*chan).write_source->write (vector.buf[0], to_write, workbuf) != to_write) {
+                       error << string_compose(_("AudioDiskstream %1: cannot write to disk"), _id) << endmsg;
+                       return -1;
+               }
+
+               (*chan).capture_buf->increment_read_ptr (to_write);
+               (*chan).curr_capture_cnt += to_write;
+               
+               if ((to_write == vector.len[0]) && (total > to_write) && (to_write < disk_io_chunk_frames) && !destructive()) {
+               
+                       /* we wrote all of vector.len[0] but it wasn't an entire
+                          disk_io_chunk_frames of data, so arrange for some part 
+                          of vector.len[1] to be flushed to disk as well.
+                       */
+               
+                       to_write = min ((jack_nframes_t)(disk_io_chunk_frames - to_write), (jack_nframes_t) vector.len[1]);
+               
+                       if ((*chan).write_source->write (vector.buf[1], to_write, workbuf) != to_write) {
+                               error << string_compose(_("AudioDiskstream %1: cannot write to disk"), _id) << endmsg;
+                               return -1;
+                       }
+
+                       _write_data_count += (*chan).write_source->write_data_count();
+       
+                       (*chan).capture_buf->increment_read_ptr (to_write);
+                       (*chan).curr_capture_cnt += to_write;
+               }
+       }
+
+  out:
+       return ret;
+}
+
+void
+AudioDiskstream::playlist_changed (Change ignored)
+{
+       playlist_modified ();
+}
+
+void
+AudioDiskstream::playlist_modified ()
+{
+       if (!i_am_the_modifier && !overwrite_queued) {
+               _session.request_overwrite_buffer (this);
+               overwrite_queued = true;
+       } 
+}
+
+void
+AudioDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_capture)
+{
+       uint32_t buffer_position;
+       bool more_work = true;
+       int err = 0;
+       AudioRegion* region = 0;
+       jack_nframes_t total_capture;
+       AudioRegion::SourceList srcs;
+       AudioRegion::SourceList::iterator src;
+       ChannelList::iterator chan;
+       vector<CaptureInfo*>::iterator ci;
+       uint32_t n = 0; 
+       list<AudioFileSource*>* deletion_list;
+       bool mark_write_completed = false;
+
+       finish_capture (true);
+
+       /* butler is already stopped, but there may be work to do 
+          to flush remaining data to disk.
+       */
+
+       while (more_work && !err) {
+               switch (do_flush ( _session.conversion_buffer(Session::TransportContext), true)) {
+               case 0:
+                       more_work = false;
+                       break;
+               case 1:
+                       break;
+               case -1:
+                       error << string_compose(_("AudioDiskstream \"%1\": cannot flush captured data to disk!"), _name) << endmsg;
+                       err++;
+               }
+       }
+
+       /* XXX is there anything we can do if err != 0 ? */
+       Glib::Mutex::Lock lm (capture_info_lock);
+       
+       if (capture_info.empty()) {
+               return;
+       }
+
+       if (abort_capture) {
+               
+               ChannelList::iterator chan;
+               
+               deletion_list = new list<AudioFileSource*>;
+
+               for ( chan = channels.begin(); chan != channels.end(); ++chan) {
+
+                       if ((*chan).write_source) {
+                               
+                               (*chan).write_source->mark_for_remove ();
+                               (*chan).write_source->release ();
+                               
+                               deletion_list->push_back ((*chan).write_source);
+
+                               (*chan).write_source = 0;
+                       }
+                       
+                       /* new source set up in "out" below */
+               }
+               
+               if (!deletion_list->empty()) {
+                       DeleteSources (deletion_list);
+               } else {
+                       delete deletion_list;
+               }
+
+               goto out;
+       } 
+
+       for (total_capture = 0, ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
+               total_capture += (*ci)->frames;
+       }
+
+       /* figure out the name for this take */
+
+       for (n = 0, chan = channels.begin(); chan != channels.end(); ++chan, ++n) {
+
+               AudioFileSource* s = (*chan).write_source;
+               
+               if (s) {
+
+                       AudioFileSource* fsrc;
+
+                       srcs.push_back (s);
+
+                       if ((fsrc = dynamic_cast<AudioFileSource *>(s)) != 0) {
+                               fsrc->update_header (capture_info.front()->start, when, twhen);
+                       }
+
+                       s->set_captured_for (_name);
+                       
+               }
+       }
+
+       /* destructive tracks have a single, never changing region */
+
+       if (destructive()) {
+
+               /* send a signal that any UI can pick up to do the right thing. there is 
+                  a small problem here in that a UI may need the peak data to be ready
+                  for the data that was recorded and this isn't interlocked with that
+                  process. this problem is deferred to the UI.
+                */
+               
+               _playlist->Modified();
+
+       } else {
+
+               /* Register a new region with the Session that
+                  describes the entire source. Do this first
+                  so that any sub-regions will obviously be
+                  children of this one (later!)
+               */
+               
+               try {
+                       region = new AudioRegion (srcs, channels[0].write_source->last_capture_start_frame(), total_capture, 
+                                                 region_name_from_path (channels[0].write_source->name()), 
+                                                 0, AudioRegion::Flag (AudioRegion::DefaultFlags|AudioRegion::Automatic|AudioRegion::WholeFile));
+                       
+                       region->special_set_position (capture_info.front()->start);
+               }
+               
+               
+               catch (failed_constructor& err) {
+                       error << string_compose(_("%1: could not create region for complete audio file"), _name) << endmsg;
+                       /* XXX what now? */
+               }
+               
+               _last_capture_regions.push_back (region);
+
+               // cerr << _name << ": there are " << capture_info.size() << " capture_info records\n";
+               
+               _session.add_undo (_playlist->get_memento());
+               _playlist->freeze ();
+               
+               for (buffer_position = channels[0].write_source->last_capture_start_frame(), ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
+                       
+                       string region_name;
+                       _session.region_name (region_name, channels[0].write_source->name(), false);
+                       
+                       // cerr << _name << ": based on ci of " << (*ci)->start << " for " << (*ci)->frames << " add a region\n";
+                       
+                       try {
+                               region = new AudioRegion (srcs, buffer_position, (*ci)->frames, region_name);
+                       }
+                       
+                       catch (failed_constructor& err) {
+                               error << _("AudioDiskstream: could not create region for captured audio!") << endmsg;
+                               continue; /* XXX is this OK? */
+                       }
+                       
+                       _last_capture_regions.push_back (region);
+                       
+                       // cerr << "add new region, buffer position = " << buffer_position << " @ " << (*ci)->start << endl;
+                       
+                       i_am_the_modifier++;
+                       _playlist->add_region (*region, (*ci)->start);
+                       i_am_the_modifier--;
+                       
+                       buffer_position += (*ci)->frames;
+               }
+
+               _playlist->thaw ();
+               _session.add_redo_no_execute (_playlist->get_memento());
+       }
+
+       mark_write_completed = true;
+
+       reset_write_sources (mark_write_completed);
+
+  out:
+       for (ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
+               delete *ci;
+       }
+
+       capture_info.clear ();
+       capture_start_frame = 0;
+}
+
+void
+AudioDiskstream::finish_capture (bool rec_monitors_input)
+{
+       was_recording = false;
+       
+       if (capture_captured == 0) {
+               return;
+       }
+
+       if (recordable() && destructive()) {
+               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+                       
+                       RingBufferNPT<CaptureTransition>::rw_vector transvec;
+                       (*chan).capture_transition_buf->get_write_vector(&transvec);
+                       
+                       
+                       if (transvec.len[0] > 0) {
+                               transvec.buf[0]->type = CaptureEnd;
+                               transvec.buf[0]->capture_val = capture_captured;
+                               (*chan).capture_transition_buf->increment_write_ptr(1);
+                       }
+                       else {
+                               // bad!
+                               fatal << string_compose (_("programmer error: %1"), X_("capture_transition_buf is full when stopping record!  inconceivable!")) << endmsg;
+                       }
+               }
+       }
+       
+       
+       CaptureInfo* ci = new CaptureInfo;
+       
+       ci->start =  capture_start_frame;
+       ci->frames = capture_captured;
+       
+       /* XXX theoretical race condition here. Need atomic exchange ? 
+          However, the circumstances when this is called right 
+          now (either on record-disable or transport_stopped)
+          mean that no actual race exists. I think ...
+          We now have a capture_info_lock, but it is only to be used
+          to synchronize in the transport_stop and the capture info
+          accessors, so that invalidation will not occur (both non-realtime).
+       */
+
+       // cerr << "Finish capture, add new CI, " << ci->start << '+' << ci->frames << endl;
+
+       capture_info.push_back (ci);
+       capture_captured = 0;
+}
+
+void
+AudioDiskstream::set_record_enabled (bool yn, void* src)
+{
+        bool rolling = _session.transport_speed() != 0.0f;
+
+       if (!recordable() || !_session.record_enabling_legal()) {
+               return;
+       }
+       
+       /* if we're turning on rec-enable, there needs to be an
+          input connection.
+        */
+
+       if (yn && channels[0].source == 0) {
+
+               /* pick up connections not initiated *from* the IO object
+                  we're associated with.
+               */
+
+               get_input_sources ();
+       }
+
+       /* yes, i know that this not proof against race conditions, but its
+          good enough. i think.
+       */
+
+       if (record_enabled() != yn) {
+               if (yn) {
+                       g_atomic_int_set (&_record_enabled, 1);
+                       capturing_sources.clear ();
+                       if (Config->get_use_hardware_monitoring())  {
+                               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+                                       if ((*chan).source) {
+                                               (*chan).source->request_monitor_input (!(_session.get_auto_input() && rolling));
+                                       }
+                                       capturing_sources.push_back ((*chan).write_source);
+                               }
+                       } else {
+                               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+                                       capturing_sources.push_back ((*chan).write_source);
+                               }
+                       }
+
+               } else {
+                       g_atomic_int_set (&_record_enabled, 0);
+                       if (Config->get_use_hardware_monitoring()) {
+                               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+                                       if ((*chan).source) {
+                                               (*chan).source->request_monitor_input (false);
+                                       }
+                               }
+                       }
+                       capturing_sources.clear ();
+               }
+
+               record_enable_changed (src); /* EMIT SIGNAL */
+       }
+}
+
+XMLNode&
+AudioDiskstream::get_state ()
+{
+       XMLNode* node = new XMLNode ("AudioDiskstream");
+       char buf[64];
+       LocaleGuard lg (X_("POSIX"));
+
+       snprintf (buf, sizeof(buf), "0x%x", _flags);
+       node->add_property ("flags", buf);
+
+       snprintf (buf, sizeof(buf), "%zd", channels.size());
+       node->add_property ("channels", buf);
+
+       node->add_property ("playlist", _playlist->name());
+       
+       snprintf (buf, sizeof(buf), "%f", _visible_speed);
+       node->add_property ("speed", buf);
+
+       node->add_property("name", _name);
+       snprintf (buf, sizeof(buf), "%" PRIu64, id());
+       node->add_property("id", buf);
+
+       if (!capturing_sources.empty() && _session.get_record_enabled()) {
+
+               XMLNode* cs_child = new XMLNode (X_("CapturingSources"));
+               XMLNode* cs_grandchild;
+
+               for (vector<AudioFileSource*>::iterator i = capturing_sources.begin(); i != capturing_sources.end(); ++i) {
+                       cs_grandchild = new XMLNode (X_("file"));
+                       cs_grandchild->add_property (X_("path"), (*i)->path());
+                       cs_child->add_child_nocopy (*cs_grandchild);
+               }
+
+               /* store the location where capture will start */
+
+               Location* pi;
+
+               if (_session.get_punch_in() && ((pi = _session.locations()->auto_punch_location()) != 0)) {
+                       snprintf (buf, sizeof (buf), "%" PRIu32, pi->start());
+               } else {
+                       snprintf (buf, sizeof (buf), "%" PRIu32, _session.transport_frame());
+               }
+
+               cs_child->add_property (X_("at"), buf);
+               node->add_child_nocopy (*cs_child);
+       }
+
+       if (_extra_xml) {
+               node->add_child_copy (*_extra_xml);
+       }
+
+       return* node;
+}
+
+int
+AudioDiskstream::set_state (const XMLNode& node)
+{
+       const XMLProperty* prop;
+       XMLNodeList nlist = node.children();
+       XMLNodeIterator niter;
+       uint32_t nchans = 1;
+       XMLNode* capture_pending_node = 0;
+       LocaleGuard lg (X_("POSIX"));
+
+       in_set_state = true;
+
+       for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+               if ((*niter)->name() == IO::state_node_name) {
+                       deprecated_io_node = new XMLNode (**niter);
+               }
+
+               if ((*niter)->name() == X_("CapturingSources")) {
+                       capture_pending_node = *niter;
+               }
+       }
+
+       /* prevent write sources from being created */
+       
+       in_set_state = true;
+       
+       if ((prop = node.property ("name")) != 0) {
+               _name = prop->value();
+       } 
+
+       if (deprecated_io_node) {
+               if ((prop = deprecated_io_node->property ("id")) != 0) {
+                       sscanf (prop->value().c_str(), "%" PRIu64, &_id);
+               }
+       } else {
+               if ((prop = node.property ("id")) != 0) {
+                       sscanf (prop->value().c_str(), "%" PRIu64, &_id);
+               }
+       }
+
+       if ((prop = node.property ("flags")) != 0) {
+               _flags = strtol (prop->value().c_str(), 0, 0);
+       }
+
+       if ((prop = node.property ("channels")) != 0) {
+               nchans = atoi (prop->value().c_str());
+       }
+       
+       // create necessary extra channels
+       // we are always constructed with one
+       // and we always need one
+
+       if (nchans > _n_channels) {
+
+               // we need to add new channel infos
+               //LockMonitor lm (state_lock, __LINE__, __FILE__);
+
+               int diff = nchans - channels.size();
+
+               for (int i=0; i < diff; ++i) {
+                       add_channel ();
+               }
+
+       } else if (nchans < _n_channels) {
+
+               // we need to get rid of channels
+               //LockMonitor lm (state_lock, __LINE__, __FILE__);
+
+               int diff = channels.size() - nchans;
+               
+               for (int i = 0; i < diff; ++i) {
+                       remove_channel ();
+               }
+       }
+
+       if ((prop = node.property ("playlist")) == 0) {
+               return -1;
+       }
+
+       {
+               bool had_playlist = (_playlist != 0);
+       
+               if (find_and_use_playlist (prop->value())) {
+                       return -1;
+               }
+
+               if (!had_playlist) {
+                       _playlist->set_orig_diskstream_id (_id);
+               }
+               
+               if (!destructive() && capture_pending_node) {
+                       /* destructive streams have one and only one source per channel,
+                          and so they never end up in pending capture in any useful
+                          sense.
+                       */
+                       use_pending_capture_data (*capture_pending_node);
+               }
+
+       }
+
+       if ((prop = node.property ("speed")) != 0) {
+               double sp = atof (prop->value().c_str());
+
+               if (realtime_set_speed (sp, false)) {
+                       non_realtime_set_speed ();
+               }
+       }
+
+       _n_channels = channels.size();
+
+       in_set_state = false;
+
+       /* make sure this is clear before we do anything else */
+
+       capturing_sources.clear ();
+
+       /* write sources are handled when we handle the input set 
+          up of the IO that owns this DS (::non_realtime_input_change())
+       */
+               
+       in_set_state = false;
+
+       return 0;
+}
+
+int
+AudioDiskstream::use_new_write_source (uint32_t n)
+{
+       if (!recordable()) {
+               return 1;
+       }
+
+       if (n >= channels.size()) {
+               error << string_compose (_("AudioDiskstream: channel %1 out of range"), n) << endmsg;
+               return -1;
+       }
+
+       ChannelInfo &chan = channels[n];
+       
+       if (chan.write_source) {
+
+               if (AudioFileSource::is_empty (chan.write_source->path())) {
+                       chan.write_source->mark_for_remove ();
+                       chan.write_source->release();
+                       delete chan.write_source;
+               } else {
+                       chan.write_source->release();
+                       chan.write_source = 0;
+               }
+       }
+
+       try {
+               if ((chan.write_source = _session.create_audio_source_for_session (*this, n, destructive())) == 0) {
+                       throw failed_constructor();
+               }
+       } 
+
+       catch (failed_constructor &err) {
+               error << string_compose (_("%1:%2 new capture file not initialized correctly"), _name, n) << endmsg;
+               chan.write_source = 0;
+               return -1;
+       }
+
+       chan.write_source->use ();
+
+       /* do not remove destructive files even if they are empty */
+
+       chan.write_source->set_allow_remove_if_empty (!destructive());
+
+       return 0;
+}
+
+void
+AudioDiskstream::reset_write_sources (bool mark_write_complete, bool force)
+{
+       ChannelList::iterator chan;
+       uint32_t n;
+
+       if (!recordable()) {
+               return;
+       }
+       
+       capturing_sources.clear ();
+       
+       for (chan = channels.begin(), n = 0; chan != channels.end(); ++chan, ++n) {
+               if (!destructive()) {
+
+                       if ((*chan).write_source && mark_write_complete) {
+                               (*chan).write_source->mark_streaming_write_completed ();
+                       }
+                       use_new_write_source (n);
+
+                       if (record_enabled()) {
+                               capturing_sources.push_back ((*chan).write_source);
+                       }
+
+               } else {
+                       if ((*chan).write_source == 0) {
+                               use_new_write_source (n);
+                       }
+               }
+       }
+
+       if (destructive()) {
+
+               /* we now have all our write sources set up, so create the
+                  playlist's single region.
+               */
+
+               if (_playlist->empty()) {
+                       setup_destructive_playlist ();
+               }
+       }
+}
+
+int
+AudioDiskstream::rename_write_sources ()
+{
+       ChannelList::iterator chan;
+       uint32_t n;
+
+       for (chan = channels.begin(), n = 0; chan != channels.end(); ++chan, ++n) {
+               if ((*chan).write_source != 0) {
+                       (*chan).write_source->set_name (_name, destructive());
+                       /* XXX what to do if one of them fails ? */
+               }
+       }
+
+       return 0;
+}
+
+void
+AudioDiskstream::set_block_size (jack_nframes_t nframes)
+{
+       if (_session.get_block_size() > speed_buffer_size) {
+               speed_buffer_size = _session.get_block_size();
+
+               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+                       if ((*chan).speed_buffer) delete [] (*chan).speed_buffer;
+                       (*chan).speed_buffer = new Sample[speed_buffer_size];
+               }
+       }
+       allocate_temporary_buffers ();
+}
+
+void
+AudioDiskstream::allocate_temporary_buffers ()
+{
+       /* make sure the wrap buffer is at least large enough to deal
+          with the speeds up to 1.2, to allow for micro-variation
+          when slaving to MTC, SMPTE etc.
+       */
+
+       double sp = max (fabsf (_actual_speed), 1.2f);
+       jack_nframes_t required_wrap_size = (jack_nframes_t) floor (_session.get_block_size() * sp) + 1;
+
+       if (required_wrap_size > wrap_buffer_size) {
+
+               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+                       if ((*chan).playback_wrap_buffer) delete [] (*chan).playback_wrap_buffer;
+                       (*chan).playback_wrap_buffer = new Sample[required_wrap_size];  
+                       if ((*chan).capture_wrap_buffer) delete [] (*chan).capture_wrap_buffer;
+                       (*chan).capture_wrap_buffer = new Sample[required_wrap_size];   
+               }
+
+               wrap_buffer_size = required_wrap_size;
+       }
+}
+
+void
+AudioDiskstream::monitor_input (bool yn)
+{
+       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+               
+               if ((*chan).source) {
+                       (*chan).source->request_monitor_input (yn);
+               }
+       }
+}
+
+void
+AudioDiskstream::set_capture_offset ()
+{
+       if (_io == 0) {
+               /* can't capture, so forget it */
+               return;
+       }
+
+       _capture_offset = _io->input_latency();
+}
+
+void
+AudioDiskstream::set_persistent_align_style (AlignStyle a)
+{
+       _persistent_alignment_style = a;
+}
+
+void
+AudioDiskstream::set_align_style_from_io ()
+{
+       bool have_physical = false;
+
+       if (_io == 0) {
+               return;
+       }
+
+       get_input_sources ();
+       
+       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
+               if ((*chan).source && (*chan).source->flags() & JackPortIsPhysical) {
+                       have_physical = true;
+                       break;
+               }
+       }
+
+       if (have_physical) {
+               set_align_style (ExistingMaterial);
+       } else {
+               set_align_style (CaptureTime);
+       }
+}
+
+void
+AudioDiskstream::set_align_style (AlignStyle a)
+{
+       if (record_enabled() && _session.actively_recording()) {
+               return;
+       }
+
+
+       if (a != _alignment_style) {
+               _alignment_style = a;
+               AlignmentStyleChanged ();
+       }
+}
+
+int
+AudioDiskstream::add_channel ()
+{
+       /* XXX need to take lock??? */
+
+       ChannelInfo chan;
+
+       init_channel (chan);
+
+       chan.speed_buffer = new Sample[speed_buffer_size];
+       chan.playback_wrap_buffer = new Sample[wrap_buffer_size];
+       chan.capture_wrap_buffer = new Sample[wrap_buffer_size];
+
+       channels.push_back (chan);
+
+       _n_channels = channels.size();
+
+       return 0;
+}
+
+int
+AudioDiskstream::remove_channel ()
+{
+       if (channels.size() > 1) {
+               /* XXX need to take lock??? */
+               ChannelInfo & chan = channels.back();
+               destroy_channel (chan);
+               channels.pop_back();
+
+               _n_channels = channels.size();
+               return 0;
+       }
+
+       return -1;
+}
+
+float
+AudioDiskstream::playback_buffer_load () const
+{
+       return (float) ((double) channels.front().playback_buf->read_space()/
+                       (double) channels.front().playback_buf->bufsize());
+}
+
+float
+AudioDiskstream::capture_buffer_load () const
+{
+       return (float) ((double) channels.front().capture_buf->write_space()/
+                       (double) channels.front().capture_buf->bufsize());
+}
+
+int
+AudioDiskstream::set_loop (Location *location)
+{
+       if (location) {
+               if (location->start() >= location->end()) {
+                       error << string_compose(_("Location \"%1\" not valid for track loop (start >= end)"), location->name()) << endl;
+                       return -1;
+               }
+       }
+
+       loop_location = location;
+
+        LoopSet (location); /* EMIT SIGNAL */
+       return 0;
+}
+
+jack_nframes_t
+AudioDiskstream::get_capture_start_frame (uint32_t n)
+{
+       Glib::Mutex::Lock lm (capture_info_lock);
+
+       if (capture_info.size() > n) {
+               return capture_info[n]->start;
+       }
+       else {
+               return capture_start_frame;
+       }
+}
+
+jack_nframes_t
+AudioDiskstream::get_captured_frames (uint32_t n)
+{
+       Glib::Mutex::Lock lm (capture_info_lock);
+
+       if (capture_info.size() > n) {
+               return capture_info[n]->frames;
+       }
+       else {
+               return capture_captured;
+       }
+}
+
+void
+AudioDiskstream::punch_in ()
+{
+}
+
+void
+AudioDiskstream::punch_out ()
+{
+}
+
+int
+AudioDiskstream::use_pending_capture_data (XMLNode& node)
+{
+       const XMLProperty* prop;
+       XMLNodeList nlist = node.children();
+       XMLNodeIterator niter;
+       AudioFileSource* fs;
+       AudioFileSource* first_fs = 0;
+       AudioRegion::SourceList pending_sources;
+       jack_nframes_t position;
+
+       if ((prop = node.property (X_("at"))) == 0) {
+               return -1;
+       }
+
+       if (sscanf (prop->value().c_str(), "%" PRIu32, &position) != 1) {
+               return -1;
+       }
+
+       for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+               if ((*niter)->name() == X_("file")) {
+
+                       if ((prop = (*niter)->property (X_("path"))) == 0) {
+                               continue;
+                       }
+
+                       try {
+                               fs = new SndFileSource (prop->value(), 
+                                                       Config->get_native_file_data_format(),
+                                                       Config->get_native_file_header_format(),
+                                                       _session.frame_rate());
+                       }
+
+                       catch (failed_constructor& err) {
+                               error << string_compose (_("%1: cannot restore pending capture source file %2"),
+                                                 _name, prop->value())
+                                     << endmsg;
+                               return -1;
+                       }
+
+                       pending_sources.push_back (fs);
+                       
+                       if (first_fs == 0) {
+                               first_fs = fs;
+                       }
+
+                       fs->set_captured_for (_name);
+               }
+       }
+
+       if (pending_sources.size() == 0) {
+               /* nothing can be done */
+               return 1;
+       }
+
+       if (pending_sources.size() != _n_channels) {
+               error << string_compose (_("%1: incorrect number of pending sources listed - ignoring them all"), _name)
+                     << endmsg;
+               return -1;
+       }
+
+       AudioRegion* region;
+       
+       try {
+               region = new AudioRegion (pending_sources, 0, first_fs->length(),
+                                         region_name_from_path (first_fs->name()), 
+                                         0, AudioRegion::Flag (AudioRegion::DefaultFlags|AudioRegion::Automatic|AudioRegion::WholeFile));
+               
+               region->special_set_position (0);
+       }
+
+       catch (failed_constructor& err) {
+               error << string_compose (_("%1: cannot create whole-file region from pending capture sources"),
+                                 _name)
+                     << endmsg;
+               
+               return -1;
+       }
+
+       try {
+               region = new AudioRegion (pending_sources, 0, first_fs->length(), region_name_from_path (first_fs->name()));
+       }
+
+       catch (failed_constructor& err) {
+               error << string_compose (_("%1: cannot create region from pending capture sources"),
+                                 _name)
+                     << endmsg;
+               
+               return -1;
+       }
+
+       _playlist->add_region (*region, position);
+
+       return 0;
+}
+
+void
+AudioDiskstream::set_roll_delay (jack_nframes_t nframes)
+{
+       _roll_delay = nframes;
+}
+
+void
+AudioDiskstream::set_destructive (bool yn)
+{
+       if (yn != destructive()) {
+               reset_write_sources (true, true);
+               if (yn) {
+                       _flags |= Destructive;
+               } else {
+                       _flags &= ~Destructive;
+               }
+       }
+}
index bf462f7128a2cbe496317f2e4bb9e367ea8756f5..7f421e86c817dc4074aa19cdbfed9e29bc98a55d 100644 (file)
@@ -42,6 +42,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 static char* SOUNDFILE = "http://ardour.org/ontology/Soundfile";
 
index 9f3c02ce436a2c3043e0a393f7ff9afda19b57cf..bbbaf42fef5f1b7e2677355c4ee122150b9089e8 100644 (file)
@@ -37,6 +37,7 @@
 using namespace ARDOUR;
 using namespace sigc;
 using namespace std;
+using namespace PBD;
 
 AudioPlaylist::State::~State ()
 {
index 30adc54d1a29aa2ef17df5cfca3f806e34e04d80..ae24d3a57790c791dc55dfd4ef9f979efe3a20fe 100644 (file)
 #include <sigc++/bind.h>
 
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/session.h>
 #include <ardour/redirect.h>
 #include <ardour/audioregion.h>
+#include <ardour/audiosource.h>
 #include <ardour/route_group_specialized.h>
 #include <ardour/insert.h>
 #include <ardour/audioplaylist.h>
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 AudioTrack::AudioTrack (Session& sess, string name, Route::Flag flag, TrackMode mode)
        : Route (sess, name, 1, -1, -1, -1, flag),
          diskstream (0),
          _midi_rec_enable_control (*this, _session.midi_port())
 {
-       DiskStream::Flag dflags = DiskStream::Flag (0);
+       AudioDiskstream::Flag dflags = AudioDiskstream::Flag (0);
 
        if (_flags & Hidden) {
-               dflags = DiskStream::Flag (dflags | DiskStream::Hidden);
+               dflags = AudioDiskstream::Flag (dflags | AudioDiskstream::Hidden);
        } else {
-               dflags = DiskStream::Flag (dflags | DiskStream::Recordable);
+               dflags = AudioDiskstream::Flag (dflags | AudioDiskstream::Recordable);
        }
 
        if (mode == Destructive) {
-               dflags = DiskStream::Flag (dflags | DiskStream::Destructive);
+               dflags = AudioDiskstream::Flag (dflags | AudioDiskstream::Destructive);
        }
 
-       DiskStream* ds = new DiskStream (_session, name, dflags);
+       AudioDiskstream* ds = new AudioDiskstream (_session, name, dflags);
        
        _declickable = true;
        _freeze_record.state = NoFreeze;
@@ -64,6 +66,8 @@ AudioTrack::AudioTrack (Session& sess, string name, Route::Flag flag, TrackMode
 
        set_diskstream (*ds, this);
 
+       // session.SMPTEOffsetChanged.connect (mem_fun (*this, &AudioTrack::handle_smpte_offset_change));
+
        // we do this even though Route already did it in it's init
        reset_midi_control (_session.midi_port(), _session.get_midi_control());
        
@@ -90,6 +94,14 @@ AudioTrack::~AudioTrack ()
        }
 }
 
+#if 0
+void
+AudioTrack::handle_smpte_offset_change ()
+{
+       diskstream
+}
+#endif
+
 int
 AudioTrack::deprecated_use_diskstream_connections ()
 {
@@ -143,7 +155,7 @@ AudioTrack::deprecated_use_diskstream_connections ()
 }
 
 int
-AudioTrack::set_diskstream (DiskStream& ds, void *src)
+AudioTrack::set_diskstream (AudioDiskstream& ds, void *src)
 {
        if (diskstream) {
                diskstream->unref();
@@ -166,7 +178,7 @@ AudioTrack::set_diskstream (DiskStream& ds, void *src)
        diskstream->monitor_input (false);
 
        ic_connection.disconnect();
-       ic_connection = input_changed.connect (mem_fun (*diskstream, &DiskStream::handle_input_change));
+       ic_connection = input_changed.connect (mem_fun (*diskstream, &AudioDiskstream::handle_input_change));
 
        diskstream_changed (src); /* EMIT SIGNAL */
 
@@ -176,7 +188,7 @@ AudioTrack::set_diskstream (DiskStream& ds, void *src)
 int 
 AudioTrack::use_diskstream (string name)
 {
-       DiskStream *dstream;
+       AudioDiskstream *dstream;
 
        if ((dstream = _session.diskstream_by_name (name)) == 0) {
          error << string_compose(_("AudioTrack: diskstream \"%1\" not known by session"), name) << endmsg;
@@ -189,7 +201,7 @@ AudioTrack::use_diskstream (string name)
 int 
 AudioTrack::use_diskstream (id_t id)
 {
-       DiskStream *dstream;
+       AudioDiskstream *dstream;
 
        if ((dstream = _session.diskstream_by_id (id)) == 0) {
                error << string_compose(_("AudioTrack: diskstream \"%1\" not known by session"), id) << endmsg;
@@ -899,23 +911,23 @@ AudioTrack::update_total_latency ()
 void
 AudioTrack::bounce (InterThreadInfo& itt)
 {
-       vector<Source*> srcs;
-       _session.write_one_track (*this, 0, _session.current_end_frame(), false, srcs, itt);
+       vector<AudioSource*> srcs;
+       _session.write_one_audio_track (*this, 0, _session.current_end_frame(), false, srcs, itt);
 }
 
 
 void
 AudioTrack::bounce_range (jack_nframes_t start, jack_nframes_t end, InterThreadInfo& itt)
 {
-       vector<Source*> srcs;
-       _session.write_one_track (*this, start, end, false, srcs, itt);
+       vector<AudioSource*> srcs;
+       _session.write_one_audio_track (*this, start, end, false, srcs, itt);
 }
 
 void
 AudioTrack::freeze (InterThreadInfo& itt)
 {
        Insert* insert;
-       vector<Source*> srcs;
+       vector<AudioSource*> srcs;
        string new_playlist_name;
        Playlist* new_playlist;
        string dir;
@@ -950,7 +962,7 @@ AudioTrack::freeze (InterThreadInfo& itt)
                return;
        }
 
-       if (_session.write_one_track (*this, 0, _session.current_end_frame(), true, srcs, itt)) {
+       if (_session.write_one_audio_track (*this, 0, _session.current_end_frame(), true, srcs, itt)) {
                return;
        }
 
index 87866e7b31591c6eeeedca196ed9b948e221458e..5a5e20053187db19c0d33ddb07cc12765f72ad3a 100644 (file)
@@ -40,6 +40,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 jack_nframes_t Port::short_over_length = 2;
 jack_nframes_t Port::long_over_length = 10;
@@ -91,12 +92,6 @@ _thread_init_callback (void *arg)
        */
 
        PBD::ThreadCreatedWithRequestSize (pthread_self(), X_("Audioengine"), 4096);
-
-#ifdef VST_SUPPORT
-       if (Config->get_use_vst()) {
-               fst_adopt_thread ();
-       }
-#endif
 }
 
 int
@@ -229,9 +224,10 @@ AudioEngine::_freewheel_callback (int onoff, void *arg)
 int
 AudioEngine::process_callback (jack_nframes_t nframes)
 {
+       // CycleTimer ct ("AudioEngine::process");
        Glib::Mutex::Lock tm (_process_lock, Glib::TRY_LOCK);
        jack_nframes_t next_processed_frames;
-
+       
        /* handle wrap around of total frames counter */
 
        if (max_frames - _processed_frames < nframes) {
diff --git a/libs/ardour/audiofilesource.cc b/libs/ardour/audiofilesource.cc
new file mode 100644 (file)
index 0000000..1e13a29
--- /dev/null
@@ -0,0 +1,662 @@
+/*
+    Copyright (C) 2006 Paul Davis 
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <vector>
+
+#include <sys/time.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <pbd/mountpoint.h>
+#include <pbd/pathscanner.h>
+#include <pbd/stl_delete.h>
+#include <pbd/strsplit.h>
+
+#include <sndfile.h>
+
+#include <glibmm/miscutils.h>
+
+#include <ardour/audiofilesource.h>
+#include <ardour/sndfile_helpers.h>
+#include <ardour/sndfilesource.h>
+#include <ardour/destructive_filesource.h>
+#include <ardour/session.h>
+
+// if these headers come before sigc++ is included
+// the parser throws ObjC++ errors. (nil is a keyword)
+#ifdef HAVE_COREAUDIO 
+#include <ardour/coreaudio_source.h>
+#include <AudioToolbox/ExtendedAudioFile.h>
+#include <AudioToolbox/AudioFormat.h>
+#endif // HAVE_COREAUDIO
+
+#include "i18n.h"
+
+using namespace ARDOUR;
+using namespace PBD;
+
+string AudioFileSource::peak_dir = "";
+string AudioFileSource::search_path;
+
+sigc::signal<void,struct tm*, time_t> AudioFileSource::HeaderPositionOffsetChanged;
+bool                                  AudioFileSource::header_position_negative;
+uint64_t                              AudioFileSource::header_position_offset;
+
+char   AudioFileSource::bwf_country_code[3] = "US";
+char   AudioFileSource::bwf_organization_code[4] = "LAS";
+char   AudioFileSource::bwf_serial_number[13] = "000000000000";
+
+AudioFileSource::AudioFileSource (string idstr, Flag flags)
+       : AudioSource (idstr), _flags (flags)
+{
+       /* constructor used for existing external to session files. file must exist already */
+
+       if (init (idstr, true)) {
+               throw failed_constructor ();
+       }
+
+}
+
+AudioFileSource::AudioFileSource (std::string path, Flag flags, SampleFormat samp_format, HeaderFormat hdr_format)
+       : AudioSource (path), _flags (flags)
+{
+       /* constructor used for new internal-to-session files. file cannot exist */
+
+       if (init (path, false)) {
+               throw failed_constructor ();
+       }
+}
+
+AudioFileSource::AudioFileSource (const XMLNode& node)
+       : AudioSource (node), _flags (Flag (Writable|CanRename))
+{
+       /* constructor used for existing internal-to-session files. file must exist */
+
+       if (set_state (node)) {
+               throw failed_constructor ();
+       }
+       
+       if (init (_name, true)) {
+               throw failed_constructor ();
+       }
+}
+
+AudioFileSource::~AudioFileSource ()
+{
+       if (removable()) {
+               unlink (_path.c_str());
+               unlink (peakpath.c_str());
+       }
+}
+
+bool
+AudioFileSource::removable () const
+{
+       return (_flags & Removable) && ((_flags & RemoveAtDestroy) || 
+                                     ((_flags & RemovableIfEmpty) && is_empty (_path)));
+}
+
+int
+AudioFileSource::init (string pathstr, bool must_exist)
+{
+       bool is_new = false;
+
+       _length = 0;
+       next_peak_clear_should_notify = false;
+       
+       if (!find (pathstr, must_exist, is_new)) {
+               cerr << "cannot find " << pathstr << " with me = " << must_exist << endl;
+               return -1;
+       }
+
+       if (is_new && must_exist) {
+               return -1;
+       }
+
+       return 0;
+}
+
+
+string
+AudioFileSource::peak_path (string audio_path)
+{
+       return Session::peak_path_from_audio_path (audio_path);
+}
+
+string
+AudioFileSource::old_peak_path (string audio_path)
+{
+       /* XXX hardly bombproof! fix me */
+
+       struct stat stat_file;
+       struct stat stat_mount;
+
+       string mp = mountpoint (audio_path);
+
+       stat (audio_path.c_str(), &stat_file);
+       stat (mp.c_str(), &stat_mount);
+
+       char buf[32];
+#ifdef __APPLE__
+       snprintf (buf, sizeof (buf), "%u-%u-%d.peak", stat_mount.st_ino, stat_file.st_ino, channel);
+#else
+       snprintf (buf, sizeof (buf), "%ld-%ld-%d.peak", stat_mount.st_ino, stat_file.st_ino, channel);
+#endif
+
+       string res = peak_dir;
+       res += buf;
+
+       return res;
+}
+
+#ifdef HAVE_COREAUDIO
+
+AudioFileSource*
+AudioFileSource::create (const XMLNode& node)
+{
+       AudioFileSource* es = 0;
+
+       if (node.property (X_("destructive")) != 0) {
+               
+               es = new DestructiveFileSource (node);
+       
+       } else {
+               
+               try {
+                       es = new CoreAudioSource (node);
+               } 
+               
+               
+               catch (failed_constructor& err) {
+                       es = new SndFileSource (node);
+               }
+       }
+       
+       return es;
+}
+
+#else
+
+AudioFileSource*
+AudioFileSource::create (const XMLNode& node)
+{
+       if (node.property (X_("destructive")) != 0) {
+               
+               return new DestructiveFileSource (node);
+               
+       } else {
+               
+               return new SndFileSource (node);
+       }
+}
+
+#endif // HAVE_COREAUDIO
+
+#ifdef HAVE_COREAUDIO
+AudioFileSource*
+AudioFileSource::create (const string& idstr)
+{
+       AudioFileSource* es = 0;
+
+       try {
+               es = new CoreAudioSource (idstr);
+       }
+
+       catch (failed_constructor& err) {
+               es = new SndFileSource (idstr);
+       }
+
+       return es;
+}
+
+#else
+
+AudioFileSource*
+AudioFileSource::create (string idstr)
+{
+       return new SndFileSource (idstr);
+}
+
+#endif // HAVE_COREAUDIO
+
+#ifdef HAVE_COREAUDIO
+std::string 
+CFStringRefToStdString(CFStringRef stringRef)
+{
+       CFIndex size = 
+               CFStringGetMaximumSizeForEncoding(CFStringGetLength(stringRef) , 
+               kCFStringEncodingASCII);
+           char *buf = new char[size];
+       
+       std::string result;
+
+       if(CFStringGetCString(stringRef, buf, size, kCFStringEncodingASCII)) {
+           result = buf;
+       }
+       delete [] buf;
+       return result;
+}
+#endif // HAVE_COREAUDIO
+
+bool
+AudioFileSource::get_soundfile_info (string path, SoundFileInfo& _info, string& error_msg)
+{
+#ifdef HAVE_COREAUDIO
+       OSStatus err = noErr;
+    FSRef ref; 
+       ExtAudioFileRef af = 0;
+       size_t size;
+    CFStringRef name;
+
+    err = FSPathMakeRef ((UInt8*)path.c_str(), &ref, 0);
+       if (err != noErr) {
+        ExtAudioFileDispose (af);
+               goto libsndfile;
+       }
+
+       err = ExtAudioFileOpen(&ref, &af);
+       if (err != noErr) {
+        ExtAudioFileDispose (af);
+               goto libsndfile;
+       }
+
+       AudioStreamBasicDescription absd;
+       memset(&absd, 0, sizeof(absd));
+       size = sizeof(AudioStreamBasicDescription);
+       err = ExtAudioFileGetProperty(af,
+                       kExtAudioFileProperty_FileDataFormat, &size, &absd);
+       if (err != noErr) {
+        ExtAudioFileDispose (af);
+               goto libsndfile;
+       }
+
+       _info.samplerate = absd.mSampleRate;
+       _info.channels   = absd.mChannelsPerFrame;
+
+    size = sizeof(_info.length);
+    err = ExtAudioFileGetProperty(af, kExtAudioFileProperty_FileLengthFrames, &size, &_info.length);
+    if (err != noErr) {
+        ExtAudioFileDispose (af);
+               goto libsndfile;
+    }
+
+       size = sizeof(CFStringRef);
+       err = AudioFormatGetProperty(
+                       kAudioFormatProperty_FormatName, sizeof(absd), &absd, &size, &name);
+       if (err != noErr) {
+        ExtAudioFileDispose (af);
+               goto libsndfile;
+       }
+
+       _info.format_name = CFStringRefToStdString(name);
+
+    ExtAudioFileDispose (af);
+       return true;
+       
+libsndfile:
+#endif // HAVE_COREAUDIO
+
+       SNDFILE *sf;
+       SF_INFO sf_info;
+
+       sf_info.format = 0; // libsndfile says to clear this before sf_open().
+
+       if ((sf = sf_open ((char*) path.c_str(), SFM_READ, &sf_info)) == 0) { 
+               char errbuf[256];
+               error_msg = sf_error_str (0, errbuf, sizeof (errbuf) - 1);
+               return false;
+       }
+
+       sf_close (sf);
+
+       _info.samplerate  = sf_info.samplerate;
+       _info.channels    = sf_info.channels;
+       _info.length      = sf_info.frames;
+       _info.format_name = string_compose("Format: %1, %2",
+                                          sndfile_major_format(sf_info.format),
+                                          sndfile_minor_format(sf_info.format));
+       return true;
+}
+
+XMLNode&
+AudioFileSource::get_state ()
+{
+       XMLNode& root (AudioSource::get_state());
+       char buf[16];
+       snprintf (buf, sizeof (buf), "0x%x", (int)_flags);
+       root.add_property ("flags", buf);
+       return root;
+}
+
+int
+AudioFileSource::set_state (const XMLNode& node)
+{
+       const XMLProperty* prop;
+
+       if (AudioSource::set_state (node)) {
+               return -1;
+       }
+
+       if ((prop = node.property (X_("flags"))) != 0) {
+
+               int ival;
+               sscanf (prop->value().c_str(), "0x%x", &ival);
+               _flags = Flag (ival);
+
+       } else {
+
+               _flags = Flag (0);
+
+       }
+
+       return 0;
+}
+
+void
+AudioFileSource::mark_for_remove ()
+{
+       if (!writable()) {
+               return;
+       }
+       _flags = Flag (_flags | RemoveAtDestroy);
+}
+
+void
+AudioFileSource::mark_streaming_write_completed ()
+{
+       if (!writable()) {
+               return;
+       }
+
+       Glib::Mutex::Lock lm (_lock);
+
+       next_peak_clear_should_notify = true;
+
+       if (_peaks_built || pending_peak_builds.empty()) {
+               _peaks_built = true;
+                PeaksReady (); /* EMIT SIGNAL */
+       }
+}
+
+void
+AudioFileSource::mark_take (string id)
+{
+       if (writable()) {
+               _take_id = id;
+       }
+}
+
+int
+AudioFileSource::move_to_trash (const string trash_dir_name)
+{
+       string newpath;
+
+       if (!writable()) {
+               return -1;
+       }
+
+       /* don't move the file across filesystems, just
+          stick it in the `trash_dir_name' directory
+          on whichever filesystem it was already on.
+       */
+
+       newpath = Glib::path_get_dirname (_path);
+       newpath = Glib::path_get_dirname (newpath);
+
+       newpath += '/';
+       newpath += trash_dir_name;
+       newpath += '/';
+       newpath += Glib::path_get_basename (_path);
+
+       if (access (newpath.c_str(), F_OK) == 0) {
+
+               /* the new path already exists, try versioning */
+               
+               char buf[PATH_MAX+1];
+               int version = 1;
+               string newpath_v;
+
+               snprintf (buf, sizeof (buf), "%s.%d", newpath.c_str(), version);
+               newpath_v = buf;
+
+               while (access (newpath_v.c_str(), F_OK) == 0 && version < 999) {
+                       snprintf (buf, sizeof (buf), "%s.%d", newpath.c_str(), ++version);
+                       newpath_v = buf;
+               }
+               
+               if (version == 999) {
+                       error << string_compose (_("there are already 1000 files with names like %1; versioning discontinued"),
+                                         newpath)
+                             << endmsg;
+               } else {
+                       newpath = newpath_v;
+               }
+
+       } else {
+
+               /* it doesn't exist, or we can't read it or something */
+
+       }
+
+       if (::rename (_path.c_str(), newpath.c_str()) != 0) {
+               error << string_compose (_("cannot rename audio file source from %1 to %2 (%3)"),
+                                 _path, newpath, strerror (errno))
+                     << endmsg;
+               return -1;
+       }
+
+       if (::unlink (peakpath.c_str()) != 0) {
+               error << string_compose (_("cannot remove peakfile %1 for %2 (%3)"),
+                                 peakpath, _path, strerror (errno))
+                     << endmsg;
+               /* try to back out */
+               rename (newpath.c_str(), _path.c_str());
+               return -1;
+       }
+           
+       _path = newpath;
+       peakpath = "";
+       
+       /* file can not be removed twice, since the operation is not idempotent */
+
+       _flags = Flag (_flags & ~(RemoveAtDestroy|Removable|RemovableIfEmpty));
+
+       return 0;
+}
+
+bool
+AudioFileSource::find (string pathstr, bool must_exist, bool& isnew)
+{
+       string::size_type pos;
+       bool ret = false;
+
+       isnew = false;
+
+       /* clean up PATH:CHANNEL notation so that we are looking for the correct path */
+
+       if ((pos = pathstr.find_last_of (':')) == string::npos) {
+               pathstr = pathstr;
+       } else {
+               pathstr = pathstr.substr (0, pos);
+       }
+
+       if (pathstr[0] != '/') {
+
+               /* non-absolute pathname: find pathstr in search path */
+
+               vector<string> dirs;
+               int cnt;
+               string fullpath;
+               string keeppath;
+
+               if (search_path.length() == 0) {
+                       error << _("FileSource: search path not set") << endmsg;
+                       goto out;
+               }
+
+               split (search_path, dirs, ':');
+
+               cnt = 0;
+               
+               for (vector<string>::iterator i = dirs.begin(); i != dirs.end(); ++i) {
+
+                       fullpath = *i;
+                       if (fullpath[fullpath.length()-1] != '/') {
+                               fullpath += '/';
+                       }
+                       fullpath += pathstr;
+                       
+                       if (access (fullpath.c_str(), R_OK) == 0) {
+                               keeppath = fullpath;
+                               ++cnt;
+                       } 
+               }
+
+               if (cnt > 1) {
+
+                       error << string_compose (_("FileSource: \"%1\" is ambigous when searching %2\n\t"), pathstr, search_path) << endmsg;
+                       goto out;
+
+               } else if (cnt == 0) {
+
+                       if (must_exist) {
+                               error << string_compose(_("Filesource: cannot find required file (%1): while searching %2"), pathstr, search_path) << endmsg;
+                               goto out;
+                       } else {
+                               isnew = true;
+                       }
+               }
+               
+               _name = pathstr;
+               _path = keeppath;
+               ret = true;
+
+       } else {
+               
+               /* external files and/or very very old style sessions include full paths */
+               
+               _path = pathstr;
+               _name = pathstr.substr (pathstr.find_last_of ('/') + 1);
+               
+               if (access (_path.c_str(), R_OK) != 0) {
+
+                       /* file does not exist or we cannot read it */
+
+                       if (must_exist) {
+                               error << string_compose(_("Filesource: cannot find required file (%1): %2"), _path, strerror (errno)) << endmsg;
+                               goto out;
+                       }
+                       
+                       if (errno != ENOENT) {
+                               error << string_compose(_("Filesource: cannot check for existing file (%1): %2"), _path, strerror (errno)) << endmsg;
+                               goto out;
+                       }
+                       
+                       /* a new file */
+
+                       isnew = true;
+                       ret = true;
+
+               } else {
+                       
+                       /* already exists */
+
+                       ret = true;
+               }
+       }
+       
+  out:
+       return ret;
+}
+
+void
+AudioFileSource::set_search_path (string p)
+{
+       search_path = p;
+}
+
+void
+AudioFileSource::set_header_position_offset (jack_nframes_t offset, bool negative)
+{
+       time_t tnow;
+
+       time (&tnow);
+
+       header_position_offset = offset;
+       header_position_negative = negative;
+       HeaderPositionOffsetChanged (localtime (&tnow), tnow); /* EMIT SIGNAL */
+}
+
+void
+AudioFileSource::set_timeline_position (jack_nframes_t pos)
+{
+       timeline_position = pos;
+}
+
+void
+AudioFileSource::handle_header_position_change (struct tm* now, time_t tnow)
+{
+       /* don't do this if the file has never had its header flushed to disk yet */
+
+       if (writable() && _timestamp) {
+               set_header_timeline_position ();
+               flush_header ();
+       }
+}
+
+void
+AudioFileSource::set_allow_remove_if_empty (bool yn)
+{
+       if (writable()) {
+               allow_remove_if_empty = yn;
+       }
+}
+
+int
+AudioFileSource::set_name (string newname, bool destructive)
+{
+       Glib::Mutex::Lock lm (_lock);
+       string oldpath = _path;
+       string newpath = Session::change_audio_path_by_name (oldpath, _name, newname, destructive);
+
+       if (newpath.empty()) {
+               error << string_compose (_("programming error: %1"), "cannot generate a changed audio path") << endmsg;
+               return -1;
+       }
+
+       if (rename (oldpath.c_str(), newpath.c_str()) != 0) {
+               error << string_compose (_("cannot rename audio file for %1 to %2"), _name, newpath) << endmsg;
+               return -1;
+       }
+
+       _name = Glib::path_get_basename (newpath);
+       _path = newpath;
+
+       return rename_peakfile (peak_path (_path));
+}
+
+bool
+AudioFileSource::is_empty (string path)
+{
+       /* XXX fix me */
+
+       return false;
+}
+
index c340bccb2c30890adeb42fb936d8312cd7074100..a26d9674bd06f1395fa09820ca304d4f2d32fbe0 100644 (file)
@@ -22,7 +22,7 @@
 #include <cerrno>
 
 #include <pbd/basename.h>
-#include <ardour/filesource.h>
+#include <ardour/sndfilesource.h>
 #include <ardour/session.h>
 #include <ardour/audioregion.h>
 #include <ardour/audiofilter.h>
@@ -30,6 +30,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 int
 AudioFilter::make_new_sources (AudioRegion& region, AudioRegion::SourceList& nsrcs)
@@ -47,7 +48,10 @@ AudioFilter::make_new_sources (AudioRegion& region, AudioRegion::SourceList& nsr
                }
 
                try {
-                       nsrcs.push_back (new FileSource (path, session.frame_rate(), false, Config->get_native_file_data_format()));
+                       nsrcs.push_back (new SndFileSource (path, 
+                                                           Config->get_native_file_data_format(),
+                                                           Config->get_native_file_header_format(),
+                                                           session.frame_rate()));
                } 
 
                catch (failed_constructor& err) {
@@ -73,7 +77,10 @@ AudioFilter::finish (AudioRegion& region, AudioRegion::SourceList& nsrcs)
        now = localtime (&xnow);
 
        for (AudioRegion::SourceList::iterator si = nsrcs.begin(); si != nsrcs.end(); ++si) {
-               dynamic_cast<FileSource*>((*si))->update_header (region.position(), *now, xnow);
+               AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*si);
+               if (afs) {
+                       afs->update_header (region.position(), *now, xnow);
+               }
        }
 
        /* create a new region */
index 21773d92220293e208c0001ddafb1e0b990832da..6b118faa514f57e5f0df9821cb2ff10ffe2a7a57 100644 (file)
@@ -38,6 +38,7 @@
 #include <ardour/dB.h>
 #include <ardour/playlist.h>
 #include <ardour/audiofilter.h>
+#include <ardour/audiosource.h>
 
 #include "i18n.h"
 #include <locale.h>
@@ -63,7 +64,7 @@ AudioRegionState::AudioRegionState (string why)
 {
 }
 
-AudioRegion::AudioRegion (Source& src, jack_nframes_t start, jack_nframes_t length, bool announce)
+AudioRegion::AudioRegion (AudioSource& src, jack_nframes_t start, jack_nframes_t length, bool announce)
        : Region (start, length, PBD::basename_nosuffix(src.name()), 0,  Region::Flag(Region::DefaultFlags|Region::External)),
          _fade_in (0.0, 2.0, 1.0, false),
          _fade_out (0.0, 2.0, 1.0, false),
@@ -89,7 +90,7 @@ AudioRegion::AudioRegion (Source& src, jack_nframes_t start, jack_nframes_t leng
        }
 }
 
-AudioRegion::AudioRegion (Source& src, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t layer, Flag flags, bool announce)
+AudioRegion::AudioRegion (AudioSource& src, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t layer, Flag flags, bool announce)
        : Region (start, length, name, layer, flags),
          _fade_in (0.0, 2.0, 1.0, false),
          _fade_out (0.0, 2.0, 1.0, false),
@@ -150,7 +151,7 @@ AudioRegion::AudioRegion (const AudioRegion& other, jack_nframes_t offset, jack_
 {
        /* create a new AudioRegion, that is part of an existing one */
        
-       set<Source*> unique_srcs;
+       set<AudioSource*> unique_srcs;
 
        for (SourceList::const_iterator i= other.sources.begin(); i != other.sources.end(); ++i) {
                sources.push_back (*i);
@@ -209,7 +210,7 @@ AudioRegion::AudioRegion (const AudioRegion &other)
 {
        /* Pure copy constructor */
 
-       set<Source*> unique_srcs;
+       set<AudioSource*> unique_srcs;
 
        for (SourceList::const_iterator i = other.sources.begin(); i != other.sources.end(); ++i) {
                sources.push_back (*i);
@@ -237,7 +238,7 @@ AudioRegion::AudioRegion (const AudioRegion &other)
        /* NOTE: no CheckNewRegion signal emitted here. This is the copy constructor */
 }
 
-AudioRegion::AudioRegion (Source& src, const XMLNode& node)
+AudioRegion::AudioRegion (AudioSource& src, const XMLNode& node)
        : Region (node),
          _fade_in (0.0, 2.0, 1.0, false),
          _fade_out (0.0, 2.0, 1.0, false),
@@ -268,7 +269,7 @@ AudioRegion::AudioRegion (SourceList& srcs, const XMLNode& node)
 {
        /* basic AudioRegion constructor */
 
-       set<Source*> unique_srcs;
+       set<AudioSource*> unique_srcs;
 
        for (SourceList::iterator i=srcs.begin(); i != srcs.end(); ++i) {
                sources.push_back (*i);
@@ -1094,7 +1095,7 @@ void
 AudioRegion::lock_sources ()
 {
        SourceList::iterator i;
-       set<Source*> unique_srcs;
+       set<AudioSource*> unique_srcs;
 
        for (i = sources.begin(); i != sources.end(); ++i) {
                unique_srcs.insert (*i);
@@ -1112,7 +1113,7 @@ void
 AudioRegion::unlock_sources ()
 {
        SourceList::iterator i;
-       set<Source*> unique_srcs;
+       set<AudioSource*> unique_srcs;
 
        for (i = sources.begin(); i != sources.end(); ++i) {
                unique_srcs.insert (*i);
diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc
new file mode 100644 (file)
index 0000000..add9364
--- /dev/null
@@ -0,0 +1,899 @@
+/*
+    Copyright (C) 2000 Paul Davis 
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id: source.cc 404 2006-03-17 17:39:21Z pauld $
+*/
+
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <poll.h>
+#include <float.h>
+#include <cerrno>
+#include <ctime>
+#include <cmath>
+#include <iomanip>
+#include <algorithm>
+
+#include <pbd/xml++.h>
+#include <pbd/pthread_utils.h>
+
+#include <ardour/audiosource.h>
+
+#include "i18n.h"
+
+using namespace std;
+using namespace ARDOUR;
+using namespace PBD;
+
+sigc::signal<void,AudioSource *> AudioSource::AudioSourceCreated;
+pthread_t                    AudioSource::peak_thread;
+bool                         AudioSource::have_peak_thread = false;
+vector<AudioSource*>         AudioSource::pending_peak_sources;
+Glib::Mutex*                 AudioSource::pending_peak_sources_lock = 0;
+int                          AudioSource::peak_request_pipe[2];
+
+bool AudioSource::_build_missing_peakfiles = false;
+bool AudioSource::_build_peakfiles = false;
+
+AudioSource::AudioSource (string name)
+       : Source (name)
+{
+       if (pending_peak_sources_lock == 0) {
+               pending_peak_sources_lock = new Glib::Mutex;
+       }
+
+       _peaks_built = false;
+       next_peak_clear_should_notify = true;
+       _read_data_count = 0;
+       _write_data_count = 0;
+}
+
+AudioSource::AudioSource (const XMLNode& node) 
+       : Source (node)
+{
+       if (pending_peak_sources_lock == 0) {
+               pending_peak_sources_lock = new Glib::Mutex;
+       }
+
+       _peaks_built = false;
+       next_peak_clear_should_notify = true;
+       _read_data_count = 0;
+       _write_data_count = 0;
+
+       if (set_state (node)) {
+               throw failed_constructor();
+       }
+}
+
+AudioSource::~AudioSource ()
+{
+}
+
+XMLNode&
+AudioSource::get_state ()
+{
+       XMLNode& node (Source::get_state());
+
+       if (_captured_for.length()) {
+               node.add_property ("captured-for", _captured_for);
+       }
+
+       return node;
+}
+
+int
+AudioSource::set_state (const XMLNode& node)
+{
+       const XMLProperty* prop;
+
+       Source::set_state (node);
+
+       if ((prop = node.property ("captured-for")) != 0) {
+               _captured_for = prop->value();
+       }
+
+       return 0;
+}
+
+/***********************************************************************
+  PEAK FILE STUFF
+ ***********************************************************************/
+
+void*
+AudioSource::peak_thread_work (void* arg)
+{
+       PBD::ThreadCreated (pthread_self(), X_("Peak"));
+       struct pollfd pfd[1];
+
+       if (pending_peak_sources_lock == 0) {
+               pending_peak_sources_lock = new Glib::Mutex;
+       }
+
+       Glib::Mutex::Lock lm (*pending_peak_sources_lock);
+
+       while (true) {
+
+               pfd[0].fd = peak_request_pipe[0];
+               pfd[0].events = POLLIN|POLLERR|POLLHUP;
+
+               pending_peak_sources_lock->unlock ();
+
+               if (poll (pfd, 1, -1) < 0) {
+
+                       if (errno == EINTR) {
+                               pending_peak_sources_lock->lock ();
+                               continue;
+                       }
+                       
+                       error << string_compose (_("poll on peak request pipe failed (%1)"),
+                                         strerror (errno))
+                             << endmsg;
+                       break;
+               }
+
+               if (pfd[0].revents & ~POLLIN) {
+                       error << _("Error on peak thread request pipe") << endmsg;
+                       break;
+               }
+
+               if (pfd[0].revents & POLLIN) {
+
+                       char req;
+                       
+                       /* empty the pipe of all current requests */
+
+                       while (1) {
+                               size_t nread = ::read (peak_request_pipe[0], &req, sizeof (req));
+
+                               if (nread == 1) {
+                                       switch ((PeakRequest::Type) req) {
+                                       
+                                       case PeakRequest::Build:
+                                               break;
+                                               
+                                       case PeakRequest::Quit:
+                                               pthread_exit_pbd (0);
+                                               /*NOTREACHED*/
+                                               break;
+                                               
+                                       default:
+                                               break;
+                                       }
+
+                               } else if (nread == 0) {
+                                       break;
+                               } else if (errno == EAGAIN) {
+                                       break;
+                               } else {
+                                       fatal << _("Error reading from peak request pipe") << endmsg;
+                                       /*NOTREACHED*/
+                               }
+                       }
+               }
+
+               pending_peak_sources_lock->lock ();
+
+               while (!pending_peak_sources.empty()) {
+
+                       AudioSource* s = pending_peak_sources.front();
+                       pending_peak_sources.erase (pending_peak_sources.begin());
+                       
+                       pending_peak_sources_lock->unlock ();
+                       s->build_peaks();
+                       pending_peak_sources_lock->lock ();
+               }
+       }
+
+       pthread_exit_pbd (0);
+       /*NOTREACHED*/
+       return 0;
+}
+
+int
+AudioSource::start_peak_thread ()
+{
+       if (!_build_peakfiles) {
+               return 0;
+       }
+
+       if (pipe (peak_request_pipe)) {
+               error << string_compose(_("Cannot create transport request signal pipe (%1)"), strerror (errno)) << endmsg;
+               return -1;
+       }
+
+       if (fcntl (peak_request_pipe[0], F_SETFL, O_NONBLOCK)) {
+               error << string_compose(_("UI: cannot set O_NONBLOCK on peak request pipe (%1)"), strerror (errno)) << endmsg;
+               return -1;
+       }
+
+       if (fcntl (peak_request_pipe[1], F_SETFL, O_NONBLOCK)) {
+               error << string_compose(_("UI: cannot set O_NONBLOCK on peak request pipe (%1)"), strerror (errno)) << endmsg;
+               return -1;
+       }
+
+       if (pthread_create_and_store ("peak file builder", &peak_thread, 0, peak_thread_work, 0)) {
+               error << _("AudioSource: could not create peak thread") << endmsg;
+               return -1;
+       }
+
+       have_peak_thread = true;
+       return 0;
+}
+
+void
+AudioSource::stop_peak_thread ()
+{
+       if (!have_peak_thread) {
+               return;
+       }
+
+       void* status;
+
+       char c = (char) PeakRequest::Quit;
+       ::write (peak_request_pipe[1], &c, 1);
+       pthread_join (peak_thread, &status);
+}
+
+void 
+AudioSource::queue_for_peaks (AudioSource& source)
+{
+       if (have_peak_thread) {
+
+               Glib::Mutex::Lock lm (*pending_peak_sources_lock);
+               
+               source.next_peak_clear_should_notify = true;
+               
+               if (find (pending_peak_sources.begin(),
+                         pending_peak_sources.end(),
+                         &source) == pending_peak_sources.end()) {
+                       pending_peak_sources.push_back (&source);
+               }
+
+               char c = (char) PeakRequest::Build;
+               ::write (peak_request_pipe[1], &c, 1);
+       }
+}
+
+void AudioSource::clear_queue_for_peaks ()
+{
+       /* this is done to cancel a group of running peak builds */
+       if (have_peak_thread) {
+               Glib::Mutex::Lock lm (*pending_peak_sources_lock);
+               pending_peak_sources.clear ();
+       }
+}
+
+
+bool
+AudioSource::peaks_ready (sigc::slot<void> the_slot, sigc::connection& conn) const
+{
+       bool ret;
+       Glib::Mutex::Lock lm (_lock);
+
+       /* check to see if the peak data is ready. if not
+          connect the slot while still holding the lock.
+       */
+
+       if (!(ret = _peaks_built)) {
+               conn = PeaksReady.connect (the_slot);
+       }
+
+       return ret;
+}
+
+int
+AudioSource::rename_peakfile (string newpath)
+{
+       /* caller must hold _lock */
+
+       string oldpath = peakpath;
+
+       if (access (oldpath.c_str(), F_OK) == 0) {
+               if (rename (oldpath.c_str(), newpath.c_str()) != 0) {
+                       error << string_compose (_("cannot rename peakfile for %1 from %2 to %3 (%4)"), _name, oldpath, newpath, strerror (errno)) << endmsg;
+                       return -1;
+               }
+       }
+
+       peakpath = newpath;
+
+       return 0;
+}
+
+int
+AudioSource::initialize_peakfile (bool newfile, string audio_path)
+{
+       struct stat statbuf;
+
+       peakpath = peak_path (audio_path);
+
+       /* Nasty band-aid for older sessions that were created before we
+          used libsndfile for all audio files.
+       */
+       
+       if (!newfile && access (peakpath.c_str(), R_OK) != 0) {
+               string str = old_peak_path (audio_path);
+               if (access (str.c_str(), R_OK) == 0) {
+                       peakpath = str;
+               }
+       }
+
+       if (newfile) {
+
+               if (!_build_peakfiles) {
+                       return 0;
+               }
+
+               _peaks_built = false;
+
+       } else {
+
+               if (stat (peakpath.c_str(), &statbuf)) {
+                       if (errno != ENOENT) {
+                               /* it exists in the peaks dir, but there is some kind of error */
+                               
+                               error << string_compose(_("AudioSource: cannot stat peakfile \"%1\""), peakpath) << endmsg;
+                               return -1;
+                       }
+
+               } else {
+                       
+                       /* we found it in the peaks dir */
+               }
+               
+               if (statbuf.st_size == 0) {
+                       _peaks_built = false;
+               } else {
+                       // Check if the audio file has changed since the peakfile was built.
+                       struct stat stat_file;
+                       int err = stat (audio_path.c_str(), &stat_file);
+                       
+                       if (!err && stat_file.st_mtime > statbuf.st_mtime){
+                               _peaks_built = false;
+                       } else {
+                               _peaks_built = true;
+                       }
+               }
+       }
+
+       if (!newfile && !_peaks_built && _build_missing_peakfiles && _build_peakfiles) {
+               build_peaks_from_scratch ();
+       } 
+
+       return 0;
+}
+
+jack_nframes_t
+AudioSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const
+{
+       Glib::Mutex::Lock lm (_lock);
+       return read_unlocked (dst, start, cnt, workbuf);
+}
+
+jack_nframes_t
+AudioSource::write (Sample *dst, jack_nframes_t cnt, char * workbuf)
+{
+       Glib::Mutex::Lock lm (_lock);
+       return write_unlocked (dst, cnt, workbuf);
+}
+
+int 
+AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t start, jack_nframes_t cnt, double samples_per_visual_peak) const
+{
+       Glib::Mutex::Lock lm (_lock);
+       double scale;
+       double expected_peaks;
+       PeakData::PeakDatum xmax;
+       PeakData::PeakDatum xmin;
+       int32_t to_read;
+       uint32_t nread;
+       jack_nframes_t zero_fill = 0;
+       int ret = -1;
+       PeakData* staging = 0;
+       Sample* raw_staging = 0;
+       char * workbuf = 0;
+       int peakfile = -1;
+
+       expected_peaks = (cnt / (double) frames_per_peak);
+       scale = npeaks/expected_peaks;
+
+#if 0
+       cerr << "======>RP: npeaks = " << npeaks 
+            << " start = " << start 
+            << " cnt = " << cnt 
+            << " len = " << _length 
+            << "   samples_per_visual_peak =" << samples_per_visual_peak 
+            << " expected was " << expected_peaks << " ... scale = " << scale
+            << " PD ptr = " << peaks
+            <<endl;
+       
+#endif
+
+       /* fix for near-end-of-file conditions */
+
+       if (cnt > _length - start) {
+               // cerr << "too close to end @ " << _length << " given " << start << " + " << cnt << endl;
+               cnt = _length - start;
+               jack_nframes_t old = npeaks;
+               npeaks = min ((jack_nframes_t) floor (cnt / samples_per_visual_peak), npeaks);
+               zero_fill = old - npeaks;
+       }
+
+       // cerr << "actual npeaks = " << npeaks << " zf = " << zero_fill << endl;
+       
+       if (npeaks == cnt) {
+
+               // cerr << "RAW DATA\n";
+               
+               /* no scaling at all, just get the sample data and duplicate it for
+                  both max and min peak values.
+               */
+
+               Sample* raw_staging = new Sample[cnt];
+               workbuf = new char[cnt*4];
+               
+               if (read_unlocked (raw_staging, start, cnt, workbuf) != cnt) {
+                       error << _("cannot read sample data for unscaled peak computation") << endmsg;
+                       return -1;
+               }
+
+               for (jack_nframes_t i = 0; i < npeaks; ++i) {
+                       peaks[i].max = raw_staging[i];
+                       peaks[i].min = raw_staging[i];
+               }
+
+               delete [] raw_staging;
+               delete [] workbuf;
+               return 0;
+       }
+
+       if (scale == 1.0) {
+
+               off_t first_peak_byte = (start / frames_per_peak) * sizeof (PeakData);
+
+               /* open, read, close */
+
+               if ((peakfile = ::open (peakpath.c_str(), O_RDWR|O_CREAT, 0664)) < 0) {
+                       error << string_compose(_("AudioSource: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
+                       return -1;
+               }
+
+               // cerr << "DIRECT PEAKS\n";
+               
+               nread = ::pread (peakfile, peaks, sizeof (PeakData)* npeaks, first_peak_byte);
+               close (peakfile);
+
+               if (nread != sizeof (PeakData) * npeaks) {
+                       cerr << "AudioSource["
+                            << _name
+                            << "]: cannot read peaks from peakfile! (read only " 
+                            << nread
+                            << " not " 
+                            << npeaks
+                             << "at sample " 
+                            << start
+                            << " = byte "
+                            << first_peak_byte
+                            << ')'
+                            << endl;
+                       return -1;
+               }
+
+               if (zero_fill) {
+                       memset (&peaks[npeaks], 0, sizeof (PeakData) * zero_fill);
+               }
+
+               return 0;
+       }
+
+
+       jack_nframes_t tnp;
+
+       if (scale < 1.0) {
+
+               // cerr << "DOWNSAMPLE\n";
+
+               /* the caller wants:
+
+                   - more frames-per-peak (lower resolution) than the peakfile, or to put it another way,
+                    - less peaks than the peakfile holds for the same range
+
+                   So, read a block into a staging area, and then downsample from there.
+
+                   to avoid confusion, I'll refer to the requested peaks as visual_peaks and the peakfile peaks as stored_peaks  
+               */
+
+               const uint32_t chunksize = (uint32_t) min (expected_peaks, 4096.0);
+               
+               staging = new PeakData[chunksize];
+               
+               /* compute the rounded up frame position  */
+       
+               jack_nframes_t current_frame = start;
+               jack_nframes_t current_stored_peak = (jack_nframes_t) ceil (current_frame / (double) frames_per_peak);
+               uint32_t       next_visual_peak  = (uint32_t) ceil (current_frame / samples_per_visual_peak);
+               double         next_visual_peak_frame = next_visual_peak * samples_per_visual_peak;
+               uint32_t       stored_peak_before_next_visual_peak = (jack_nframes_t) next_visual_peak_frame / frames_per_peak;
+               uint32_t       nvisual_peaks = 0;
+               uint32_t       stored_peaks_read = 0;
+               uint32_t       i = 0;
+
+               /* handle the case where the initial visual peak is on a pixel boundary */
+
+               current_stored_peak = min (current_stored_peak, stored_peak_before_next_visual_peak);
+
+               /* open ... close during out: handling */
+
+               if ((peakfile = ::open (peakpath.c_str(), O_RDWR|O_CREAT, 0664)) < 0) {
+                       error << string_compose(_("AudioSource: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
+                       return 0;
+               }
+
+               while (nvisual_peaks < npeaks) {
+
+                       if (i == stored_peaks_read) {
+
+                               uint32_t       start_byte = current_stored_peak * sizeof(PeakData);
+                               tnp = min ((_length/frames_per_peak - current_stored_peak), (jack_nframes_t) expected_peaks);
+                               to_read = min (chunksize, tnp);
+                               
+                               off_t fend = lseek (peakfile, 0, SEEK_END);
+                               
+                               if ((nread = ::pread (peakfile, staging, sizeof (PeakData) * to_read, start_byte))
+                                   != sizeof (PeakData) * to_read) {
+                                       cerr << "AudioSource["
+                                            << _name
+                                            << "]: cannot read peak data from peakfile ("
+                                            << (nread / sizeof(PeakData))
+                                            << " peaks instead of "
+                                            << to_read
+                                            << ") ("
+                                            << strerror (errno)
+                                            << ')'
+                                            << " at start_byte = " << start_byte 
+                                            << " _length = " << _length << " versus len = " << fend
+                                            << " expected maxpeaks = " << (_length - current_frame)/frames_per_peak
+                                            << " npeaks was " << npeaks
+                                            << endl;
+                                       goto out;
+                               }
+
+                               i = 0;
+                               stored_peaks_read = nread / sizeof(PeakData);
+                       }
+
+                       xmax = -1.0;
+                       xmin = 1.0;
+
+                       while ((i < stored_peaks_read) && (current_stored_peak <= stored_peak_before_next_visual_peak)) {
+
+                               xmax = max (xmax, staging[i].max);
+                               xmin = min (xmin, staging[i].min);
+                               ++i;
+                               ++current_stored_peak;
+                               --expected_peaks;
+                       }
+
+                       peaks[nvisual_peaks].max = xmax;
+                       peaks[nvisual_peaks].min = xmin;
+                       ++nvisual_peaks;
+                       ++next_visual_peak;
+
+                       //next_visual_peak_frame = min ((next_visual_peak * samples_per_visual_peak), (next_visual_peak_frame+samples_per_visual_peak) );
+                       next_visual_peak_frame =  min ((double) start+cnt, (next_visual_peak_frame+samples_per_visual_peak) );
+                       stored_peak_before_next_visual_peak = (uint32_t) next_visual_peak_frame / frames_per_peak; 
+               }
+
+               if (zero_fill) {
+                       memset (&peaks[npeaks], 0, sizeof (PeakData) * zero_fill);
+               }
+               
+               ret = 0;
+
+       } else {
+               
+               // cerr << "UPSAMPLE\n";
+
+               /* the caller wants 
+
+                    - less frames-per-peak (more resolution)
+                    - more peaks than stored in the Peakfile
+
+                  So, fetch data from the raw source, and generate peak
+                  data on the fly.
+               */
+
+               jack_nframes_t frames_read = 0;
+               jack_nframes_t current_frame = start;
+               jack_nframes_t i = 0;
+               jack_nframes_t nvisual_peaks = 0;
+               jack_nframes_t chunksize = (jack_nframes_t) min (cnt, (jack_nframes_t) 4096);
+               raw_staging = new Sample[chunksize];
+               workbuf = new char[chunksize *4];
+               
+               jack_nframes_t frame_pos = start;
+               double pixel_pos = floor (frame_pos / samples_per_visual_peak);
+               double next_pixel_pos = ceil (frame_pos / samples_per_visual_peak);
+               double pixels_per_frame = 1.0 / samples_per_visual_peak;
+
+               xmin = 1.0;
+               xmax = -1.0;
+
+               while (nvisual_peaks < npeaks) {
+
+                       if (i == frames_read) {
+                               
+                               to_read = min (chunksize, (_length - current_frame));
+                               
+                               if ((frames_read = read_unlocked (raw_staging, current_frame, to_read, workbuf)) < 0) {
+                                       error << string_compose(_("AudioSource[%1]: peak read - cannot read %2 samples at offset %3")
+                                                        , _name, to_read, current_frame) 
+                                             << endmsg;
+                                       goto out;
+                               }
+
+                               i = 0;
+                       }
+                       
+                       xmax = max (xmax, raw_staging[i]);
+                       xmin = min (xmin, raw_staging[i]);
+                       ++i;
+                       ++current_frame;
+                       pixel_pos += pixels_per_frame;
+
+                       if (pixel_pos >= next_pixel_pos) {
+
+                               peaks[nvisual_peaks].max = xmax;
+                               peaks[nvisual_peaks].min = xmin;
+                               ++nvisual_peaks;
+                               xmin = 1.0;
+                               xmax = -1.0;
+
+                               next_pixel_pos = ceil (pixel_pos + 0.5);
+                       }
+               }
+               
+               if (zero_fill) {
+                       memset (&peaks[npeaks], 0, sizeof (PeakData) * zero_fill);
+               }
+
+               ret = 0;
+       }
+
+  out:
+       if (peakfile >= 0) {
+               close (peakfile);
+       }
+
+       if (staging) {
+               delete [] staging;
+       } 
+
+       if (raw_staging) {
+               delete [] raw_staging;
+       }
+
+       if (workbuf) {
+               delete [] workbuf;
+       }
+       
+       return ret;
+}
+
+#undef DEBUG_PEAK_BUILD
+
+int
+AudioSource::build_peaks ()
+{
+       vector<PeakBuildRecord*> built;
+       int status = -1;
+       bool pr_signal = false;
+       list<PeakBuildRecord*> copy;
+
+       {
+               Glib::Mutex::Lock lm (_lock);
+               copy = pending_peak_builds;
+               pending_peak_builds.clear ();
+       }
+               
+#ifdef DEBUG_PEAK_BUILD
+       cerr << "build peaks with " << copy.size() << " requests pending\n";
+#endif         
+
+       for (list<PeakBuildRecord *>::iterator i = copy.begin(); i != copy.end(); ++i) {
+               
+               if ((status = do_build_peak ((*i)->frame, (*i)->cnt)) != 0) { 
+                       unlink (peakpath.c_str());
+                       break;
+               }
+               built.push_back (new PeakBuildRecord (*(*i)));
+               delete *i;
+       }
+
+       { 
+               Glib::Mutex::Lock lm (_lock);
+
+               if (status == 0) {
+                       _peaks_built = true;
+                       
+                       if (next_peak_clear_should_notify) {
+                               next_peak_clear_should_notify = false;
+                               pr_signal = true;
+                       }
+               }
+       }
+
+       if (status == 0) {
+               for (vector<PeakBuildRecord *>::iterator i = built.begin(); i != built.end(); ++i) {
+                       PeakRangeReady ((*i)->frame, (*i)->cnt); /* EMIT SIGNAL */
+                       delete *i;
+               }
+
+               if (pr_signal) {
+                       PeaksReady (); /* EMIT SIGNAL */
+               }
+       }
+
+       return status;
+}
+
+int
+AudioSource::do_build_peak (jack_nframes_t first_frame, jack_nframes_t cnt)
+{
+       jack_nframes_t current_frame;
+       Sample buf[frames_per_peak];
+       Sample xmin, xmax;
+       uint32_t  peaki;
+       PeakData* peakbuf;
+       char * workbuf = 0;
+       jack_nframes_t frames_read;
+       jack_nframes_t frames_to_read;
+       off_t first_peak_byte;
+       int peakfile = -1;
+       int ret = -1;
+
+#ifdef DEBUG_PEAK_BUILD
+       cerr << pthread_self() << ": " << _name << ": building peaks for " << first_frame << " to " << first_frame + cnt - 1 << endl;
+#endif
+
+       first_peak_byte = (first_frame / frames_per_peak) * sizeof (PeakData);
+
+#ifdef DEBUG_PEAK_BUILD
+       cerr << "seeking to " << first_peak_byte << " before writing new peak data\n";
+#endif
+
+       current_frame = first_frame;
+       peakbuf = new PeakData[(cnt/frames_per_peak)+1];
+       peaki = 0;
+
+       workbuf = new char[max(frames_per_peak, cnt) * 4];
+       
+       if ((peakfile = ::open (peakpath.c_str(), O_RDWR|O_CREAT, 0664)) < 0) {
+               error << string_compose(_("AudioSource: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
+               return -1;
+       }
+       
+       while (cnt) {
+
+               frames_to_read = min (frames_per_peak, cnt);
+
+               /* lock for every read */
+
+               if ((frames_read = read (buf, current_frame, frames_to_read, workbuf)) != frames_to_read) {
+                       error << string_compose(_("%1: could not write read raw data for peak computation (%2)"), _name, strerror (errno)) << endmsg;
+                       goto out;
+               }
+
+               xmin = buf[0];
+               xmax = buf[0];
+
+               for (jack_nframes_t n = 1; n < frames_read; ++n) {
+                       xmax = max (xmax, buf[n]);
+                       xmin = min (xmin, buf[n]);
+
+//                     if (current_frame < frames_read) {
+//                             cerr << "sample = " << buf[n] << " max = " << xmax << " min = " << xmin << " max of 2 = " << max (xmax, buf[n]) << endl;
+//                     }
+               }
+
+               peakbuf[peaki].max = xmax;
+               peakbuf[peaki].min = xmin;
+               peaki++;
+
+               current_frame += frames_read;
+               cnt -= frames_read;
+       }
+
+       if (::pwrite (peakfile, peakbuf, sizeof (PeakData) * peaki, first_peak_byte) != (ssize_t) (sizeof (PeakData) * peaki)) {
+               error << string_compose(_("%1: could not write peak file data (%2)"), _name, strerror (errno)) << endmsg;
+               goto out;
+       }
+
+       ret = 0;
+
+  out:
+       delete [] peakbuf;
+       if (peakfile >= 0) {
+               close (peakfile);
+       }
+       if (workbuf)
+               delete [] workbuf;
+       return ret;
+}
+
+void
+AudioSource::build_peaks_from_scratch ()
+{
+       Glib::Mutex::Lock lp (_lock);
+
+       next_peak_clear_should_notify = true;
+       pending_peak_builds.push_back (new PeakBuildRecord (0, _length));
+       queue_for_peaks (*this);
+}
+
+bool
+AudioSource::file_changed (string path)
+{
+       struct stat stat_file;
+       struct stat stat_peak;
+
+       int e1 = stat (path.c_str(), &stat_file);
+       int e2 = stat (peak_path(path).c_str(), &stat_peak);
+       
+       if (!e1 && !e2 && stat_file.st_mtime > stat_peak.st_mtime){
+               return true;
+       } else {
+               return false;
+       }
+}
+
+jack_nframes_t
+AudioSource::available_peaks (double zoom_factor) const
+{
+       int peakfile;
+       off_t end;
+
+       if (zoom_factor < frames_per_peak) {
+               return length(); // peak data will come from the audio file
+       } 
+       
+       /* peak data comes from peakfile */
+
+       if ((peakfile = ::open (peakpath.c_str(), O_RDONLY)) < 0) {
+               error << string_compose(_("AudioSource: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
+               return 0;
+       }
+
+       { 
+               Glib::Mutex::Lock lm (_lock);
+               end = lseek (peakfile, 0, SEEK_END);
+       }
+
+       close (peakfile);
+
+       return (end/sizeof(PeakData)) * frames_per_peak;
+}
+
+void
+AudioSource::update_length (jack_nframes_t pos, jack_nframes_t cnt)
+{
+       if (pos + cnt > _length) {
+               _length = pos+cnt;
+       }
+}
+
index ce7b9a3e6faeaceb6c085cb34f15ec2a669cd7bf..2f0b943c0e68e95827a4476b64c35946d02205d4 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <glibmm/thread.h>
 
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/audioregion.h>
 #include <ardour/route.h>
 #include <ardour/session.h>
index 17888c4a7c02d7d6c42c33e514a94ab935a49358..3df7dd94f7ae0aa44104c3f9e00599774dcbce29 100644 (file)
@@ -31,6 +31,7 @@
 using namespace std;
 using namespace ARDOUR;
 using namespace sigc;
+using namespace PBD;
 
 #if 0
 static void dumpit (const AutomationList& al, string prefix = "")
index b7b1d65815ef236b452a56688fd12282414648ad..fc708f805de832b5b67d81f3c38af8b1d0722759 100644 (file)
@@ -26,7 +26,7 @@
 
 #include <ardour/ardour.h>
 #include <ardour/configuration.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/destructive_filesource.h>
 #include <ardour/control_protocol_manager.h>
 
@@ -34,6 +34,7 @@
 
 using namespace ARDOUR;
 using namespace std;
+using namespace PBD;
 
 /* this is global so that we do not have to indirect through an object pointer
    to reference it.
@@ -231,7 +232,7 @@ Configuration::set_state (const XMLNode& root)
                }
        }
 
-       DiskStream::set_disk_io_chunk_frames (minimum_disk_io_bytes.get() / sizeof (Sample));
+       AudioDiskstream::set_disk_io_chunk_frames (minimum_disk_io_bytes.get() / sizeof (Sample));
 
        return 0;
 }
index 719751f7baeeb84df80b1ee399755aad3f63d217..fbfd02d50904cf6b4775c814309babca8233553f 100644 (file)
@@ -28,6 +28,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 Connection::Connection (const XMLNode& node)
 {
index 57a89cc2d9643cb495d41972571171f322c791c7..c2fb18895322398a462e6e874dc812c46a1602cc 100644 (file)
@@ -4,16 +4,14 @@
 #include <pbd/error.h>
 #include <pbd/pathscanner.h>
 
-#include "control_protocol.h"
+#include <control_protocol/control_protocol.h>
 
 #include <ardour/session.h>
 #include <ardour/control_protocol_manager.h>
 
-
-
-
 using namespace ARDOUR;
 using namespace std;
+using namespace PBD;
 
 #include "i18n.h"
 
index 67aaabfb88c81548f264f17acb187f323369406a..1b0ee565e757a617c91d4e55a55e05345b86c869 100644 (file)
 #include <AudioToolbox/AudioFormat.h>
 
 using namespace ARDOUR;
+using namespace PBD;
 
 CoreAudioSource::CoreAudioSource (const XMLNode& node)
-       : ExternalSource (node)
+       : AudioFileSource (node)
 {
        init (_name, true);
-       SourceCreated (this); /* EMIT SIGNAL */
+       AudioSourceCreated (this); /* EMIT SIGNAL */
 }
 
 CoreAudioSource::CoreAudioSource (const string& idstr, bool build_peak)
-       : ExternalSource(idstr, build_peak)
+       : AudioFileSource(idstr, build_peak)
 {
        init (idstr, build_peak);
 
        if (build_peak) {
-                SourceCreated (this); /* EMIT SIGNAL */
+                AudioSourceCreated (this); /* EMIT SIGNAL */
        }
 }
 
index 767fdd85e644cf50fcd6310c2d703f3ccba53026..5d36c63f011818558a33499f5fecc2bbdaecde9c 100644 (file)
@@ -33,7 +33,7 @@
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 jack_nframes_t Crossfade::_short_xfade_length = 0;
 Change Crossfade::ActiveChanged = ARDOUR::new_change();
index a515c3a39a8e341efe04950e0edc5ca4df29bb1e..977b6dfd7be5088fc88df669e594497e57564a71 100644 (file)
@@ -38,6 +38,7 @@
 using namespace std;
 using namespace ARDOUR;
 using namespace sigc;
+using namespace PBD;
 
 Curve::Curve (double minv, double maxv, double canv, bool nostate)
        : AutomationList (canv, nostate)
index c48b7fb861e07fbd0d42e36913b3a3819ce62d29..3031d5a7ec93c624a481a277496a927edb26c7eb 100644 (file)
@@ -24,6 +24,8 @@
 
 #include "i18n.h"
 
+using namespace PBD;
+
 float CycleTimer::cycles_per_usec = 0;
 
 float
index 9a4c2425e9bdd0b6cadb5127de6c2ff1802f6dbb..cce757509a48efb592899a02db6351c29bad32ec 100644 (file)
@@ -61,18 +61,15 @@ typedef off_t off64_t;
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 gain_t* DestructiveFileSource::out_coefficient = 0;
 gain_t* DestructiveFileSource::in_coefficient = 0;
 jack_nframes_t DestructiveFileSource::xfade_frames = 64;
 
-DestructiveFileSource::DestructiveFileSource (string path, jack_nframes_t rate, bool repair_first, SampleFormat samp_format)
-       : FileSource (path, rate, repair_first, samp_format)
+DestructiveFileSource::DestructiveFileSource (string path, SampleFormat samp_format, HeaderFormat hdr_format, jack_nframes_t rate, Flag flags)
+       : SndFileSource (path, samp_format, hdr_format, rate, flags)
 {
-       if (out_coefficient == 0) {
-               setup_standard_crossfades (rate);
-       }
-
        xfade_buf = new Sample[xfade_frames];
 
        _capture_start = false;
@@ -80,13 +77,9 @@ DestructiveFileSource::DestructiveFileSource (string path, jack_nframes_t rate,
        file_pos = 0;
 }
 
-DestructiveFileSource::DestructiveFileSource (const XMLNode& node, jack_nframes_t rate)
-       : FileSource (node, rate)
+DestructiveFileSource::DestructiveFileSource (const XMLNode& node)
+       : SndFileSource (node)
 {
-       if (out_coefficient == 0) {
-               setup_standard_crossfades (rate);
-       }
-
        xfade_buf = new Sample[xfade_frames];
 
        _capture_start = false;
@@ -102,6 +95,10 @@ DestructiveFileSource::~DestructiveFileSource()
 void
 DestructiveFileSource::setup_standard_crossfades (jack_nframes_t rate)
 {
+       /* This static method is assumed to have been called by the Session
+          before any DFS's are created.
+       */
+
        xfade_frames = (jack_nframes_t) floor ((Config->get_destructive_xfade_msecs () / 1000.0) * rate);
 
        if (out_coefficient) {
@@ -124,12 +121,6 @@ DestructiveFileSource::setup_standard_crossfades (jack_nframes_t rate)
        }
 }
 
-int
-DestructiveFileSource::seek (jack_nframes_t frame)
-{
-       return 0;
-}
-
 void
 DestructiveFileSource::mark_capture_start (jack_nframes_t pos)
 {
@@ -188,7 +179,7 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in,
        }
 
        if (file_cnt) {
-               if ((retval = file_read (xfade_buf, fade_position, file_cnt, workbuf)) != (ssize_t) file_cnt) {
+               if ((retval = write_float (xfade_buf, fade_position, file_cnt)) != (ssize_t) file_cnt) {
                        if (retval >= 0 && errno == EAGAIN) {
                                /* XXX - can we really trust that errno is meaningful here?  yes POSIX, i'm talking to you.
                                 * short or no data there */
@@ -206,7 +197,7 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in,
        }
        
        if (nofade && !fade_in) {
-               if (file_write (data, file_pos, nofade, workbuf) != (ssize_t) nofade) {
+               if (write_float (data, file_pos, nofade) != nofade) {
                        error << string_compose(_("DestructiveFileSource: \"%1\" bad write (%2)"), _path, strerror (errno)) << endmsg;
                        return 0;
                }
@@ -248,14 +239,14 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in,
        }
 
        if (xfade) {
-               if (file_write (xfade_buf, fade_position, xfade, workbuf) != (ssize_t) xfade) {
+               if (write_float (xfade_buf, fade_position, xfade) != xfade) {
                        error << string_compose(_("DestructiveFileSource: \"%1\" bad write (%2)"), _path, strerror (errno)) << endmsg;
                        return 0;
                }
        }
        
        if (fade_in && nofade) {
-               if (file_write (data + xfade, file_pos + xfade, nofade, workbuf) != (ssize_t) nofade) {
+               if (write_float (data + xfade, file_pos + xfade, nofade) != nofade) {
                        error << string_compose(_("DestructiveFileSource: \"%1\" bad write (%2)"), _path, strerror (errno)) << endmsg;
                        return 0;
                }
@@ -265,96 +256,98 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in,
 }
 
 jack_nframes_t
-DestructiveFileSource::write (Sample* data, jack_nframes_t cnt, char * workbuf)
+DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt, char * workbuf)
 {
-       {
-               Glib::Mutex::Lock lm (_lock);
-               
-               jack_nframes_t old_file_pos;
+       jack_nframes_t old_file_pos;
 
-               if (_capture_start && _capture_end) {
-                       _capture_start = false;
-                       _capture_end = false;
-
-                       /* move to the correct location place */
-                       file_pos = capture_start_frame;
-                       
-                       // split cnt in half
-                       jack_nframes_t subcnt = cnt / 2;
-                       jack_nframes_t ofilepos = file_pos;
-                       
-                       // fade in
-                       if (crossfade (data, subcnt, 1, workbuf) != subcnt) {
-                               return 0;
-                       }
+       if (!writable()) {
+               return 0;
+       }
 
-                       file_pos += subcnt;
-                       Sample * tmpdata = data + subcnt;
-                       
-                       // fade out
-                       subcnt = cnt - subcnt;
-                       if (crossfade (tmpdata, subcnt, 0, workbuf) != subcnt) {
-                               return 0;
-                       }
+       if (_capture_start && _capture_end) {
+               _capture_start = false;
+               _capture_end = false;
+               
+               /* move to the correct location place */
+               file_pos = capture_start_frame;
+               
+               // split cnt in half
+               jack_nframes_t subcnt = cnt / 2;
+               jack_nframes_t ofilepos = file_pos;
+               
+               // fade in
+               if (crossfade (data, subcnt, 1, workbuf) != subcnt) {
+                       return 0;
+               }
+               
+               file_pos += subcnt;
+               Sample * tmpdata = data + subcnt;
+               
+               // fade out
+               subcnt = cnt - subcnt;
+               if (crossfade (tmpdata, subcnt, 0, workbuf) != subcnt) {
+                       return 0;
+               }
+               
+               file_pos = ofilepos; // adjusted below
+       }
+       else if (_capture_start) {
 
-                       file_pos = ofilepos; // adjusted below
+               _capture_start = false;
+               _capture_end = false;
+               
+               /* move to the correct location place */
+               file_pos = capture_start_frame;
+               
+               if (crossfade (data, cnt, 1, workbuf) != cnt) {
+                       return 0;
                }
-               else if (_capture_start) {
-                       _capture_start = false;
-                       _capture_end = false;
+               
+       } else if (_capture_end) {
 
-                       /* move to the correct location place */
-                       file_pos = capture_start_frame;
-                       
-                       if (crossfade (data, cnt, 1, workbuf) != cnt) {
-                               return 0;
-                       }
+               _capture_start = false;
+               _capture_end = false;
+               
+               if (crossfade (data, cnt, 0, workbuf) != cnt) {
+                       return 0;
+               }
 
-               } else if (_capture_end) {
-                       _capture_start = false;
-                       _capture_end = false;
+       } else {
 
-                       if (crossfade (data, cnt, 0, workbuf) != cnt) {
-                               return 0;
-                       }
-               } else {
-                       if (file_write(data, file_pos, cnt, workbuf) != (ssize_t) cnt) {
-                               return 0;
-                       }
+               if (write_float (data, file_pos, cnt) != cnt) {
+                       return 0;
                }
-
-               old_file_pos = file_pos;
-               if (file_pos + cnt > _length) {
-                       _length = file_pos + cnt;
+       }
+       
+       old_file_pos = file_pos;
+       update_length (file_pos, cnt);
+       file_pos += cnt;
+       
+       if (_build_peakfiles) {
+               PeakBuildRecord *pbr = 0;
+               
+               if (pending_peak_builds.size()) {
+                       pbr = pending_peak_builds.back();
                }
-               file_pos += cnt;
                
-               if (_build_peakfiles) {
-                       PeakBuildRecord *pbr = 0;
-                       
-                       if (pending_peak_builds.size()) {
-                               pbr = pending_peak_builds.back();
-                       }
+               if (pbr && pbr->frame + pbr->cnt == old_file_pos) {
                        
-                       if (pbr && pbr->frame + pbr->cnt == old_file_pos) {
-                               
-                               /* the last PBR extended to the start of the current write,
-                                  so just extend it again.
-                               */
-
-                               pbr->cnt += cnt;
-                       } else {
-                               pending_peak_builds.push_back (new PeakBuildRecord (old_file_pos, cnt));
-                       }
+                       /* the last PBR extended to the start of the current write,
+                          so just extend it again.
+                       */
                        
-                       _peaks_built = false;
+                       pbr->cnt += cnt;
+               } else {
+                       pending_peak_builds.push_back (new PeakBuildRecord (old_file_pos, cnt));
                }
+               
+               _peaks_built = false;
        }
 
        if (_build_peakfiles) {
                queue_for_peaks (*this);
        }
-
+       
        return cnt;
 }
 
@@ -367,7 +360,14 @@ DestructiveFileSource::last_capture_start_frame () const
 XMLNode& 
 DestructiveFileSource::get_state ()
 {
-       XMLNode& node = FileSource::get_state ();
+       XMLNode& node = AudioFileSource::get_state ();
        node.add_property (X_("destructive"), "true");
        return node;
 }
+
+void
+DestructiveFileSource::set_timeline_position (jack_nframes_t pos)
+{
+       /* destructive tracks always start at where our reference frame zero is */
+       timeline_position = 0;
+}
diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc
deleted file mode 100644 (file)
index 90e8387..0000000
+++ /dev/null
@@ -1,2562 +0,0 @@
-/*
-    Copyright (C) 2000-2003 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#include <fstream>
-#include <cstdio>
-#include <unistd.h>
-#include <cmath>
-#include <cerrno>
-#include <string>
-#include <climits>
-#include <fcntl.h>
-#include <cstdlib>
-#include <ctime>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include <pbd/error.h>
-#include <pbd/basename.h>
-#include <glibmm/thread.h>
-#include <pbd/xml++.h>
-
-#include <ardour/ardour.h>
-#include <ardour/audioengine.h>
-#include <ardour/diskstream.h>
-#include <ardour/utils.h>
-#include <ardour/configuration.h>
-#include <ardour/filesource.h>
-#include <ardour/destructive_filesource.h>
-#include <ardour/send.h>
-#include <ardour/audioplaylist.h>
-#include <ardour/cycle_timer.h>
-#include <ardour/audioregion.h>
-
-#include "i18n.h"
-#include <locale.h>
-
-using namespace std;
-using namespace ARDOUR;
-
-jack_nframes_t DiskStream::disk_io_chunk_frames;
-
-sigc::signal<void,DiskStream*>    DiskStream::DiskStreamCreated;
-sigc::signal<void,list<Source*>*> DiskStream::DeleteSources;
-sigc::signal<void>                DiskStream::DiskOverrun;
-sigc::signal<void>                DiskStream::DiskUnderrun;
-
-DiskStream::DiskStream (Session &sess, const string &name, Flag flag)
-       : _name (name),
-         _session (sess)
-{
-       /* prevent any write sources from being created */
-
-       in_set_state = true;
-
-       init (flag);
-       use_new_playlist ();
-
-       in_set_state = false;
-
-       DiskStreamCreated (this); /* EMIT SIGNAL */
-}
-       
-DiskStream::DiskStream (Session& sess, const XMLNode& node)
-       : _session (sess)
-       
-{
-       in_set_state = true;
-       init (Recordable);
-
-       if (set_state (node)) {
-               in_set_state = false;
-               throw failed_constructor();
-       }
-
-       in_set_state = false;
-
-       if (destructive()) {
-               use_destructive_playlist ();
-       }
-
-       DiskStreamCreated (this); /* EMIT SIGNAL */
-}
-
-void
-DiskStream::init_channel (ChannelInfo &chan)
-{
-       chan.playback_wrap_buffer = 0;
-       chan.capture_wrap_buffer = 0;
-       chan.speed_buffer = 0;
-       chan.peak_power = 0.0f;
-       chan.write_source = 0;
-       chan.source = 0;
-       chan.current_capture_buffer = 0;
-       chan.current_playback_buffer = 0;
-       chan.curr_capture_cnt = 0;
-       
-       chan.playback_buf = new RingBufferNPT<Sample> (_session.diskstream_buffer_size());
-       chan.capture_buf = new RingBufferNPT<Sample> (_session.diskstream_buffer_size());
-       chan.capture_transition_buf = new RingBufferNPT<CaptureTransition> (128);
-       
-       
-       /* touch the ringbuffer buffers, which will cause
-          them to be mapped into locked physical RAM if
-          we're running with mlockall(). this doesn't do
-          much if we're not.  
-       */
-       memset (chan.playback_buf->buffer(), 0, sizeof (Sample) * chan.playback_buf->bufsize());
-       memset (chan.capture_buf->buffer(), 0, sizeof (Sample) * chan.capture_buf->bufsize());
-       memset (chan.capture_transition_buf->buffer(), 0, sizeof (CaptureTransition) * chan.capture_transition_buf->bufsize());
-}
-
-
-void
-DiskStream::init (Flag f)
-{
-       _id = new_id();
-       _refcnt = 0;
-       _flags = f;
-       _io = 0;
-       _alignment_style = ExistingMaterial;
-       _persistent_alignment_style = ExistingMaterial;
-       first_input_change = true;
-       _playlist = 0;
-       i_am_the_modifier = 0;
-       g_atomic_int_set (&_record_enabled, 0);
-       was_recording = false;
-       capture_start_frame = 0;
-       capture_captured = 0;
-       _visible_speed = 1.0f;
-       _actual_speed = 1.0f;
-       _buffer_reallocation_required = false;
-       _seek_required = false;
-       first_recordable_frame = max_frames;
-       last_recordable_frame = max_frames;
-       _roll_delay = 0;
-       _capture_offset = 0;
-       _processed = false;
-       _slaved = false;
-       adjust_capture_position = 0;
-       last_possibly_recording = 0;
-       loop_location = 0;
-       wrap_buffer_size = 0;
-       speed_buffer_size = 0;
-       last_phase = 0;
-       phi = (uint64_t) (0x1000000);
-       file_frame = 0;
-       playback_sample = 0;
-       playback_distance = 0;
-       _read_data_count = 0;
-       _write_data_count = 0;
-       deprecated_io_node = 0;
-
-       /* there are no channels at this point, so these
-          two calls just get speed_buffer_size and wrap_buffer
-          size setup without duplicating their code.
-       */
-
-       set_block_size (_session.get_block_size());
-       allocate_temporary_buffers ();
-
-       pending_overwrite = false;
-       overwrite_frame = 0;
-       overwrite_queued = false;
-       input_change_pending = NoChange;
-
-       add_channel ();
-       _n_channels = 1;
-}
-
-void
-DiskStream::destroy_channel (ChannelInfo &chan)
-{
-       if (chan.write_source) {
-               chan.write_source->release ();
-               chan.write_source = 0;
-       }
-               
-       if (chan.speed_buffer) {
-               delete [] chan.speed_buffer;
-       }
-
-       if (chan.playback_wrap_buffer) {
-               delete [] chan.playback_wrap_buffer;
-       }
-       if (chan.capture_wrap_buffer) {
-               delete [] chan.capture_wrap_buffer;
-       }
-       
-       delete chan.playback_buf;
-       delete chan.capture_buf;
-       delete chan.capture_transition_buf;
-       
-       chan.playback_buf = 0;
-       chan.capture_buf = 0;
-}
-
-DiskStream::~DiskStream ()
-{
-       Glib::Mutex::Lock lm (state_lock);
-
-       if (_playlist) {
-               _playlist->unref ();
-       }
-
-       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-               destroy_channel((*chan));
-       }
-       
-       channels.clear();
-}
-
-void
-DiskStream::handle_input_change (IOChange change, void *src)
-{
-       Glib::Mutex::Lock lm (state_lock);
-
-       if (!(input_change_pending & change)) {
-               input_change_pending = IOChange (input_change_pending|change);
-               _session.request_input_change_handling ();
-       }
-}
-
-void
-DiskStream::non_realtime_input_change ()
-{
-       { 
-               Glib::Mutex::Lock lm (state_lock);
-
-               if (input_change_pending == NoChange) {
-                       return;
-               }
-
-               if (input_change_pending & ConfigurationChanged) {
-
-                       if (_io->n_inputs() > _n_channels) {
-                               
-                               // we need to add new channel infos
-                               
-                               int diff = _io->n_inputs() - channels.size();
-                               
-                               for (int i = 0; i < diff; ++i) {
-                                       add_channel ();
-                               }
-                               
-               } else if (_io->n_inputs() < _n_channels) {
-                               
-                               // we need to get rid of channels
-                               
-                               int diff = channels.size() - _io->n_inputs();
-                               
-                               for (int i = 0; i < diff; ++i) {
-                                       remove_channel ();
-                               }
-                       }
-               } 
-
-               get_input_sources ();
-               set_capture_offset ();
-               
-               if (first_input_change) {
-                       set_align_style (_persistent_alignment_style);
-                       first_input_change = false;
-               } else {
-                       set_align_style_from_io ();
-               }
-
-               input_change_pending = NoChange;
-       }
-
-       /* reset capture files */
-
-       reset_write_sources (false);
-
-       /* now refill channel buffers */
-
-       if (speed() != 1.0f || speed() != -1.0f) {
-               seek ((jack_nframes_t) (_session.transport_frame() * (double) speed()));
-       }
-       else {
-               seek (_session.transport_frame());
-       }
-}
-
-void
-DiskStream::get_input_sources ()
-{
-       uint32_t ni = _io->n_inputs();
-       
-       for (uint32_t n = 0; n < ni; ++n) {
-               
-               const char **connections = _io->input(n)->get_connections ();
-               ChannelInfo& chan = channels[n];
-               
-               if (connections == 0 || connections[0] == 0) {
-                       
-                       if (chan.source) {
-                               // _source->disable_metering ();
-                       }
-                       
-                       chan.source = 0;
-                       
-               } else {
-                       chan.source = _session.engine().get_port_by_name (connections[0]);
-               }
-               
-               if (connections) {
-                       free (connections);
-               }
-       }
-}              
-
-int
-DiskStream::find_and_use_playlist (const string& name)
-{
-       Playlist* pl;
-       AudioPlaylist* playlist;
-               
-       if ((pl = _session.get_playlist (name)) == 0) {
-               error << string_compose(_("DiskStream: Session doesn't know about a Playlist called \"%1\""), name) << endmsg;
-               return -1;
-       }
-
-       if ((playlist = dynamic_cast<AudioPlaylist*> (pl)) == 0) {
-               error << string_compose(_("DiskStream: Playlist \"%1\" isn't an audio playlist"), name) << endmsg;
-               return -1;
-       }
-
-       return use_playlist (playlist);
-}
-
-int
-DiskStream::use_playlist (AudioPlaylist* playlist)
-{
-       {
-               Glib::Mutex::Lock lm (state_lock);
-
-               if (playlist == _playlist) {
-                       return 0;
-               }
-
-               plstate_connection.disconnect();
-               plmod_connection.disconnect ();
-               plgone_connection.disconnect ();
-
-               if (_playlist) {
-                       _playlist->unref();
-               }
-                       
-               _playlist = playlist;
-               _playlist->ref();
-
-               if (!in_set_state && recordable()) {
-                       reset_write_sources (false);
-               }
-               
-               plstate_connection = _playlist->StateChanged.connect (mem_fun (*this, &DiskStream::playlist_changed));
-               plmod_connection = _playlist->Modified.connect (mem_fun (*this, &DiskStream::playlist_modified));
-               plgone_connection = _playlist->GoingAway.connect (mem_fun (*this, &DiskStream::playlist_deleted));
-       }
-
-       if (!overwrite_queued) {
-               _session.request_overwrite_buffer (this);
-               overwrite_queued = true;
-       }
-       
-       PlaylistChanged (); /* EMIT SIGNAL */
-       _session.set_dirty ();
-
-       return 0;
-}
-
-void
-DiskStream::playlist_deleted (Playlist* pl)
-{
-       /* this catches an ordering issue with session destruction. playlists 
-          are destroyed before diskstreams. we have to invalidate any handles
-          we have to the playlist.
-       */
-
-       _playlist = 0;
-}
-
-int
-DiskStream::use_new_playlist ()
-{
-       string newname;
-       AudioPlaylist* playlist;
-
-       if (!in_set_state && destructive()) {
-               return 0;
-       }
-
-       if (_playlist) {
-               newname = Playlist::bump_name (_playlist->name(), _session);
-       } else {
-               newname = Playlist::bump_name (_name, _session);
-       }
-
-       if ((playlist = new AudioPlaylist (_session, newname, hidden())) != 0) {
-               playlist->set_orig_diskstream_id (id());
-               return use_playlist (playlist);
-       } else { 
-               return -1;
-       }
-}
-
-int
-DiskStream::use_copy_playlist ()
-{
-       if (destructive()) {
-               return 0;
-       }
-
-       if (_playlist == 0) {
-               error << string_compose(_("DiskStream %1: there is no existing playlist to make a copy of!"), _name) << endmsg;
-               return -1;
-       }
-
-       string newname;
-       AudioPlaylist* playlist;
-
-       newname = Playlist::bump_name (_playlist->name(), _session);
-       
-       if ((playlist  = new AudioPlaylist (*_playlist, newname)) != 0) {
-               playlist->set_orig_diskstream_id (id());
-               return use_playlist (playlist);
-       } else { 
-               return -1;
-       }
-}
-
-void
-DiskStream::setup_destructive_playlist ()
-{
-       AudioRegion::SourceList srcs;
-
-       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-               srcs.push_back ((*chan).write_source);
-       }
-
-       /* a single full-sized region */
-
-       AudioRegion* region = new AudioRegion (srcs, 0, max_frames, _name);
-       _playlist->add_region (*region, 0);             
-}
-
-void
-DiskStream::use_destructive_playlist ()
-{
-       /* use the sources associated with the single full-extent region */
-       
-       Playlist::RegionList* rl = _playlist->regions_at (0);
-
-       if (rl->empty()) {
-               reset_write_sources (false, true);
-               return;
-       }
-
-       AudioRegion* region = dynamic_cast<AudioRegion*> (rl->front());
-
-       if (region == 0) {
-               throw failed_constructor();
-       }
-
-       delete rl;
-
-       uint32_t n;
-       ChannelList::iterator chan;
-
-       for (n = 0, chan = channels.begin(); chan != channels.end(); ++chan, ++n) {
-               (*chan).write_source = dynamic_cast<FileSource*>(&region->source (n));
-               (*chan).write_source->set_allow_remove_if_empty (false);
-       }
-
-       /* the source list will never be reset for a destructive track */
-}
-
-void
-DiskStream::set_io (IO& io)
-{
-       _io = &io;
-       set_align_style_from_io ();
-}
-
-int
-DiskStream::set_name (string str, void *src)
-{
-       if (str != _name) {
-               _playlist->set_name (str);
-               _name = str;
-               
-               if (!in_set_state && recordable()) {
-                       /* rename existing capture files so that they have the correct name */
-                       return rename_write_sources ();
-               } else {
-                       return -1;
-               }
-       }
-
-       return 0;
-}
-
-void
-DiskStream::set_speed (double sp)
-{
-       _session.request_diskstream_speed (*this, sp);
-
-       /* to force a rebuffering at the right place */
-       playlist_modified();
-}
-
-bool
-DiskStream::realtime_set_speed (double sp, bool global)
-{
-       bool changed = false;
-       double new_speed = sp * _session.transport_speed();
-       
-       if (_visible_speed != sp) {
-               _visible_speed = sp;
-               changed = true;
-       }
-       
-       if (new_speed != _actual_speed) {
-               
-               jack_nframes_t required_wrap_size = (jack_nframes_t) floor (_session.get_block_size() * 
-                                                                           fabs (new_speed)) + 1;
-               
-               if (required_wrap_size > wrap_buffer_size) {
-                       _buffer_reallocation_required = true;
-               }
-               
-               _actual_speed = new_speed;
-               phi = (uint64_t) (0x1000000 * fabs(_actual_speed));
-       }
-
-       if (changed) {
-               if (!global) {
-                       _seek_required = true;
-               }
-                speed_changed (); /* EMIT SIGNAL */
-       }
-
-       return _buffer_reallocation_required || _seek_required;
-}
-
-void
-DiskStream::non_realtime_set_speed ()
-{
-       if (_buffer_reallocation_required)
-       {
-               Glib::Mutex::Lock lm (state_lock);
-               allocate_temporary_buffers ();
-
-               _buffer_reallocation_required = false;
-       }
-
-       if (_seek_required) {
-               if (speed() != 1.0f || speed() != -1.0f) {
-                       seek ((jack_nframes_t) (_session.transport_frame() * (double) speed()), true);
-               }
-               else {
-                       seek (_session.transport_frame(), true);
-               }
-
-               _seek_required = false;
-       }
-}
-
-void
-DiskStream::prepare ()
-{
-       _processed = false;
-       playback_distance = 0;
-}
-
-void
-DiskStream::check_record_status (jack_nframes_t transport_frame, jack_nframes_t nframes, bool can_record)
-{
-       int possibly_recording;
-       int rolling;
-       int change;
-       const int transport_rolling = 0x4;
-       const int track_rec_enabled = 0x2;
-       const int global_rec_enabled = 0x1;
-
-       /* merge together the 3 factors that affect record status, and compute
-          what has changed.
-       */
-
-       rolling = _session.transport_speed() != 0.0f;
-       possibly_recording = (rolling << 2) | (record_enabled() << 1) | can_record;
-       change = possibly_recording ^ last_possibly_recording;
-
-       if (possibly_recording == last_possibly_recording) {
-               return;
-       }
-
-       /* change state */
-
-       /* if per-track or global rec-enable turned on while the other was already on, we've started recording */
-
-       if ((change & track_rec_enabled) && record_enabled() && (!(change & global_rec_enabled) && can_record) || 
-           ((change & global_rec_enabled) && can_record && (!(change & track_rec_enabled) && record_enabled()))) {
-               
-               /* starting to record: compute first+last frames */
-
-               first_recordable_frame = transport_frame + _capture_offset;
-               last_recordable_frame = max_frames;
-               capture_start_frame = transport_frame;
-
-               if (!(last_possibly_recording & transport_rolling) && (possibly_recording & transport_rolling)) {
-
-                       /* was stopped, now rolling (and recording) */
-
-                       if (_alignment_style == ExistingMaterial) {
-                               first_recordable_frame += _session.worst_output_latency();
-                       } else {
-                               first_recordable_frame += _roll_delay;
-                       }
-
-               } else {
-
-                       /* was rolling, but record state changed */
-
-                       if (_alignment_style == ExistingMaterial) {
-
-
-                               if (!_session.get_punch_in()) {
-
-                                       /* manual punch in happens at the correct transport frame
-                                          because the user hit a button. but to get alignment correct 
-                                          we have to back up the position of the new region to the 
-                                          appropriate spot given the roll delay.
-                                       */
-
-                                       capture_start_frame -= _roll_delay;
-
-                                       /* XXX paul notes (august 2005): i don't know why
-                                          this is needed.
-                                       */
-
-                                       first_recordable_frame += _capture_offset;
-
-                               } else {
-
-                                       /* autopunch toggles recording at the precise
-                                          transport frame, and then the DS waits
-                                          to start recording for a time that depends
-                                          on the output latency.
-                                       */
-
-                                       first_recordable_frame += _session.worst_output_latency();
-                               }
-
-                       } else {
-
-                               if (_session.get_punch_in()) {
-                                       first_recordable_frame += _roll_delay;
-                               } else {
-                                       capture_start_frame -= _roll_delay;
-                               }
-                       }
-                       
-               }
-
-               if (_flags & Recordable) {
-                       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-                               
-                               RingBufferNPT<CaptureTransition>::rw_vector transvec;
-                               (*chan).capture_transition_buf->get_write_vector(&transvec);
-                               
-                               if (transvec.len[0] > 0) {
-                                       transvec.buf[0]->type = CaptureStart;
-                                       transvec.buf[0]->capture_val = capture_start_frame;
-                                       (*chan).capture_transition_buf->increment_write_ptr(1);
-                               }
-                               else {
-                                       // bad!
-                                       fatal << X_("programming error: capture_transition_buf is full on rec start!  inconceivable!") 
-                                             << endmsg;
-                               }
-                       }
-               }
-
-       } else if (!record_enabled() || !can_record) {
-               
-               /* stop recording */
-
-               last_recordable_frame = transport_frame + _capture_offset;
-               
-               if (_alignment_style == ExistingMaterial) {
-                       last_recordable_frame += _session.worst_output_latency();
-               } else {
-                       last_recordable_frame += _roll_delay;
-               }
-       }
-
-       last_possibly_recording = possibly_recording;
-}
-
-int
-DiskStream::process (jack_nframes_t transport_frame, jack_nframes_t nframes, jack_nframes_t offset, bool can_record, bool rec_monitors_input)
-{
-       uint32_t n;
-       ChannelList::iterator c;
-       int ret = -1;
-       jack_nframes_t rec_offset = 0;
-       jack_nframes_t rec_nframes = 0;
-       bool nominally_recording;
-       bool re = record_enabled ();
-       bool collect_playback = false;
-
-       /* if we've already processed the frames corresponding to this call,
-          just return. this allows multiple routes that are taking input
-          from this diskstream to call our ::process() method, but have
-          this stuff only happen once. more commonly, it allows both
-          the AudioTrack that is using this DiskStream *and* the Session
-          to call process() without problems.
-       */
-
-       if (_processed) {
-               return 0;
-       }
-
-       check_record_status (transport_frame, nframes, can_record);
-
-       nominally_recording = (can_record && re);
-
-       if (nframes == 0) {
-               _processed = true;
-               return 0;
-       }
-
-       /* This lock is held until the end of DiskStream::commit, so these two functions
-          must always be called as a pair. The only exception is if this function
-          returns a non-zero value, in which case, ::commit should not be called.
-       */
-
-        // If we can't take the state lock return.
-       if (!state_lock.trylock()) {
-               return 1;
-       }
-
-       adjust_capture_position = 0;
-
-       for (c = channels.begin(); c != channels.end(); ++c) {
-               (*c).current_capture_buffer = 0;
-               (*c).current_playback_buffer  = 0;
-       }
-
-       if (nominally_recording || (_session.get_record_enabled() && _session.get_punch_in())) {
-               OverlapType ot;
-               
-               ot = coverage (first_recordable_frame, last_recordable_frame, transport_frame, transport_frame + nframes);
-
-               switch (ot) {
-               case OverlapNone:
-                       rec_nframes = 0;
-                       break;
-                       
-               case OverlapInternal:
-               /*     ----------    recrange
-                         |---|       transrange
-               */
-                       rec_nframes = nframes;
-                       rec_offset = 0;
-                       break;
-                       
-               case OverlapStart:
-                       /*    |--------|    recrange
-                            -----|          transrange
-                       */
-                       rec_nframes = transport_frame + nframes - first_recordable_frame;
-                       if (rec_nframes) {
-                               rec_offset = first_recordable_frame - transport_frame;
-                       }
-                       break;
-                       
-               case OverlapEnd:
-                       /*    |--------|    recrange
-                                 |--------  transrange
-                       */
-                       rec_nframes = last_recordable_frame - transport_frame;
-                       rec_offset = 0;
-                       break;
-                       
-               case OverlapExternal:
-                       /*    |--------|    recrange
-                            --------------  transrange
-                       */
-                       rec_nframes = last_recordable_frame - last_recordable_frame;
-                       rec_offset = first_recordable_frame - transport_frame;
-                       break;
-               }
-
-               if (rec_nframes && !was_recording) {
-                       capture_captured = 0;
-                       was_recording = true;
-               }
-       }
-
-
-       if (can_record && !_last_capture_regions.empty()) {
-               _last_capture_regions.clear ();
-       }
-
-       if (nominally_recording || rec_nframes) {
-
-               for (n = 0, c = channels.begin(); c != channels.end(); ++c, ++n) {
-                       
-                       ChannelInfo& chan (*c);
-               
-                       chan.capture_buf->get_write_vector (&chan.capture_vector);
-
-                       if (rec_nframes <= chan.capture_vector.len[0]) {
-                               
-                               chan.current_capture_buffer = chan.capture_vector.buf[0];
-
-                               /* note: grab the entire port buffer, but only copy what we were supposed to for recording, and use
-                                  rec_offset
-                               */
-
-                               memcpy (chan.current_capture_buffer, _io->input(n)->get_buffer (rec_nframes) + offset + rec_offset, sizeof (Sample) * rec_nframes);
-
-                       } else {
-
-                               jack_nframes_t total = chan.capture_vector.len[0] + chan.capture_vector.len[1];
-
-                               if (rec_nframes > total) {
-                                       DiskOverrun ();
-                                       goto out;
-                               }
-
-                               Sample* buf = _io->input (n)->get_buffer (nframes) + offset;
-                               jack_nframes_t first = chan.capture_vector.len[0];
-
-                               memcpy (chan.capture_wrap_buffer, buf, sizeof (Sample) * first);
-                               memcpy (chan.capture_vector.buf[0], buf, sizeof (Sample) * first);
-                               memcpy (chan.capture_wrap_buffer+first, buf + first, sizeof (Sample) * (rec_nframes - first));
-                               memcpy (chan.capture_vector.buf[1], buf + first, sizeof (Sample) * (rec_nframes - first));
-                               
-                               chan.current_capture_buffer = chan.capture_wrap_buffer;
-                       }
-               }
-
-       } else {
-
-               if (was_recording) {
-                       finish_capture (rec_monitors_input);
-               }
-
-       }
-       
-       if (rec_nframes) {
-               
-               /* data will be written to disk */
-
-               if (rec_nframes == nframes && rec_offset == 0) {
-
-                       for (c = channels.begin(); c != channels.end(); ++c) {
-                               (*c).current_playback_buffer = (*c).current_capture_buffer;
-                       }
-
-                       playback_distance = nframes;
-
-               } else {
-
-
-                       /* we can't use the capture buffer as the playback buffer, because
-                          we recorded only a part of the current process' cycle data
-                          for capture.
-                       */
-
-                       collect_playback = true;
-               }
-
-               adjust_capture_position = rec_nframes;
-
-       } else if (nominally_recording) {
-
-               /* can't do actual capture yet - waiting for latency effects to finish before we start*/
-
-               for (c = channels.begin(); c != channels.end(); ++c) {
-                       (*c).current_playback_buffer = (*c).current_capture_buffer;
-               }
-
-               playback_distance = nframes;
-
-       } else {
-
-               collect_playback = true;
-       }
-
-       if (collect_playback) {
-
-               /* we're doing playback */
-
-               jack_nframes_t necessary_samples;
-
-               /* no varispeed playback if we're recording, because the output .... TBD */
-
-               if (rec_nframes == 0 && _actual_speed != 1.0f) {
-                       necessary_samples = (jack_nframes_t) floor ((nframes * fabs (_actual_speed))) + 1;
-               } else {
-                       necessary_samples = nframes;
-               }
-               
-               for (c = channels.begin(); c != channels.end(); ++c) {
-                       (*c).playback_buf->get_read_vector (&(*c).playback_vector);
-               }
-
-               n = 0;                  
-
-               for (c = channels.begin(); c != channels.end(); ++c, ++n) {
-               
-                       ChannelInfo& chan (*c);
-
-                       if (necessary_samples <= chan.playback_vector.len[0]) {
-
-                               chan.current_playback_buffer = chan.playback_vector.buf[0];
-
-                       } else {
-                               jack_nframes_t total = chan.playback_vector.len[0] + chan.playback_vector.len[1];
-                               
-                               if (necessary_samples > total) {
-                                       DiskUnderrun ();
-                                       goto out;
-                                       
-                               } else {
-                                       
-                                       memcpy ((char *) chan.playback_wrap_buffer, chan.playback_vector.buf[0],
-                                               chan.playback_vector.len[0] * sizeof (Sample));
-                                       memcpy (chan.playback_wrap_buffer + chan.playback_vector.len[0], chan.playback_vector.buf[1], 
-                                               (necessary_samples - chan.playback_vector.len[0]) * sizeof (Sample));
-                                       
-                                       chan.current_playback_buffer = chan.playback_wrap_buffer;
-                               }
-                       }
-               } 
-
-               if (rec_nframes == 0 && _actual_speed != 1.0f && _actual_speed != -1.0f) {
-                       
-                       uint64_t phase = last_phase;
-                       jack_nframes_t i = 0;
-
-                       // Linearly interpolate into the alt buffer
-                       // using 40.24 fixp maths (swh)
-
-                       for (c = channels.begin(); c != channels.end(); ++c) {
-
-                               float fr;
-                               ChannelInfo& chan (*c);
-
-                               i = 0;
-                               phase = last_phase;
-
-                               for (jack_nframes_t outsample = 0; outsample < nframes; ++outsample) {
-                                       i = phase >> 24;
-                                       fr = (phase & 0xFFFFFF) / 16777216.0f;
-                                       chan.speed_buffer[outsample] = 
-                                               chan.current_playback_buffer[i] * (1.0f - fr) +
-                                               chan.current_playback_buffer[i+1] * fr;
-                                       phase += phi;
-                               }
-                               
-                               chan.current_playback_buffer = chan.speed_buffer;
-                       }
-
-                       playback_distance = i + 1;
-                       last_phase = (phase & 0xFFFFFF);
-
-               } else {
-                       playback_distance = nframes;
-               }
-
-       }
-
-       ret = 0;
-
-  out:
-       _processed = true;
-
-       if (ret) {
-
-               /* we're exiting with failure, so ::commit will not
-                  be called. unlock the state lock.
-               */
-               
-               state_lock.unlock();
-       } 
-
-       return ret;
-}
-
-void
-DiskStream::recover ()
-{
-       state_lock.unlock();
-       _processed = false;
-}
-
-bool
-DiskStream::commit (jack_nframes_t nframes)
-{
-       bool need_butler = false;
-
-       if (_actual_speed < 0.0) {
-               playback_sample -= playback_distance;
-       } else {
-               playback_sample += playback_distance;
-       }
-
-       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-
-               (*chan).playback_buf->increment_read_ptr (playback_distance);
-               
-               if (adjust_capture_position) {
-                       (*chan).capture_buf->increment_write_ptr (adjust_capture_position);
-               }
-       }
-       
-       if (adjust_capture_position != 0) {
-               capture_captured += adjust_capture_position;
-               adjust_capture_position = 0;
-       }
-       
-       if (_slaved) {
-               need_butler = channels[0].playback_buf->write_space() >= channels[0].playback_buf->bufsize() / 2;
-       } else {
-               need_butler = channels[0].playback_buf->write_space() >= disk_io_chunk_frames
-                       || channels[0].capture_buf->read_space() >= disk_io_chunk_frames;
-       }
-
-       state_lock.unlock();
-
-       _processed = false;
-
-       return need_butler;
-}
-
-void
-DiskStream::set_pending_overwrite (bool yn)
-{
-       /* called from audio thread, so we can use the read ptr and playback sample as we wish */
-       
-       pending_overwrite = yn;
-
-       overwrite_frame = playback_sample;
-       overwrite_offset = channels.front().playback_buf->get_read_ptr();
-}
-
-int
-DiskStream::overwrite_existing_buffers ()
-{
-       Sample* mixdown_buffer;
-       float* gain_buffer;
-       char * workbuf;
-       int ret = -1;
-       bool reversed = (_visible_speed * _session.transport_speed()) < 0.0f;
-
-       overwrite_queued = false;
-
-       /* assume all are the same size */
-       jack_nframes_t size = channels[0].playback_buf->bufsize();
-       
-       mixdown_buffer = new Sample[size];
-       gain_buffer = new float[size];
-       workbuf = new char[size*4];
-       
-       /* reduce size so that we can fill the buffer correctly. */
-       size--;
-       
-       uint32_t n=0;
-       jack_nframes_t start;
-
-       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan, ++n) {
-
-               start = overwrite_frame;
-               jack_nframes_t cnt = size;
-               
-               /* to fill the buffer without resetting the playback sample, we need to
-                  do it one or two chunks (normally two).
-
-                  |----------------------------------------------------------------------|
-
-                                      ^
-                                      overwrite_offset
-                   |<- second chunk->||<----------------- first chunk ------------------>|
-                  
-               */
-               
-               jack_nframes_t to_read = size - overwrite_offset;
-
-               if (read ((*chan).playback_buf->buffer() + overwrite_offset, mixdown_buffer, gain_buffer, workbuf,
-                         start, to_read, *chan, n, reversed)) {
-                       error << string_compose(_("DiskStream %1: when refilling, cannot read %2 from playlist at frame %3"),
-                                        _id, size, playback_sample) << endmsg;
-                       goto out;
-               }
-                       
-               if (cnt > to_read) {
-
-                       cnt -= to_read;
-               
-                       if (read ((*chan).playback_buf->buffer(), mixdown_buffer, gain_buffer, workbuf,
-                                 start, cnt, *chan, n, reversed)) {
-                               error << string_compose(_("DiskStream %1: when refilling, cannot read %2 from playlist at frame %3"),
-                                                _id, size, playback_sample) << endmsg;
-                               goto out;
-                       }
-               }
-       }
-
-       ret = 0;
-  out:
-       pending_overwrite = false;
-       delete [] gain_buffer;
-       delete [] mixdown_buffer;
-       delete [] workbuf;
-       return ret;
-}
-
-int
-DiskStream::seek (jack_nframes_t frame, bool complete_refill)
-{
-       Glib::Mutex::Lock lm (state_lock);
-       uint32_t n;
-       int ret;
-       ChannelList::iterator chan;
-
-       for (n = 0, chan = channels.begin(); chan != channels.end(); ++chan, ++n) {
-               (*chan).playback_buf->reset ();
-               (*chan).capture_buf->reset ();
-               if ((*chan).write_source) {
-                       (*chan).write_source->seek (frame);
-               }
-       }
-       
-       playback_sample = frame;
-       file_frame = frame;
-
-       if (complete_refill) {
-               while ((ret = do_refill (0, 0, 0)) > 0);
-       } else {
-               ret = do_refill (0, 0, 0);
-       }
-
-       return ret;
-}
-
-int
-DiskStream::can_internal_playback_seek (jack_nframes_t distance)
-{
-       ChannelList::iterator chan;
-
-       for (chan = channels.begin(); chan != channels.end(); ++chan) {
-               if ((*chan).playback_buf->read_space() < distance) {
-                       return false;
-               } 
-       }
-       return true;
-}
-
-int
-DiskStream::internal_playback_seek (jack_nframes_t distance)
-{
-       ChannelList::iterator chan;
-
-       for (chan = channels.begin(); chan != channels.end(); ++chan) {
-               (*chan).playback_buf->increment_read_ptr (distance);
-       }
-
-       first_recordable_frame += distance;
-       playback_sample += distance;
-       
-       return 0;
-}
-
-int
-DiskStream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, char * workbuf, jack_nframes_t& start, jack_nframes_t cnt, 
-                 ChannelInfo& channel_info, int channel, bool reversed)
-{
-       jack_nframes_t this_read = 0;
-       bool reloop = false;
-       jack_nframes_t loop_end = 0;
-       jack_nframes_t loop_start = 0;
-       jack_nframes_t loop_length = 0;
-       jack_nframes_t offset = 0;
-       Location *loc = 0;
-
-       if (!reversed) {
-               /* Make the use of a Location atomic for this read operation.
-                  
-                  Note: Locations don't get deleted, so all we care about
-                  when I say "atomic" is that we are always pointing to
-                  the same one and using a start/length values obtained
-                  just once.
-               */
-               
-               if ((loc = loop_location) != 0) {
-                       loop_start = loc->start();
-                       loop_end = loc->end();
-                       loop_length = loop_end - loop_start;
-               }
-               
-               /* if we are looping, ensure that the first frame we read is at the correct
-                  position within the loop.
-               */
-               
-               if (loc && start >= loop_end) {
-                       //cerr << "start adjusted from " << start;
-                       start = loop_start + ((start - loop_start) % loop_length);
-                       //cerr << "to " << start << endl;
-               }
-               //cerr << "start is " << start << "  loopstart: " << loop_start << "  loopend: " << loop_end << endl;
-       }
-
-       while (cnt) {
-
-               /* take any loop into account. we can't read past the end of the loop. */
-
-               if (loc && (loop_end - start < cnt)) {
-                       this_read = loop_end - start;
-                       //cerr << "reloop true: thisread: " << this_read << "  cnt: " << cnt << endl;
-                       reloop = true;
-               } else {
-                       reloop = false;
-                       this_read = cnt;
-               }
-
-               if (this_read == 0) {
-                       break;
-               }
-
-               this_read = min(cnt,this_read);
-
-               if (_playlist->read (buf+offset, mixdown_buffer, gain_buffer, workbuf, start, this_read, channel) != this_read) {
-                       error << string_compose(_("DiskStream %1: cannot read %2 from playlist at frame %3"), _id, this_read, 
-                                        start) << endmsg;
-                       return -1;
-               }
-
-               _read_data_count = _playlist->read_data_count();
-               
-               if (reversed) {
-
-                       /* don't adjust start, since caller has already done that
-                        */
-
-                       swap_by_ptr (buf, buf + this_read - 1);
-                       
-               } else {
-                       
-                       /* if we read to the end of the loop, go back to the beginning */
-                       
-                       if (reloop) {
-                               start = loop_start;
-                       } else {
-                               start += this_read;
-                       }
-               } 
-
-               cnt -= this_read;
-               offset += this_read;
-       }
-
-       return 0;
-}
-
-int
-DiskStream::do_refill (Sample* mixdown_buffer, float* gain_buffer, char * workbuf)
-{
-       int32_t ret = 0;
-       jack_nframes_t to_read;
-       RingBufferNPT<Sample>::rw_vector vector;
-       bool free_mixdown;
-       bool free_gain;
-       bool free_workbuf;
-       bool reversed = (_visible_speed * _session.transport_speed()) < 0.0f;
-       jack_nframes_t total_space;
-       jack_nframes_t zero_fill;
-       uint32_t chan_n;
-       ChannelList::iterator i;
-       jack_nframes_t ts;
-
-       channels.front().playback_buf->get_write_vector (&vector);
-       
-       if ((total_space = vector.len[0] + vector.len[1]) == 0) {
-               return 0;
-       }
-       
-       /* if there are 2+ chunks of disk i/o possible for
-          this track, let the caller know so that it can arrange
-          for us to be called again, ASAP.
-       */
-       
-       if (total_space >= (_slaved?3:2) * disk_io_chunk_frames) {
-               ret = 1;
-       }
-       
-       /* if we're running close to normal speed and there isn't enough 
-          space to do disk_io_chunk_frames of I/O, then don't bother.  
-          
-          at higher speeds, just do it because the sync between butler
-          and audio thread may not be good enough.
-       */
-       
-       if ((total_space < disk_io_chunk_frames) && fabs (_actual_speed) < 2.0f) {
-               return 0;
-       }
-       
-       /* when slaved, don't try to get too close to the read pointer. this
-          leaves space for the buffer reversal to have something useful to
-          work with.
-       */
-       
-       if (_slaved && total_space < (channels.front().playback_buf->bufsize() / 2)) {
-               return 0;
-       }
-
-       total_space = min (disk_io_chunk_frames, total_space);
-
-       if (reversed) {
-
-               if (file_frame == 0) {
-
-                       /* at start: nothing to do but fill with silence */
-
-                       for (chan_n = 0, i = channels.begin(); i != channels.end(); ++i, ++chan_n) {
-                                       
-                               ChannelInfo& chan (*i);
-                               chan.playback_buf->get_write_vector (&vector);
-                               memset (vector.buf[0], 0, sizeof(Sample) * vector.len[0]);
-                               if (vector.len[1]) {
-                                       memset (vector.buf[1], 0, sizeof(Sample) * vector.len[1]);
-                               }
-                               chan.playback_buf->increment_write_ptr (vector.len[0] + vector.len[1]);
-                       }
-                       return 0;
-               }
-
-               if (file_frame < total_space) {
-
-                       /* too close to the start: read what we can, 
-                          and then zero fill the rest 
-                       */
-
-                       zero_fill = total_space - file_frame;
-                       total_space = file_frame;
-                       file_frame = 0;
-
-               } else {
-                       
-                       /* move read position backwards because we are going
-                          to reverse the data.
-                       */
-                       
-                       file_frame -= total_space;
-                       zero_fill = 0;
-               }
-
-       } else {
-
-               if (file_frame == max_frames) {
-
-                       /* at end: nothing to do but fill with silence */
-                       
-                       for (chan_n = 0, i = channels.begin(); i != channels.end(); ++i, ++chan_n) {
-                                       
-                               ChannelInfo& chan (*i);
-                               chan.playback_buf->get_write_vector (&vector);
-                               memset (vector.buf[0], 0, sizeof(Sample) * vector.len[0]);
-                               if (vector.len[1]) {
-                                       memset (vector.buf[1], 0, sizeof(Sample) * vector.len[1]);
-                               }
-                               chan.playback_buf->increment_write_ptr (vector.len[0] + vector.len[1]);
-                       }
-                       return 0;
-               }
-               
-               if (file_frame > max_frames - total_space) {
-
-                       /* to close to the end: read what we can, and zero fill the rest */
-
-                       zero_fill = total_space - (max_frames - file_frame);
-                       total_space = max_frames - file_frame;
-
-               } else {
-                       zero_fill = 0;
-               }
-       }
-
-       /* Please note: the code to allocate buffers isn't run
-          during normal butler thread operation. Its there
-          for other times when we need to call do_refill()
-          from somewhere other than the butler thread.
-       */
-
-       if (mixdown_buffer == 0) {
-               mixdown_buffer = new Sample[disk_io_chunk_frames];
-               free_mixdown = true;
-       } else {
-               free_mixdown = false;
-       }
-
-       if (gain_buffer == 0) {
-               gain_buffer = new float[disk_io_chunk_frames];
-               free_gain = true;
-       } else {
-               free_gain = false;
-       }
-
-       if (workbuf == 0) {
-               workbuf = new char[disk_io_chunk_frames * 4];
-               free_workbuf = true;
-       } else {
-               free_workbuf = false;
-       }
-       
-       jack_nframes_t file_frame_tmp = 0;
-
-       for (chan_n = 0, i = channels.begin(); i != channels.end(); ++i, ++chan_n) {
-
-               ChannelInfo& chan (*i);
-               Sample* buf1;
-               Sample* buf2;
-               jack_nframes_t len1, len2;
-
-               chan.playback_buf->get_write_vector (&vector);
-
-               ts = total_space;
-               file_frame_tmp = file_frame;
-
-               if (reversed) {
-                       buf1 = vector.buf[1];
-                       len1 = vector.len[1];
-                       buf2 = vector.buf[0];
-                       len2 = vector.len[0];
-               } else {
-                       buf1 = vector.buf[0];
-                       len1 = vector.len[0];
-                       buf2 = vector.buf[1];
-                       len2 = vector.len[1];
-               }
-
-
-               to_read = min (ts, len1);
-               to_read = min (to_read, disk_io_chunk_frames);
-
-               if (to_read) {
-
-                       if (read (buf1, mixdown_buffer, gain_buffer, workbuf, file_frame_tmp, to_read, chan, chan_n, reversed)) {
-                               ret = -1;
-                               goto out;
-                       }
-                       
-                       chan.playback_buf->increment_write_ptr (to_read);
-                       ts -= to_read;
-               }
-
-               to_read = min (ts, len2);
-
-               if (to_read) {
-
-                       
-                       /* we read all of vector.len[0], but it wasn't an entire disk_io_chunk_frames of data,
-                          so read some or all of vector.len[1] as well.
-                       */
-
-                       if (read (buf2, mixdown_buffer, gain_buffer, workbuf, file_frame_tmp, to_read, chan, chan_n, reversed)) {
-                               ret = -1;
-                               goto out;
-                       }
-               
-                       chan.playback_buf->increment_write_ptr (to_read);
-               }
-
-               if (zero_fill) {
-                       /* do something */
-               }
-
-       }
-       
-       file_frame = file_frame_tmp;
-
-  out:
-       if (free_mixdown) {
-               delete [] mixdown_buffer;
-       }
-       if (free_gain) {
-               delete [] gain_buffer;
-       }
-       if (free_workbuf) {
-               delete [] workbuf;
-       }
-
-       return ret;
-}      
-
-int
-DiskStream::do_flush (char * workbuf, bool force_flush)
-{
-       uint32_t to_write;
-       int32_t ret = 0;
-       RingBufferNPT<Sample>::rw_vector vector;
-       RingBufferNPT<CaptureTransition>::rw_vector transvec;
-       jack_nframes_t total;
-       
-       /* important note: this function will write *AT MOST* 
-          disk_io_chunk_frames of data to disk. it will never 
-          write more than that. if its writes that much and there 
-          is more than that waiting to be written, it will return 1,
-          otherwise 0 on success or -1 on failure.
-
-          if there is less than disk_io_chunk_frames to be written, 
-          no data will be written at all unless `force_flush' is true.  
-       */
-
-       _write_data_count = 0;
-
-       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-       
-               (*chan).capture_buf->get_read_vector (&vector);
-
-               total = vector.len[0] + vector.len[1];
-
-               
-               if (total == 0 || (total < disk_io_chunk_frames && !force_flush && was_recording)) {
-                       goto out;
-               }
-
-               
-               /* if there are 2+ chunks of disk i/o possible for
-                  this track, let the caller know so that it can arrange
-                  for us to be called again, ASAP.
-                  
-                  if we are forcing a flush, then if there is* any* extra
-                  work, let the caller know.
-
-                  if we are no longer recording and there is any extra work,
-                  let the caller know too.
-               */
-
-               if (total >= 2 * disk_io_chunk_frames || ((force_flush || !was_recording) && total > disk_io_chunk_frames)) {
-                       ret = 1;
-               } 
-
-               to_write = min (disk_io_chunk_frames, (jack_nframes_t) vector.len[0]);
-               
-               
-               // check the transition buffer when recording destructive
-               // important that we get this after the capture buf
-
-               if (destructive()) {
-                       (*chan).capture_transition_buf->get_read_vector(&transvec);
-                       size_t transcount = transvec.len[0] + transvec.len[1];
-                       bool have_start = false;
-                       size_t ti;
-
-                       for (ti=0; ti < transcount; ++ti) {
-                               CaptureTransition & captrans = (ti < transvec.len[0]) ? transvec.buf[0][ti] : transvec.buf[1][ti-transvec.len[0]];
-                               
-                               if (captrans.type == CaptureStart) {
-                                       // by definition, the first data we got above represents the given capture pos
-
-                                       (*chan).write_source->mark_capture_start (captrans.capture_val);
-                                       (*chan).curr_capture_cnt = 0;
-
-                                       have_start = true;
-                               }
-                               else if (captrans.type == CaptureEnd) {
-
-                                       // capture end, the capture_val represents total frames in capture
-
-                                       if (captrans.capture_val <= (*chan).curr_capture_cnt + to_write) {
-
-                                               // shorten to make the write a perfect fit
-                                               uint32_t nto_write = (captrans.capture_val - (*chan).curr_capture_cnt); 
-
-                                               if (nto_write < to_write) {
-                                                       ret = 1; // should we?
-                                               }
-                                               to_write = nto_write;
-
-                                               (*chan).write_source->mark_capture_end ();
-                                               
-                                               // increment past this transition, but go no further
-                                               ++ti;
-                                               break;
-                                       }
-                                       else {
-                                               // actually ends just beyond this chunk, so force more work
-                                               ret = 1;
-                                               break;
-                                       }
-                               }
-                       }
-
-                       if (ti > 0) {
-                               (*chan).capture_transition_buf->increment_read_ptr(ti);
-                       }
-               }
-
-               if ((!(*chan).write_source) || (*chan).write_source->write (vector.buf[0], to_write, workbuf) != to_write) {
-                       error << string_compose(_("DiskStream %1: cannot write to disk"), _id) << endmsg;
-                       return -1;
-               }
-
-               (*chan).capture_buf->increment_read_ptr (to_write);
-               (*chan).curr_capture_cnt += to_write;
-               
-               if ((to_write == vector.len[0]) && (total > to_write) && (to_write < disk_io_chunk_frames) && !destructive()) {
-               
-                       /* we wrote all of vector.len[0] but it wasn't an entire
-                          disk_io_chunk_frames of data, so arrange for some part 
-                          of vector.len[1] to be flushed to disk as well.
-                       */
-               
-                       to_write = min ((jack_nframes_t)(disk_io_chunk_frames - to_write), (jack_nframes_t) vector.len[1]);
-               
-                       if ((*chan).write_source->write (vector.buf[1], to_write, workbuf) != to_write) {
-                               error << string_compose(_("DiskStream %1: cannot write to disk"), _id) << endmsg;
-                               return -1;
-                       }
-
-                       _write_data_count += (*chan).write_source->write_data_count();
-       
-                       (*chan).capture_buf->increment_read_ptr (to_write);
-                       (*chan).curr_capture_cnt += to_write;
-               }
-       }
-
-  out:
-       return ret;
-}
-
-void
-DiskStream::playlist_changed (Change ignored)
-{
-       playlist_modified ();
-}
-
-void
-DiskStream::playlist_modified ()
-{
-       if (!i_am_the_modifier && !overwrite_queued) {
-               _session.request_overwrite_buffer (this);
-               overwrite_queued = true;
-       } 
-}
-
-void
-DiskStream::transport_stopped (struct tm& when, time_t twhen, bool abort_capture)
-{
-       uint32_t buffer_position;
-       bool more_work = true;
-       int err = 0;
-       AudioRegion* region = 0;
-       jack_nframes_t total_capture;
-       AudioRegion::SourceList srcs;
-       AudioRegion::SourceList::iterator src;
-       ChannelList::iterator chan;
-       vector<CaptureInfo*>::iterator ci;
-       uint32_t n = 0; 
-       list<Source*>* deletion_list;
-       bool mark_write_completed = false;
-
-       finish_capture (true);
-
-       /* butler is already stopped, but there may be work to do 
-          to flush remaining data to disk.
-       */
-
-       while (more_work && !err) {
-               switch (do_flush ( _session.conversion_buffer(Session::TransportContext), true)) {
-               case 0:
-                       more_work = false;
-                       break;
-               case 1:
-                       break;
-               case -1:
-                       error << string_compose(_("DiskStream \"%1\": cannot flush captured data to disk!"), _name) << endmsg;
-                       err++;
-               }
-       }
-
-       /* XXX is there anything we can do if err != 0 ? */
-       Glib::Mutex::Lock lm (capture_info_lock);
-       
-       if (capture_info.empty()) {
-               return;
-       }
-
-       if (abort_capture) {
-               
-               ChannelList::iterator chan;
-               
-               deletion_list = new list<Source*>;
-
-               for ( chan = channels.begin(); chan != channels.end(); ++chan) {
-
-                       if ((*chan).write_source) {
-                               
-                               (*chan).write_source->mark_for_remove ();
-                               (*chan).write_source->release ();
-                               
-                               deletion_list->push_back ((*chan).write_source);
-
-                               (*chan).write_source = 0;
-                       }
-                       
-                       /* new source set up in "out" below */
-               }
-               
-               if (!deletion_list->empty()) {
-                       DeleteSources (deletion_list);
-               } else {
-                       delete deletion_list;
-               }
-
-               goto out;
-       } 
-
-       for (total_capture = 0, ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
-               total_capture += (*ci)->frames;
-       }
-
-       /* figure out the name for this take */
-
-       for (n = 0, chan = channels.begin(); chan != channels.end(); ++chan, ++n) {
-
-               Source* s = (*chan).write_source;
-               
-               if (s) {
-
-                       FileSource* fsrc;
-
-                       srcs.push_back (s);
-
-                       if ((fsrc = dynamic_cast<FileSource *>(s)) != 0) {
-                               fsrc->update_header (capture_info.front()->start, when, twhen);
-                       }
-
-                       s->set_captured_for (_name);
-                       
-               }
-       }
-
-       /* destructive tracks have a single, never changing region */
-
-       if (destructive()) {
-
-               /* send a signal that any UI can pick up to do the right thing. there is 
-                  a small problem here in that a UI may need the peak data to be ready
-                  for the data that was recorded and this isn't interlocked with that
-                  process. this problem is deferred to the UI.
-                */
-               
-               _playlist->Modified();
-
-       } else {
-
-               /* Register a new region with the Session that
-                  describes the entire source. Do this first
-                  so that any sub-regions will obviously be
-                  children of this one (later!)
-               */
-               
-               try {
-                       region = new AudioRegion (srcs, channels[0].write_source->last_capture_start_frame(), total_capture, 
-                                                 region_name_from_path (channels[0].write_source->name()), 
-                                                 0, AudioRegion::Flag (AudioRegion::DefaultFlags|AudioRegion::Automatic|AudioRegion::WholeFile));
-                       
-                       region->special_set_position (capture_info.front()->start);
-               }
-               
-               
-               catch (failed_constructor& err) {
-                       error << string_compose(_("%1: could not create region for complete audio file"), _name) << endmsg;
-                       /* XXX what now? */
-               }
-               
-               _last_capture_regions.push_back (region);
-
-               // cerr << _name << ": there are " << capture_info.size() << " capture_info records\n";
-               
-               _session.add_undo (_playlist->get_memento());
-               _playlist->freeze ();
-               
-               for (buffer_position = channels[0].write_source->last_capture_start_frame(), ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
-                       
-                       string region_name;
-                       _session.region_name (region_name, channels[0].write_source->name(), false);
-                       
-                       // cerr << _name << ": based on ci of " << (*ci)->start << " for " << (*ci)->frames << " add a region\n";
-                       
-                       try {
-                               region = new AudioRegion (srcs, buffer_position, (*ci)->frames, region_name);
-                       }
-                       
-                       catch (failed_constructor& err) {
-                               error << _("DiskStream: could not create region for captured audio!") << endmsg;
-                               continue; /* XXX is this OK? */
-                       }
-                       
-                       _last_capture_regions.push_back (region);
-                       
-                       // cerr << "add new region, buffer position = " << buffer_position << " @ " << (*ci)->start << endl;
-                       
-                       i_am_the_modifier++;
-                       _playlist->add_region (*region, (*ci)->start);
-                       i_am_the_modifier--;
-                       
-                       buffer_position += (*ci)->frames;
-               }
-
-               _playlist->thaw ();
-               _session.add_redo_no_execute (_playlist->get_memento());
-       }
-
-       mark_write_completed = true;
-
-       reset_write_sources (mark_write_completed);
-
-  out:
-       for (ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
-               delete *ci;
-       }
-
-       capture_info.clear ();
-       capture_start_frame = 0;
-}
-
-void
-DiskStream::finish_capture (bool rec_monitors_input)
-{
-       was_recording = false;
-       
-       if (capture_captured == 0) {
-               return;
-       }
-
-       if (recordable() && destructive()) {
-               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-                       
-                       RingBufferNPT<CaptureTransition>::rw_vector transvec;
-                       (*chan).capture_transition_buf->get_write_vector(&transvec);
-                       
-                       
-                       if (transvec.len[0] > 0) {
-                               transvec.buf[0]->type = CaptureEnd;
-                               transvec.buf[0]->capture_val = capture_captured;
-                               (*chan).capture_transition_buf->increment_write_ptr(1);
-                       }
-                       else {
-                               // bad!
-                               fatal << string_compose (_("programmer error: %1"), X_("capture_transition_buf is full when stopping record!  inconceivable!")) << endmsg;
-                       }
-               }
-       }
-       
-       
-       CaptureInfo* ci = new CaptureInfo;
-       
-       ci->start =  capture_start_frame;
-       ci->frames = capture_captured;
-       
-       /* XXX theoretical race condition here. Need atomic exchange ? 
-          However, the circumstances when this is called right 
-          now (either on record-disable or transport_stopped)
-          mean that no actual race exists. I think ...
-          We now have a capture_info_lock, but it is only to be used
-          to synchronize in the transport_stop and the capture info
-          accessors, so that invalidation will not occur (both non-realtime).
-       */
-
-       // cerr << "Finish capture, add new CI, " << ci->start << '+' << ci->frames << endl;
-
-       capture_info.push_back (ci);
-       capture_captured = 0;
-}
-
-void
-DiskStream::set_record_enabled (bool yn, void* src)
-{
-        bool rolling = _session.transport_speed() != 0.0f;
-
-       if (!recordable() || !_session.record_enabling_legal()) {
-               return;
-       }
-       
-       /* if we're turning on rec-enable, there needs to be an
-          input connection.
-        */
-
-       if (yn && channels[0].source == 0) {
-
-               /* pick up connections not initiated *from* the IO object
-                  we're associated with.
-               */
-
-               get_input_sources ();
-       }
-
-       /* yes, i know that this not proof against race conditions, but its
-          good enough. i think.
-       */
-
-       if (record_enabled() != yn) {
-               if (yn) {
-                       g_atomic_int_set (&_record_enabled, 1);
-                       capturing_sources.clear ();
-                       if (Config->get_use_hardware_monitoring())  {
-                               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-                                       if ((*chan).source) {
-                                               (*chan).source->request_monitor_input (!(_session.get_auto_input() && rolling));
-                                       }
-                                       capturing_sources.push_back ((*chan).write_source);
-                               }
-                       } else {
-                               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-                                       capturing_sources.push_back ((*chan).write_source);
-                               }
-                       }
-
-               } else {
-                       g_atomic_int_set (&_record_enabled, 0);
-                       if (Config->get_use_hardware_monitoring()) {
-                               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-                                       if ((*chan).source) {
-                                               (*chan).source->request_monitor_input (false);
-                                       }
-                               }
-                       }
-                       capturing_sources.clear ();
-               }
-
-               record_enable_changed (src); /* EMIT SIGNAL */
-       }
-}
-
-XMLNode&
-DiskStream::get_state ()
-{
-       XMLNode* node = new XMLNode ("DiskStream");
-       char buf[64];
-       LocaleGuard lg (X_("POSIX"));
-
-       snprintf (buf, sizeof(buf), "0x%x", _flags);
-       node->add_property ("flags", buf);
-
-       snprintf (buf, sizeof(buf), "%zd", channels.size());
-       node->add_property ("channels", buf);
-
-       node->add_property ("playlist", _playlist->name());
-       
-       snprintf (buf, sizeof(buf), "%f", _visible_speed);
-       node->add_property ("speed", buf);
-
-       node->add_property("name", _name);
-       snprintf (buf, sizeof(buf), "%" PRIu64, id());
-       node->add_property("id", buf);
-
-       if (!capturing_sources.empty() && _session.get_record_enabled()) {
-
-               XMLNode* cs_child = new XMLNode (X_("CapturingSources"));
-               XMLNode* cs_grandchild;
-
-               for (vector<FileSource*>::iterator i = capturing_sources.begin(); i != capturing_sources.end(); ++i) {
-                       cs_grandchild = new XMLNode (X_("file"));
-                       cs_grandchild->add_property (X_("path"), (*i)->path());
-                       cs_child->add_child_nocopy (*cs_grandchild);
-               }
-
-               /* store the location where capture will start */
-
-               Location* pi;
-
-               if (_session.get_punch_in() && ((pi = _session.locations()->auto_punch_location()) != 0)) {
-                       snprintf (buf, sizeof (buf), "%" PRIu32, pi->start());
-               } else {
-                       snprintf (buf, sizeof (buf), "%" PRIu32, _session.transport_frame());
-               }
-
-               cs_child->add_property (X_("at"), buf);
-               node->add_child_nocopy (*cs_child);
-       }
-
-       if (_extra_xml) {
-               node->add_child_copy (*_extra_xml);
-       }
-
-       return* node;
-}
-
-int
-DiskStream::set_state (const XMLNode& node)
-{
-       const XMLProperty* prop;
-       XMLNodeList nlist = node.children();
-       XMLNodeIterator niter;
-       uint32_t nchans = 1;
-       XMLNode* capture_pending_node = 0;
-       LocaleGuard lg (X_("POSIX"));
-
-       in_set_state = true;
-
-       for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
-               if ((*niter)->name() == IO::state_node_name) {
-                       deprecated_io_node = new XMLNode (**niter);
-               }
-
-               if ((*niter)->name() == X_("CapturingSources")) {
-                       capture_pending_node = *niter;
-               }
-       }
-
-       /* prevent write sources from being created */
-       
-       in_set_state = true;
-       
-       if ((prop = node.property ("name")) != 0) {
-               _name = prop->value();
-       } 
-
-       if (deprecated_io_node) {
-               if ((prop = deprecated_io_node->property ("id")) != 0) {
-                       sscanf (prop->value().c_str(), "%" PRIu64, &_id);
-               }
-       } else {
-               if ((prop = node.property ("id")) != 0) {
-                       sscanf (prop->value().c_str(), "%" PRIu64, &_id);
-               }
-       }
-
-       if ((prop = node.property ("flags")) != 0) {
-               _flags = strtol (prop->value().c_str(), 0, 0);
-       }
-
-       if ((prop = node.property ("channels")) != 0) {
-               nchans = atoi (prop->value().c_str());
-       }
-       
-       // create necessary extra channels
-       // we are always constructed with one
-       // and we always need one
-
-       if (nchans > _n_channels) {
-
-               // we need to add new channel infos
-               //LockMonitor lm (state_lock, __LINE__, __FILE__);
-
-               int diff = nchans - channels.size();
-
-               for (int i=0; i < diff; ++i) {
-                       add_channel ();
-               }
-
-       } else if (nchans < _n_channels) {
-
-               // we need to get rid of channels
-               //LockMonitor lm (state_lock, __LINE__, __FILE__);
-
-               int diff = channels.size() - nchans;
-               
-               for (int i = 0; i < diff; ++i) {
-                       remove_channel ();
-               }
-       }
-
-       if ((prop = node.property ("playlist")) == 0) {
-               return -1;
-       }
-
-       {
-               bool had_playlist = (_playlist != 0);
-       
-               if (find_and_use_playlist (prop->value())) {
-                       return -1;
-               }
-
-               if (!had_playlist) {
-                       _playlist->set_orig_diskstream_id (_id);
-               }
-               
-               if (!destructive() && capture_pending_node) {
-                       /* destructive streams have one and only one source per channel,
-                          and so they never end up in pending capture in any useful
-                          sense.
-                       */
-                       use_pending_capture_data (*capture_pending_node);
-               }
-
-       }
-
-       if ((prop = node.property ("speed")) != 0) {
-               double sp = atof (prop->value().c_str());
-
-               if (realtime_set_speed (sp, false)) {
-                       non_realtime_set_speed ();
-               }
-       }
-
-       _n_channels = channels.size();
-
-       in_set_state = false;
-
-       /* make sure this is clear before we do anything else */
-
-       capturing_sources.clear ();
-
-       /* write sources are handled when we handle the input set 
-          up of the IO that owns this DS (::non_realtime_input_change())
-       */
-               
-       in_set_state = false;
-
-       return 0;
-}
-
-int
-DiskStream::use_new_write_source (uint32_t n)
-{
-       if (!recordable()) {
-               return 1;
-       }
-
-       if (n >= channels.size()) {
-               error << string_compose (_("DiskStream: channel %1 out of range"), n) << endmsg;
-               return -1;
-       }
-
-       ChannelInfo &chan = channels[n];
-       
-       if (chan.write_source) {
-
-               if (FileSource::is_empty (chan.write_source->path())) {
-                       chan.write_source->mark_for_remove ();
-                       chan.write_source->release();
-                       delete chan.write_source;
-               } else {
-                       chan.write_source->release();
-                       chan.write_source = 0;
-               }
-       }
-
-       try {
-               if ((chan.write_source = _session.create_file_source (*this, n, destructive())) == 0) {
-                       throw failed_constructor();
-               }
-       } 
-
-       catch (failed_constructor &err) {
-               error << string_compose (_("%1:%2 new capture file not initialized correctly"), _name, n) << endmsg;
-               chan.write_source = 0;
-               return -1;
-       }
-
-       chan.write_source->use ();
-
-       /* do not remove destructive files even if they are empty */
-
-       chan.write_source->set_allow_remove_if_empty (!destructive());
-
-       return 0;
-}
-
-void
-DiskStream::reset_write_sources (bool mark_write_complete, bool force)
-{
-       ChannelList::iterator chan;
-       uint32_t n;
-
-       if (!recordable()) {
-               return;
-       }
-       
-       capturing_sources.clear ();
-       
-       for (chan = channels.begin(), n = 0; chan != channels.end(); ++chan, ++n) {
-               if (!destructive()) {
-
-                       if ((*chan).write_source && mark_write_complete) {
-                               (*chan).write_source->mark_streaming_write_completed ();
-                       }
-                       use_new_write_source (n);
-
-                       if (record_enabled()) {
-                               capturing_sources.push_back ((*chan).write_source);
-                       }
-
-               } else {
-                       if ((*chan).write_source == 0) {
-                               use_new_write_source (n);
-                       }
-               }
-       }
-
-       if (destructive()) {
-
-               /* we now have all our write sources set up, so create the
-                  playlist's single region.
-               */
-
-               if (_playlist->empty()) {
-                       setup_destructive_playlist ();
-               }
-       }
-}
-
-int
-DiskStream::rename_write_sources ()
-{
-       ChannelList::iterator chan;
-       uint32_t n;
-
-       for (chan = channels.begin(), n = 0; chan != channels.end(); ++chan, ++n) {
-               if ((*chan).write_source != 0) {
-                       (*chan).write_source->set_name (_name, destructive());
-                       /* XXX what to do if one of them fails ? */
-               }
-       }
-
-       return 0;
-}
-
-void
-DiskStream::set_block_size (jack_nframes_t nframes)
-{
-       if (_session.get_block_size() > speed_buffer_size) {
-               speed_buffer_size = _session.get_block_size();
-
-               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-                       if ((*chan).speed_buffer) delete [] (*chan).speed_buffer;
-                       (*chan).speed_buffer = new Sample[speed_buffer_size];
-               }
-       }
-       allocate_temporary_buffers ();
-}
-
-void
-DiskStream::allocate_temporary_buffers ()
-{
-       /* make sure the wrap buffer is at least large enough to deal
-          with the speeds up to 1.2, to allow for micro-variation
-          when slaving to MTC, SMPTE etc.
-       */
-
-       double sp = max (fabsf (_actual_speed), 1.2f);
-       jack_nframes_t required_wrap_size = (jack_nframes_t) floor (_session.get_block_size() * sp) + 1;
-
-       if (required_wrap_size > wrap_buffer_size) {
-
-               for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-                       if ((*chan).playback_wrap_buffer) delete [] (*chan).playback_wrap_buffer;
-                       (*chan).playback_wrap_buffer = new Sample[required_wrap_size];  
-                       if ((*chan).capture_wrap_buffer) delete [] (*chan).capture_wrap_buffer;
-                       (*chan).capture_wrap_buffer = new Sample[required_wrap_size];   
-               }
-
-               wrap_buffer_size = required_wrap_size;
-       }
-}
-
-void
-DiskStream::monitor_input (bool yn)
-{
-       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-               
-               if ((*chan).source) {
-                       (*chan).source->request_monitor_input (yn);
-               }
-       }
-}
-
-void
-DiskStream::set_capture_offset ()
-{
-       if (_io == 0) {
-               /* can't capture, so forget it */
-               return;
-       }
-
-       _capture_offset = _io->input_latency();
-}
-
-void
-DiskStream::set_persistent_align_style (AlignStyle a)
-{
-       _persistent_alignment_style = a;
-}
-
-void
-DiskStream::set_align_style_from_io ()
-{
-       bool have_physical = false;
-
-       if (_io == 0) {
-               return;
-       }
-
-       get_input_sources ();
-       
-       for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
-               if ((*chan).source && (*chan).source->flags() & JackPortIsPhysical) {
-                       have_physical = true;
-                       break;
-               }
-       }
-
-       if (have_physical) {
-               set_align_style (ExistingMaterial);
-       } else {
-               set_align_style (CaptureTime);
-       }
-}
-
-void
-DiskStream::set_align_style (AlignStyle a)
-{
-       if (record_enabled() && _session.actively_recording()) {
-               return;
-       }
-
-
-       if (a != _alignment_style) {
-               _alignment_style = a;
-               AlignmentStyleChanged ();
-       }
-}
-
-int
-DiskStream::add_channel ()
-{
-       /* XXX need to take lock??? */
-
-       ChannelInfo chan;
-
-       init_channel (chan);
-
-       chan.speed_buffer = new Sample[speed_buffer_size];
-       chan.playback_wrap_buffer = new Sample[wrap_buffer_size];
-       chan.capture_wrap_buffer = new Sample[wrap_buffer_size];
-
-       channels.push_back (chan);
-
-       _n_channels = channels.size();
-
-       return 0;
-}
-
-int
-DiskStream::remove_channel ()
-{
-       if (channels.size() > 1) {
-               /* XXX need to take lock??? */
-               ChannelInfo & chan = channels.back();
-               destroy_channel (chan);
-               channels.pop_back();
-
-               _n_channels = channels.size();
-               return 0;
-       }
-
-       return -1;
-}
-
-float
-DiskStream::playback_buffer_load () const
-{
-       return (float) ((double) channels.front().playback_buf->read_space()/
-                       (double) channels.front().playback_buf->bufsize());
-}
-
-float
-DiskStream::capture_buffer_load () const
-{
-       return (float) ((double) channels.front().capture_buf->write_space()/
-                       (double) channels.front().capture_buf->bufsize());
-}
-
-int
-DiskStream::set_loop (Location *location)
-{
-       if (location) {
-               if (location->start() >= location->end()) {
-                       error << string_compose(_("Location \"%1\" not valid for track loop (start >= end)"), location->name()) << endl;
-                       return -1;
-               }
-       }
-
-       loop_location = location;
-
-        LoopSet (location); /* EMIT SIGNAL */
-       return 0;
-}
-
-jack_nframes_t
-DiskStream::get_capture_start_frame (uint32_t n)
-{
-       Glib::Mutex::Lock lm (capture_info_lock);
-
-       if (capture_info.size() > n) {
-               return capture_info[n]->start;
-       }
-       else {
-               return capture_start_frame;
-       }
-}
-
-jack_nframes_t
-DiskStream::get_captured_frames (uint32_t n)
-{
-       Glib::Mutex::Lock lm (capture_info_lock);
-
-       if (capture_info.size() > n) {
-               return capture_info[n]->frames;
-       }
-       else {
-               return capture_captured;
-       }
-}
-
-void
-DiskStream::punch_in ()
-{
-}
-
-void
-DiskStream::punch_out ()
-{
-}
-
-int
-DiskStream::use_pending_capture_data (XMLNode& node)
-{
-       const XMLProperty* prop;
-       XMLNodeList nlist = node.children();
-       XMLNodeIterator niter;
-       FileSource* fs;
-       FileSource* first_fs = 0;
-       AudioRegion::SourceList pending_sources;
-       jack_nframes_t position;
-
-       if ((prop = node.property (X_("at"))) == 0) {
-               return -1;
-       }
-
-       if (sscanf (prop->value().c_str(), "%" PRIu32, &position) != 1) {
-               return -1;
-       }
-
-       for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
-               if ((*niter)->name() == X_("file")) {
-
-                       if ((prop = (*niter)->property (X_("path"))) == 0) {
-                               continue;
-                       }
-
-                       try {
-                               fs = new FileSource (prop->value(), _session.frame_rate(), true, Config->get_native_file_data_format());
-                       }
-
-                       catch (failed_constructor& err) {
-                               error << string_compose (_("%1: cannot restore pending capture source file %2"),
-                                                 _name, prop->value())
-                                     << endmsg;
-                               return -1;
-                       }
-
-                       pending_sources.push_back (fs);
-                       
-                       if (first_fs == 0) {
-                               first_fs = fs;
-                       }
-
-                       fs->set_captured_for (_name);
-               }
-       }
-
-       if (pending_sources.size() == 0) {
-               /* nothing can be done */
-               return 1;
-       }
-
-       if (pending_sources.size() != _n_channels) {
-               error << string_compose (_("%1: incorrect number of pending sources listed - ignoring them all"), _name)
-                     << endmsg;
-               return -1;
-       }
-
-       AudioRegion* region;
-       
-       try {
-               region = new AudioRegion (pending_sources, 0, first_fs->length(),
-                                         region_name_from_path (first_fs->name()), 
-                                         0, AudioRegion::Flag (AudioRegion::DefaultFlags|AudioRegion::Automatic|AudioRegion::WholeFile));
-               
-               region->special_set_position (0);
-       }
-
-       catch (failed_constructor& err) {
-               error << string_compose (_("%1: cannot create whole-file region from pending capture sources"),
-                                 _name)
-                     << endmsg;
-               
-               return -1;
-       }
-
-       try {
-               region = new AudioRegion (pending_sources, 0, first_fs->length(), region_name_from_path (first_fs->name()));
-       }
-
-       catch (failed_constructor& err) {
-               error << string_compose (_("%1: cannot create region from pending capture sources"),
-                                 _name)
-                     << endmsg;
-               
-               return -1;
-       }
-
-       _playlist->add_region (*region, position);
-
-       return 0;
-}
-
-void
-DiskStream::set_roll_delay (jack_nframes_t nframes)
-{
-       _roll_delay = nframes;
-}
-
-void
-DiskStream::set_destructive (bool yn)
-{
-       if (yn != destructive()) {
-               reset_write_sources (true, true);
-               if (yn) {
-                       _flags |= Destructive;
-               } else {
-                       _flags &= ~Destructive;
-               }
-       }
-}
diff --git a/libs/ardour/externalsource.cc b/libs/ardour/externalsource.cc
deleted file mode 100644 (file)
index 7f478b6..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-    Copyright (C) 2006 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include <sys/stat.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-#include <sndfile.h>
-
-#include <pbd/mountpoint.h>
-#include <ardour/externalsource.h>
-#include <ardour/sndfilesource.h>
-#include <ardour/sndfile_helpers.h>
-
-// if these headers come before sigc++ is included
-// the parser throws ObjC++ errors. (nil is a keyword)
-#ifdef HAVE_COREAUDIO 
-#include <ardour/coreaudio_source.h>
-#include <AudioToolbox/ExtendedAudioFile.h>
-#include <AudioToolbox/AudioFormat.h>
-#endif // HAVE_COREAUDIO
-
-#include "i18n.h"
-
-using namespace ARDOUR;
-
-string ExternalSource::peak_dir = "";
-
-ExternalSource::ExternalSource (const XMLNode& node)
-       : Source (node)
-{
-}
-
-ExternalSource::ExternalSource (const string& idstr, bool build_peak)
-       : Source(build_peak)
-{
-}
-
-ExternalSource::~ExternalSource ()
-{
-}
-
-jack_nframes_t
-ExternalSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const
-{
-       return read (dst, start, cnt, workbuf);
-}
-
-string
-ExternalSource::peak_path (string audio_path)
-{
-       /* XXX hardly bombproof! fix me */
-
-       struct stat stat_file;
-       struct stat stat_mount;
-
-       string mp = mountpoint (audio_path);
-
-       stat (audio_path.c_str(), &stat_file);
-       stat (mp.c_str(), &stat_mount);
-
-       char buf[32];
-#ifdef __APPLE__
-       snprintf (buf, sizeof (buf), "%u-%u-%d.peak", stat_mount.st_ino, stat_file.st_ino, channel);
-#else
-       snprintf (buf, sizeof (buf), "%ld-%ld-%d.peak", stat_mount.st_ino, stat_file.st_ino, channel);
-#endif
-
-       string res = peak_dir;
-       res += buf;
-
-       return res;
-}
-
-#ifdef HAVE_COREAUDIO
-
-ExternalSource*
-ExternalSource::create (const XMLNode& node)
-{
-       ExternalSource* es = 0;
-
-       try {
-               es = new CoreAudioSource (node);
-       } 
-       
-       catch (failed_constructor& err) {
-               es = new SndFileSource (node);
-       }
-
-       es = new SndFileSource (node);
-
-       return es;
-}
-
-#else
-
-ExternalSource*
-ExternalSource::create (const XMLNode& node)
-{
-       return new SndFileSource (node);
-}
-
-#endif // HAVE_COREAUDIO
-
-#ifdef HAVE_COREAUDIO
-ExternalSource*
-ExternalSource::create (const string& idstr, bool build_peak)
-{
-       ExternalSource* es = 0;
-
-       try {
-               es = new CoreAudioSource (idstr, build_peak);
-       }
-
-       catch (failed_constructor& err) {
-               es = new SndFileSource (idstr, build_peak);
-       }
-
-       return es;
-}
-
-#else
-
-ExternalSource*
-ExternalSource::create (const string& idstr, bool build_peak)
-{
-       return new SndFileSource (idstr, build_peak);
-}
-
-#endif // HAVE_COREAUDIO
-
-#ifdef HAVE_COREAUDIO
-std::string 
-CFStringRefToStdString(CFStringRef stringRef)
-{
-       CFIndex size = 
-               CFStringGetMaximumSizeForEncoding(CFStringGetLength(stringRef) , 
-               kCFStringEncodingASCII);
-           char *buf = new char[size];
-       
-       std::string result;
-
-       if(CFStringGetCString(stringRef, buf, size, kCFStringEncodingASCII)) {
-           result = buf;
-       }
-       delete [] buf;
-       return result;
-}
-#endif // HAVE_COREAUDIO
-
-bool
-ExternalSource::get_soundfile_info (string path, SoundFileInfo& _info, string& error_msg)
-{
-#ifdef HAVE_COREAUDIO
-       OSStatus err = noErr;
-    FSRef ref; 
-       ExtAudioFileRef af = 0;
-       size_t size;
-    CFStringRef name;
-
-    err = FSPathMakeRef ((UInt8*)path.c_str(), &ref, 0);
-       if (err != noErr) {
-        ExtAudioFileDispose (af);
-               goto libsndfile;
-       }
-
-       err = ExtAudioFileOpen(&ref, &af);
-       if (err != noErr) {
-        ExtAudioFileDispose (af);
-               goto libsndfile;
-       }
-
-       AudioStreamBasicDescription absd;
-       memset(&absd, 0, sizeof(absd));
-       size = sizeof(AudioStreamBasicDescription);
-       err = ExtAudioFileGetProperty(af,
-                       kExtAudioFileProperty_FileDataFormat, &size, &absd);
-       if (err != noErr) {
-        ExtAudioFileDispose (af);
-               goto libsndfile;
-       }
-
-       _info.samplerate = absd.mSampleRate;
-       _info.channels   = absd.mChannelsPerFrame;
-
-    size = sizeof(_info.length);
-    err = ExtAudioFileGetProperty(af, kExtAudioFileProperty_FileLengthFrames, &size, &_info.length);
-    if (err != noErr) {
-        ExtAudioFileDispose (af);
-               goto libsndfile;
-    }
-
-       size = sizeof(CFStringRef);
-       err = AudioFormatGetProperty(
-                       kAudioFormatProperty_FormatName, sizeof(absd), &absd, &size, &name);
-       if (err != noErr) {
-        ExtAudioFileDispose (af);
-               goto libsndfile;
-       }
-
-       _info.format_name = CFStringRefToStdString(name);
-
-    ExtAudioFileDispose (af);
-       return true;
-       
-libsndfile:
-#endif // HAVE_COREAUDIO
-
-       SNDFILE *sf;
-       SF_INFO sf_info;
-
-       sf_info.format = 0; // libsndfile says to clear this before sf_open().
-
-       if ((sf = sf_open ((char*) path.c_str(), SFM_READ, &sf_info)) == 0) { 
-               char errbuf[256];
-               error_msg = sf_error_str (0, errbuf, sizeof (errbuf) - 1);
-               return false;
-       }
-
-       sf_close (sf);
-
-       _info.samplerate  = sf_info.samplerate;
-       _info.channels    = sf_info.channels;
-       _info.length      = sf_info.frames;
-       _info.format_name = string_compose("Format: %1, %2",
-                       sndfile_major_format(sf_info.format),
-                       sndfile_minor_format(sf_info.format));
-
-       return true;
-}
diff --git a/libs/ardour/filesource.cc b/libs/ardour/filesource.cc
deleted file mode 100644 (file)
index 63a9a3d..0000000
+++ /dev/null
@@ -1,1513 +0,0 @@
-/*
-    Copyright (C) 2000 Paul Davis 
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#include <algorithm>
-
-/* This is is very hacky way to get pread and pwrite declarations.
-   First, include <features.h> so that we can avoid its #undef __USE_UNIX98.
-   Then define __USE_UNIX98, include <unistd.h>, and then undef it
-   again. If #define _XOPEN_SOURCE actually worked, I'd use that, but
-   despite claims in the header that it does, it doesn't.
-
-   features.h isn't available on osx and it compiles fine without it.
-*/
-
-#ifdef HAVE_FEATURES_H
-#include <features.h>
-#endif
-
-#if __GNUC__ >= 3
-// #define _XOPEN_SOURCE 500
-#include <unistd.h>
-#else
-#define __USE_UNIX98
-#include <unistd.h>
-#undef  __USE_UNIX98
-#endif
-
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <climits>
-#include <cerrno>
-#include <sys/types.h>
-#include <pwd.h>
-#include <time.h>
-#include <sys/utsname.h>
-#include <vector>
-#include <cstdio> /* for rename(2) */
-
-#include <glibmm.h>
-
-#include <pbd/stl_delete.h>
-
-#include <glibmm/thread.h>
-#include <pbd/pathscanner.h>
-
-#include <ardour/ardour.h>
-#include <ardour/version.h>
-#include <ardour/source.h>
-#include <ardour/filesource.h>
-#include <ardour/session.h>
-#include <ardour/cycle_timer.h>
-#include <ardour/pcm_utils.h>
-
-#include "i18n.h"
-
-using namespace ARDOUR;
-
-string prepare_string(string& regex);
-
-char   FileSource::bwf_country_code[3] = "us";
-char   FileSource::bwf_organization_code[4] = "las";
-char   FileSource::bwf_serial_number[13] = "000000000000";
-string FileSource::search_path;
-
-#undef WE_ARE_BIGENDIAN
-#ifdef __BIG_ENDIAN__
-#define WE_ARE_BIGENDIAN true
-#else
-#define WE_ARE_BIGENDIAN false
-#endif
-
-#define Swap_32(value)         \
-       (((((uint32_t)value)<<24) & 0xFF000000) | \
-        ((((uint32_t)value)<< 8) & 0x00FF0000) | \
-        ((((uint32_t)value)>> 8) & 0x0000FF00) | \
-        ((((uint32_t)value)>>24) & 0x000000FF))
-
-#define Swap_16(value)         \
-       (((((uint16_t)value)>> 8) & 0x000000FF) | \
-        ((((uint16_t)value)<< 8) & 0x0000FF00))
-
-
-void
-FileSource::set_search_path (string p)
-{
-       search_path = p;
-}
-
-FileSource::FileSource (string pathstr, jack_nframes_t rate, bool repair_first, SampleFormat samp_format)
-{
-       /* constructor used when the file cannot already exist or might be damaged */
-       _sample_format = samp_format;
-       if (samp_format == FormatInt24) {
-               _sample_size = 3;
-       } else {
-               _sample_size = sizeof(float);
-       }
-       
-       if (repair_first && repair (pathstr, rate)) {
-               throw failed_constructor ();
-       }
-       
-       if (init (pathstr, false, rate)) {
-               throw failed_constructor ();
-       }
-
-       SourceCreated (this); /* EMIT SIGNAL */
-}
-
-FileSource::FileSource (const XMLNode& node, jack_nframes_t rate) 
-       : Source (node)
-{
-       _sample_format = FormatFloat;
-       _sample_size = sizeof(float);
-
-       if (set_state (node)) {
-               throw failed_constructor();
-       }
-
-       /* constructor used when the file must already exist */
-
-       if (init (_name, true, rate)) {
-               throw failed_constructor ();
-       }
-
-       SourceCreated (this); /* EMIT SIGNAL */
-}
-
-int
-FileSource::init (string pathstr, bool must_exist, jack_nframes_t rate)
-{
-       bool new_file = false;
-       int ret = -1;
-       PathScanner scanner;
-
-       /* all native files end in .wav. this lets us discard
-          SndFileSource paths, which have ":N" at the end to
-          indicate which channel to read from, as well as any
-          other kind of non-native file. obviously, there
-          are more subtle checks later on.
-       */
-
-       if (pathstr.length() < 4 || pathstr.rfind (".wav") != pathstr.length() - 4) {
-               return ret;
-       }
-
-       is_bwf = false;
-       _length = 0;
-       fd = -1;
-       remove_at_unref = false;
-       next_peak_clear_should_notify = false;
-       allow_remove_if_empty = true;
-
-       if (pathstr[0] != '/') {
-
-               /* find pathstr in search path */
-               
-               if (search_path.length() == 0) {
-                       error << _("FileSource: search path not set") << endmsg;
-                       goto out;
-               }
-
-               /* force exact match on the filename component by prefixing the regexp.
-                  otherwise, "Drums-2.wav" matches "Comp_Drums-2.wav".
-               */
-
-               string regexp = "^";
-               regexp += prepare_string(pathstr);
-               regexp += '$';
-
-               vector<string*>* result = scanner (search_path, regexp, false, true, -1);
-               
-               if (result == 0 || result->size() == 0) {
-                       error << string_compose (_("FileSource: \"%1\" not found when searching %2 using %3"), 
-                                         pathstr, search_path, regexp) << endmsg;
-                       goto out;
-               }
-               
-               if (result->size() > 1) {
-                       string msg = string_compose (_("FileSource: \"%1\" is ambigous when searching %2\n\t"), pathstr, search_path);
-                       vector<string*>::iterator x = result->begin();
-
-                       while (true) {
-                               msg += *(*x);
-                               ++x;
-
-                               if (x == result->end()) {
-                                       break;
-                               }
-
-                               msg += "\n\t";
-                       }
-                       
-                       error << msg << endmsg;
-                       goto out;
-               }
-               
-               _name = pathstr;
-               _path = *(result->front());
-
-               vector_delete (result);
-               delete result;
-
-       } else {
-
-               /* old style sessions include full paths */
-
-               _path = pathstr;
-               _name = pathstr.substr (pathstr.find_last_of ('/') + 1);
-
-       }
-
-       if (access (_path.c_str(), F_OK) != 0) {
-               if (must_exist) {
-                       error << string_compose(_("Filesource: cannot find required file (%1): %2"), _path, strerror (errno)) << endmsg;
-                       goto out;
-                       
-               }
-
-               if (errno == ENOENT) {
-                       new_file = true;
-               } else {
-                       error << string_compose(_("Filesource: cannot check for existing file (%1): %2"), _path, strerror (errno)) << endmsg;
-                       goto out;
-               }
-       }
-
-       if ((fd = open64 (_path.c_str(), O_RDWR|O_CREAT, 0644)) < 0) {
-               error << string_compose(_("FileSource: could not open \"%1\": (%2)"), _path, strerror (errno)) << endmsg;
-               goto out;
-       }
-       
-       /* if there was no timestamp available via XML,
-          then get it from the filesystem.
-       */
-
-       if (_timestamp == 0) {
-               struct stat statbuf;
-               
-               fstat (fd, &statbuf);
-               _timestamp = statbuf.st_mtime;
-       }
-
-       if (lseek (fd, 0, SEEK_END) == 0) {
-               new_file = true;
-       }
-
-       /* check that its a RIFF/WAVE format file */
-       
-       if (new_file) {
-
-               switch (Config->get_native_file_header_format()) {
-               case BWF:
-                       is_bwf = true;
-                       break;
-               default:
-                       is_bwf = false;
-                       break;
-               }
-
-               if (fill_header (rate)) {
-                       error << string_compose (_("FileSource: cannot write header in %1"), _path) << endmsg;
-                       goto out;
-               }
-
-               struct tm* now;
-               time_t     xnow;
-               
-               time (&xnow);
-               now = localtime (&xnow);
-
-               update_header (0, *now, xnow);
-               
-       } else {
-
-               if (discover_chunks (must_exist)) {
-                       error << string_compose (_("FileSource: cannot locate chunks in %1"), _path) << endmsg;
-                       goto out;
-               }
-               
-               if (read_header (must_exist)) {
-                       error << string_compose (_("FileSource: cannot read header in %1"), _path) << endmsg;
-                       goto out;
-               }
-
-               if (check_header (rate, must_exist)) {
-                       error << string_compose (_("FileSource: cannot check header in %1"), _path) << endmsg;
-                       goto out;
-               }
-
-               compute_header_size ();
-       }
-       
-       if ((ret = initialize_peakfile (new_file, _path))) {
-               error << string_compose (_("FileSource: cannot initialize peakfile for %1 as %2"), _path, peakpath) << endmsg;
-       }
-
-  out:
-       if (ret) {
-
-               if (fd >= 0) {
-                       close (fd);
-               }
-
-               if (new_file) {
-                       unlink (_path.c_str());
-               }
-       }
-
-       return ret;
-
-}
-
-FileSource::~FileSource ()
-{
-       GoingAway (this); /* EMIT SIGNAL */
-       
-       if (fd >= 0) {
-
-               if (remove_at_unref || (is_empty (_path) && allow_remove_if_empty)) {
-                       unlink (_path.c_str());
-                       unlink (peakpath.c_str());
-               }
-
-               close (fd);
-       } 
-}
-
-void
-FileSource::set_allow_remove_if_empty (bool yn)
-{
-       allow_remove_if_empty = yn;
-}
-
-int
-FileSource::set_name (string newname, bool destructive)
-{
-       Glib::Mutex::Lock lm (_lock);
-       string oldpath = _path;
-       string newpath = Session::change_audio_path_by_name (oldpath, _name, newname, destructive);
-
-       if (newpath.empty()) {
-               error << string_compose (_("programming error: %1"), "cannot generate a changed audio path") << endmsg;
-               return -1;
-       }
-
-       if (rename (oldpath.c_str(), newpath.c_str()) != 0) {
-               error << string_compose (_("cannot rename audio file for %1 to %2"), _name, newpath) << endmsg;
-               return -1;
-       }
-
-       _name = Glib::path_get_basename (newpath);
-       _path = newpath;
-
-       return rename_peakfile (peak_path (_path));
-}
-
-string
-FileSource::peak_path (string audio_path)
-{
-       return Session::peak_path_from_audio_path (audio_path);
-}
-
-int
-FileSource::discover_chunks (bool silent)
-{
-       WAVEChunk rw;
-       off64_t end;
-       off64_t offset;
-       char null_terminated_id[5];
-       bool doswap = false;
-       
-       if ((end = lseek (fd, 0, SEEK_END)) < 0) {
-               error << _("FileSource: cannot seek to end of file") << endmsg;
-               return -1;
-       }
-
-       if (::pread64 (fd, &rw, sizeof (rw), 0) != sizeof (rw)) {
-               error << _("FileSource: cannot read RIFF/WAVE chunk from file") << endmsg;
-               return -1;
-       }
-
-       if (memcmp (rw.id, "RIFF", 4) == 0 && memcmp (rw.text, "WAVE", 4) == 0) {
-               header.bigendian = false;
-       }
-       else if (memcmp(rw.id, "RIFX", 4) == 0 && memcmp (rw.text, "WAVE", 4) == 0) {
-               header.bigendian = true;
-       }
-       else {
-               if (!silent) {
-                       error << string_compose (_("FileSource %1: not a RIFF/WAVE file"), _path) << endmsg;
-               }
-               return -1;
-       }
-
-       null_terminated_id[4] = '\0';
-
-       /* OK, its a RIFF/WAVE file. Find each chunk */
-
-       doswap = header.bigendian != WE_ARE_BIGENDIAN;
-       
-       if (doswap) {
-               swap_endian(rw);
-       }
-
-       
-       
-       memcpy (null_terminated_id, rw.id, 4);
-       chunk_info.push_back (ChunkInfo (null_terminated_id, rw.size, 0));
-
-       offset = sizeof (rw);
-
-       while (offset < end) {
-
-               GenericChunk this_chunk;
-               
-               if (::pread64 (fd, &this_chunk, sizeof (this_chunk), offset) != sizeof (this_chunk)) {
-                       error << _("FileSource: can't read a chunk") << endmsg;
-                       return -1;
-               }
-
-               if (doswap) {
-                       swap_endian(this_chunk);
-               }
-
-               memcpy (null_terminated_id, this_chunk.id, 4);
-
-               /* do sanity check and possible correction to legacy ardour RIFF wavs
-                  created on big endian platforms. after swapping, the size field will not be
-                  in range for the fmt chunk
-               */
-               if ((memcmp(null_terminated_id, "fmt ", 4) == 0 || memcmp(null_terminated_id, "bext", 4) == 0)
-                    && !header.bigendian && (this_chunk.size > 700 || this_chunk.size < 0))
-               {
-                       warning << _("filesource: correcting mis-written RIFF file to become a RIFX: ") << name() << endmsg;
-                       
-                       memcpy (&rw.id, "RIFX", 4);
-                       ::pwrite64 (fd, &rw.id, 4, 0);
-                       header.bigendian = true;
-                       // fix wave chunk already read
-                       swap_endian(rw);
-                       
-                       doswap = header.bigendian != WE_ARE_BIGENDIAN;
-
-                       // now reset offset and continue the loop
-                       // to reread all the chunks
-                       chunk_info.clear();
-                       memcpy (null_terminated_id, rw.id, 4);
-                       chunk_info.push_back (ChunkInfo (null_terminated_id, rw.size, 0));
-                       offset = sizeof (rw);
-                       continue;
-               }
-                               
-
-               if (end != 44)
-                       if ((memcmp(null_terminated_id, "data", 4) == 0))
-                               if ((this_chunk.size == 0) || (this_chunk.size > (end - offset)))
-                                       this_chunk.size = end - offset;
-               
-               chunk_info.push_back (ChunkInfo (null_terminated_id, this_chunk.size, offset));
-
-               /* skip to the next chunk */
-
-               offset += sizeof(GenericChunk) + this_chunk.size;
-       }
-
-       return 0;
-}
-
-void
-FileSource::swap_endian (GenericChunk & chunk) const
-{
-       chunk.size = Swap_32(chunk.size);
-}
-
-void
-FileSource::swap_endian (FMTChunk & chunk) const
-{
-       chunk.size = Swap_32(chunk.size);
-
-       chunk.formatTag = Swap_16(chunk.formatTag);
-       chunk.nChannels = Swap_16(chunk.nChannels);
-       chunk.nSamplesPerSec = Swap_32(chunk.nSamplesPerSec);
-       chunk.nAvgBytesPerSec = Swap_32(chunk.nAvgBytesPerSec);
-       chunk.nBlockAlign = Swap_16(chunk.nBlockAlign);
-       chunk.nBitsPerSample = Swap_16(chunk.nBitsPerSample);
-}
-
-void
-FileSource::swap_endian (BroadcastChunk & chunk) const
-{
-       chunk.size = Swap_32(chunk.size);
-
-       chunk.time_reference_low = Swap_32(chunk.time_reference_low);
-       chunk.time_reference_high = Swap_32(chunk.time_reference_high);
-       chunk.version = Swap_16(chunk.version);
-}
-
-void FileSource::swap_endian (Sample *buf, jack_nframes_t cnt) const
-{
-       for (jack_nframes_t n=0; n < cnt; ++n) {
-               uint32_t * tmp = (uint32_t *) &buf[n];
-               *tmp = Swap_32(*tmp);
-       }
-}
-
-
-FileSource::ChunkInfo*
-FileSource::lookup_chunk (string what)
-{
-       for (vector<ChunkInfo>::iterator i = chunk_info.begin(); i != chunk_info.end(); ++i) {
-               if ((*i).name == what) {
-                       return &*i;
-               }
-       }
-       return 0;
-}
-
-int
-FileSource::fill_header (jack_nframes_t rate)
-{
-       /* RIFF/WAVE */
-
-       if (WE_ARE_BIGENDIAN) {
-               memcpy (header.wave.id, "RIFX", 4);
-               header.bigendian = true;
-       }
-       else {
-               memcpy (header.wave.id, "RIFF", 4);
-               header.bigendian = false;
-       }
-       header.wave.size = 0; /* file size */
-       memcpy (header.wave.text, "WAVE", 4);
-
-       /* BROADCAST WAVE EXTENSION */
-       
-       if (is_bwf) {
-
-               /* fill the entire BWF header with nulls */
-
-               memset (&header.bext, 0, sizeof (header.bext));
-
-               memcpy (header.bext.id, "bext", 4);
-
-               snprintf (header.bext.description, sizeof (header.bext.description), "%s", "ambiguity is clearer than precision.");
-
-               struct passwd *pwinfo;
-               struct utsname utsinfo;
-
-               if ((pwinfo = getpwuid (getuid())) == 0) {
-                       error << string_compose(_("FileSource: cannot get user information for BWF header (%1)"), strerror(errno)) << endmsg;
-                       return -1;
-               }
-               if (uname (&utsinfo)) {
-                       error << string_compose(_("FileSource: cannot get host information for BWF header (%1)"), strerror(errno)) << endmsg;
-                       return -1;
-               }
-
-               snprintf (header.bext.originator, sizeof (header.bext.originator), "ardour:%s:%s:%s:%s:%s)", 
-                         pwinfo->pw_gecos,
-                         utsinfo.nodename,
-                         utsinfo.sysname,
-                         utsinfo.release,
-                         utsinfo.version);
-
-               header.bext.version = 1;  
-               
-               /* XXX do something about this field */
-
-               snprintf (header.bext.umid, sizeof (header.bext.umid), "%s", "fnord");
-
-               /* add some coding history */
-
-               char buf[64];
-
-               /* encode: PCM,rate,mono,24bit,ardour-version
-                  
-                  Note that because we use JACK, there is no way to tell
-                  what the original bit depth of the signal was.
-                */
-               
-               snprintf (buf, sizeof(buf), "F=%u,A=PCM,M=mono,W=24,T=ardour-%d.%d.%d", 
-                         rate,
-                         libardour_major_version,
-                         libardour_minor_version,
-                         libardour_micro_version);
-
-               header.coding_history.push_back (buf);
-
-               /* initial size reflects coding history + "\r\n" */
-
-               header.bext.size = sizeof (BroadcastChunk) - sizeof (GenericChunk) + strlen (buf) + 2;
-       }
-       
-       memcpy (header.format.id, "fmt ", 4);
-       header.format.size = sizeof (FMTChunk) - sizeof (GenericChunk);
-
-       if (_sample_format == FormatInt24) {
-               header.format.formatTag = 1; // PCM
-               header.format.nBlockAlign = 3;
-               header.format.nBitsPerSample = 24;
-       }
-       else {
-               header.format.formatTag = 3; /* little-endian IEEE float format */
-               header.format.nBlockAlign = 4;
-               header.format.nBitsPerSample = 32;
-       }
-       header.format.nChannels = 1; /* mono */
-       header.format.nSamplesPerSec = rate;
-       header.format.nAvgBytesPerSec = rate * _sample_size;
-       
-       /* DATA */
-
-       memcpy (header.data.id, "data", 4);
-       header.data.size = 0;
-       
-       return 0;
-}
-
-void
-FileSource::compute_header_size ()
-{
-       off64_t end_of_file;
-       int32_t coding_history_size = 0;
-               
-       end_of_file = lseek (fd, 0, SEEK_END);
-
-       if (is_bwf) {
-               
-               /* include the coding history */
-               
-               for (vector<string>::iterator i = header.coding_history.begin(); i != header.coding_history.end(); ++i) {
-                       coding_history_size += (*i).length() + 2; // include "\r\n";
-               }
-               
-               header.bext.size = sizeof (BroadcastChunk) - sizeof (GenericChunk) + coding_history_size;
-               data_offset = bwf_header_size + coding_history_size;
-               
-       } else {
-               data_offset = wave_header_size;
-       }
-
-       if (end_of_file == 0) {
-
-               /* newfile condition */
-               
-               if (is_bwf) {
-                       /* include "WAVE" then all the chunk sizes (bext, fmt, data) */ 
-                       header.wave.size = 4 + sizeof (BroadcastChunk) + coding_history_size + sizeof (FMTChunk) + sizeof (GenericChunk);
-               } else {
-                       /* include "WAVE" then all the chunk sizes (fmt, data) */
-                       header.wave.size = 4 + sizeof (FMTChunk) + sizeof (GenericChunk);
-               }
-
-               header.data.size = 0;
-
-       } else {
-
-               header.wave.size = end_of_file - 8; /* size of initial RIFF+size pseudo-chunk */
-               header.data.size = end_of_file - data_offset;
-       }
-}
-
-int
-FileSource::update_header (jack_nframes_t when, struct tm& now, time_t tnow)
-{
-       Glib::Mutex::Lock lm (_lock);
-
-       if (is_bwf) {
-               /* random code is 9 digits */
-
-               int random_code = random() % 999999999;
-
-               snprintf (header.bext.originator_reference, sizeof (header.bext.originator_reference), "%2s%3s%12s%02d%02d%02d%9d",
-                         bwf_country_code,
-                         bwf_organization_code,
-                         bwf_serial_number,
-                         now.tm_hour,
-                         now.tm_min,
-                         now.tm_sec,
-                         random_code);
-                         
-               snprintf (header.bext.origination_date, sizeof (header.bext.origination_date), "%4d-%02d-%02d",
-                         1900 + now.tm_year,
-                         now.tm_mon,
-                         now.tm_mday);
-
-               snprintf (header.bext.origination_time, sizeof (header.bext.origination_time), "%02d-%02d-%02d",
-                         now.tm_hour,
-                         now.tm_min,
-                         now.tm_sec);
-
-               header.bext.time_reference_high = 0;
-               header.bext.time_reference_low = when;
-       }
-
-       compute_header_size ();
-
-       if (write_header()) {
-               error << string_compose(_("FileSource[%1]: cannot update data size: %2"), _path, strerror (errno)) << endmsg;
-               return -1;
-       }
-
-       stamp (tnow);
-
-       return 0;
-}
-
-int
-FileSource::read_header (bool silent)
-{
-       /* we already have the chunk info, so just load up whatever we have */
-
-       ChunkInfo* info;
-       
-       if (header.bigendian == false && (info = lookup_chunk ("RIFF")) == 0) {
-               error << _("FileSource: can't find RIFF chunk info") << endmsg;
-               return -1;
-       }
-       else if (header.bigendian == true && (info = lookup_chunk ("RIFX")) == 0) {
-               error << _("FileSource: can't find RIFX chunk info") << endmsg;
-               return -1;
-       }
-       
-       
-       /* just fill this chunk/header ourselves, disk i/o is stupid */
-
-       if (header.bigendian) {
-               memcpy (header.wave.id, "RIFX", 4);
-       }
-       else {
-               memcpy (header.wave.id, "RIFF", 4);
-       }
-       header.wave.size = 0;
-       memcpy (header.wave.text, "WAVE", 4);
-
-       if ((info = lookup_chunk ("bext")) != 0) {
-
-               is_bwf = true;
-               
-               if (::pread64 (fd, &header.bext, sizeof (header.bext), info->offset) != sizeof (header.bext)) {
-                       error << _("FileSource: can't read RIFF chunk") << endmsg;
-                       return -1;
-               }
-
-               if (read_broadcast_data (*info)) {
-                       return -1;
-               }
-       }
-
-       if ((info = lookup_chunk ("fmt ")) == 0) {
-               error << _("FileSource: can't find format chunk info") << endmsg;
-               return -1;
-       }
-
-       if (::pread64 (fd, &header.format, sizeof (header.format), info->offset) != sizeof (header.format)) {
-               error << _("FileSource: can't read format chunk") << endmsg;
-               return -1;
-       }
-
-       if (header.bigendian != WE_ARE_BIGENDIAN) {
-               swap_endian (header.format);
-       }
-       
-       if ((info = lookup_chunk ("data")) == 0) {
-               error << _("FileSource: can't find data chunk info") << endmsg;
-               return -1;
-       }
-
-       if (::pread64 (fd, &header.data, sizeof (header.data), info->offset) != sizeof (header.data)) {
-               error << _("FileSource: can't read data chunk") << endmsg;
-               return -1;
-       }
-
-       if (header.bigendian != WE_ARE_BIGENDIAN) {
-               swap_endian (header.data);
-       }
-
-       return 0;
-}
-
-int
-FileSource::read_broadcast_data (ChunkInfo& info)
-{
-       int32_t coding_history_size;
-
-       if (::pread64 (fd, (char *) &header.bext, sizeof (header.bext), info.offset + sizeof (GenericChunk)) != sizeof (header.bext)) {
-               error << string_compose(_("FileSource: cannot read Broadcast Wave data from existing audio file \"%1\" (%2)"),
-                                _path, strerror (errno)) << endmsg;
-               return -1;
-       }
-
-       if (header.bigendian != WE_ARE_BIGENDIAN) {
-               swap_endian (header.bext);
-       }
-       
-       if (info.size > sizeof (header.bext)) {
-
-               coding_history_size = info.size - (sizeof (header.bext) - sizeof (GenericChunk));
-               
-               char data[coding_history_size];
-               
-               if (::pread64 (fd, data, coding_history_size, info.offset + sizeof (BroadcastChunk)) != coding_history_size) {
-                       error << string_compose(_("FileSource: cannot read Broadcast Wave coding history from audio file \"%1\" (%2)"),
-                                        _path, strerror (errno)) << endmsg;
-                       return -1;
-               }
-               
-               /* elements of the coding history are divided by \r\n */
-               
-               char *p = data;
-               char *end = data + coding_history_size;
-               string tmp;
-
-               while (p < end) {
-                       if (*p == '\r' && (p+1) != end && *(p+1) == '\n') {
-                               if (tmp.length()) {
-                                       header.coding_history.push_back (tmp);
-                                       tmp = "";
-                               }
-                               p += 2;
-                       } else {
-                               tmp += *p;
-                               p++;
-                       }
-               }
-       }
-
-       return 0;
-}
-
-int
-FileSource::check_header (jack_nframes_t rate, bool silent)
-{
-       if (header.format.formatTag == 1 && header.format.nBitsPerSample == 24) {
-               // 24 bit PCM
-               _sample_format = FormatInt24;
-               _sample_size = 3;
-       } else if (header.format.formatTag == 3) {
-               /* IEEE float */                
-               _sample_format = FormatFloat;
-               _sample_size = 4;
-       }
-       else {
-               if (!silent) {
-                       error << string_compose(_("FileSource \"%1\" does not use valid sample format.\n"   
-                                          "This is probably a programming error."), _path) << endmsg;
-               }
-               return -1;
-       }
-       
-       /* compute the apparent length of the data */
-
-       data_offset = 0;
-
-       for (vector<ChunkInfo>::iterator i = chunk_info.begin(); i != chunk_info.end();) {
-               vector<ChunkInfo>::iterator n;
-
-               n = i;
-               ++n;
-
-               if ((*i).name == "data") {
-
-                       data_offset = (*i).offset + sizeof (GenericChunk);
-
-                       if (n == chunk_info.end()) {
-                               off64_t end_of_file;
-                               end_of_file = lseek (fd, 0, SEEK_END);
-
-                               _length = end_of_file - data_offset;
-
-                       } else {
-                               _length = (*n).offset - data_offset;
-                       }
-
-                       _length /= sizeof (Sample);
-
-                       break;
-               }
-               
-               i = n;
-       }
-
-       if (data_offset == 0) {
-               error << string_compose(_("FileSource \"%1\" has no \"data\" chunk"), _path) << endmsg;
-               return -1;
-       }
-
-       if (_length * sizeof (Sample) != (jack_nframes_t) header.data.size) {
-               warning << string_compose(_("%1: data length in header (%2) differs from implicit size in file (%3)"),
-                                  _path, header.data.size, _length * sizeof (Sample)) << endmsg;
-       }
-
-//     if ((jack_nframes_t) header.format.nSamplesPerSec != rate) {
-//             warning << string_compose(_("\"%1\" has a sample rate of %2 instead of %3 as used by this session"),
-//                                _path, header.format.nSamplesPerSec, rate) << endmsg;
-//     }
-
-       return 0;
-}
-
-float
-FileSource::sample_rate () const
-{
-       return header.format.nSamplesPerSec;
-}
-
-int
-FileSource::write_header()
-{
-       off64_t pos;
-
-       /* write RIFF/WAVE boilerplate */
-
-       pos = 0;
-
-       WAVEChunk wchunk = header.wave;
-       if (header.bigendian != WE_ARE_BIGENDIAN) {
-               swap_endian(wchunk);
-       }
-       
-       if (::pwrite64 (fd, (char *) &wchunk, sizeof (wchunk), pos) != sizeof (wchunk)) {
-               error << string_compose(_("FileSource: cannot write WAVE chunk: %1"), strerror (errno)) << endmsg;
-               return -1;
-       }
-       
-       pos += sizeof (header.wave);
-       
-       if (is_bwf) {
-
-               /* write broadcast chunk data without copy history */
-
-               BroadcastChunk bchunk = header.bext;
-               if (header.bigendian != WE_ARE_BIGENDIAN) {
-                       swap_endian (bchunk);
-               }
-               
-               if (::pwrite64 (fd, (char *) &bchunk, sizeof (bchunk), pos) != sizeof (bchunk)) {
-                       return -1;
-               }
-
-               pos += sizeof (header.bext);
-
-               /* write copy history */
-
-               for (vector<string>::iterator i = header.coding_history.begin(); i != header.coding_history.end(); ++i) {
-                       string x;
-                       
-                       x = *i;
-                       x += "\r\n";
-                       
-                       if (::pwrite64 (fd, x.c_str(), x.length(), pos) != (int32_t) x.length()) {
-                               return -1;
-                       }
-                       
-                       pos += x.length();
-               }
-       }
-
-        /* write fmt and data chunks */
-       FMTChunk fchunk = header.format;
-       if (header.bigendian != WE_ARE_BIGENDIAN) {
-               swap_endian (fchunk);
-       }
-       
-       if (::pwrite64 (fd, (char *) &fchunk, sizeof (fchunk), pos) != sizeof (fchunk)) {
-               error << string_compose(_("FileSource: cannot write format chunk: %1"), strerror (errno)) << endmsg;
-               return -1;
-       }
-
-       pos += sizeof (header.format);
-
-       GenericChunk dchunk = header.data;
-       if (header.bigendian != WE_ARE_BIGENDIAN) {
-               swap_endian (dchunk);
-       }
-       if (::pwrite64 (fd, (char *) &dchunk, sizeof (dchunk), pos) != sizeof (dchunk)) {
-               error << string_compose(_("FileSource: cannot data chunk: %1"), strerror (errno)) << endmsg;
-               return -1;
-       }
-
-       return 0;
-}
-
-void
-FileSource::mark_for_remove ()
-{
-       remove_at_unref = true;
-}
-
-jack_nframes_t
-FileSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const
-{
-       Glib::Mutex::Lock lm (_lock);
-       return read_unlocked (dst, start, cnt, workbuf);
-}
-
-jack_nframes_t
-FileSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const
-{
-       jack_nframes_t file_cnt;
-
-       if (start > _length) {
-
-               /* read starts beyond end of data, just memset to zero */
-               
-               file_cnt = 0;
-
-       } else if (start + cnt > _length) {
-               
-               /* read ends beyond end of data, read some, memset the rest */
-               
-               file_cnt = _length - start;
-
-       } else {
-               
-               /* read is entirely within data */
-
-               file_cnt = cnt;
-       }
-
-       if (file_cnt) {
-               if (file_read(dst, start, file_cnt, workbuf) != (ssize_t) file_cnt) {
-                       return 0;
-               }
-       }
-
-       if (file_cnt != cnt) {
-               jack_nframes_t delta = cnt - file_cnt;
-               memset (dst+file_cnt, 0, sizeof (Sample) * delta);
-       }
-       
-       return cnt;
-}
-
-jack_nframes_t
-FileSource::write (Sample *data, jack_nframes_t cnt, char * workbuf)
-{
-       {
-               Glib::Mutex::Lock lm (_lock);
-               
-               jack_nframes_t oldlen;
-               int32_t frame_pos = _length;
-               
-               if (file_write(data, frame_pos, cnt, workbuf) != (ssize_t) cnt) {
-                       return 0;
-               }
-
-               oldlen = _length;
-               _length += cnt;
-
-               if (_build_peakfiles) {
-                       PeakBuildRecord *pbr = 0;
-
-                       if (pending_peak_builds.size()) {
-                               pbr = pending_peak_builds.back();
-                       }
-                       
-                       if (pbr && pbr->frame + pbr->cnt == oldlen) {
-                               
-                               /* the last PBR extended to the start of the current write,
-                                  so just extend it again.
-                               */
-
-                               pbr->cnt += cnt;
-                       } else {
-                               pending_peak_builds.push_back (new PeakBuildRecord (oldlen, cnt));
-                       }
-                       
-                       _peaks_built = false;
-               }
-
-       }
-
-
-       if (_build_peakfiles) {
-               queue_for_peaks (*this);
-       }
-
-       return cnt;
-}
-
-ssize_t
-FileSource::write_float(Sample *data, jack_nframes_t framepos, jack_nframes_t cnt, char * workbuf)
-{
-       int32_t byte_cnt = cnt * _sample_size;
-       int32_t byte_pos = data_offset + (framepos * _sample_size);
-       ssize_t retval;
-       
-       if ((retval = ::pwrite64 (fd, (char *) data, byte_cnt, byte_pos)) != (ssize_t) byte_cnt) {
-               error << string_compose(_("FileSource: \"%1\" bad write (%2)"), _path, strerror (errno)) << endmsg;
-               if (retval > 0) {
-                       return retval / _sample_size;
-               }
-               else {
-                       return retval;
-               }
-       }
-
-       _write_data_count = byte_cnt;
-       
-       return cnt;
-}
-
-ssize_t
-FileSource::read_float (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const
-{
-       ssize_t nread;
-       ssize_t byte_cnt = (ssize_t) cnt * sizeof (Sample);
-       int readfd;
-
-       /* open, read, close */
-
-       if ((readfd = open64 (_path.c_str(), O_RDONLY)) < 0) {
-               error << string_compose(_("FileSource: could not open \"%1\": (%2)"), _path, strerror (errno)) << endmsg;
-               return 0;
-       }
-       
-       nread = ::pread64 (readfd, (char *) dst, byte_cnt, data_offset + (start * _sample_size));
-       close (readfd);
-
-       if (nread != byte_cnt) {
-
-               cerr << "FileSource: \""
-                    << _path
-                    << "\" bad read at frame "
-                    << start
-                    << ", of "
-                    << cnt
-                    << " (bytes="
-                    << byte_cnt
-                    << ") frames [length = " << _length 
-                    << " eor = " << start + cnt << "] ("
-                    << strerror (errno)
-                    << ") (read "
-                    << nread / sizeof (Sample)
-                    << " (bytes=" <<nread
-                    << ")) pos was"
-                    << data_offset
-                    << '+'
-                    << start << '*' << sizeof(Sample)
-                    << " = " << data_offset + (start * sizeof(Sample))
-                    << endl;
-               
-               if (nread > 0) {
-                       return nread / _sample_size;
-               } else {
-                       return nread;
-               }
-       }
-
-       if (header.bigendian != WE_ARE_BIGENDIAN) {
-               swap_endian(dst, cnt);
-       }
-       
-       _read_data_count = byte_cnt;
-
-       return cnt;
-}
-
-ssize_t
-FileSource::write_pcm_24(Sample *data, jack_nframes_t framepos, jack_nframes_t cnt, char * workbuf)
-{
-       int32_t byte_cnt = cnt * _sample_size;
-       int32_t byte_pos = data_offset + (framepos * _sample_size);
-       ssize_t retval;
-       
-       // convert to int24
-       if (header.bigendian) {
-               pcm_f2bet_clip_array (data, workbuf, cnt);
-       } else {
-               pcm_f2let_clip_array (data, workbuf, cnt);
-       }
-       
-       if ((retval = ::pwrite64 (fd, (char *) workbuf, byte_cnt, byte_pos)) != (ssize_t) byte_cnt) {
-               error << string_compose(_("FileSource: \"%1\" bad write (%2)"), _path, strerror (errno)) << endmsg;
-               if (retval > 0) {
-                       return retval / _sample_size;
-               }
-               else {
-                       return retval;
-               }
-       }
-
-       return (ssize_t) cnt;
-}
-
-ssize_t
-FileSource::read_pcm_24 (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const
-{
-       ssize_t nread;
-       ssize_t byte_cnt = (ssize_t) cnt * _sample_size;
-       int readfd;
-
-       /* open, read, close */
-
-       if ((readfd = open64 (_path.c_str(), O_RDONLY)) < 0) {
-               error << string_compose(_("FileSource: could not open \"%1\": (%2)"), _path, strerror (errno)) << endmsg;
-               return 0;
-       }
-
-       nread = ::pread64 (readfd, (char *) workbuf, byte_cnt, data_offset + (start * _sample_size));
-       close (readfd);
-
-       if (nread != byte_cnt) {
-
-               cerr << "May be OK - FileSource: \""
-                    << _path
-                    << "\" bad 24bit read at frame "
-                    << start
-                    << ", of "
-                    << cnt
-                    << " (bytes="
-                    << byte_cnt
-                    << ") frames [length = " << _length 
-                    << " eor = " << start + cnt << "] ("
-                    << strerror (errno)
-                    << ") (read "
-                    << nread / sizeof (Sample)
-                    << " (bytes=" <<nread
-                    << ")) pos was"
-                    << data_offset
-                    << '+'
-                    << start << '*' << sizeof(Sample)
-                    << " = " << data_offset + (start * sizeof(Sample))
-                    << endl;
-
-               if (nread > 0) {
-                       return nread / _sample_size;
-               }
-               else {
-                       return nread;
-               }
-       }
-
-       // convert from 24bit->float
-       
-       if (header.bigendian) {
-               pcm_bet2f_array (workbuf, cnt, dst);
-       } else {
-               pcm_let2f_array (workbuf, cnt, dst);
-       }
-       
-       _read_data_count = byte_cnt;
-
-       return (ssize_t) cnt;
-}
-
-
-bool
-FileSource::is_empty (string path)
-{
-       struct stat statbuf;
-
-       stat (path.c_str(), &statbuf);
-       
-       /* its a bit of a problem if an audio file happens
-          to be a regular WAVE file with just enough data
-          to match the size of an empty BWF. hmmm. not very
-          likely however - that represents a duration of
-          less than 1msec at typical sample rates.  
-       */
-
-       /* NOTE: 698 bytes is the size of a BWF header structure *plus* our minimal coding history */
-
-       return (statbuf.st_size == 0 || statbuf.st_size == wave_header_size || statbuf.st_size == 698);
-}
-
-void
-FileSource::mark_streaming_write_completed ()
-{
-       Glib::Mutex::Lock lm (_lock);
-
-       next_peak_clear_should_notify = true;
-
-       if (_peaks_built || pending_peak_builds.empty()) {
-               _peaks_built = true;
-                PeaksReady (); /* EMIT SIGNAL */
-       }
-}
-
-void
-FileSource::mark_take (string id)
-{
-       _take_id = id;
-}
-
-int
-FileSource::move_to_trash (const string trash_dir_name)
-{
-       string newpath;
-
-       /* don't move the file across filesystems, just
-          stick it in the `trash_dir_name' directory
-          on whichever filesystem it was already on.
-       */
-
-        // XXX Portability
-
-       newpath = Glib::path_get_dirname (_path);
-       newpath = Glib::path_get_dirname (newpath);
-
-       newpath += '/';
-       newpath += trash_dir_name;
-       newpath += '/';
-       newpath += Glib::path_get_basename (_path);
-
-       if (access (newpath.c_str(), F_OK) == 0) {
-
-               /* the new path already exists, try versioning */
-               
-               char buf[PATH_MAX+1];
-               int version = 1;
-               string newpath_v;
-
-               snprintf (buf, sizeof (buf), "%s.%d", newpath.c_str(), version);
-               newpath_v = buf;
-
-               while (access (newpath_v.c_str(), F_OK) == 0 && version < 999) {
-                       snprintf (buf, sizeof (buf), "%s.%d", newpath.c_str(), ++version);
-                       newpath_v = buf;
-               }
-               
-               if (version == 999) {
-                       error << string_compose (_("there are already 1000 files with names like %1; versioning discontinued"),
-                                         newpath)
-                             << endmsg;
-               } else {
-                       newpath = newpath_v;
-               }
-
-       } else {
-
-               /* it doesn't exist, or we can't read it or something */
-
-       }
-
-       if (::rename (_path.c_str(), newpath.c_str()) != 0) {
-               error << string_compose (_("cannot rename audio file source from %1 to %2 (%3)"),
-                                 _path, newpath, strerror (errno))
-                     << endmsg;
-               return -1;
-       }
-
-       if (::unlink (peakpath.c_str()) != 0) {
-               error << string_compose (_("cannot remove peakfile %1 for %2 (%3)"),
-                                 peakpath, _path, strerror (errno))
-                     << endmsg;
-               /* try to back out */
-               rename (newpath.c_str(), _path.c_str());
-               return -1;
-       }
-           
-       _path = newpath;
-       peakpath = "";
-       remove_at_unref = false;
-       
-       return 0;
-}
-
-string
-prepare_string(string& str)
-{
-       string prepared;
-       
-       for (uint32_t i = 0; i < str.size(); ++i){
-               char c = str[i];
-               if (isdigit(c) || isalpha(c)){
-                       prepared += c;
-               } else {
-                       prepared += '\\';
-                       prepared += c;
-               }
-       }
-
-       return prepared;
-}
-
-int
-FileSource::repair (string path, jack_nframes_t rate)
-{
-       FILE* in;
-       char buf[700];
-       char* ptr;
-       struct stat statbuf;
-       size_t i;
-       int ret = -1;
-       bool bigend = false;
-       bool doswap = false;
-       
-       if (stat (path.c_str(), &statbuf)) {
-               return -1;
-       }
-
-       if (statbuf.st_size <= (off_t) sizeof (buf)) {
-               /* nothing was ever written to the file, so there is nothing
-                  really to do.
-               */
-               return 0;
-       }
-
-       if ((in = fopen (path.c_str(), "r+")) == NULL) {
-               return -1;
-       }
-
-       if (fread (buf, sizeof (buf), 1, in) != 1) {
-               goto out;
-       }
-       
-       if ((memcmp (&buf[0], "RIFF", 4) && memcmp (&buf[0], "RIFX", 4)) || memcmp (&buf[8], "WAVE", 4)) {
-               /* no header. too dangerous to proceed */
-               goto out;
-       } 
-
-       if (memcmp (&buf[0], "RIFX", 4)==0) {
-               bigend = true;
-       }
-
-       doswap = bigend != WE_ARE_BIGENDIAN;
-       
-       /* reset the size of the RIFF chunk header */
-
-       if (doswap) {
-               *((int32_t *)&buf[4]) = Swap_32((int32_t)(statbuf.st_size - 8));
-       }
-       else {
-               *((int32_t *)&buf[4]) = statbuf.st_size - 8;
-       }
-
-       /* find data chunk and reset the size */
-
-       ptr = buf;
-
-       for (i = 0; i < sizeof (buf); ) {
-
-               if (memcmp (ptr, "fmt ", 4) == 0) {
-                       
-                       FMTChunk fmt;
-
-                       memcpy (&fmt, ptr, sizeof (fmt));
-                       if (doswap) {
-                               swap_endian(fmt);
-                       }
-                       
-                       fmt.nSamplesPerSec = rate;
-                       fmt.nAvgBytesPerSec = rate * 4;
-                       
-                       /* put it back */
-                       if (doswap) {
-                               swap_endian(fmt);
-                       }
-
-                       memcpy (ptr, &fmt, sizeof (fmt));
-                       ptr += sizeof (fmt);
-                       i += sizeof (fmt);
-
-               } else if (memcmp (ptr, "data", 4) == 0) {
-                       GenericChunk dchunk;
-                       memcpy(&dchunk, ptr, sizeof(dchunk));
-
-                       if(doswap) {
-                               swap_endian(dchunk);
-                       }
-
-                       dchunk.size = statbuf.st_size - i - 8;
-
-                       if (doswap) {
-                               swap_endian(dchunk);
-                       }
-                       memcpy (ptr, &dchunk, sizeof (dchunk));
-                       break;
-
-               } else {
-                       ++ptr;
-                       ++i;
-               }
-       }
-
-       /* now flush it back to disk */
-       
-       rewind (in);
-
-       if (fwrite (buf, sizeof (buf), 1, in) != 1) {
-               goto out;
-       }
-
-       ret = 0;
-       fflush (in);
-
-  out:
-       fclose (in);
-       return ret;
-}
-
index 762ee101f82b32c276711f03526391678615c991..f80c9dc287faa5c93bbc251cdbf4fddf9b3bff95 100644 (file)
@@ -43,7 +43,7 @@
 #include <ardour/audio_library.h>
 #include <ardour/configuration.h>
 #include <ardour/plugin_manager.h>
-#include <ardour/source.h>
+#include <ardour/audiosource.h>
 #include <ardour/utils.h>
 #include <ardour/session.h>
 #include <ardour/control_protocol_manager.h>
@@ -69,6 +69,7 @@ ARDOUR::OSC* ARDOUR::osc = 0;
 
 using namespace ARDOUR;
 using namespace std;
+using namespace PBD;
 
 MIDI::Port *default_mmc_port = 0;
 MIDI::Port *default_mtc_port = 0;
@@ -188,7 +189,7 @@ setup_midi ()
 }
 
 int
-ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization, void (*sighandler)(int,siginfo_t*,void*))
+ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization)
 {
         bool generic_mix_functions = true;
 
@@ -213,7 +214,7 @@ ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization, void (*s
 #endif
 
 #ifdef VST_SUPPORT
-       if (Config->get_use_vst() && fst_init (sighandler)) {
+       if (Config->get_use_vst() && fst_init ()) {
                return -1;
        }
 #endif
index c13816e648d077a23dc4c5752e44f5aeb165d23b..b70a7bbc9c0154e8af0ca4cb9f8c462f78fd8193 100644 (file)
 
 #include <ardour/ardour.h>
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
-#include <ardour/filesource.h>
+#include <ardour/audio_diskstream.h>
+#include <ardour/sndfilesource.h>
 #include <ardour/sndfile_helpers.h>
 #include <ardour/audioregion.h>
 
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 #define BLOCKSIZE 4096U
 
@@ -51,8 +52,8 @@ int
 Session::import_audiofile (import_status& status)
 {
        SNDFILE *in;
-       FileSource **newfiles = 0;
-       ARDOUR::AudioRegion::SourceList sources;
+       AudioFileSource **newfiles = 0;
+       AudioRegion::SourceList sources;
        SF_INFO info;
        float *data = 0;
        Sample **channel_data = 0;
@@ -94,7 +95,7 @@ Session::import_audiofile (import_status& status)
                }
        }
 
-       newfiles = new FileSource *[info.channels];
+       newfiles = new AudioFileSource *[info.channels];
        for (n = 0; n < info.channels; ++n) {
                newfiles[n] = 0;
        }
@@ -137,7 +138,10 @@ Session::import_audiofile (import_status& status)
 
                        
                try { 
-                       newfiles[n] = new FileSource (buf, frame_rate(), false, Config->get_native_file_data_format());
+                       newfiles[n] = new SndFileSource (buf, 
+                                                        Config->get_native_file_data_format(),
+                                                        Config->get_native_file_header_format(),
+                                                        frame_rate ());
                }
 
                catch (failed_constructor& err) {
index c3c3462016b1355ab8fdf3d236bd02a271d0f19e..fc05355d4ae821ec39fc4f13cbef4bb0b9996e7d 100644 (file)
@@ -38,7 +38,7 @@
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 Insert::Insert(Session& s, Placement p)
        : Redirect (s, s.next_insert_name(), p)
index fa30463bd465cac887d38b23cb1266b4016e5fd1..87c03c6b70fafe56440cc694af29a188dcc697ea 100644 (file)
@@ -55,7 +55,8 @@ extern "C" int isinf (double);
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
+
 
 static float current_automation_version_number = 1.0;
 
@@ -2443,12 +2444,6 @@ IO::state_factory (std::string why) const
        return state;
 }
 
-void
-IO::send_state_changed ()
-{
-       return;
-}
-
 /**
     Update the peak meters.
 
@@ -2493,7 +2488,7 @@ IO::meter ()
                } else {
                        // do falloff
                        new_peak = _visible_peak_power[n] - _session.meter_falloff();
-                       _visible_peak_power[n] = max (new_peak, -200.0f);
+                       _visible_peak_power[n] = max (new_peak, -INFINITY);
                }
        }
 }
index be8d585aaa9fc832915233befc8fd61adc726a37..352bcaeee54e1603b466f59883edf40e0e721358 100644 (file)
@@ -23,7 +23,6 @@
 #include <errno.h>
 #include <jack/jack.h>
 #include <jack/transport.h>
-#include <pbd/error.h>
 
 #include <ardour/slave.h>
 #include <ardour/session.h>
index 50757f9acd2e3c87561595cd388f7e037cc17cfe..11001655d2974efa014c1d5f5ec3377665397872 100644 (file)
@@ -49,6 +49,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 LadspaPlugin::LadspaPlugin (void *mod, AudioEngine& e, Session& session, uint32_t index, jack_nframes_t rate)
        : Plugin (e, session)
index 28ec42a3941fa451be98fbebf99adc6d69653280..b2af52284e91bfa232e575cbcd69addc23fec91d 100644 (file)
@@ -36,6 +36,7 @@
 using namespace std;
 using namespace ARDOUR;
 using namespace sigc;
+using namespace PBD;
 
 Location::Location (const Location& other)
        : _name (other._name),
index cb35c0c7858eef717b6a557af931ce8fb04c9a24..32642d570d4291cdc3132b41ae99efa5f97d42cb 100644 (file)
@@ -37,6 +37,7 @@
 using namespace ARDOUR;
 using namespace sigc;
 using namespace MIDI;
+using namespace PBD;
 
 MTC_Slave::MTC_Slave (Session& s, MIDI::Port& p) 
        : session (s)
@@ -87,7 +88,7 @@ void
 MTC_Slave::update_mtc_time (const byte *msg, bool was_full)
 {
        jack_nframes_t now = session.engine().frame_time();
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
        
        smpte.hours = msg[3];
        smpte.minutes = msg[2];
index 9c5830dfc10ca1d9dcad13278eb7a8818e0c8832..605d7cae13109346695f54525363e730bede9bf9 100644 (file)
@@ -29,6 +29,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 sigc::signal<void,NamedSelection*> NamedSelection::NamedSelectionCreated;
 
index 67b70fba0ca6dd3cf61115e6dfe7ce196a7a7a7e..5aaf9d5591fad410a1ab5159cb5c52eddfe047a4 100644 (file)
@@ -309,7 +309,6 @@ OSC::osc_receiver()
                if ((ret = poll (pfd, nfds, timeout)) < 0) {
                        if (errno == EINTR) {
                                /* gdb at work, perhaps */
-                               cerr << "EINTR hit " << endl;
                                goto again;
                        }
                        
index bc7b47273282e76734e94508f90d210c7f1f1877..83c9e6eb4d7f48854bb4cbc8246451172b52f9a9 100644 (file)
@@ -44,9 +44,9 @@
 
 #include <pbd/mathfix.h>
 
-
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 float Panner::current_automation_version_number = 1.0;
 
index 1bc6ccac6db957af9feed18e07a0a152779f7a65..7dee8667673a2a1bcd5ccebc24afff66cee8fd48 100644 (file)
@@ -41,7 +41,7 @@
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 sigc::signal<void,Playlist*> Playlist::PlaylistCreated;
 
index fc4618d1dcf7a15c82e263b3f407bf899f1e6cec..7c7060dae80099e44390f8eb7c9dee532f258a2e 100644 (file)
@@ -1,3 +1,25 @@
+/*
+    Copyright (C) 2000-2006 Paul Davis 
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id$
+*/
+
+#include <pbd/error.h>
+
 #include <ardour/session.h>
 
 #include <ardour/playlist.h>
@@ -10,6 +32,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 Region*
 ARDOUR::createRegion (const Region& region, jack_nframes_t start, 
index e9665908a3c632e998f2689f3c55b1b2cb2bc40a..2d1f8ffcbd06c888626865b65728b8eddf99482b 100644 (file)
@@ -48,6 +48,7 @@
 #include <locale.h>
 
 using namespace ARDOUR;
+using namespace PBD;
 
 Plugin::Plugin (AudioEngine& e, Session& s)
        : _engine (e), _session (s)
index e1f34199d6a42a2a6420a2c1b4dc472a45a2b69a..b096e817857e65e5fa9dcdab258cf59ef0a55e03 100644 (file)
@@ -44,6 +44,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 PluginManager* PluginManager::_manager = 0;
 
index 9a36b31c83b539b411e44c87c5086df0c69de152..fb235155f3da7f54127e27ae0c87ca4e321dfdff 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: libardour 0.664.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 15:09-0400\n"
 "PO-Revision-Date: 2003-05-21 12:50+0500\n"
 "Last-Translator: Muadibas\n"
 "Language-Team: Hellenic(Greek)\n"
@@ -15,38 +15,124 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: libs/ardour/audio_library.cc:91
-msgid "channels"
+#: libs/ardour/audio_diskstream.cc:337
+#, fuzzy
+msgid "AudioDiskstream: Session doesn't know about a Playlist called \"%1\""
+msgstr ""
+"DiskStream: Η Συνεδρία δεν γνωρίζει για την λίστα Αναπαρ/γής με όνομα \"%1\""
+
+#: libs/ardour/audio_diskstream.cc:342
+#, fuzzy
+msgid "AudioDiskstream: Playlist \"%1\" isn't an audio playlist"
+msgstr "DiskStream: Η Λίστα \"%1\" δεν είναι ηχητική λίστα αναπαρ/γής"
+
+#: libs/ardour/audio_diskstream.cc:433
+#, fuzzy
+msgid "AudioDiskstream %1: there is no existing playlist to make a copy of!"
+msgstr "DiskStream %1: δεν υπάρχει λίστα αναπαρ/γής για να γίνει αντιγραφή!"
+
+#: libs/ardour/audio_diskstream.cc:1114 libs/ardour/audio_diskstream.cc:1125
+#, fuzzy
+msgid ""
+"AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"
+msgstr ""
+"DiskStream %1: κατα την αναγόμωση, δεν μπόρεσα να διαβάσω %2 από τη λίστα "
+"αναπαρ/γής στο frame %3"
+
+#: libs/ardour/audio_diskstream.cc:1254
+#, fuzzy
+msgid "AudioDiskstream %1: cannot read %2 from playlist at frame %3"
+msgstr ""
+"DiskStream %1: δεν μπόρεσα να διαβάσω %2 από τη λίστα αναπαρ/γής στο frame %3"
+
+#: libs/ardour/audio_diskstream.cc:1621 libs/ardour/audio_diskstream.cc:1638
+#, fuzzy
+msgid "AudioDiskstream %1: cannot write to disk"
+msgstr "DiskStream %1: δεν μπορώ να γράψω στο δίσκο"
+
+#: libs/ardour/audio_diskstream.cc:1698
+#, fuzzy
+msgid "AudioDiskstream \"%1\": cannot flush captured data to disk!"
+msgstr ""
+"DiskStream \"%1\": δεν γίνεται να απορριφθούν δειγματοληψίες στο δίσκο!"
+
+#: libs/ardour/audio_diskstream.cc:1795
+msgid "%1: could not create region for complete audio file"
+msgstr "%1: δεν μπόρεσα να δημιουργήσω περιοχή για ολόκληρο audio file"
+
+#: libs/ardour/audio_diskstream.cc:1818
+#, fuzzy
+msgid "AudioDiskstream: could not create region for captured audio!"
+msgstr "DiskStream: δεν μπόρεσα να δημιουργήσω περιοχή για δειγματοληψίες!"
+
+#: libs/ardour/audio_diskstream.cc:1873
+#, fuzzy
+msgid "programmer error: %1"
+msgstr "σφάλμα προγραμματισμού: %1"
+
+#: libs/ardour/audio_diskstream.cc:2145
+#, fuzzy
+msgid "AudioDiskstream: channel %1 out of range"
+msgstr "DiskStream: κανάλι εκτός διαστήματος"
+
+#: libs/ardour/audio_diskstream.cc:2170
+msgid "%1:%2 new capture file not initialized correctly"
+msgstr "%1:%2 νέα δειγματοληψία δεν εκκινήθη σωστά"
+
+#: libs/ardour/audio_diskstream.cc:2403
+msgid "Location \"%1\" not valid for track loop (start >= end)"
+msgstr "Η Τοποθεσία \"%1\" δεν είναι ικανή για track loop (αρχή >= τέλος)"
+
+#: libs/ardour/audio_diskstream.cc:2484
+#, fuzzy
+msgid "%1: cannot restore pending capture source file %2"
+msgstr "Εισαγωγή: δεν μπορώ να ανοίξω το εισαγμένο αρχείο ήχου \"%1\""
+
+#: libs/ardour/audio_diskstream.cc:2506
+msgid "%1: incorrect number of pending sources listed - ignoring them all"
 msgstr ""
 
+#: libs/ardour/audio_diskstream.cc:2522
+msgid "%1: cannot create whole-file region from pending capture sources"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:2534
+#, fuzzy
+msgid "%1: cannot create region from pending capture sources"
+msgstr "%1: δεν μπόρεσα να δημιουργήσω περιοχή για ολόκληρο audio file"
+
 #: libs/ardour/audio_library.cc:92
+msgid "channels"
+msgstr ""
+
+#: libs/ardour/audio_library.cc:93
 #, fuzzy
 msgid "samplerate"
 msgstr "ξεχωριστό"
 
-#: libs/ardour/audio_library.cc:93
+#: libs/ardour/audio_library.cc:94
 msgid "resolution"
 msgstr ""
 
-#: libs/ardour/audio_library.cc:94
+#: libs/ardour/audio_library.cc:95
 #, fuzzy
 msgid "format"
 msgstr "float"
 
-#: libs/ardour/audio_library.cc:101
+#: libs/ardour/audio_library.cc:102
 msgid "Could not open %1.  Audio Library not saved"
 msgstr "Δεν μπόρεσα να ανοίξω το %1.  Η Audio Library δεν αποθηκεύθηκε"
 
-#: libs/ardour/audio_playlist.cc:52 libs/ardour/audio_playlist.cc:62
-#: libs/ardour/audio_playlist.cc:73 libs/ardour/audio_playlist.cc:120
+#: libs/ardour/audio_playlist.cc:53 libs/ardour/audio_playlist.cc:63
+#: libs/ardour/audio_playlist.cc:74 libs/ardour/audio_playlist.cc:121
 #: libs/ardour/insert.cc:76 libs/ardour/insert.cc:95 libs/ardour/insert.cc:120
-#: libs/ardour/insert.cc:838 libs/ardour/insert.cc:846 libs/ardour/send.cc:38
-#: libs/ardour/send.cc:52 libs/ardour/send.cc:61
-#: libs/ardour/session_state.cc:1620 libs/ardour/session_state.cc:1666
+#: libs/ardour/insert.cc:838 libs/ardour/insert.cc:846 libs/ardour/send.cc:39
+#: libs/ardour/send.cc:53 libs/ardour/send.cc:62
+#: libs/ardour/session_state.cc:1621 libs/ardour/session_state.cc:1667
 msgid "initial state"
 msgstr "πρωταρχική κατάσταση"
 
-#: libs/ardour/audio_playlist.cc:274 libs/ardour/audio_playlist.cc:768
+#: libs/ardour/audio_playlist.cc:275 libs/ardour/audio_playlist.cc:769
 msgid ""
 "programming error: non-audio Region passed to remove_overlap in audio "
 "playlist"
@@ -54,51 +140,51 @@ msgstr ""
 "σφάλμα προγραμματισμού: μη-ηχητική Περιοχή πέρασε σε remove_overlap στην "
 "audio playlist"
 
-#: libs/ardour/audio_playlist.cc:401
+#: libs/ardour/audio_playlist.cc:402
 msgid ""
 "programming error: non-audio Region tested for overlap in audio playlist"
 msgstr ""
 "σφάλμα προγραμματισμού: μη-ηχητική Περιοχή ελέγχθη για υπερπήδηση(overlap) "
 "στην λίστα αναπαρ/γής του ήχου"
 
-#: libs/ardour/audio_playlist.cc:877
+#: libs/ardour/audio_playlist.cc:878
 msgid "xfade change"
 msgstr "αλλαγή xfade"
 
-#: libs/ardour/audio_playlist.cc:926
+#: libs/ardour/audio_playlist.cc:933
 msgid "region modified"
 msgstr "η περιοχή μετεβλήθη"
 
-#: libs/ardour/audio_track.cc:121 libs/ardour/io.cc:1703
-#: libs/ardour/io.cc:1813
+#: libs/ardour/audio_track.cc:133 libs/ardour/io.cc:1716
+#: libs/ardour/io.cc:1826
 msgid "Unknown connection \"%1\" listed for input of %2"
 msgstr "Άγνωστη σύνδεση \"%1\" στη λίστα εισόδου του %2"
 
-#: libs/ardour/audio_track.cc:123 libs/ardour/io.cc:1705
-#: libs/ardour/io.cc:1815
+#: libs/ardour/audio_track.cc:135 libs/ardour/io.cc:1718
+#: libs/ardour/io.cc:1828
 #, fuzzy
 msgid "in 1"
 msgstr "in %lu"
 
-#: libs/ardour/audio_track.cc:124 libs/ardour/io.cc:1706
-#: libs/ardour/io.cc:1816
+#: libs/ardour/audio_track.cc:136 libs/ardour/io.cc:1719
+#: libs/ardour/io.cc:1829
 msgid "No input connections available as a replacement"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:128 libs/ardour/io.cc:1710
-#: libs/ardour/io.cc:1820
+#: libs/ardour/audio_track.cc:140 libs/ardour/io.cc:1723
+#: libs/ardour/io.cc:1833
 msgid "Connection %1 was not available - \"in 1\" used instead"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:137 libs/ardour/io.cc:1829
+#: libs/ardour/audio_track.cc:149 libs/ardour/io.cc:1842
 msgid "improper input channel list in XML node (%1)"
 msgstr "ακατάλληλη λίστα καναλιών εισόδου στον κόμβο XML (%1)"
 
-#: libs/ardour/audio_track.cc:182 libs/ardour/audio_track.cc:195
+#: libs/ardour/audio_track.cc:194 libs/ardour/audio_track.cc:207
 msgid "AudioTrack: diskstream \"%1\" not known by session"
 msgstr "AudioTrack: το diskstream \"%1\" είναι μή αναγνωρίσιμο από τη συνεδρία"
 
-#: libs/ardour/audio_track.cc:293
+#: libs/ardour/audio_track.cc:305
 #, fuzzy
 msgid ""
 "MIDI rec_enable control specification for %1 is incomplete, so it has been "
@@ -107,214 +193,325 @@ msgstr ""
 "Η προδιαγραφή ελέγχου του MIDI gain για το %1 είναι ημιτελής, με αποτέλεσμα "
 "να αγνοηθεί"
 
-#: libs/ardour/audio_track.cc:305
+#: libs/ardour/audio_track.cc:317
 msgid "programming error: AudioTrack given state without diskstream!"
 msgstr ""
 "σφάλμα προγραμματισμού: εδόθη κατάσταση στην AudioTrack δίχως diskstream!"
 
-#: libs/ardour/audioengine.cc:147
+#: libs/ardour/audioengine.cc:150
 msgid "cannot activate JACK client"
 msgstr "Ο JACK δεν μπορεί να ενεργοποιηθεί"
 
-#: libs/ardour/audioengine.cc:432
+#: libs/ardour/audioengine.cc:401
 msgid "register audio input port called before engine was started"
 msgstr "η register audio input port εκλήθη πριν να εκκινηθεί η engine"
 
-#: libs/ardour/audioengine.cc:463
+#: libs/ardour/audioengine.cc:432
 msgid "register audio output port called before engine was started"
 msgstr "η register audio output port εκλήθη πρίν να εκκινηθεί η engine"
 
-#: libs/ardour/audioengine.cc:524
+#: libs/ardour/audioengine.cc:493
 msgid "connect called before engine was started"
 msgstr "η σύνδεση εκλήθη πριν να εκκινηθεί η engine"
 
-#: libs/ardour/audioengine.cc:540
+#: libs/ardour/audioengine.cc:509
 msgid "AudioEngine: cannot connect %1 (%2) to %3 (%4)"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:553 libs/ardour/audioengine.cc:582
+#: libs/ardour/audioengine.cc:522 libs/ardour/audioengine.cc:551
 msgid "disconnect called before engine was started"
 msgstr "η αποσύνδεση εκλήθη πριν να εκκινηθεί η engine"
 
-#: libs/ardour/audioengine.cc:640
+#: libs/ardour/audioengine.cc:609
 msgid "get_port_by_name() called before engine was started"
 msgstr "η ρουτίνα get_port_by_name() εκλήθη πριν να εκκινηθεί η engine"
 
-#: libs/ardour/audioengine.cc:673
+#: libs/ardour/audioengine.cc:642
 msgid "get_ports called before engine was started"
 msgstr "η ρουτίνα get_ports εκλήθη πριν να εκκινηθεί η engine"
 
-#: libs/ardour/audioengine.cc:748
+#: libs/ardour/audioengine.cc:717
 msgid "get_nth_physical called before engine was started"
 msgstr "η ρουτίνα get_nth_physical εκλήθη πριν να εκκινηθεί η engine"
 
-#: libs/ardour/audioengine.cc:776
+#: libs/ardour/audioengine.cc:745
 #, fuzzy
 msgid "get_port_total_latency() called with no JACK client connection"
 msgstr "η ρουτίνα get_port_total_latency() εκλήθη πριν να εκκινηθεί η engine"
 
-#: libs/ardour/audioengine.cc:782
+#: libs/ardour/audioengine.cc:751
 msgid "get_port_total_latency() called before engine was started"
 msgstr "η ρουτίνα get_port_total_latency() εκλήθη πριν να εκκινηθεί η engine"
 
-#: libs/ardour/audioengine.cc:906
+#: libs/ardour/audioengine.cc:875
 msgid "Unable to connect to JACK server"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:909
+#: libs/ardour/audioengine.cc:878
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr ""
 
-#: libs/ardour/audioengine.cc:914
+#: libs/ardour/audioengine.cc:883
 msgid "JACK server started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:948
+#: libs/ardour/audioengine.cc:917
 msgid "cannot shutdown connection to JACK"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:973
+#: libs/ardour/audioengine.cc:942
 msgid "failed to connect to JACK"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:989
+#: libs/ardour/audioengine.cc:958
 #, fuzzy
 msgid "could not reregister %1"
 msgstr "Σφάλμα: δεν μπόρεσα να γράψω %1"
 
-#: libs/ardour/audioengine.cc:1046
+#: libs/ardour/audioengine.cc:1015
 msgid "could not reconnect %1 and %2 (err = %3)"
 msgstr ""
 
-#: libs/ardour/audiofilter.cc:44
+#: libs/ardour/audiofilesource.cc:445 libs/ardour/session_state.cc:3095
+msgid ""
+"there are already 1000 files with names like %1; versioning discontinued"
+msgstr "Υπάρχουν ήδη 1000 αρχεία με ονόματα όπως %1; μη-συνεχές versioning"
+
+#: libs/ardour/audiofilesource.cc:459 libs/ardour/session_state.cc:3109
+msgid "cannot rename audio file source from %1 to %2 (%3)"
+msgstr "δεν μπορώ να μετονομάσω την πηγή του audio file από %1 σε %2 (%3)"
+
+#: libs/ardour/audiofilesource.cc:466 libs/ardour/session_state.cc:3124
+msgid "cannot remove peakfile %1 for %2 (%3)"
+msgstr "δεν μπορώ να απαλοίψω το peakfile %1 για %2 (%3)"
+
+#: libs/ardour/audiofilesource.cc:510
+msgid "FileSource: search path not set"
+msgstr "FileSource: μονοπάτι αναζητήσεως δεν ετέθη"
+
+#: libs/ardour/audiofilesource.cc:534
+msgid ""
+"FileSource: \"%1\" is ambigous when searching %2\n"
+"\t"
+msgstr ""
+"FileSource: \"%1\" είναι αμφίβολο κατά την αναζήτηση του %2\n"
+"\t"
+
+#: libs/ardour/audiofilesource.cc:540
+#, fuzzy
+msgid "Filesource: cannot find required file (%1): while searching %2"
+msgstr "Filesource: δεν ευρέθη το απαιτούμενο αρχείο (%1): %2"
+
+#: libs/ardour/audiofilesource.cc:563
+msgid "Filesource: cannot find required file (%1): %2"
+msgstr "Filesource: δεν ευρέθη το απαιτούμενο αρχείο (%1): %2"
+
+#: libs/ardour/audiofilesource.cc:568
+msgid "Filesource: cannot check for existing file (%1): %2"
+msgstr "Filesource: δεν μπορώ να ελέγξω για το υπάρχον αρχείο (%1): %2"
+
+#: libs/ardour/audiofilesource.cc:640 libs/ardour/insert.cc:525
+#: libs/ardour/sndfilesource.cc:112
+msgid "programming error: %1"
+msgstr "σφάλμα προγραμματισμού: %1"
+
+#: libs/ardour/audiofilesource.cc:645
+#, fuzzy
+msgid "cannot rename audio file for %1 to %2"
+msgstr "δεν μπορώ να μετονομάσω την πηγή του audio file από %1 σε %2 (%3)"
+
+#: libs/ardour/audiofilter.cc:45
 msgid "audiofilter: error creating name for new audio file based on %1"
 msgstr ""
 "audiofilter: σφάλμα στη δημιουργία ονόματος για νέο audio file βασισμένο σε %"
 "1"
 
-#: libs/ardour/audiofilter.cc:54
+#: libs/ardour/audiofilter.cc:58
 msgid "audiofilter: error creating new audio file %1 (%2)"
 msgstr "audiofilter: σφάλμα στη δημιουργία νέου audio file %1 (%2)"
 
-#: libs/ardour/audioregion.cc:855 libs/ardour/audioregion.cc:917
+#: libs/ardour/audioregion.cc:857 libs/ardour/audioregion.cc:919
 #, fuzzy
 msgid "fade in change"
 msgstr "αλλαγή xfade"
 
-#: libs/ardour/audioregion.cc:1341
+#: libs/ardour/audioregion.cc:1349
 #, c-format
 msgid "normalized to %.2fdB"
 msgstr "εξομαλύνθηκε στα %.2fdB"
 
-#: libs/ardour/audioregion.cc:1359
+#: libs/ardour/audioregion.cc:1367
 #, fuzzy
 msgid "envelope change"
 msgstr "αλλαγή ενεργού"
 
-#: libs/ardour/automation_event.cc:64 libs/ardour/location.cc:344
-#: libs/ardour/tempo.cc:225
+#: libs/ardour/audiosource.cc:143
+msgid "poll on peak request pipe failed (%1)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:150
+#, fuzzy
+msgid "Error on peak thread request pipe"
+msgstr "Σφάλμα στο transport thread request pipe"
+
+#: libs/ardour/audiosource.cc:183
+#, fuzzy
+msgid "Error reading from peak request pipe"
+msgstr "Σφάλμα στην ανάγνωση από transport request pipe"
+
+#: libs/ardour/audiosource.cc:215 libs/ardour/session_butler.cc:80
+#: libs/ardour/session_midi.cc:1183
+msgid "Cannot create transport request signal pipe (%1)"
+msgstr "Δεν μπορώ να δημιουργήσω transport request signal pipe (%1)"
+
+#: libs/ardour/audiosource.cc:220 libs/ardour/audiosource.cc:225
+#, fuzzy
+msgid "UI: cannot set O_NONBLOCK on peak request pipe (%1)"
+msgstr "UI: δεν μπορώ να θέσω O_NONBLOCK στο signal read pipe (%1)"
+
+#: libs/ardour/audiosource.cc:230
+#, fuzzy
+msgid "AudioSource: could not create peak thread"
+msgstr "Source: δεν μπόρεσα να δημιουργήσω peak δέσμη"
+
+#: libs/ardour/audiosource.cc:308
+#, fuzzy
+msgid "cannot rename peakfile for %1 from %2 to %3 (%4)"
+msgstr "δεν μπορώ να απαλοίψω το peakfile %1 για %2 (%3)"
+
+#: libs/ardour/audiosource.cc:350
+#, fuzzy
+msgid "AudioSource: cannot stat peakfile \"%1\""
+msgstr "Source: δεν μπορώ να μετρήσω το αυτοστιγμεί peakfile \"%1\""
+
+#: libs/ardour/audiosource.cc:451
+msgid "cannot read sample data for unscaled peak computation"
+msgstr ""
+"δεν μπορώ να διαβάσω δεδομένα δείγματος για υπολογισμό μη-κλιμακώτου peak"
+
+#: libs/ardour/audiosource.cc:472 libs/ardour/audiosource.cc:543
+#: libs/ardour/audiosource.cc:787 libs/ardour/audiosource.cc:878
+#, fuzzy
+msgid "AudioSource: cannot open peakpath \"%1\" (%2)"
+msgstr "Source: δεν μπορώ να ανοίξω το peakpath \"%1\" (%2)"
+
+#: libs/ardour/audiosource.cc:644
+#, fuzzy
+msgid "AudioSource[%1]: peak read - cannot read %2 samples at offset %3"
+msgstr ""
+"Source[%1]: ανάγνωση peak - δεν μπορώ να διαβάσω %2 δείγματα στην αρχή"
+"(offset) %3"
+
+#: libs/ardour/audiosource.cc:798
+msgid "%1: could not write read raw data for peak computation (%2)"
+msgstr ""
+"%1: δεν μπορεσα να γράψω ανεγνωσμένα raw δεδομένα για τον υπολογισμό του "
+"peak (%2)"
+
+#: libs/ardour/audiosource.cc:823
+msgid "%1: could not write peak file data (%2)"
+msgstr "%1: δεν μπόρεσα να γράψω δεδομένα του αρχείου peak (%2)"
+
+#: libs/ardour/automation_event.cc:65 libs/ardour/location.cc:345
+#: libs/ardour/tempo.cc:226
 msgid "initial"
 msgstr "πρωταρχικό"
 
-#: libs/ardour/automation_event.cc:231
+#: libs/ardour/automation_event.cc:232
 msgid "cleared"
 msgstr "εκκαθαρίσθη"
 
-#: libs/ardour/automation_event.cc:403
+#: libs/ardour/automation_event.cc:404
 msgid "added event"
 msgstr "συμβάν προστέθηκε"
 
-#: libs/ardour/automation_event.cc:420
+#: libs/ardour/automation_event.cc:421
 msgid "removed event"
 msgstr "συμβάν απαλοίφθηκε"
 
-#: libs/ardour/automation_event.cc:435
+#: libs/ardour/automation_event.cc:436
 msgid "removed multiple events"
 msgstr "πολλαπλά συμβάντα απαλοίφθηκαν"
 
-#: libs/ardour/automation_event.cc:461
+#: libs/ardour/automation_event.cc:467 libs/ardour/automation_event.cc:498
 msgid "removed range"
 msgstr "διάστημα απαλοίφθηκε"
 
-#: libs/ardour/automation_event.cc:491
+#: libs/ardour/automation_event.cc:528
 msgid "event range adjusted"
 msgstr "διάστημα συμβάντων ρυθμίστηκε"
 
-#: libs/ardour/automation_event.cc:513
+#: libs/ardour/automation_event.cc:550
 msgid "event adjusted"
 msgstr "συμβάν ρυθμίστηκε"
 
-#: libs/ardour/automation_event.cc:628 libs/ardour/automation_event.cc:733
-#: libs/ardour/panner.cc:1040
+#: libs/ardour/automation_event.cc:665 libs/ardour/automation_event.cc:770
+#: libs/ardour/panner.cc:1041
 msgid "programming error:"
 msgstr "σφάλμα προγραμματισμού:"
 
-#: libs/ardour/automation_event.cc:1042
+#: libs/ardour/automation_event.cc:1079
 msgid "cut/copy/clear"
 msgstr "κοπή/αντιγραφή/εκκαθάριση"
 
-#: libs/ardour/automation_event.cc:1075
+#: libs/ardour/automation_event.cc:1112
 msgid "copy"
 msgstr "αντιγραφή"
 
-#: libs/ardour/automation_event.cc:1143 libs/ardour/playlist.cc:939
+#: libs/ardour/automation_event.cc:1180 libs/ardour/playlist.cc:939
 msgid "paste"
 msgstr "επικόλληση"
 
-#: libs/ardour/automation_event.cc:1198
+#: libs/ardour/automation_event.cc:1235
 msgid ""
 "automation list: no x-coordinate stored for control point (point ignored)"
 msgstr ""
 "λίστα αυτοματισμού: καμία x-συντεταγμένη αποθηκευμένη για σημείο ελέγχου (το "
 "σημείο αγνοήθηκε)"
 
-#: libs/ardour/automation_event.cc:1204
+#: libs/ardour/automation_event.cc:1241
 msgid ""
 "automation list: no y-coordinate stored for control point (point ignored)"
 msgstr ""
 "λίστα αυτοματισμού: καμία y-συντεταγμένη αποθηκευμένη για σημείο ελέγχου (το "
 "σημείο αγνοήθηκε)"
 
-#: libs/ardour/basic_ui.cc:68
-msgid "unnamed"
-msgstr ""
-
-#: libs/ardour/configuration.cc:79
+#: libs/ardour/configuration.cc:80
 #, fuzzy
 msgid "loading system configuration file %1"
 msgstr ""
 "Ardour: δεν μπορώ να διαβάσω το αρχείο διαρρυθμίσεως του συστήματος \"%1\""
 
-#: libs/ardour/configuration.cc:82
+#: libs/ardour/configuration.cc:83
 msgid "Ardour: cannot read system configuration file \"%1\""
 msgstr ""
 "Ardour: δεν μπορώ να διαβάσω το αρχείο διαρρυθμίσεως του συστήματος \"%1\""
 
-#: libs/ardour/configuration.cc:87
+#: libs/ardour/configuration.cc:88
 msgid "Ardour: system configuration file \"%1\" not loaded successfully."
 msgstr ""
 "Ardour: το αρχείο διαρρυθμίσεως του συστήματος \"%1\" δεν φορτώθηκε επιτυχώς."
 
-#: libs/ardour/configuration.cc:104
+#: libs/ardour/configuration.cc:105
 #, fuzzy
 msgid "loading user configuration file %1"
 msgstr "Ardour: αρχείο διαρρυθμίσεως μή αναγνώσιμο \"%1\""
 
-#: libs/ardour/configuration.cc:107
+#: libs/ardour/configuration.cc:108
 msgid "Ardour: cannot read configuration file \"%1\""
 msgstr "Ardour: αρχείο διαρρυθμίσεως μή αναγνώσιμο \"%1\""
 
-#: libs/ardour/configuration.cc:112
+#: libs/ardour/configuration.cc:113
 #, fuzzy
 msgid "Ardour: user configuration file \"%1\" not loaded successfully."
 msgstr "Ardour: αρχείο διαρρυθμίσεως \"%1\" δεν φορτώθηκε επιτυχώς."
 
-#: libs/ardour/configuration.cc:136
+#: libs/ardour/configuration.cc:137
 #, fuzzy
 msgid "Config file %1 not saved"
 msgstr "Αρχείο διαρρυθμίσεως δεν αποθηκεύθηκε"
 
-#: libs/ardour/configuration.cc:209
+#: libs/ardour/configuration.cc:210
 msgid "ill-formed MIDI port specification in ardour rcfile (ignored)"
 msgstr "κακοσχηματισμένος καθορισμός MIDI θύρας στο ardour rcfile (αγνοήθηκε)"
 
@@ -326,28 +523,41 @@ msgstr "Κόμβος προς Σύνδεση δεν έχει \"όνομα\" ιδ
 msgid "Node for Connection has no \"connections\" property"
 msgstr "Κόμβος προς Σύνδεση δεν έχει \"συνδέσεις\" ιδιότητα"
 
-#: libs/ardour/connection.cc:227 libs/ardour/io.cc:1889
+#: libs/ardour/connection.cc:227 libs/ardour/io.cc:1902
 msgid "IO: badly formed string in XML node for inputs \"%1\""
 msgstr "IO: κακοφτιαγμένη γραμμή στον XML κόμβο για εισόδους \"%1\""
 
-#: libs/ardour/connection.cc:232 libs/ardour/io.cc:1894
+#: libs/ardour/connection.cc:232 libs/ardour/io.cc:1907
 msgid "bad input string in XML node \"%1\""
 msgstr "κακή γραμμή εισόδου στον XML κόμβο \"%1\""
 
-#: libs/ardour/control_protocol_manager.cc:79
+#: libs/ardour/control_protocol_manager.cc:80
 msgid "control protocol name \"%1\" has no descriptor"
 msgstr ""
 
-#: libs/ardour/control_protocol_manager.cc:84
+#: libs/ardour/control_protocol_manager.cc:85
 msgid "control protocol name \"%1\" could not be initialized"
 msgstr ""
 
-#: libs/ardour/control_protocol_manager.cc:180
+#: libs/ardour/control_protocol_manager.cc:141
+msgid "Instantiating mandatory control protocol %1"
+msgstr ""
+
+#: libs/ardour/control_protocol_manager.cc:175
+#, fuzzy
+msgid "Control protocol %1 not usable"
+msgstr "Χωρίς έλεγχο MMC (θύρα MIDI \"%1\" μη διαθέσιμη)"
+
+#: libs/ardour/control_protocol_manager.cc:187
+msgid "Control surface protocol discovered: \"%1\""
+msgstr ""
+
+#: libs/ardour/control_protocol_manager.cc:205
 #, fuzzy
 msgid "ControlProtocolManager: cannot load module \"%1\" (%2)"
 msgstr "LADSPA: δεν μπορώ να φορτώσω το module \"%1\" (%2)"
 
-#: libs/ardour/control_protocol_manager.cc:188
+#: libs/ardour/control_protocol_manager.cc:213
 #, fuzzy
 msgid "ControlProtocolManager: module \"%1\" has no descriptor function."
 msgstr "LADSPA: το module \"%1\" δεν έχει λειτουργία περιγραφής."
@@ -381,372 +591,104 @@ msgstr "αλλαγή ενεργού"
 msgid "old-style crossfade information - no position information"
 msgstr "Ο κόμβος XML για την Τοποθεσία δεν έχει πληροφορίες ενάρξεως"
 
-#: libs/ardour/curve.cc:112 libs/ardour/insert.cc:454
-#: libs/ardour/session.cc:2452 libs/ardour/session.cc:2504
+#: libs/ardour/curve.cc:112 libs/ardour/globals.cc:340
+#: libs/ardour/insert.cc:454 libs/ardour/session.cc:2466
+#: libs/ardour/session.cc:2518
 msgid "programming error: "
 msgstr "σφάλμα προγραμματισμού: "
 
-#: libs/ardour/cycle_timer.cc:35
+#: libs/ardour/cycle_timer.cc:37
 msgid "CycleTimer::get_mhz(): can't open /proc/cpuinfo"
 msgstr "CycleTimer::get_mhz(): δεν ανοίγει το /proc/cpuinfo"
 
-#: libs/ardour/cycle_timer.cc:47
+#: libs/ardour/cycle_timer.cc:49
 msgid "CycleTimer::get_mhz(): cannot locate cpu MHz in /proc/cpuinfo"
 msgstr "CycleTimer::get_mhz(): δεν ευρέθη το cpu MHz στο /proc/cpuinfo"
 
-#: libs/ardour/cycle_timer.cc:70
+#: libs/ardour/cycle_timer.cc:72
 msgid "cannot locate cpu MHz in /proc/cpuinfo"
 msgstr "δεν ευρέθη το cpu MHz στο /proc/cpuinfo"
 
-#: libs/ardour/destructive_filesource.cc:197
+#: libs/ardour/destructive_filesource.cc:188
 msgid "DestructiveFileSource: \"%1\" bad read retval: %2 of %5 (%3: %4)"
 msgstr ""
 
-#: libs/ardour/destructive_filesource.cc:210
-#: libs/ardour/destructive_filesource.cc:252
-#: libs/ardour/destructive_filesource.cc:259
+#: libs/ardour/destructive_filesource.cc:201
+#: libs/ardour/destructive_filesource.cc:243
+#: libs/ardour/destructive_filesource.cc:250
 #, fuzzy
 msgid "DestructiveFileSource: \"%1\" bad write (%2)"
 msgstr "FileSource: \"%1\" κακή εγγραφή (%2)"
 
-#: libs/ardour/diskstream.cc:337
-msgid "DiskStream: Session doesn't know about a Playlist called \"%1\""
-msgstr ""
-"DiskStream: Η Συνεδρία δεν γνωρίζει για την λίστα Αναπαρ/γής με όνομα \"%1\""
-
-#: libs/ardour/diskstream.cc:342
-msgid "DiskStream: Playlist \"%1\" isn't an audio playlist"
-msgstr "DiskStream: Η Λίστα \"%1\" δεν είναι ηχητική λίστα αναπαρ/γής"
-
-#: libs/ardour/diskstream.cc:433
-msgid "DiskStream %1: there is no existing playlist to make a copy of!"
-msgstr "DiskStream %1: δεν υπάρχει λίστα αναπαρ/γής για να γίνει αντιγραφή!"
-
-#: libs/ardour/diskstream.cc:1113 libs/ardour/diskstream.cc:1124
-msgid "DiskStream %1: when refilling, cannot read %2 from playlist at frame %3"
-msgstr ""
-"DiskStream %1: κατα την αναγόμωση, δεν μπόρεσα να διαβάσω %2 από τη λίστα "
-"αναπαρ/γής στο frame %3"
-
-#: libs/ardour/diskstream.cc:1256
-msgid "DiskStream %1: cannot read %2 from playlist at frame %3"
-msgstr ""
-"DiskStream %1: δεν μπόρεσα να διαβάσω %2 από τη λίστα αναπαρ/γής στο frame %3"
-
-#: libs/ardour/diskstream.cc:1623 libs/ardour/diskstream.cc:1640
-msgid "DiskStream %1: cannot write to disk"
-msgstr "DiskStream %1: δεν μπορώ να γράψω στο δίσκο"
-
-#: libs/ardour/diskstream.cc:1700
-msgid "DiskStream \"%1\": cannot flush captured data to disk!"
-msgstr ""
-"DiskStream \"%1\": δεν γίνεται να απορριφθούν δειγματοληψίες στο δίσκο!"
-
-#: libs/ardour/diskstream.cc:1797
-msgid "%1: could not create region for complete audio file"
-msgstr "%1: δεν μπόρεσα να δημιουργήσω περιοχή για ολόκληρο audio file"
-
-#: libs/ardour/diskstream.cc:1820
-msgid "DiskStream: could not create region for captured audio!"
-msgstr "DiskStream: δεν μπόρεσα να δημιουργήσω περιοχή για δειγματοληψίες!"
-
-#: libs/ardour/diskstream.cc:1875
-#, fuzzy
-msgid "programmer error: %1"
-msgstr "σφάλμα προγραμματισμού: %1"
-
-#: libs/ardour/diskstream.cc:2155
-#, fuzzy
-msgid "DiskStream: channel %1 out of range"
-msgstr "DiskStream: κανάλι εκτός διαστήματος"
-
-#: libs/ardour/diskstream.cc:2180
-msgid "%1:%2 new capture file not initialized correctly"
-msgstr "%1:%2 νέα δειγματοληψία δεν εκκινήθη σωστά"
-
-#: libs/ardour/diskstream.cc:2413
-msgid "Location \"%1\" not valid for track loop (start >= end)"
-msgstr "Η Τοποθεσία \"%1\" δεν είναι ικανή για track loop (αρχή >= τέλος)"
-
-#: libs/ardour/diskstream.cc:2491
-#, fuzzy
-msgid "%1: cannot restore pending capture source file %2"
-msgstr "Εισαγωγή: δεν μπορώ να ανοίξω το εισαγμένο αρχείο ήχου \"%1\""
-
-#: libs/ardour/diskstream.cc:2513
-msgid "%1: incorrect number of pending sources listed - ignoring them all"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:2529
-msgid "%1: cannot create whole-file region from pending capture sources"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:2541
-#, fuzzy
-msgid "%1: cannot create region from pending capture sources"
-msgstr "%1: δεν μπόρεσα να δημιουργήσω περιοχή για ολόκληρο audio file"
-
-#: libs/ardour/filesource.cc:175
-msgid "FileSource: search path not set"
-msgstr "FileSource: μονοπάτι αναζητήσεως δεν ετέθη"
-
-#: libs/ardour/filesource.cc:190
-msgid "FileSource: \"%1\" not found when searching %2 using %3"
-msgstr "FileSource: \"%1\" δεν ευρέθη όταν αναζητείτο %2 χρησιμοποιώντας %3"
-
-#: libs/ardour/filesource.cc:196
-msgid ""
-"FileSource: \"%1\" is ambigous when searching %2\n"
-"\t"
-msgstr ""
-"FileSource: \"%1\" είναι αμφίβολο κατά την αναζήτηση του %2\n"
-"\t"
-
-#: libs/ardour/filesource.cc:231
-msgid "Filesource: cannot find required file (%1): %2"
-msgstr "Filesource: δεν ευρέθη το απαιτούμενο αρχείο (%1): %2"
-
-#: libs/ardour/filesource.cc:239
-msgid "Filesource: cannot check for existing file (%1): %2"
-msgstr "Filesource: δεν μπορώ να ελέγξω για το υπάρχον αρχείο (%1): %2"
-
-#: libs/ardour/filesource.cc:245 libs/ardour/filesource.cc:1127
-#: libs/ardour/filesource.cc:1210
-msgid "FileSource: could not open \"%1\": (%2)"
-msgstr "FileSource: δεν μπόρεσα να ανοίξω \"%1\": (%2)"
-
-#: libs/ardour/filesource.cc:278
-msgid "FileSource: cannot write header in %1"
-msgstr "FileSource: δεν μπορώ να γράψω επικεφαλίδα στο %1"
-
-#: libs/ardour/filesource.cc:293
-msgid "FileSource: cannot locate chunks in %1"
-msgstr "FileSource: δεν μπορώ να ανιχνεύσω κομμάτια στο %1"
-
-#: libs/ardour/filesource.cc:298
-msgid "FileSource: cannot read header in %1"
-msgstr "FileSource: δεν μπορώ να διαβάσω επικεφαλίδα στο %1"
-
-#: libs/ardour/filesource.cc:303
-msgid "FileSource: cannot check header in %1"
-msgstr "FileSource: δεν μπορώ να ελέγξω επικεφαλίδα στο %1"
-
-#: libs/ardour/filesource.cc:311
-#, fuzzy
-msgid "FileSource: cannot initialize peakfile for %1 as %2"
-msgstr "FileSource: δεν μπορώ να εκκινήσω το peakfile για %1"
-
-#: libs/ardour/filesource.cc:359 libs/ardour/insert.cc:525
-msgid "programming error: %1"
-msgstr "σφάλμα προγραμματισμού: %1"
-
-#: libs/ardour/filesource.cc:364
-#, fuzzy
-msgid "cannot rename audio file for %1 to %2"
-msgstr "δεν μπορώ να μετονομάσω την πηγή του audio file από %1 σε %2 (%3)"
-
-#: libs/ardour/filesource.cc:390
-msgid "FileSource: cannot seek to end of file"
-msgstr "FileSource: δεν μπορώ να ανιχνεύσω το τέλος του αρχείου"
-
-#: libs/ardour/filesource.cc:395
-msgid "FileSource: cannot read RIFF/WAVE chunk from file"
-msgstr "FileSource: δεν μπορώ να διαβάσω κομμάτι RIFF/WAVE από το αρχείο"
-
-#: libs/ardour/filesource.cc:407
-msgid "FileSource %1: not a RIFF/WAVE file"
-msgstr "FileSource %1: δεν είναι RIFF/WAVE αρχείο"
-
-#: libs/ardour/filesource.cc:434
-msgid "FileSource: can't read a chunk"
-msgstr "FileSource: δεν μπορώ να διαβάσω κομμάτι"
-
-#: libs/ardour/filesource.cc:451
-msgid "filesource: correcting mis-written RIFF file to become a RIFX: "
-msgstr ""
-
-#: libs/ardour/filesource.cc:567
-msgid "FileSource: cannot get user information for BWF header (%1)"
-msgstr ""
-"FileSource: δεν μπορώ να βρώ πληροφορίες χρήστη για επικεφαλίδα BWF (%1)"
-
-#: libs/ardour/filesource.cc:571
-msgid "FileSource: cannot get host information for BWF header (%1)"
-msgstr ""
-"FileSource: δεν μπορώ να βρώ πληροφορίες οικοδεσπότη(host) για επικεφαλίδα "
-"BWF (%1)"
-
-#: libs/ardour/filesource.cc:716
-msgid "FileSource[%1]: cannot update data size: %2"
-msgstr "FileSource[%1]: δεν μπορώ να ανανεώσω το μέγεθος δεδομένων: %2"
-
-#: libs/ardour/filesource.cc:733
-msgid "FileSource: can't find RIFF chunk info"
-msgstr "FileSource: δεν ευρέθησαν πληροφορίες για RIFF κομμάτι"
-
-#: libs/ardour/filesource.cc:737
-#, fuzzy
-msgid "FileSource: can't find RIFX chunk info"
-msgstr "FileSource: δεν ευρέθησαν πληροφορίες για RIFF κομμάτι"
-
-#: libs/ardour/filesource.cc:758
-msgid "FileSource: can't read RIFF chunk"
-msgstr "FileSource: δεν μπορώ να διαβάσω RIFF κομμάτι"
-
-#: libs/ardour/filesource.cc:768
-msgid "FileSource: can't find format chunk info"
-msgstr "FileSource: δεν ευρέθησαν πληροφορίες για το κομμάτι φορμαρίσματος"
-
-#: libs/ardour/filesource.cc:773
-msgid "FileSource: can't read format chunk"
-msgstr "FileSource: δεν μπορώ να διαβάσω το κομμάτι φορμαρίσματος"
-
-#: libs/ardour/filesource.cc:782
-msgid "FileSource: can't find data chunk info"
-msgstr "FileSource: δεν μπορώ να βρώ πληροφορίες για το κομμάτι δεδομένων"
-
-#: libs/ardour/filesource.cc:787
-msgid "FileSource: can't read data chunk"
-msgstr "FileSource: δεν μπορώ να διαβάσω το κομμάτι δεδομένων"
-
-#: libs/ardour/filesource.cc:804
-msgid ""
-"FileSource: cannot read Broadcast Wave data from existing audio file \"%1"
-"\" (%2)"
-msgstr ""
-"FileSource: δεν μπορώ να διαβάσω δεδομένα Broadcast Wave από το υπάρχον "
-"αρχείο \"%1\" (%2)"
-
-#: libs/ardour/filesource.cc:820
-msgid ""
-"FileSource: cannot read Broadcast Wave coding history from audio file \"%1"
-"\" (%2)"
-msgstr ""
-"FileSource: δεν μπορώ να διαβάσω το ιστορικό του κώδικα Broadcast Wave από "
-"το αρχείο \"%1\" (%2)"
-
-#: libs/ardour/filesource.cc:862
-#, fuzzy
-msgid ""
-"FileSource \"%1\" does not use valid sample format.\n"
-"This is probably a programming error."
-msgstr ""
-"FileSource \"%1\" δεν χρησιμοποιεί format μεταβλητής υποδιαστολής.\n"
-"Αυτό πιθανόν να είναι σφάλμα προγραμματισμού."
-
-#: libs/ardour/filesource.cc:901
-msgid "FileSource \"%1\" has no \"data\" chunk"
-msgstr "FileSource \"%1\" δεν έχει \"data\" κομμάτι"
-
-#: libs/ardour/filesource.cc:906
-msgid "%1: data length in header (%2) differs from implicit size in file (%3)"
-msgstr ""
-"%1: το μέγεθος δεδομένων της επικεφαλίδας (%2) διαφέρει από το δεδηλωμένο "
-"μέγεθος στο αρχείο (%3)"
-
-#: libs/ardour/filesource.cc:911
-msgid "\"%1\" has a sample rate of %2 instead of %3 as used by this session"
-msgstr ""
-"\"%1\" έχει ρυθμό δειγματοληψίας %2 αντί του %3 όπως στην παρούσα συνεδρία"
-
-#: libs/ardour/filesource.cc:934
-msgid "FileSource: cannot write WAVE chunk: %1"
-msgstr "FileSource: δεν μπορώ να γράψω WAVE κομμάτι: %1"
-
-#: libs/ardour/filesource.cc:978
-msgid "FileSource: cannot write format chunk: %1"
-msgstr "FileSource: δεν μπορώ να γράψω format κομμάτι: %1"
-
-#: libs/ardour/filesource.cc:990
-msgid "FileSource: cannot data chunk: %1"
-msgstr "FileSource: cδεν μπορώ να γράψω κομμάτι δεδομένων: %1"
-
-#: libs/ardour/filesource.cc:1103 libs/ardour/filesource.cc:1188
-msgid "FileSource: \"%1\" bad write (%2)"
-msgstr "FileSource: \"%1\" κακή εγγραφή (%2)"
-
-#: libs/ardour/filesource.cc:1335 libs/ardour/session_state.cc:3093
-msgid ""
-"there are already 1000 files with names like %1; versioning discontinued"
-msgstr "Υπάρχουν ήδη 1000 αρχεία με ονόματα όπως %1; μη-συνεχές versioning"
-
-#: libs/ardour/filesource.cc:1349 libs/ardour/session_state.cc:3107
-msgid "cannot rename audio file source from %1 to %2 (%3)"
-msgstr "δεν μπορώ να μετονομάσω την πηγή του audio file από %1 σε %2 (%3)"
-
-#: libs/ardour/filesource.cc:1356 libs/ardour/session_state.cc:3122
-msgid "cannot remove peakfile %1 for %2 (%3)"
-msgstr "δεν μπορώ να απαλοίψω το peakfile %1 για %2 (%3)"
-
-#: libs/ardour/globals.cc:82
+#: libs/ardour/globals.cc:109
 msgid "no MIDI ports specified: no MMC or MTC control possible"
 msgstr "καμία MIDI θύρα δεν επελέχθη: έλεγχος MMC ή MTC αδύνατος"
 
-#: libs/ardour/globals.cc:97
+#: libs/ardour/globals.cc:124
 msgid "MIDI port specifications for \"%1\" are not understandable."
 msgstr "Οι προδιαγραφές της θύρας MIDI για το \"%1\" δεν είναι κατανοητές."
 
-#: libs/ardour/globals.cc:110 libs/ardour/globals.cc:114
-#: libs/ardour/globals.cc:118
+#: libs/ardour/globals.cc:137 libs/ardour/globals.cc:141
+#: libs/ardour/globals.cc:145
 msgid "default"
 msgstr "προκαθορισμένο"
 
-#: libs/ardour/globals.cc:146
+#: libs/ardour/globals.cc:173
 msgid "No MMC control (MIDI port \"%1\" not available)"
 msgstr "Χωρίς έλεγχο MMC (θύρα MIDI \"%1\" μη διαθέσιμη)"
 
-#: libs/ardour/globals.cc:152
+#: libs/ardour/globals.cc:179
 msgid "No MTC support (MIDI port \"%1\" not available)"
 msgstr "Χωρίς έλεγχο MTC (θύρα MIDI \"%1\" μη διαθέσιμη)"
 
-#: libs/ardour/globals.cc:157
+#: libs/ardour/globals.cc:184
 #, fuzzy
 msgid "No MIDI parameter support (MIDI port \"%1\" not available)"
 msgstr "Χωρίς έλεγχο MTC (θύρα MIDI \"%1\" μη διαθέσιμη)"
 
-#: libs/ardour/import.cc:71
+#: libs/ardour/import.cc:75
 msgid "Import: cannot open input sound file \"%1\""
 msgstr "Εισαγωγή: δεν μπορώ να ανοίξω το εισαγμένο αρχείο ήχου \"%1\""
 
-#: libs/ardour/import.cc:76
+#: libs/ardour/import.cc:80
 msgid "resampling audio"
 msgstr "επανά-ληψη(resampling) ήχου"
 
-#: libs/ardour/import.cc:80
+#: libs/ardour/import.cc:84
 msgid "Import: cannot open converted sound file \"%1\""
 msgstr "Εισαγωγή: δεν μπορώ να ανοίξω το τροποποιημένο αρχείο ήχου \"%1\""
 
-#: libs/ardour/import.cc:85
+#: libs/ardour/import.cc:89
 msgid "Import: error while resampling sound file \"%1\""
 msgstr "Εισαγωγή: σφάλμα κατά την τροποποίηση αρχείου \"%1\""
 
-#: libs/ardour/import.cc:141
+#: libs/ardour/import.cc:148
 msgid "Session::import_audiofile: cannot open new file source for channel %1"
 msgstr ""
 "Συνεδρία::εισαγωγή_αρχείου: δεν μπορώ να ανοίξω νέα πηγή αρχείου για το "
 "κανάλι %1"
 
-#: libs/ardour/import.cc:160
+#: libs/ardour/import.cc:167
 msgid "converting audio"
 msgstr "μετατροπή ήχου"
 
-#: libs/ardour/import.cc:192
+#: libs/ardour/import.cc:199
 msgid "building region"
 msgstr "χτίσιμο περιοχής"
 
-#: libs/ardour/import.cc:194
+#: libs/ardour/import.cc:201
 msgid "building regions"
 msgstr "χτίσιμο περιοχών"
 
-#: libs/ardour/import.cc:318
+#: libs/ardour/import.cc:325
 msgid "Import: could not open temp file: %1"
 msgstr "Εισαγωγή: δεν μπόρεσα να ανοίξω το temp αρχείο: %1"
 
-#: libs/ardour/import.cc:327
+#: libs/ardour/import.cc:334
 msgid "Import: src_new() failed : %1"
 msgstr "Εισαγωγή: src_new() απέτυχε : %1"
 
-#: libs/ardour/import.cc:355
+#: libs/ardour/import.cc:362
 msgid "Import: %1"
 msgstr "Εισαγωγή: %1"
 
@@ -805,153 +747,153 @@ msgstr "PortInsert: δεν μπορεί να προστεθεί θύρα εξό
 msgid "non-port insert XML used for port plugin insert"
 msgstr "εισαγωγή μη-θύρας XML για χρήση σε εισαγωγή  plugin θύρας"
 
-#: libs/ardour/io.cc:585
+#: libs/ardour/io.cc:598
 msgid "IO: cannot disconnect input port %1 from %2"
 msgstr "IO: δεν μπορει να αποσυνδεθεί η θύρα εισόδου %1 από %2"
 
-#: libs/ardour/io.cc:653
+#: libs/ardour/io.cc:666
 msgid "IO: cannot disconnect output port %1 from %2"
 msgstr "IO: δεν μπορεί να αποσυνδεθεί η θύρα εξόδου %1 από %2"
 
-#: libs/ardour/io.cc:794 libs/ardour/io.cc:1138 libs/ardour/io.cc:1264
+#: libs/ardour/io.cc:807 libs/ardour/io.cc:1151 libs/ardour/io.cc:1277
 #, c-format
 msgid "%s/out"
 msgstr "%s/out"
 
-#: libs/ardour/io.cc:796 libs/ardour/io.cc:1140 libs/ardour/io.cc:1266
-#: libs/ardour/io.cc:2826
+#: libs/ardour/io.cc:809 libs/ardour/io.cc:1153 libs/ardour/io.cc:1279
+#: libs/ardour/io.cc:2849
 #, c-format
 msgid "%s/out %u"
 msgstr "%s/out %u"
 
-#: libs/ardour/io.cc:800 libs/ardour/io.cc:1145 libs/ardour/io.cc:1270
+#: libs/ardour/io.cc:813 libs/ardour/io.cc:1158 libs/ardour/io.cc:1283
 msgid "IO: cannot register output port %1"
 msgstr "IO: δεν μπορει να καταχώρηθεί η θύρα εξόδου %1"
 
-#: libs/ardour/io.cc:895 libs/ardour/io.cc:998 libs/ardour/io.cc:1104
+#: libs/ardour/io.cc:908 libs/ardour/io.cc:1011 libs/ardour/io.cc:1117
 #, c-format
 msgid "%s/in"
 msgstr "%s/in"
 
-#: libs/ardour/io.cc:897 libs/ardour/io.cc:1001 libs/ardour/io.cc:1107
-#: libs/ardour/io.cc:2796
+#: libs/ardour/io.cc:910 libs/ardour/io.cc:1014 libs/ardour/io.cc:1120
+#: libs/ardour/io.cc:2819
 #, c-format
 msgid "%s/in %u"
 msgstr "%s/in %u"
 
-#: libs/ardour/io.cc:901 libs/ardour/io.cc:1007 libs/ardour/io.cc:1112
+#: libs/ardour/io.cc:914 libs/ardour/io.cc:1020 libs/ardour/io.cc:1125
 msgid "IO: cannot register input port %1"
 msgstr "IO: δεν μπορεί να καταχώρηθεί η θύρα εισόδου %1"
 
-#: libs/ardour/io.cc:1528
+#: libs/ardour/io.cc:1541
 msgid "IO::connecting_became_legal() called without a pending state node"
 msgstr ""
 "IO::connecting_became_legal() εκλήθη χωρίς κόμβο καταστάσεως εν αναμονή"
 
-#: libs/ardour/io.cc:1551
+#: libs/ardour/io.cc:1564
 msgid "IO::ports_became_legal() called without a pending state node"
 msgstr "IO::ports_became_legal() εκλήθη χωρίς κόμβο καταστάσεως εν αναμονή"
 
-#: libs/ardour/io.cc:1581
+#: libs/ardour/io.cc:1594
 msgid "incorrect XML node \"%1\" passed to IO object"
 msgstr "μη-σωστός κόμβος XML \"%1\" πέρασε στο IO αντικείμενο"
 
-#: libs/ardour/io.cc:1636
+#: libs/ardour/io.cc:1649
 msgid ""
 "MIDI gain control specification for %1 is incomplete, so it has been ignored"
 msgstr ""
 "Η προδιαγραφή ελέγχου του MIDI gain για το %1 είναι ημιτελής, με αποτέλεσμα "
 "να αγνοηθεί"
 
-#: libs/ardour/io.cc:1726 libs/ardour/io.cc:1838
+#: libs/ardour/io.cc:1739 libs/ardour/io.cc:1851
 msgid "Unknown connection \"%1\" listed for output of %2"
 msgstr "Άγνωστη σύνδεση \"%1\" καταχωρήθη για την έξοδο του %2"
 
-#: libs/ardour/io.cc:1728 libs/ardour/io.cc:1840
+#: libs/ardour/io.cc:1741 libs/ardour/io.cc:1853
 #, fuzzy
 msgid "out 1"
 msgstr "out %lu"
 
-#: libs/ardour/io.cc:1729 libs/ardour/io.cc:1841
+#: libs/ardour/io.cc:1742 libs/ardour/io.cc:1854
 msgid "No output connections available as a replacement"
 msgstr ""
 
-#: libs/ardour/io.cc:1733 libs/ardour/io.cc:1845
+#: libs/ardour/io.cc:1746 libs/ardour/io.cc:1858
 msgid "Connection %1 was not available - \"out 1\" used instead"
 msgstr ""
 
-#: libs/ardour/io.cc:1747
+#: libs/ardour/io.cc:1760
 msgid "%1: cannot create I/O ports"
 msgstr "%1: θύρες I/O δεν μπορούν να δημιουργηθούν"
 
-#: libs/ardour/io.cc:1854
+#: libs/ardour/io.cc:1867
 msgid "improper output channel list in XML node (%1)"
 msgstr "ασαφής λίστα καναλιών εξόδου στον κόμβο XML (%1)"
 
-#: libs/ardour/io.cc:1939
+#: libs/ardour/io.cc:1952
 msgid "IO: badly formed string in XML node for outputs \"%1\""
 msgstr "IO: δύσμορφη γραμμή στον κόμβο XML για τις εξόδους \"%1\""
 
-#: libs/ardour/io.cc:1944
+#: libs/ardour/io.cc:1957
 msgid "IO: bad output string in XML node \"%1\""
 msgstr "IO: κακή γραμμή εξόδουστον κόμβο XML \"%1\""
 
-#: libs/ardour/io.cc:2502
+#: libs/ardour/io.cc:2525
 msgid "%1: could not open automation event file \"%2\""
 msgstr "%1: δεν μπόρεσα να ανοίξω το αρχείο συμβάντων αυτοματισμού \"%2\""
 
-#: libs/ardour/io.cc:2541
+#: libs/ardour/io.cc:2564
 msgid "%1: cannot open automation event file \"%2\""
 msgstr "%1: δεν μπορώ να ανοίξω το αρχείο συμβάντων αυτοματισμού \"%2\""
 
-#: libs/ardour/io.cc:2556
+#: libs/ardour/io.cc:2579
 msgid "badly formed version number in automation event file \"%1\""
 msgstr "δύσμορφος αριθμός εκδόσεως στο αρχείο συμβάντων αυτοματισμού \"%1\""
 
-#: libs/ardour/io.cc:2560
+#: libs/ardour/io.cc:2583
 msgid "no version information in automation event file \"%1\""
 msgstr ""
 "δεν υπάρχουν πληροφορίες περί εκδόσεων στο αρχείο συμβάντων αυτοματισμού \"%1"
 "\""
 
-#: libs/ardour/io.cc:2565
+#: libs/ardour/io.cc:2588
 msgid "mismatched automation event file version (%1)"
 msgstr "αταίριαστη έκδοση αρχείου συμβάντων αυτοματισμού (%1)"
 
-#: libs/ardour/io.cc:2573
+#: libs/ardour/io.cc:2596
 msgid "badly formatted automation event record at line %1 of %2 (ignored)"
 msgstr ""
 "κακώς φορμαρισμένη καταγραφή συμβάντων αυτοματισμού στη γραμμή %1 of %2 "
 "(αγνοήθηκε)"
 
-#: libs/ardour/io.cc:2593
+#: libs/ardour/io.cc:2616
 msgid "dubious automation event found (and ignored)"
 msgstr "αβέβαιο συμβάν αυτοματισμού ευρέθηκε (και αγνοήθηκε)"
 
-#: libs/ardour/io.cc:2597 libs/ardour/panner.cc:437
+#: libs/ardour/io.cc:2620 libs/ardour/panner.cc:438
 #: libs/ardour/redirect.cc:148
 msgid "loaded from disk"
 msgstr "φορτώθηκε από το δίσκο"
 
-#: libs/ardour/io.cc:2768
+#: libs/ardour/io.cc:2791
 msgid "automation write/touch"
 msgstr "αυτοματισμός εγγραφή/αφή(write/touch)"
 
-#: libs/ardour/ladspa_plugin.cc:86
+#: libs/ardour/ladspa_plugin.cc:87
 msgid "LADSPA: module has no descriptor function."
 msgstr "LADSPA: το module δεν έχει ενδεικτική λειτουργία."
 
-#: libs/ardour/ladspa_plugin.cc:91
+#: libs/ardour/ladspa_plugin.cc:92
 msgid "LADSPA: plugin has gone away since discovery!"
 msgstr "LADSPA: το plugin την 'κοπάνισε' μετά την ανακάλυψη του!"
 
-#: libs/ardour/ladspa_plugin.cc:98
+#: libs/ardour/ladspa_plugin.cc:99
 msgid "LADSPA: \"%1\" cannot be used, since it cannot do inplace processing"
 msgstr ""
 "LADSPA: \"%1\" δεν μπορεί να χρησιμοποιηθεί, εφ'όσον δεν μπορεί να κάνει επι "
 "τόπου επεξεργασία"
 
-#: libs/ardour/ladspa_plugin.cc:328
+#: libs/ardour/ladspa_plugin.cc:329
 msgid ""
 "illegal parameter number used with plugin \"%1\". This mayindicate a change "
 "in the plugin design, and presets may beinvalid"
@@ -960,20 +902,20 @@ msgstr ""
 "ενδείκνυται αλλαγή στο σχεδιασμό του plugin, και οι ρυθμίσεις ίσως να είναι "
 "άκυρες"
 
-#: libs/ardour/ladspa_plugin.cc:429
+#: libs/ardour/ladspa_plugin.cc:430
 #, fuzzy
 msgid "Bad node sent to LadspaPlugin::set_state"
 msgstr "Κακή αποστολή κόμβου εστάλη στο LadspaPlugin::set_state"
 
-#: libs/ardour/ladspa_plugin.cc:442
+#: libs/ardour/ladspa_plugin.cc:443
 msgid "LADSPA: no ladspa port number"
 msgstr "LADSPA: κανείς αριθμός θύρας ladspa"
 
-#: libs/ardour/ladspa_plugin.cc:448
+#: libs/ardour/ladspa_plugin.cc:449
 msgid "LADSPA: no ladspa port data"
 msgstr "LADSPA: κανένα δεδομένο θύρας ladspa"
 
-#: libs/ardour/ladspa_plugin.cc:497
+#: libs/ardour/ladspa_plugin.cc:498
 msgid ""
 "LADSPA LadspaPlugin MIDI control specification for port %1 is incomplete, so "
 "it has been ignored"
@@ -981,131 +923,131 @@ msgstr ""
 "Ο καθορισμός ελέγχου LADSPA LadspaPlugin για MIDI για την θύρα %1 είναι "
 "ημιτελής, έτσι αγνοήθηκε."
 
-#: libs/ardour/location.cc:268
+#: libs/ardour/location.cc:269
 msgid "incorrect XML node passed to Location::set_state"
 msgstr "λανθασμένος κόμβος XML πέρασε στην Τοποθεσία::set_state"
 
-#: libs/ardour/location.cc:275
+#: libs/ardour/location.cc:276
 msgid "XML node for Location has no name information"
 msgstr "Ο κόμβος XML για την Τοποθεσία δεν έχει πληροφορίες ονόματος"
 
-#: libs/ardour/location.cc:282
+#: libs/ardour/location.cc:283
 msgid "XML node for Location has no start information"
 msgstr "Ο κόμβος XML για την Τοποθεσία δεν έχει πληροφορίες ενάρξεως"
 
-#: libs/ardour/location.cc:293
+#: libs/ardour/location.cc:294
 msgid "XML node for Location has no end information"
 msgstr "Ο κόμβος XML για την Τοποθεσία δεν έχει πληροφορίες τέλους"
 
-#: libs/ardour/location.cc:302
+#: libs/ardour/location.cc:303
 msgid "XML node for Location has no flags information"
 msgstr "Ο κόμβος XML για την Τοποθεσία δεν έχει πληροφορίες για σημαίες(flags)"
 
-#: libs/ardour/location.cc:390
+#: libs/ardour/location.cc:391
 msgid "Locations: attempt to use unknown location as selected location"
 msgstr ""
 "Τοποθεσίες: απόπειρα να χρησιμοποιηθεί άγνωστη τοποθεσία σαν επιλεγμένη "
 "τοποθεσία"
 
-#: libs/ardour/location.cc:417 libs/ardour/playlist.cc:1187
+#: libs/ardour/location.cc:418 libs/ardour/playlist.cc:1187
 msgid "clear"
 msgstr "εκκαθάριση"
 
-#: libs/ardour/location.cc:442
+#: libs/ardour/location.cc:443
 msgid "clear markers"
 msgstr "εκκαθάριση στιγμάτων"
 
-#: libs/ardour/location.cc:470
+#: libs/ardour/location.cc:471
 msgid "clear ranges"
 msgstr "εκκαθάριση διαστημάτων"
 
-#: libs/ardour/location.cc:488
+#: libs/ardour/location.cc:489
 msgid "add"
 msgstr "πρόσθεση"
 
-#: libs/ardour/location.cc:526
+#: libs/ardour/location.cc:527
 msgid "remove"
 msgstr "απαλοιφή"
 
-#: libs/ardour/location.cc:566
+#: libs/ardour/location.cc:567
 msgid "incorrect XML mode passed to Locations::set_state"
 msgstr "λανθασμένο XML mode πέρασε στις Τοποθεσίες::set_state"
 
-#: libs/ardour/mtc_slave.cc:195
+#: libs/ardour/mtc_slave.cc:196
 msgid "MTC Slave: atomic read of current time failed, sleeping!"
 msgstr ""
 "MTC Slave: ατομική ανάγνωση του τρέχοντος χρόνου απέτυχε, πίσω για ύπνο!"
 
-#: libs/ardour/named_selection.cc:76
+#: libs/ardour/named_selection.cc:77
 msgid "Chunk %1 uses an unknown playlist \"%2\""
 msgstr "Το κομμάτι %1 χρησιμοποιεί άγνωστη λίστα αναπαρ/γής \"%2\""
 
-#: libs/ardour/named_selection.cc:79
+#: libs/ardour/named_selection.cc:80
 msgid "Chunk %1 contains misformed playlist information"
 msgstr "Το κομμάτι %1 περιέχει δύσμορφες πληροφορίες για τη λίστα αναπαρ/γής"
 
-#: libs/ardour/panner.cc:255
+#: libs/ardour/panner.cc:256
 #, fuzzy
 msgid "MIDI pan control specification is incomplete, so it has been ignored"
 msgstr ""
 "Η προδιαγραφή ελέγχου του MIDI gain για το %1 είναι ημιτελής, με αποτέλεσμα "
 "να αγνοηθεί"
 
-#: libs/ardour/panner.cc:360
+#: libs/ardour/panner.cc:361
 msgid "automation write pass"
 msgstr "πέρασμα εγγραφής αυτοματισμού"
 
-#: libs/ardour/panner.cc:400
+#: libs/ardour/panner.cc:401
 #, c-format
 msgid "error writing pan automation file (%s)"
 msgstr "σφάλμα στην εγγραφή του pan στο αρχείο αυτοματισμού (%s)"
 
-#: libs/ardour/panner.cc:428
+#: libs/ardour/panner.cc:429
 msgid ""
 "badly formatted pan automation event record at line %1 of %2 (ignored) [%3]"
 msgstr ""
 "δύσμορφη εγγραφή συμβάντος pan αυτοματισμού στη γραμμή %1 of %2 (αγνοήθηκε) "
 "[%3]"
 
-#: libs/ardour/panner.cc:943
+#: libs/ardour/panner.cc:944
 msgid "badly-formed positional data for Multi2dPanner - ignored"
 msgstr "δύσμορφα δεδομένα θέσεως για το Multi2dPanner - αγνοήθηκε"
 
-#: libs/ardour/panner.cc:1236
+#: libs/ardour/panner.cc:1237
 msgid "cannot open pan automation file \"%1\" for saving (%s)"
 msgstr ""
 "δεν μπορώ να ανοίξω αρχείο αυτοματισμού του pan \"%1\" για αποθήκευση (%s)"
 
-#: libs/ardour/panner.cc:1272
+#: libs/ardour/panner.cc:1273
 msgid "cannot open pan automation file %1 (%2)"
 msgstr "δεν μπορώ να ανοίξω αρχείο αυτοματισμού του pan %1 (%2)"
 
-#: libs/ardour/panner.cc:1285
+#: libs/ardour/panner.cc:1286
 msgid "badly formed version number in pan automation event file \"%1\""
 msgstr ""
 "δύσμορφος αριθμός εκδόσεως στο αρχείο συμβάντων αυτοματισμού του pan \"%1\""
 
-#: libs/ardour/panner.cc:1289
+#: libs/ardour/panner.cc:1290
 msgid ""
 "no version information in pan automation event file \"%1\" (first line = %2)"
 msgstr ""
 "καμία πληροφορία εκδόσεως στο αρχείο συμβάντων αυτοματισμού του pan \"%1"
 "\" (πρώτη γραμμή = %2)"
 
-#: libs/ardour/panner.cc:1295
+#: libs/ardour/panner.cc:1296
 msgid "mismatched pan automation event file version (%1)"
 msgstr "αταίριαστη έκδοση αρχείου συμβάντων αυτοματισμού για το pan (%1)"
 
-#: libs/ardour/panner.cc:1309
+#: libs/ardour/panner.cc:1310
 msgid "too many panner states found in pan automation file %1"
 msgstr ""
 "πάρα πολλές καταστάσεις panner ευρέθησαν στο αρχείο των αυτοματισμών pan %1"
 
-#: libs/ardour/panner.cc:1450
+#: libs/ardour/panner.cc:1451
 msgid "Unknown panner plugin \"%1\" found in pan state - ignored"
 msgstr "Άγνωστο plugin για panner \"%1\" ευρέθη στην κατάσταση pan - αγνοήθηκε"
 
-#: libs/ardour/panner.cc:1456
+#: libs/ardour/panner.cc:1457
 msgid "panner plugin node has no type information!"
 msgstr "ο κόμβος για τα plugin του panner δεν  έχει πληροφορίες τύπου!"
 
@@ -1160,63 +1102,63 @@ msgstr "Playlist: δεν μπορώ να δημιουργήσω Περιοχή 
 msgid "nudged"
 msgstr "νυχθέν"
 
-#: libs/ardour/playlist_factory.cc:26 libs/ardour/playlist_factory.cc:41
+#: libs/ardour/playlist_factory.cc:49 libs/ardour/playlist_factory.cc:64
 msgid ""
 "programming error: Playlist::createRegion called with unknown Region type"
 msgstr ""
 "σφάλμα προγραμματισμού: Playlist::createRegion εκλήθη με άγνωστο τύπο Πε"
 
-#: libs/ardour/playlist_factory.cc:63
+#: libs/ardour/playlist_factory.cc:86
 msgid ""
 "programming error: Playlist::copyPlaylist called with unknown Playlist type"
 msgstr ""
 "σφάλμα προγραμματισμού: Playlist::copyPlaylist με άγνωστο τύπο Playlist"
 
-#: libs/ardour/plugin.cc:327
+#: libs/ardour/plugin.cc:328
 msgid "Could not locate HOME.  Preset not saved."
 msgstr "Δεν μπόρεσα να βρώ το HOME.  Προ-ρύθμιση δεν αποθηκεύθηκε."
 
-#: libs/ardour/plugin.cc:337 libs/ardour/plugin.cc:343
+#: libs/ardour/plugin.cc:338 libs/ardour/plugin.cc:344
 msgid "Could not create %1.  Preset not saved. (%2)"
 msgstr "Δεν μπόρεσα να δημιουργήσω το %1.  Προ-ρύθμιση δεν αποθηκεύθηκε. (%2)"
 
-#: libs/ardour/plugin.cc:348
+#: libs/ardour/plugin.cc:349
 msgid "Error saving presets file %1."
 msgstr "Σφάλμα στην αποθήκευση αρχείου προ-ρυθμίσεων %1."
 
-#: libs/ardour/plugin_manager.cc:193
+#: libs/ardour/plugin_manager.cc:194
 msgid "Could not parse rdf file: %1"
 msgstr "Δεν μπόρεσα να αναλύσω το αρχείο rdf: %1"
 
-#: libs/ardour/plugin_manager.cc:234
+#: libs/ardour/plugin_manager.cc:235
 msgid "LADSPA: cannot load module \"%1\" (%2)"
 msgstr "LADSPA: δεν μπορώ να φορτώσω το module \"%1\" (%2)"
 
-#: libs/ardour/plugin_manager.cc:241
+#: libs/ardour/plugin_manager.cc:242
 msgid "LADSPA: module \"%1\" has no descriptor function."
 msgstr "LADSPA: το module \"%1\" δεν έχει λειτουργία περιγραφής."
 
-#: libs/ardour/plugin_manager.cc:296
+#: libs/ardour/plugin_manager.cc:297
 msgid "VST: cannot load module from \"%1\""
 msgstr "VST: δεν μπορώ να φορτώσω module από \"%1\""
 
-#: libs/ardour/plugin_manager.cc:301
+#: libs/ardour/plugin_manager.cc:302
 msgid "You asked ardour to not use any VST plugins"
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:304
+#: libs/ardour/plugin_manager.cc:305
 msgid "This version of ardour has no support for VST plugins"
 msgstr "Η παρούσα έκδοση του ardour δεν υποστηρίζει VST plugins"
 
-#: libs/ardour/plugin_manager.cc:311
+#: libs/ardour/plugin_manager.cc:312
 msgid "LADSPA: cannot load module from \"%1\""
 msgstr "LADSPA: δεν μπορώ να φορτώσω module από \"%1\""
 
-#: libs/ardour/plugin_manager.cc:373 libs/ardour/plugin_manager.cc:385
+#: libs/ardour/plugin_manager.cc:374 libs/ardour/plugin_manager.cc:386
 msgid "Unknown"
 msgstr "Άγνωστο"
 
-#: libs/ardour/plugin_manager.cc:463
+#: libs/ardour/plugin_manager.cc:464
 msgid ""
 "VST plugin %1 does not support processReplacing, and so cannot be used in "
 "ardour at this time"
@@ -1232,11 +1174,11 @@ msgstr "δεν μπορώ να ανοίξω το πρόσφατο αρχείο 
 msgid "programming error: unknown Redirect type in Redirect::Clone!\n"
 msgstr "σφάλμα προγραμματισμού: άγνωστος τύπος Redirect στο Redirect::Clone!\n"
 
-#: libs/ardour/redirect.cc:102 libs/ardour/utils.cc:199
+#: libs/ardour/redirect.cc:102 libs/ardour/utils.cc:203
 msgid "pre"
 msgstr "pre"
 
-#: libs/ardour/redirect.cc:104 libs/ardour/utils.cc:202
+#: libs/ardour/redirect.cc:104 libs/ardour/utils.cc:206
 msgid "post"
 msgstr "post"
 
@@ -1293,67 +1235,67 @@ msgstr ""
 msgid "active_changed"
 msgstr "αλλαγή_ενεργού"
 
-#: libs/ardour/region.cc:884
+#: libs/ardour/region.cc:885
 msgid "Session: XMLNode describing a Region is incomplete (no id)"
 msgstr "Συνεδρία: XMLΚόμβος που περιγράφει Περιοχή είναι ημιτελής (χωρίς id)"
 
-#: libs/ardour/region.cc:891
+#: libs/ardour/region.cc:892
 msgid "Session: XMLNode describing a Region is incomplete (no name)"
 msgstr ""
 "Συνεδρία: XMLΚόμβος που περιγράφει Περιοχή είναι ημιτελής (χωρίς όνομα)"
 
-#: libs/ardour/route.cc:79 libs/ardour/session.cc:1541
-#: libs/ardour/session.cc:1547 libs/ardour/session.cc:3064
+#: libs/ardour/route.cc:79 libs/ardour/session.cc:1554
+#: libs/ardour/session.cc:1560 libs/ardour/session.cc:3093
 msgid "signal"
 msgstr "σήμα"
 
-#: libs/ardour/route.cc:1433
+#: libs/ardour/route.cc:1430
 msgid "Could not get state of route.  Problem with save_automation"
 msgstr ""
 "Δεν μπόρεσα να πάρω κατάσταση διαδρομής.  Πρόβλημα με αποθήκευση_αυτοματισμού"
 
-#: libs/ardour/route.cc:1485
+#: libs/ardour/route.cc:1482
 msgid "Send construction failed"
 msgstr "Αποστολή κατασκευής απέτυχε"
 
-#: libs/ardour/route.cc:1507
+#: libs/ardour/route.cc:1504
 msgid "unknown Insert type \"%1\"; ignored"
 msgstr "άγνωστος τύπος Λήψης(Insert) \"%1\"... αγνοήθηκε"
 
-#: libs/ardour/route.cc:1513
+#: libs/ardour/route.cc:1510
 msgid "Insert XML node has no type property"
 msgstr "Εισηχθέντας κόμβος XML δεν έχει στοιχεία τύπου"
 
-#: libs/ardour/route.cc:1518
+#: libs/ardour/route.cc:1515
 msgid "insert could not be created. Ignored."
 msgstr "εισαγωγή δεν μπόρεσε να δημιουργηθεί. Αγνοήθηκε."
 
-#: libs/ardour/route.cc:1536
+#: libs/ardour/route.cc:1533
 msgid "Bad node sent to Route::set_state() [%1]"
 msgstr "Κακός κόμβος εστάλη στο Route::set_state() [%1]"
 
-#: libs/ardour/route.cc:1595
+#: libs/ardour/route.cc:1592
 msgid "Route %1: unknown edit group \"%2 in saved state (ignored)"
 msgstr ""
 "Route %1: άγνωστη ομάδα επεξεργασίας \"%2 στην αποθηκευμένη κατάσταση "
 "(αγνοήθηκε)"
 
-#: libs/ardour/route.cc:1611 libs/ardour/route.cc:1615
+#: libs/ardour/route.cc:1608 libs/ardour/route.cc:1612
 msgid "badly formed order key string in state file! [%1] ... ignored."
 msgstr ""
 "δύσμορφη γραμμή κλειδιού ταξινομήσεως στο αρχείο καταστάσεως ! [%1] ... "
 "αγνοήθηκε."
 
-#: libs/ardour/route.cc:1696 libs/ardour/route.cc:1823
+#: libs/ardour/route.cc:1693 libs/ardour/route.cc:1820
 msgid "[control]"
 msgstr "[έλεγχος]"
 
-#: libs/ardour/route.cc:1716
+#: libs/ardour/route.cc:1713
 msgid "Route %1: unknown mix group \"%2 in saved state (ignored)"
 msgstr ""
 "Route %1: άγνωστη ομάδα μίξεως \"%2 στην αποθηκευμένη κατάσταση (αγνοήθηκε)"
 
-#: libs/ardour/route.cc:1745 libs/ardour/route.cc:1753
+#: libs/ardour/route.cc:1742 libs/ardour/route.cc:1750
 #, fuzzy
 msgid ""
 "MIDI mute control specification for %1 is incomplete, so it has been ignored"
@@ -1361,207 +1303,202 @@ msgstr ""
 "Η προδιαγραφή ελέγχου του MIDI gain για το %1 είναι ημιτελής, με αποτέλεσμα "
 "να αγνοηθεί"
 
-#: libs/ardour/send.cc:98
+#: libs/ardour/send.cc:99
 msgid "XML node describing a send is missing a Redirect node"
 msgstr "Στον κόμβο XML όπου περιγράφεται ένα send λείπει ένας κόμβος Redirect"
 
-#: libs/ardour/session.cc:99
+#: libs/ardour/session.cc:103
 #, fuzzy
 msgid "Could not resolve path: %1 (%2)"
 msgstr "Source: δεν μπορώ να ανοίξω το peakpath \"%1\" (%2)"
 
-#: libs/ardour/session.cc:111
+#: libs/ardour/session.cc:115
 msgid "cannot check session path %1 (%2)"
 msgstr "δεν μπορώ να ελέγξω το μονοπάτι συνεδρίας %1 (%2)"
 
-#: libs/ardour/session.cc:141
+#: libs/ardour/session.cc:145
 msgid "cannot check statefile %1 (%2)"
 msgstr "δεν μπορώ να ελέγξω το αρχείο κατάστασεως %1 (%2)"
 
-#: libs/ardour/session.cc:177
+#: libs/ardour/session.cc:181
 msgid "%1 is not an Ardour snapshot file"
 msgstr "Το %1 δεν έιναι αρχείο-στιγμιότυπο του Ardour"
 
-#: libs/ardour/session.cc:194
+#: libs/ardour/session.cc:198
 msgid "cannot determine current working directory (%1)"
 msgstr "δεν μπορώ να καθορίσω τον τρέχοντα ενεργό φάκελο(directory) (%1)"
 
-#: libs/ardour/session.cc:211
+#: libs/ardour/session.cc:215
 msgid "unknown file type for session %1"
 msgstr "άγνωστος τύπος αρχείου για την συνεδρία %1"
 
-#: libs/ardour/session.cc:316
+#: libs/ardour/session.cc:320
 msgid "monitor"
 msgstr "monitor"
 
-#: libs/ardour/session.cc:323
+#: libs/ardour/session.cc:327
 msgid "master"
 msgstr "master"
 
-#: libs/ardour/session.cc:607
+#: libs/ardour/session.cc:611
 msgid "could not setup Click I/O"
 msgstr "Δεν μπόρεσα να διαμορφώσω το I/O του Μετρονόμου(click)"
 
-#: libs/ardour/session.cc:628
+#: libs/ardour/session.cc:632
 msgid "cannot setup Click I/O"
 msgstr "Δεν μπορώ να διαμορφώσω το I/O του Μετρονόμου(click)"
 
-#: libs/ardour/session.cc:650
+#: libs/ardour/session.cc:654
 msgid "cannot create Auditioner: no auditioning of regions possible"
 msgstr "δεν μπορώ να δημιουργήσω τον Ακροατή: καμία ακρόαση περιοχών δυνατή"
 
-#: libs/ardour/session.cc:662
+#: libs/ardour/session.cc:666
 #, fuzzy, c-format
 msgid "out %<PRIu32>"
 msgstr "out %lu"
 
-#: libs/ardour/session.cc:674
+#: libs/ardour/session.cc:678
 #, c-format
 msgid "in %<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:688
+#: libs/ardour/session.cc:692
 #, c-format
 msgid "out %<PRIu32>+%<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:702
+#: libs/ardour/session.cc:706
 #, c-format
 msgid "in %<PRIu32>+%<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:735
+#: libs/ardour/session.cc:739
 msgid "cannot setup master inputs"
 msgstr "δεν μπορώ να διαμορφώσω τις master εισόδους"
 
-#: libs/ardour/session.cc:743
+#: libs/ardour/session.cc:747
 msgid "cannot setup master outputs"
 msgstr "δεν μπορώ να διαμορφώσω τις master εξόδους"
 
-#: libs/ardour/session.cc:754
+#: libs/ardour/session.cc:758
 #, fuzzy
 msgid "Master Out"
 msgstr "master"
 
-#: libs/ardour/session.cc:820
+#: libs/ardour/session.cc:830
 msgid "cannot setup control inputs"
 msgstr "δεν μπορώ να διαμορφώσω τις εισόδους ελέγχου"
 
-#: libs/ardour/session.cc:828
+#: libs/ardour/session.cc:838
 msgid "cannot set up master outputs"
 msgstr "δεν μπορώ να διαμορφώσω τις εξόδους ελέγχου"
 
-#: libs/ardour/session.cc:1100
+#: libs/ardour/session.cc:1110
 msgid "Session: you can't use that location for auto punch (start <= end)"
 msgstr ""
 "Συνεδρία: δεν μπορείτε να χρησιμοποιήσετε αυτήν την τοποθεσία για auto punch "
 "(αρχή <= τέλος)"
 
-#: libs/ardour/session.cc:1179
+#: libs/ardour/session.cc:1189
 msgid "Session: you can't use a mark for auto loop"
 msgstr "Συνεδρία: δεν μπορείτε να χρησιμοποιήσετε στίγμα για auto loop"
 
-#: libs/ardour/session.cc:1559
+#: libs/ardour/session.cc:1572
 msgid "feedback loop setup between %1 and %2"
 msgstr "διαμόρφωση feedback loop ανάμεσα σε %1 και %2"
 
-#: libs/ardour/session.cc:1711 libs/ardour/session.cc:1808
+#: libs/ardour/session.cc:1724 libs/ardour/session.cc:1821
 msgid "cannot configure %1 in/%2 out configuration for new audio track"
 msgstr "δεν μπορώ να διαμορφώσω %1 in/%2 out διάταξη για νέο κανάλι ήχου"
 
-#: libs/ardour/session.cc:1767
+#: libs/ardour/session.cc:1780
 msgid "Session: could not create new audio track."
 msgstr "Συνεδρία: δεν μπόρεσα να δημιουργήσω νέο κανάλι ήχου."
 
-#: libs/ardour/session.cc:1857
+#: libs/ardour/session.cc:1870
 msgid "Session: could not create new route."
 msgstr "Συνεδρία: δεν μπόρεσα να δημιουργήσω διαδρομή."
 
-#: libs/ardour/session.cc:2340
+#: libs/ardour/session.cc:2354
 msgid "cannot create new name for region \"%1\""
 msgstr "δεν μπορώ να δημιουργήσω νέο όνομα για την περιοχή \"%1\""
 
-#: libs/ardour/session.cc:2404
+#: libs/ardour/session.cc:2418
 msgid "too many regions with names like %1"
 msgstr "πάρα πολλές περιοχές με ονόματα σαν %1"
 
-#: libs/ardour/session.cc:2860
+#: libs/ardour/session.cc:2883
 msgid "There are already %1 recordings for %2, which I consider too many."
 msgstr "Υπάρχουν ήδη %1 εγγραφές για %2, τις οποίες θεωρώ πάρα πολλές."
 
-#: libs/ardour/session.cc:3229
+#: libs/ardour/session.cc:3258
 msgid "programming error: unknown type of Insert created!"
 msgstr "σφάλμα προγραμματισμού: άγνωστος τύπος Εισόδου εδημιουργήθη!"
 
-#: libs/ardour/session.cc:3235
+#: libs/ardour/session.cc:3264
 msgid "programming error: unknown type of Redirect created!"
 msgstr "σφάλμα προγραμματισμού: άγνωστος τύπος Redirect εδημιουργήθη!"
 
-#: libs/ardour/session.cc:3258
+#: libs/ardour/session.cc:3287
 msgid "programming error: unknown type of Insert deleted!"
 msgstr "σφάλμα προγραμματισμού: άγνωστος τύπος of Insert διεγράφη!"
 
-#: libs/ardour/session.cc:3264
+#: libs/ardour/session.cc:3293
 msgid "programming error: unknown type of Redirect deleted!"
 msgstr "σφάλμα προγραμματισμού: άγνωστος τύπος of Redirect διεγράφη!"
 
-#: libs/ardour/session.cc:3605
+#: libs/ardour/session.cc:3636
 msgid "too many bounced versions of playlist \"%1\""
 msgstr "πάρα πολλές bounced εκδόσεις της Playlist \"%1\""
 
-#: libs/ardour/session.cc:3614
+#: libs/ardour/session.cc:3649
 msgid "cannot create new audio file \"%1\" for %2"
 msgstr "δεν μπορώ να δημιουργήσω νέο αρχείο ήχου \"%1\" για %2"
 
-#: libs/ardour/session_butler.cc:81 libs/ardour/session_midi.cc:1183
-#: libs/ardour/source.cc:233
-msgid "Cannot create transport request signal pipe (%1)"
-msgstr "Δεν μπορώ να δημιουργήσω transport request signal pipe (%1)"
-
-#: libs/ardour/session_butler.cc:86 libs/ardour/session_butler.cc:91
+#: libs/ardour/session_butler.cc:85 libs/ardour/session_butler.cc:90
 #, fuzzy
 msgid "UI: cannot set O_NONBLOCK on butler request pipe (%1)"
 msgstr "UI: δεν μπορώ να θέσω O_NONBLOCK στο signal read pipe (%1)"
 
-#: libs/ardour/session_butler.cc:96
+#: libs/ardour/session_butler.cc:95
 msgid "Session: could not create butler thread"
 msgstr "Συνεδρία: δεν μπόρεσα να δημιουργήσω δέσμη με τον butler"
 
-#: libs/ardour/session_butler.cc:190
+#: libs/ardour/session_butler.cc:189
 msgid "poll on butler request pipe failed (%1)"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:197
+#: libs/ardour/session_butler.cc:196
 #, fuzzy
 msgid "Error on butler thread request pipe"
 msgstr "Σφάλμα στο transport thread request pipe"
 
-#: libs/ardour/session_butler.cc:239
+#: libs/ardour/session_butler.cc:238
 #, fuzzy
 msgid "Error reading from butler request pipe"
 msgstr "Σφάλμα στην ανάγνωση από transport request pipe"
 
-#: libs/ardour/session_butler.cc:276
+#: libs/ardour/session_butler.cc:275
 msgid "Butler read ahead failure on dstream %1"
 msgstr "Αποτυχία προανάγνωσης Butler στο dstream %1"
 
-#: libs/ardour/session_butler.cc:320
+#: libs/ardour/session_butler.cc:319
 msgid "Butler write-behind failure on dstream %1"
 msgstr "Αποτυχία οπισθεγγραφής Butler στο dstream %1"
 
-#: libs/ardour/session_click.cc:157
+#: libs/ardour/session_click.cc:158
 msgid "cannot open click soundfile %1 (%2)"
 msgstr "δεν μπορώ να ανοίξω τοsoundfile μετρονόμου%1 (%2)"
 
-#: libs/ardour/session_click.cc:166
+#: libs/ardour/session_click.cc:167
 msgid "cannot read data from click soundfile"
 msgstr "δεν μπορώ να διαβάσω δεδομένα από το soundfile μετρονόμου"
 
-#: libs/ardour/session_click.cc:191
+#: libs/ardour/session_click.cc:192
 msgid "cannot open click emphasis soundfile %1 (%2)"
 msgstr "δεν μπορώ να ανοίξω το soundfile εμφάσεως μετρονόμου %1 (%2)"
 
-#: libs/ardour/session_click.cc:199
+#: libs/ardour/session_click.cc:200
 msgid "cannot read data from click emphasis soundfile"
 msgstr "δεν μπορώ να διαβάσω δεδομένα από το soundfile εμφάσεως μετρονόμου"
 
@@ -1666,7 +1603,7 @@ msgstr "Σφάλμα στο transport thread request pipe"
 msgid "Error reading from transport request pipe"
 msgstr "Σφάλμα στην ανάγνωση από transport request pipe"
 
-#: libs/ardour/session_process.cc:105
+#: libs/ardour/session_process.cc:104
 msgid "Session: error in no roll for %1"
 msgstr "Συνεδρία: σφάλμα στο no roll για %1"
 
@@ -1684,212 +1621,223 @@ msgstr "τέλος"
 msgid "start"
 msgstr "ξεχωριστό"
 
-#: libs/ardour/session_state.cc:501
+#: libs/ardour/session_state.cc:502
 msgid "Session: cannot create session dir \"%1\" (%2)"
 msgstr "Συνεδρία: δεν μπορώ να δημιουργήσω φάκελο συνεδρίας \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:512
+#: libs/ardour/session_state.cc:513
 #, fuzzy
 msgid "Session: cannot create session peakfile dir \"%1\" (%2)"
 msgstr "Συνεδρία: δεν μπορώ να δημιουργήσω φάκελο συνεδρίας \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:521
+#: libs/ardour/session_state.cc:522
 msgid "Session: cannot create session sounds dir \"%1\" (%2)"
 msgstr "Συνεδρία: δεν μπορώ να δημιουργήσω φάκελο ήχων συνεδρίας \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:530
+#: libs/ardour/session_state.cc:531
 #, fuzzy
 msgid "Session: cannot create session tape dir \"%1\" (%2)"
 msgstr "Συνεδρία: δεν μπορώ να δημιουργήσω φάκελο συνεδρίας \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:539
+#: libs/ardour/session_state.cc:540
 msgid "Session: cannot create session dead sounds dir \"%1\" (%2)"
 msgstr ""
 "Συνεδρία: δεν μπορώ να δημιουργήσω φάκελο 'νεκρών' ήχων συνεδρίας \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:548
+#: libs/ardour/session_state.cc:549
 msgid "Session: cannot create session automation dir \"%1\" (%2)"
 msgstr ""
 "Συνεδρία: δεν μπορώ να δημιουργήσω φάκελο αυτοματισμών της συνεδρίας \"%1"
 "\" (%2)"
 
-#: libs/ardour/session_state.cc:579
+#: libs/ardour/session_state.cc:580
 msgid "Could not open %1 for writing mix template"
 msgstr "Δεν μπόρεσα να ανοίξω %1 για γράψιμο του προσχεδίου μίξεως"
 
-#: libs/ardour/session_state.cc:585
+#: libs/ardour/session_state.cc:586
 msgid "Could not open mix template %1 for reading"
 msgstr "Δεν μπόρεσα να ανοίξω προσχέδιο μίξεως %1 για ανάγνωση"
 
-#: libs/ardour/session_state.cc:592
+#: libs/ardour/session_state.cc:593
 msgid "Session already exists.  Not overwriting"
 msgstr "Η Συνεδρία ήδη υπάρχει.  Ακύρωση overwriting"
 
-#: libs/ardour/session_state.cc:635
+#: libs/ardour/session_state.cc:636
 msgid "Session: could not load diskstream via XML state"
 msgstr "Συνεδρία: δεν μπόρεσα να φορτώσω diskstream μέσω καταστάσεως XML"
 
-#: libs/ardour/session_state.cc:684
+#: libs/ardour/session_state.cc:685
 msgid "could not backup old state file, current state not saved."
 msgstr ""
 "δεν μπόρεσα να διασώσω το παλαιό αρχείο καταστάσεως, η τρέχουσα κατάσταση "
 "δεν αποθηκεύτηκε."
 
-#: libs/ardour/session_state.cc:697
+#: libs/ardour/session_state.cc:698
 msgid "state could not be saved to %1"
 msgstr "η κατάσταση δεν μπορούσε να σωθεί στο %1"
 
-#: libs/ardour/session_state.cc:704
+#: libs/ardour/session_state.cc:705
 #, fuzzy
 msgid "could not remove corrupt state file %1"
 msgstr "Δεν μπόρεσα να αναλύσω το αρχείο rdf: %1"
 
-#: libs/ardour/session_state.cc:708
+#: libs/ardour/session_state.cc:709
 #, fuzzy
 msgid "could not restore state file from backup %1"
 msgstr "Σφάλμα: δεν μπόρεσα να γράψω %1"
 
-#: libs/ardour/session_state.cc:777
+#: libs/ardour/session_state.cc:778
 msgid "%1: session state information file \"%2\" doesn't exist!"
 msgstr "%1: το αρχείο πληροφοριών καταστάσεως συνεδρίας \"%2\" δεν υπάρχει!"
 
-#: libs/ardour/session_state.cc:788
+#: libs/ardour/session_state.cc:789
 msgid "Could not understand ardour file %1"
 msgstr "Δεν μπόρεσα να κατανοήσω το ardour αρχείο %1"
 
-#: libs/ardour/session_state.cc:1492
+#: libs/ardour/session_state.cc:1493
 msgid "programming error: Session: incorrect XML node sent to set_state()"
 msgstr ""
 "σφάλμα προγραμματισμού: Συνεδρία: λανθασμένος κόμβος XML εστάλη στην "
 "set_state()"
 
-#: libs/ardour/session_state.cc:1538
+#: libs/ardour/session_state.cc:1539
 msgid "Session: XML state has no options section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα επιλογών(options)"
 
-#: libs/ardour/session_state.cc:1543
+#: libs/ardour/session_state.cc:1544
 msgid "Session: XML state has no sources section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα πηγών"
 
-#: libs/ardour/session_state.cc:1550
+#: libs/ardour/session_state.cc:1551
 msgid "Session: XML state has no Regions section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα Περιοχών"
 
-#: libs/ardour/session_state.cc:1557
+#: libs/ardour/session_state.cc:1558
 msgid "Session: XML state has no playlists section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα playlists"
 
-#: libs/ardour/session_state.cc:1576
+#: libs/ardour/session_state.cc:1577
 msgid "Session: XML state has no diskstreams section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα diskstreams"
 
-#: libs/ardour/session_state.cc:1583
+#: libs/ardour/session_state.cc:1584
 msgid "Session: XML state has no connections section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα συνδέσεων"
 
-#: libs/ardour/session_state.cc:1590
+#: libs/ardour/session_state.cc:1591
 msgid "Session: XML state has no locations section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα τοποθεσιών"
 
-#: libs/ardour/session_state.cc:1623
+#: libs/ardour/session_state.cc:1624
 msgid "Session: XML state has no edit groups section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα επεξερ/σίας ομάδων"
 
-#: libs/ardour/session_state.cc:1630
+#: libs/ardour/session_state.cc:1631
 msgid "Session: XML state has no mix groups section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα μίξεως ομάδων"
 
-#: libs/ardour/session_state.cc:1637
+#: libs/ardour/session_state.cc:1638
 msgid "Session: XML state has no Tempo Map section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα Tempo Map"
 
-#: libs/ardour/session_state.cc:1644
+#: libs/ardour/session_state.cc:1645
 msgid "Session: XML state has no routes section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα διαδρομών"
 
-#: libs/ardour/session_state.cc:1651
+#: libs/ardour/session_state.cc:1652
 msgid "Session: XML state has no click section"
 msgstr "Συνεδρία: η XML κατάσταση δεν έχει τομέα μετρονόμου"
 
-#: libs/ardour/session_state.cc:1696
+#: libs/ardour/session_state.cc:1697
 msgid "Session: cannot create Route from XML description."
 msgstr "Συνεδρία: δεν μπορώ να δημιουργήσω Διαδρομή από XML περιγραφή."
 
-#: libs/ardour/session_state.cc:1734
+#: libs/ardour/session_state.cc:1735
 msgid "Session: cannot create Region from XML description."
 msgstr "Συνεδρία: δεν μπορώ να δημιουργήσω Περιοχή από XML περιγραφή."
 
-#: libs/ardour/session_state.cc:1762
+#: libs/ardour/session_state.cc:1764
 msgid "Session: XMLNode describing a AudioRegion is incomplete (no source)"
 msgstr ""
 "Συνεδρία: Ο XMLΚόμβος που περιγράφει AudioΠεριοχή είναι ημιτελής (δίχως πηγή)"
 
-#: libs/ardour/session_state.cc:1770 libs/ardour/session_state.cc:1784
+#: libs/ardour/session_state.cc:1772 libs/ardour/session_state.cc:1792
 msgid ""
 "Session: XMLNode describing a AudioRegion references an unknown source id =%1"
 msgstr ""
 "Συνεδρία: Ο XMLΚόμβος που περιγράφει AudioΠεριοχή αναφέρει άγνωστο id πηγής ="
 "%1"
 
-#: libs/ardour/session_state.cc:1852
+#: libs/ardour/session_state.cc:1778 libs/ardour/session_state.cc:1798
+#, fuzzy
+msgid ""
+"Session: XMLNode describing a AudioRegion references a non-audio source id =%"
+"1"
+msgstr ""
+"Συνεδρία: Ο XMLΚόμβος που περιγράφει AudioΠεριοχή αναφέρει άγνωστο id πηγής ="
+"%1"
+
+#: libs/ardour/session_state.cc:1868
 msgid "Session: cannot create Source from XML description."
 msgstr "Συνεδρία: δεν μπορώ να δημιουργήσω Πηγή από XML περιγραφή."
 
-#: libs/ardour/session_state.cc:1883
-msgid "Found a sound file that cannot be used by Ardour. See the progammers."
+#: libs/ardour/session_state.cc:1889
+#, fuzzy
+msgid ""
+"Found a sound file that cannot be used by Ardour. Talk to the progammers."
 msgstr ""
 "Βρήκα ένα sound file που δεν μπορεί να χρησιμοποιηθεί από τον Ardour. "
 "Επικοινωνήστε με τους προγραμματιστές."
 
-#: libs/ardour/session_state.cc:1908
+#: libs/ardour/session_state.cc:1913
 msgid "Could not create mix templates directory \"%1\" (%2)"
 msgstr "Δεν μπόρεσα να δημιουργήσω φάκελο προσχεδίων μίξεως \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:1922
+#: libs/ardour/session_state.cc:1927
 msgid "Template \"%1\" already exists - new version not created"
 msgstr "Το προσχέδιο \"%1\" ήδη υπάρχει - νέα έκδοση δεν δημιουργήθηκε"
 
-#: libs/ardour/session_state.cc:1929
+#: libs/ardour/session_state.cc:1934
 msgid "mix template not saved"
 msgstr "προσχέδιο μίξεως δεν αποθηκεύτηκε"
 
-#: libs/ardour/session_state.cc:1989
+#: libs/ardour/session_state.cc:1994
 msgid "cannot create session directory \"%1\"; ignored"
 msgstr "δεν μπορώ να δημιουργήσω φάκελο συνεδρίας \"%1\"; αγνοήθηκε"
 
-#: libs/ardour/session_state.cc:2002
+#: libs/ardour/session_state.cc:2007
 msgid "cannot create sounds directory \"%1\"; ignored"
 msgstr "δεν μπορώ να δημιουργήσω τον φάκελο 'sounds' \"%1\"; αγνοήθηκε"
 
-#: libs/ardour/session_state.cc:2013
+#: libs/ardour/session_state.cc:2018
 msgid "cannot create dead sounds directory \"%1\"; ignored"
 msgstr "δεν μπορώ να δημιουργήσω τον φάκελο 'dead sounds' \"%1\"; αγνοήθηκε"
 
-#: libs/ardour/session_state.cc:2024
+#: libs/ardour/session_state.cc:2029
 #, fuzzy
 msgid "cannot create peak file directory \"%1\"; ignored"
 msgstr "δεν μπορώ να δημιουργήσω φάκελο συνεδρίας \"%1\"; αγνοήθηκε"
 
-#: libs/ardour/session_state.cc:2163 libs/ardour/session_state.cc:2184
+#: libs/ardour/session_state.cc:2168 libs/ardour/session_state.cc:2189
 msgid "Session: cannot create Playlist from XML description."
 msgstr "Συνεδρία: δεν μπορώ να δημιουργήσω την Playlist από την XML περιγραφή."
 
-#: libs/ardour/session_state.cc:2223
+#: libs/ardour/session_state.cc:2228
 msgid "Session: cannot create Named Selection from XML description."
 msgstr ""
 "Συνεδρία: δεν μπορώ να δημιουργήσω την ονομασμένη επιλογή από την XML "
 "περιγραφή."
 
-#: libs/ardour/session_state.cc:2355
+#: libs/ardour/session_state.cc:2360
 msgid "Unknown node \"%1\" found in Connections list from state file"
 msgstr ""
 "Άγνωστος κόμβος \"%1\" ευρέθη στη λίστα 'Συνδέσεις' από το αρχείο καταστάσεως"
 
-#: libs/ardour/session_state.cc:3195
+#: libs/ardour/session_state.cc:3197
 msgid "cannot remove dead sound file %1 (%2)"
 msgstr "δεν μπορώ να απαλοίψω το 'νεκρο' ηχο-αρχείο %1 (%2)"
 
-#: libs/ardour/session_time.cc:736
+#: libs/ardour/session_time.cc:375
 msgid "Unknown JACK transport state %1 in sync callback"
 msgstr "Άγνωστη κατάσταση του JACK transport %1 στην ανάκληση sync"
 
@@ -1898,28 +1846,28 @@ msgid "tempoize: error creating name for new audio file based on %1"
 msgstr ""
 "tempoize: σφάλμα στη δημιουργία ονόματος για νέο αρχείο ήχου βασισμένο σε %1"
 
-#: libs/ardour/session_timefx.cc:85
+#: libs/ardour/session_timefx.cc:88
 msgid "tempoize: error creating new audio file %1 (%2)"
 msgstr "tempoize: σφάλμα στη δημιουργία νέου αρχείου ήχου %1 (%2)"
 
-#: libs/ardour/session_timefx.cc:111
+#: libs/ardour/session_timefx.cc:114
 msgid "tempoize: error reading data from %1"
 msgstr "tempoize: σφάλμα στην ανάγνωση δεδομένων από %1"
 
-#: libs/ardour/session_timefx.cc:124 libs/ardour/session_timefx.cc:136
+#: libs/ardour/session_timefx.cc:127 libs/ardour/session_timefx.cc:139
 msgid "error writing tempo-adjusted data to %1"
 msgstr "σφάλμα στην εγγραφή χρονο-ρυθμισμένων δεδομένων στο %1"
 
-#: libs/ardour/session_timefx.cc:142
+#: libs/ardour/session_timefx.cc:145
 msgid "timefx code failure. please notify ardour-developers."
 msgstr ""
 "αποτυχία κώδικα timefx. παρακαλώ ειδοποιήστε τους προγραμματιστές του ardour."
 
-#: libs/ardour/session_transport.cc:116
+#: libs/ardour/session_transport.cc:117
 msgid "Cannot loop - no loop range defined"
 msgstr "Δεν γίνεται loop - κανένα διάστημα loop δεν προσδιορίστηκε"
 
-#: libs/ardour/session_transport.cc:478
+#: libs/ardour/session_transport.cc:479
 msgid ""
 "Seamless looping cannot be supported while Ardour is using JACK transport.\n"
 "Recommend changing the configured options"
@@ -1928,7 +1876,7 @@ msgstr ""
 "transport.\n"
 "Συνιστούμε την αλλαγή των διαμορφωμένων ρυθμίσεων"
 
-#: libs/ardour/session_transport.cc:754
+#: libs/ardour/session_transport.cc:755
 msgid ""
 "Global varispeed cannot be supported while Ardour is connected to JACK "
 "transport control"
@@ -1936,12 +1884,12 @@ msgstr ""
 "Η Global varispeed δεν μπορεί να υποστηριχθεί ενώ ο Ardour είναι "
 "συνδεδεμένος με τον JACK transport control"
 
-#: libs/ardour/session_transport.cc:954
+#: libs/ardour/session_transport.cc:955
 msgid "please stop the transport before adjusting slave settings"
 msgstr ""
 "παρακαλώ σταματήστε το transport πριν την ρύθμιση των  επιλογων εξαρτήσεως"
 
-#: libs/ardour/session_transport.cc:990
+#: libs/ardour/session_transport.cc:991
 msgid "No MTC port defined: MTC slaving is impossible."
 msgstr ""
 "Καμμία θύρα MTC δεν προσδιορίστηκε: η εξάρτηση του MTC (slaving) είναι "
@@ -2031,11 +1979,24 @@ msgstr "Little-endian (Intel)"
 msgid "Big-endian (Mac)"
 msgstr "Big-endian (Mac)"
 
-#: libs/ardour/sndfilesource.cc:75
-msgid "SndFileSource: cannot open file \"%1\" (%2)"
+#: libs/ardour/sndfilesource.cc:146
+msgid "FileSource: cannot get host information for BWF header (%1)"
+msgstr ""
+"FileSource: δεν μπορώ να βρώ πληροφορίες οικοδεσπότη(host) για επικεφαλίδα "
+"BWF (%1)"
+
+#: libs/ardour/sndfilesource.cc:168
+msgid ""
+"cannot set broadcast info for audio file %1 (%2); dropping broadcast info "
+"for this file"
+msgstr ""
+
+#: libs/ardour/sndfilesource.cc:224
+#, fuzzy
+msgid "SndFileSource: cannot open file \"%1\" for %2 (%3)"
 msgstr "SndFileSource: δεν μπορώ να ανοίξω το αρχείο \"%1\" (%2)"
 
-#: libs/ardour/sndfilesource.cc:80
+#: libs/ardour/sndfilesource.cc:230
 msgid ""
 "SndFileSource: file only contains %1 channels; %2 is invalid as a channel "
 "number"
@@ -2043,74 +2004,32 @@ msgstr ""
 "SndFileSource: το αρχείο περιέχει μόνο %1 κανάλια; %2 δεν έχει αξία σαν "
 "κανάλι number"
 
-#: libs/ardour/sndfilesource.cc:122
+#: libs/ardour/sndfilesource.cc:307
 msgid "SndFileSource: could not seek to frame %1 within %2 (%3)"
 msgstr "SndFileSource: δεν μπορούσα να αναζητήσω στο frame %1 μέσα στο %2 (%3)"
 
-#: libs/ardour/source.cc:161
-msgid "poll on peak request pipe failed (%1)"
-msgstr ""
-
-#: libs/ardour/source.cc:168
-#, fuzzy
-msgid "Error on peak thread request pipe"
-msgstr "Σφάλμα στο transport thread request pipe"
-
-#: libs/ardour/source.cc:201
+#: libs/ardour/sndfilesource.cc:358
 #, fuzzy
-msgid "Error reading from peak request pipe"
-msgstr "Σφάλμα στην ανάγνωση από transport request pipe"
-
-#: libs/ardour/source.cc:238 libs/ardour/source.cc:243
-#, fuzzy
-msgid "UI: cannot set O_NONBLOCK on peak request pipe (%1)"
-msgstr "UI: δεν μπορώ να θέσω O_NONBLOCK στο signal read pipe (%1)"
-
-#: libs/ardour/source.cc:248
-msgid "Source: could not create peak thread"
-msgstr "Source: δεν μπόρεσα να δημιουργήσω peak δέσμη"
-
-#: libs/ardour/source.cc:326
-#, fuzzy
-msgid "cannot rename peakfile for %1 from %2 to %3 (%4)"
-msgstr "δεν μπορώ να απαλοίψω το peakfile %1 για %2 (%3)"
-
-#: libs/ardour/source.cc:357
-msgid "Source: cannot stat peakfile \"%1\""
-msgstr "Source: δεν μπορώ να μετρήσω το αυτοστιγμεί peakfile \"%1\""
-
-#: libs/ardour/source.cc:444
-msgid "cannot read sample data for unscaled peak computation"
-msgstr ""
-"δεν μπορώ να διαβάσω δεδομένα δείγματος για υπολογισμό μη-κλιμακώτου peak"
-
-#: libs/ardour/source.cc:465 libs/ardour/source.cc:536
-#: libs/ardour/source.cc:780 libs/ardour/source.cc:881
-msgid "Source: cannot open peakpath \"%1\" (%2)"
-msgstr "Source: δεν μπορώ να ανοίξω το peakpath \"%1\" (%2)"
-
-#: libs/ardour/source.cc:637
-msgid "Source[%1]: peak read - cannot read %2 samples at offset %3"
-msgstr ""
-"Source[%1]: ανάγνωση peak - δεν μπορώ να διαβάσω %2 δείγματα στην αρχή"
-"(offset) %3"
+msgid "programming error: %1 %2"
+msgstr "σφάλμα προγραμματισμού: %1"
 
-#: libs/ardour/source.cc:789
-msgid "%1: could not write read raw data for peak computation (%2)"
+#: libs/ardour/sndfilesource.cc:458
+msgid ""
+"cannot set broadcast info for audio file %1; Dropping broadcast info for "
+"this file"
 msgstr ""
-"%1: δεν μπορεσα να γράψω ανεγνωσμένα raw δεδομένα για τον υπολογισμό του "
-"peak (%2)"
 
-#: libs/ardour/source.cc:814
-msgid "%1: could not write peak file data (%2)"
-msgstr "%1: δεν μπόρεσα να γράψω δεδομένα του αρχείου peak (%2)"
+#: libs/ardour/sndfilesource.cc:500
+#, fuzzy
+msgid "%1: cannot seek to %2"
+msgstr "%1: δεν μπορώ να αναζητήσω στο %2 για εξαγωγή"
 
-#: libs/ardour/state_manager.cc:46
+#: libs/ardour/state_manager.cc:47
 #, fuzzy
 msgid "cleared history"
 msgstr "εκκαθαρίσθη"
 
-#: libs/ardour/state_manager.cc:59
+#: libs/ardour/state_manager.cc:60
 #, fuzzy
 msgid ""
 "programming error: illegal state ID (%1) passed to StateManager::set_state() "
@@ -2119,135 +2038,135 @@ msgstr ""
 "σφάλμα προγραμματισμού: αθέμιτη κατάσταση ID (%1) πέρασε στον StateManager::"
 "set_state() (range = 0-%3)"
 
-#: libs/ardour/stateful.cc:100
+#: libs/ardour/stateful.cc:102
 msgid "Error: could not write %1"
 msgstr "Σφάλμα: δεν μπόρεσα να γράψω %1"
 
-#: libs/ardour/stateful.cc:114
+#: libs/ardour/stateful.cc:116
 msgid "Could not understand XML file %1"
 msgstr "Δεν μπόρεσα να κατανοήσω το XML αρχείο %1"
 
-#: libs/ardour/tempo.cc:66
+#: libs/ardour/tempo.cc:67
 msgid "TempoSection XML node has no \"start\" property"
 msgstr "Κόμβος του TempoSection XML δεν έχει ιδιότητα \"έναρξη\""
 
-#: libs/ardour/tempo.cc:74
+#: libs/ardour/tempo.cc:75
 msgid "TempoSection XML node has an illegal \"start\" value"
 msgstr "Κόμβος του TempoSection XML έχει αθέμιτη αξία \"έναρξη\""
 
-#: libs/ardour/tempo.cc:81
+#: libs/ardour/tempo.cc:82
 msgid "TempoSection XML node has no \"beats-per-minute\" property"
 msgstr "Κόμβος του TempoSection XML δεν έχει \"κτύπων-ανά-λεπτό\" ιδιότητα"
 
-#: libs/ardour/tempo.cc:86
+#: libs/ardour/tempo.cc:87
 msgid "TempoSection XML node has an illegal \"beats_per_minute\" value"
 msgstr "Κόμβος του TempoSection XML έχει αθέμιτη \"κτύπων_ανά_λεπτό\" αξία"
 
-#: libs/ardour/tempo.cc:91
+#: libs/ardour/tempo.cc:92
 msgid "TempoSection XML node has no \"movable\" property"
 msgstr "Κόμβος του TempoSection XML δεν έχει \"κινητή\" ιδιότητα"
 
-#: libs/ardour/tempo.cc:130
+#: libs/ardour/tempo.cc:131
 msgid "MeterSection XML node has no \"start\" property"
 msgstr "Κόμβος του MeterSection XML δεν έχει \"έναρξη\" ιδιότητα"
 
-#: libs/ardour/tempo.cc:138
+#: libs/ardour/tempo.cc:139
 msgid "MeterSection XML node has an illegal \"start\" value"
 msgstr "Κόμβος του MeterSection XML έχει αθέμιτη \"έναρξη\" αξία"
 
-#: libs/ardour/tempo.cc:145
+#: libs/ardour/tempo.cc:146
 msgid "MeterSection XML node has no \"beats-per-bar\" property"
 msgstr "Κόμβος του MeterSection XML δεν έχει \"κτύπων-ανά-μπάρα\" ιδιότητα"
 
-#: libs/ardour/tempo.cc:150
+#: libs/ardour/tempo.cc:151
 msgid "MeterSection XML node has an illegal \"beats-per-bar\" value"
 msgstr "Κόμβος του MeterSection XML έχει αθέμιτη \"κτύπων-ανά-μπάρα\" αξία"
 
-#: libs/ardour/tempo.cc:155
+#: libs/ardour/tempo.cc:156
 msgid "MeterSection XML node has no \"note-type\" property"
 msgstr "Κόμβος του MeterSection XML δεν έχει \"τύπος-νότας\" ιδιότητα"
 
-#: libs/ardour/tempo.cc:160
+#: libs/ardour/tempo.cc:161
 msgid "MeterSection XML node has an illegal \"note-type\" value"
 msgstr "Κόμβος του MeterSection XML έχει αθέμιτη \"τύπος-νότας\" αξία"
 
-#: libs/ardour/tempo.cc:165
+#: libs/ardour/tempo.cc:166
 msgid "MeterSection XML node has no \"movable\" property"
 msgstr "Κόμβος του MeterSection XML δεν έχει \"κινητή\" ιδιότητα"
 
-#: libs/ardour/tempo.cc:258
+#: libs/ardour/tempo.cc:259
 msgid "move metric"
 msgstr "μετακίνηση μετρικού"
 
-#: libs/ardour/tempo.cc:329
+#: libs/ardour/tempo.cc:330
 msgid "metric removed"
 msgstr "μετρικό απεσύρθη"
 
-#: libs/ardour/tempo.cc:372
+#: libs/ardour/tempo.cc:373
 msgid "add tempo"
 msgstr "πρόσθεση ρυθμού"
 
-#: libs/ardour/tempo.cc:401
+#: libs/ardour/tempo.cc:402
 msgid "replace tempo"
 msgstr "αντικατάσταση ρυθμού"
 
-#: libs/ardour/tempo.cc:434
+#: libs/ardour/tempo.cc:435
 msgid "add meter"
 msgstr "πρόσθεση μετρητή"
 
-#: libs/ardour/tempo.cc:462
+#: libs/ardour/tempo.cc:463
 msgid "replaced meter"
 msgstr "αντικατεστημένος μετρητής"
 
-#: libs/ardour/tempo.cc:482 libs/ardour/tempo.cc:498
+#: libs/ardour/tempo.cc:483 libs/ardour/tempo.cc:499
 msgid "programming error: no tempo section in tempo map!"
 msgstr "σφάλμα προγραμματισμού: κανένας τομέας ρυθμού στο χάρτη ρυθμών!"
 
-#: libs/ardour/tempo.cc:537
+#: libs/ardour/tempo.cc:538
 msgid "programming error: unhandled MetricSection type"
 msgstr "σφάλμα προγραμματισμού: αχείριστος τύπος MetricSection"
 
-#: libs/ardour/tempo.cc:1225 libs/ardour/tempo.cc:1237
+#: libs/ardour/tempo.cc:1226 libs/ardour/tempo.cc:1238
 msgid "Tempo map: could not set new state, restoring old one."
 msgstr ""
 "Χάρτης ρυθμών: δεν μπόρεσα να θέσω νέα κατάσταση, επιστροφή προηγούμενης."
 
-#: libs/ardour/tempo.cc:1261
+#: libs/ardour/tempo.cc:1262
 msgid "load XML data"
 msgstr ""
 
-#: libs/ardour/utils.cc:242
+#: libs/ardour/utils.cc:246
 #, fuzzy
 msgid "illegal or badly-formed string used for path (%1)"
 msgstr "παράνομη ή κακοσχηματισμένη γραμμή για το μονοπάτι RAID"
 
-#: libs/ardour/utils.cc:247
+#: libs/ardour/utils.cc:251
 #, fuzzy
 msgid "path (%1) is ambiguous"
 msgstr "Το μονοπάτι αναζήτησης του RAID είναι αμφίβολο"
 
-#: libs/ardour/vst_plugin.cc:186
+#: libs/ardour/vst_plugin.cc:187
 msgid "cannot create VST chunk directory: %1"
 msgstr "δεν μπορώ να δημιουργήσω φάκελο κομματιών VST: %1"
 
-#: libs/ardour/vst_plugin.cc:194
+#: libs/ardour/vst_plugin.cc:195
 msgid "cannot check VST chunk directory: %1"
 msgstr "δεν μπορώ να ελέγξω το φάκελο κομματιών VST: %1"
 
-#: libs/ardour/vst_plugin.cc:201
+#: libs/ardour/vst_plugin.cc:202
 msgid "%1 exists but is not a directory"
 msgstr "%1 υπάρχει αλλά δεν είναι φάκελος"
 
-#: libs/ardour/vst_plugin.cc:239
+#: libs/ardour/vst_plugin.cc:240
 msgid "Bad node sent to VSTPlugin::set_state"
 msgstr "Κακός κόμβος εστάλη στο VSTPlugin::set_state"
 
-#: libs/ardour/vst_plugin.cc:342 libs/ardour/vst_plugin.cc:353
+#: libs/ardour/vst_plugin.cc:343 libs/ardour/vst_plugin.cc:354
 msgid "no support for presets using chunks at this time"
 msgstr ""
 "καμμία υποστήριξη αυτή τη στιγμή για ρυθμίσεις που χρησιμοποιούν κομμάτια"
 
-#: libs/ardour/coreaudio_source.cc:93
+#: libs/ardour/coreaudio_source.cc:99
 #, fuzzy
 msgid ""
 "CoreAudioSource: file only contains %1 channels; %2 is invalid as a channel "
@@ -2256,11 +2175,121 @@ msgstr ""
 "SndFileSource: το αρχείο περιέχει μόνο %1 κανάλια; %2 δεν έχει αξία σαν "
 "κανάλι number"
 
-#: libs/ardour/coreaudio_source.cc:157
+#: libs/ardour/coreaudio_source.cc:164
 #, fuzzy
 msgid "CoreAudioSource: could not seek to frame %1 within %2 (%3)"
 msgstr "SndFileSource: δεν μπορούσα να αναζητήσω στο frame %1 μέσα στο %2 (%3)"
 
+#~ msgid "FileSource: \"%1\" not found when searching %2 using %3"
+#~ msgstr "FileSource: \"%1\" δεν ευρέθη όταν αναζητείτο %2 χρησιμοποιώντας %3"
+
+#~ msgid "FileSource: could not open \"%1\": (%2)"
+#~ msgstr "FileSource: δεν μπόρεσα να ανοίξω \"%1\": (%2)"
+
+#~ msgid "FileSource: cannot write header in %1"
+#~ msgstr "FileSource: δεν μπορώ να γράψω επικεφαλίδα στο %1"
+
+#~ msgid "FileSource: cannot locate chunks in %1"
+#~ msgstr "FileSource: δεν μπορώ να ανιχνεύσω κομμάτια στο %1"
+
+#~ msgid "FileSource: cannot read header in %1"
+#~ msgstr "FileSource: δεν μπορώ να διαβάσω επικεφαλίδα στο %1"
+
+#~ msgid "FileSource: cannot check header in %1"
+#~ msgstr "FileSource: δεν μπορώ να ελέγξω επικεφαλίδα στο %1"
+
+#, fuzzy
+#~ msgid "FileSource: cannot initialize peakfile for %1 as %2"
+#~ msgstr "FileSource: δεν μπορώ να εκκινήσω το peakfile για %1"
+
+#~ msgid "FileSource: cannot seek to end of file"
+#~ msgstr "FileSource: δεν μπορώ να ανιχνεύσω το τέλος του αρχείου"
+
+#~ msgid "FileSource: cannot read RIFF/WAVE chunk from file"
+#~ msgstr "FileSource: δεν μπορώ να διαβάσω κομμάτι RIFF/WAVE από το αρχείο"
+
+#~ msgid "FileSource %1: not a RIFF/WAVE file"
+#~ msgstr "FileSource %1: δεν είναι RIFF/WAVE αρχείο"
+
+#~ msgid "FileSource: can't read a chunk"
+#~ msgstr "FileSource: δεν μπορώ να διαβάσω κομμάτι"
+
+#~ msgid "FileSource: cannot get user information for BWF header (%1)"
+#~ msgstr ""
+#~ "FileSource: δεν μπορώ να βρώ πληροφορίες χρήστη για επικεφαλίδα BWF (%1)"
+
+#~ msgid "FileSource[%1]: cannot update data size: %2"
+#~ msgstr "FileSource[%1]: δεν μπορώ να ανανεώσω το μέγεθος δεδομένων: %2"
+
+#~ msgid "FileSource: can't find RIFF chunk info"
+#~ msgstr "FileSource: δεν ευρέθησαν πληροφορίες για RIFF κομμάτι"
+
+#, fuzzy
+#~ msgid "FileSource: can't find RIFX chunk info"
+#~ msgstr "FileSource: δεν ευρέθησαν πληροφορίες για RIFF κομμάτι"
+
+#~ msgid "FileSource: can't read RIFF chunk"
+#~ msgstr "FileSource: δεν μπορώ να διαβάσω RIFF κομμάτι"
+
+#~ msgid "FileSource: can't find format chunk info"
+#~ msgstr "FileSource: δεν ευρέθησαν πληροφορίες για το κομμάτι φορμαρίσματος"
+
+#~ msgid "FileSource: can't read format chunk"
+#~ msgstr "FileSource: δεν μπορώ να διαβάσω το κομμάτι φορμαρίσματος"
+
+#~ msgid "FileSource: can't find data chunk info"
+#~ msgstr "FileSource: δεν μπορώ να βρώ πληροφορίες για το κομμάτι δεδομένων"
+
+#~ msgid "FileSource: can't read data chunk"
+#~ msgstr "FileSource: δεν μπορώ να διαβάσω το κομμάτι δεδομένων"
+
+#~ msgid ""
+#~ "FileSource: cannot read Broadcast Wave data from existing audio file \"%1"
+#~ "\" (%2)"
+#~ msgstr ""
+#~ "FileSource: δεν μπορώ να διαβάσω δεδομένα Broadcast Wave από το υπάρχον "
+#~ "αρχείο \"%1\" (%2)"
+
+#~ msgid ""
+#~ "FileSource: cannot read Broadcast Wave coding history from audio file \"%1"
+#~ "\" (%2)"
+#~ msgstr ""
+#~ "FileSource: δεν μπορώ να διαβάσω το ιστορικό του κώδικα Broadcast Wave "
+#~ "από το αρχείο \"%1\" (%2)"
+
+#, fuzzy
+#~ msgid ""
+#~ "FileSource \"%1\" does not use valid sample format.\n"
+#~ "This is probably a programming error."
+#~ msgstr ""
+#~ "FileSource \"%1\" δεν χρησιμοποιεί format μεταβλητής υποδιαστολής.\n"
+#~ "Αυτό πιθανόν να είναι σφάλμα προγραμματισμού."
+
+#~ msgid "FileSource \"%1\" has no \"data\" chunk"
+#~ msgstr "FileSource \"%1\" δεν έχει \"data\" κομμάτι"
+
+#~ msgid ""
+#~ "%1: data length in header (%2) differs from implicit size in file (%3)"
+#~ msgstr ""
+#~ "%1: το μέγεθος δεδομένων της επικεφαλίδας (%2) διαφέρει από το δεδηλωμένο "
+#~ "μέγεθος στο αρχείο (%3)"
+
+#~ msgid "\"%1\" has a sample rate of %2 instead of %3 as used by this session"
+#~ msgstr ""
+#~ "\"%1\" έχει ρυθμό δειγματοληψίας %2 αντί του %3 όπως στην παρούσα συνεδρία"
+
+#~ msgid "FileSource: cannot write WAVE chunk: %1"
+#~ msgstr "FileSource: δεν μπορώ να γράψω WAVE κομμάτι: %1"
+
+#~ msgid "FileSource: cannot write format chunk: %1"
+#~ msgstr "FileSource: δεν μπορώ να γράψω format κομμάτι: %1"
+
+#~ msgid "FileSource: cannot data chunk: %1"
+#~ msgstr "FileSource: cδεν μπορώ να γράψω κομμάτι δεδομένων: %1"
+
+#~ msgid "FileSource: \"%1\" bad write (%2)"
+#~ msgstr "FileSource: \"%1\" κακή εγγραφή (%2)"
+
 #, fuzzy
 #~ msgid "cannot create feedback request pipe (%1)"
 #~ msgstr "Δεν μπορώ να δημιουργήσω transport request signal pipe (%1)"
index 7f2412e5d21366e585f4c6f53f35bf8be6a999bf..55368c2d5a453b5e398c238d494048650aae484b 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: libardour 0.664.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 15:09-0400\n"
 "PO-Revision-Date: 2003-05-21 12:50+0500\n"
 "Last-Translator: Filippo Pappalardo <filippo@email.it>\n"
 "Language-Team: Italian\n"
@@ -15,308 +15,494 @@ msgstr ""
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: libs/ardour/audio_library.cc:91
-msgid "channels"
+#: libs/ardour/audio_diskstream.cc:337
+#, fuzzy
+msgid "AudioDiskstream: Session doesn't know about a Playlist called \"%1\""
+msgstr "DiskStream: La sessione non riconosce la Playlist chiamata \"%1\""
+
+#: libs/ardour/audio_diskstream.cc:342
+msgid "AudioDiskstream: Playlist \"%1\" isn't an audio playlist"
 msgstr ""
 
+#: libs/ardour/audio_diskstream.cc:433
+#, fuzzy
+msgid "AudioDiskstream %1: there is no existing playlist to make a copy of!"
+msgstr "DiskStream %1: non esiste alcuna playlist di cui fare una copia!"
+
+#: libs/ardour/audio_diskstream.cc:1114 libs/ardour/audio_diskstream.cc:1125
+#, fuzzy
+msgid ""
+"AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"
+msgstr "DiskStream %1: impossibile leggere %2 dalla playlista al frame %3"
+
+#: libs/ardour/audio_diskstream.cc:1254
+#, fuzzy
+msgid "AudioDiskstream %1: cannot read %2 from playlist at frame %3"
+msgstr "DiskStream %1: impossibile leggere %2 dalla playlista al frame %3"
+
+#: libs/ardour/audio_diskstream.cc:1621 libs/ardour/audio_diskstream.cc:1638
+#, fuzzy
+msgid "AudioDiskstream %1: cannot write to disk"
+msgstr "DiskStream %1: impossibile scrivere sul disco"
+
+#: libs/ardour/audio_diskstream.cc:1698
+#, fuzzy
+msgid "AudioDiskstream \"%1\": cannot flush captured data to disk!"
+msgstr "DiskStream \"%1\": impossibile scaricare i dati acquisiti sul disco!"
+
+#: libs/ardour/audio_diskstream.cc:1795
+msgid "%1: could not create region for complete audio file"
+msgstr "%1: impossibile creare una regione per il file audio completo"
+
+#: libs/ardour/audio_diskstream.cc:1818
+#, fuzzy
+msgid "AudioDiskstream: could not create region for captured audio!"
+msgstr "DiskStream: impossibile creare una regione per l'audio registrato!"
+
+#: libs/ardour/audio_diskstream.cc:1873
+#, fuzzy
+msgid "programmer error: %1"
+msgstr "errore di programmazione: %1"
+
+#: libs/ardour/audio_diskstream.cc:2145
+#, fuzzy
+msgid "AudioDiskstream: channel %1 out of range"
+msgstr "DiskStream: canale fuori margine"
+
+#: libs/ardour/audio_diskstream.cc:2170
+msgid "%1:%2 new capture file not initialized correctly"
+msgstr "%1:%2 nuovo file di registrazione non � stato avviato correttamente"
+
+#: libs/ardour/audio_diskstream.cc:2403
+msgid "Location \"%1\" not valid for track loop (start >= end)"
+msgstr "La Location \"%1\" non  valida per il loop (inizio >= fine)"
+
+#: libs/ardour/audio_diskstream.cc:2484
+#, fuzzy
+msgid "%1: cannot restore pending capture source file %2"
+msgstr "Import: impossibile aprire il file audio di input \"%1\""
+
+#: libs/ardour/audio_diskstream.cc:2506
+msgid "%1: incorrect number of pending sources listed - ignoring them all"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:2522
+#, fuzzy
+msgid "%1: cannot create whole-file region from pending capture sources"
+msgstr "Playlist: impossibile creare la Regione dal file di stato"
+
+#: libs/ardour/audio_diskstream.cc:2534
+#, fuzzy
+msgid "%1: cannot create region from pending capture sources"
+msgstr "Playlist: impossibile creare la Regione dal file di stato"
+
 #: libs/ardour/audio_library.cc:92
+msgid "channels"
+msgstr ""
+
+#: libs/ardour/audio_library.cc:93
 #, fuzzy
 msgid "samplerate"
 msgstr "separa"
 
-#: libs/ardour/audio_library.cc:93
+#: libs/ardour/audio_library.cc:94
 msgid "resolution"
 msgstr ""
 
-#: libs/ardour/audio_library.cc:94
+#: libs/ardour/audio_library.cc:95
 msgid "format"
 msgstr ""
 
-#: libs/ardour/audio_library.cc:101
+#: libs/ardour/audio_library.cc:102
 msgid "Could not open %1.  Audio Library not saved"
 msgstr "Impossibile accedere a %1. Libreria Audio non salvata"
 
-#: libs/ardour/audio_playlist.cc:52 libs/ardour/audio_playlist.cc:62
-#: libs/ardour/audio_playlist.cc:73 libs/ardour/audio_playlist.cc:120
+#: libs/ardour/audio_playlist.cc:53 libs/ardour/audio_playlist.cc:63
+#: libs/ardour/audio_playlist.cc:74 libs/ardour/audio_playlist.cc:121
 #: libs/ardour/insert.cc:76 libs/ardour/insert.cc:95 libs/ardour/insert.cc:120
-#: libs/ardour/insert.cc:838 libs/ardour/insert.cc:846 libs/ardour/send.cc:38
-#: libs/ardour/send.cc:52 libs/ardour/send.cc:61
-#: libs/ardour/session_state.cc:1620 libs/ardour/session_state.cc:1666
+#: libs/ardour/insert.cc:838 libs/ardour/insert.cc:846 libs/ardour/send.cc:39
+#: libs/ardour/send.cc:53 libs/ardour/send.cc:62
+#: libs/ardour/session_state.cc:1621 libs/ardour/session_state.cc:1667
 msgid "initial state"
 msgstr "stato iniziale"
 
-#: libs/ardour/audio_playlist.cc:274 libs/ardour/audio_playlist.cc:768
+#: libs/ardour/audio_playlist.cc:275 libs/ardour/audio_playlist.cc:769
 msgid ""
 "programming error: non-audio Region passed to remove_overlap in audio "
 "playlist"
 msgstr ""
 
-#: libs/ardour/audio_playlist.cc:401
+#: libs/ardour/audio_playlist.cc:402
 msgid ""
 "programming error: non-audio Region tested for overlap in audio playlist"
 msgstr ""
 
-#: libs/ardour/audio_playlist.cc:877
+#: libs/ardour/audio_playlist.cc:878
 msgid "xfade change"
 msgstr "cambio dello smorzamento incrociato"
 
-#: libs/ardour/audio_playlist.cc:926
+#: libs/ardour/audio_playlist.cc:933
 msgid "region modified"
 msgstr "regione modificata"
 
-#: libs/ardour/audio_track.cc:121 libs/ardour/io.cc:1703
-#: libs/ardour/io.cc:1813
+#: libs/ardour/audio_track.cc:133 libs/ardour/io.cc:1716
+#: libs/ardour/io.cc:1826
 msgid "Unknown connection \"%1\" listed for input of %2"
 msgstr "Connessione sconosciuta \"%1\" come input di %2"
 
-#: libs/ardour/audio_track.cc:123 libs/ardour/io.cc:1705
-#: libs/ardour/io.cc:1815
+#: libs/ardour/audio_track.cc:135 libs/ardour/io.cc:1718
+#: libs/ardour/io.cc:1828
 msgid "in 1"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:124 libs/ardour/io.cc:1706
-#: libs/ardour/io.cc:1816
+#: libs/ardour/audio_track.cc:136 libs/ardour/io.cc:1719
+#: libs/ardour/io.cc:1829
 msgid "No input connections available as a replacement"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:128 libs/ardour/io.cc:1710
-#: libs/ardour/io.cc:1820
+#: libs/ardour/audio_track.cc:140 libs/ardour/io.cc:1723
+#: libs/ardour/io.cc:1833
 msgid "Connection %1 was not available - \"in 1\" used instead"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:137 libs/ardour/io.cc:1829
+#: libs/ardour/audio_track.cc:149 libs/ardour/io.cc:1842
 msgid "improper input channel list in XML node (%1)"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:182 libs/ardour/audio_track.cc:195
+#: libs/ardour/audio_track.cc:194 libs/ardour/audio_track.cc:207
 msgid "AudioTrack: diskstream \"%1\" not known by session"
 msgstr "AudioTrack: diskstream \"%1\" non riconosciuto dalla sessione"
 
-#: libs/ardour/audio_track.cc:293
+#: libs/ardour/audio_track.cc:305
 msgid ""
 "MIDI rec_enable control specification for %1 is incomplete, so it has been "
 "ignored"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:305
+#: libs/ardour/audio_track.cc:317
 msgid "programming error: AudioTrack given state without diskstream!"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:147
+#: libs/ardour/audioengine.cc:150
 msgid "cannot activate JACK client"
 msgstr "impossibile attivare il client JACK"
 
-#: libs/ardour/audioengine.cc:432
+#: libs/ardour/audioengine.cc:401
 msgid "register audio input port called before engine was started"
 msgstr ""
 "la richiesta di registrazione di una porta di entrata  avvenuta prima "
 "dell'avvio dell'applicazione"
 
-#: libs/ardour/audioengine.cc:463
+#: libs/ardour/audioengine.cc:432
 msgid "register audio output port called before engine was started"
 msgstr ""
 "la richiesta di registrazione di una porta di uscita  avvenuta prima "
 "dell'avvio dell'applicazione"
 
-#: libs/ardour/audioengine.cc:524
+#: libs/ardour/audioengine.cc:493
 msgid "connect called before engine was started"
 msgstr "richiesta di connessione avvenuta prima dell'avvio dell'applicazione"
 
-#: libs/ardour/audioengine.cc:540
+#: libs/ardour/audioengine.cc:509
 msgid "AudioEngine: cannot connect %1 (%2) to %3 (%4)"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:553 libs/ardour/audioengine.cc:582
+#: libs/ardour/audioengine.cc:522 libs/ardour/audioengine.cc:551
 msgid "disconnect called before engine was started"
 msgstr ""
 "richiesta di disconnessione avvenuta prima dell'avvio dell'applicazione"
 
-#: libs/ardour/audioengine.cc:640
+#: libs/ardour/audioengine.cc:609
 msgid "get_port_by_name() called before engine was started"
 msgstr ""
 "richiesta get_port_by_name() avvenuta prima dell'avvio dell'applicazione"
 
-#: libs/ardour/audioengine.cc:673
+#: libs/ardour/audioengine.cc:642
 msgid "get_ports called before engine was started"
 msgstr "richiesta di get_ports avvenuta prima dell'avvio dell'applicazione"
 
-#: libs/ardour/audioengine.cc:748
+#: libs/ardour/audioengine.cc:717
 msgid "get_nth_physical called before engine was started"
 msgstr ""
 "richiesta di get_nth_physical avvenuta prima dell'avvio dell'applicazione"
 
-#: libs/ardour/audioengine.cc:776
+#: libs/ardour/audioengine.cc:745
 #, fuzzy
 msgid "get_port_total_latency() called with no JACK client connection"
 msgstr ""
 "richiesta di get_port_total_latency() avvenuta prima dell'avvio "
 "dell'applicazione"
 
-#: libs/ardour/audioengine.cc:782
+#: libs/ardour/audioengine.cc:751
 msgid "get_port_total_latency() called before engine was started"
 msgstr ""
 "richiesta di get_port_total_latency() avvenuta prima dell'avvio "
 "dell'applicazione"
 
-#: libs/ardour/audioengine.cc:906
+#: libs/ardour/audioengine.cc:875
 msgid "Unable to connect to JACK server"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:909
+#: libs/ardour/audioengine.cc:878
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr ""
 
-#: libs/ardour/audioengine.cc:914
+#: libs/ardour/audioengine.cc:883
 msgid "JACK server started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:948
+#: libs/ardour/audioengine.cc:917
 msgid "cannot shutdown connection to JACK"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:973
+#: libs/ardour/audioengine.cc:942
 msgid "failed to connect to JACK"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:989
+#: libs/ardour/audioengine.cc:958
 #, fuzzy
 msgid "could not reregister %1"
 msgstr "Esportazione: impossibile scrivere dati sul file di output (%1)"
 
-#: libs/ardour/audioengine.cc:1046
+#: libs/ardour/audioengine.cc:1015
 msgid "could not reconnect %1 and %2 (err = %3)"
 msgstr ""
 
-#: libs/ardour/audiofilter.cc:44
+#: libs/ardour/audiofilesource.cc:445 libs/ardour/session_state.cc:3095
+msgid ""
+"there are already 1000 files with names like %1; versioning discontinued"
+msgstr ""
+"ci sono gia' 1000 file con nomi come %1; tracciamento di versione interrotto"
+
+#: libs/ardour/audiofilesource.cc:459 libs/ardour/session_state.cc:3109
+msgid "cannot rename audio file source from %1 to %2 (%3)"
+msgstr "impossibile rinominare file audio sorgente da %1 a %2 (%3)"
+
+#: libs/ardour/audiofilesource.cc:466 libs/ardour/session_state.cc:3124
+msgid "cannot remove peakfile %1 for %2 (%3)"
+msgstr "impossibile eliminare il peakfile %1 per %2 (%3)"
+
+#: libs/ardour/audiofilesource.cc:510
+msgid "FileSource: search path not set"
+msgstr "FileSource: percorso di ricerca non specificato"
+
+#: libs/ardour/audiofilesource.cc:534
+msgid ""
+"FileSource: \"%1\" is ambigous when searching %2\n"
+"\t"
+msgstr ""
+"FileSource: \"%1\" � risultato ambiguo nel cercare %2\n"
+"\t"
+
+#: libs/ardour/audiofilesource.cc:540
+#, fuzzy
+msgid "Filesource: cannot find required file (%1): while searching %2"
+msgstr "FileSource: impossibile trovare il file richiesto (%1): %2"
+
+#: libs/ardour/audiofilesource.cc:563
+msgid "Filesource: cannot find required file (%1): %2"
+msgstr "FileSource: impossibile trovare il file richiesto (%1): %2"
+
+#: libs/ardour/audiofilesource.cc:568
+msgid "Filesource: cannot check for existing file (%1): %2"
+msgstr "FileSource: impossibile controllare il file esistente (%1): %2"
+
+#: libs/ardour/audiofilesource.cc:640 libs/ardour/insert.cc:525
+#: libs/ardour/sndfilesource.cc:112
+msgid "programming error: %1"
+msgstr "errore di programmazione: %1"
+
+#: libs/ardour/audiofilesource.cc:645
+#, fuzzy
+msgid "cannot rename audio file for %1 to %2"
+msgstr "impossibile rinominare file audio sorgente da %1 a %2 (%3)"
+
+#: libs/ardour/audiofilter.cc:45
 msgid "audiofilter: error creating name for new audio file based on %1"
 msgstr ""
 "audiofilter: errore nel creare il nome per il nuovo file audio basato su %1"
 
-#: libs/ardour/audiofilter.cc:54
+#: libs/ardour/audiofilter.cc:58
 msgid "audiofilter: error creating new audio file %1 (%2)"
 msgstr "audiofilter: errore nel creare un nuovo file audio %1 (%2)"
 
-#: libs/ardour/audioregion.cc:855 libs/ardour/audioregion.cc:917
+#: libs/ardour/audioregion.cc:857 libs/ardour/audioregion.cc:919
 #, fuzzy
 msgid "fade in change"
 msgstr "cambio dello smorzamento incrociato"
 
-#: libs/ardour/audioregion.cc:1341
+#: libs/ardour/audioregion.cc:1349
 #, c-format
 msgid "normalized to %.2fdB"
 msgstr "normalizzato a %.2fdB"
 
-#: libs/ardour/audioregion.cc:1359
+#: libs/ardour/audioregion.cc:1367
 #, fuzzy
 msgid "envelope change"
 msgstr "livello cambiato"
 
-#: libs/ardour/automation_event.cc:64 libs/ardour/location.cc:344
-#: libs/ardour/tempo.cc:225
+#: libs/ardour/audiosource.cc:143
+msgid "poll on peak request pipe failed (%1)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:150
+msgid "Error on peak thread request pipe"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:183
+#, fuzzy
+msgid "Error reading from peak request pipe"
+msgstr "Errore nel leggere dalla porta MIDI %1"
+
+#: libs/ardour/audiosource.cc:215 libs/ardour/session_butler.cc:80
+#: libs/ardour/session_midi.cc:1183
+msgid "Cannot create transport request signal pipe (%1)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:220 libs/ardour/audiosource.cc:225
+msgid "UI: cannot set O_NONBLOCK on peak request pipe (%1)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:230
+#, fuzzy
+msgid "AudioSource: could not create peak thread"
+msgstr "Sessione: impossibile creare un nuovo route"
+
+#: libs/ardour/audiosource.cc:308
+#, fuzzy
+msgid "cannot rename peakfile for %1 from %2 to %3 (%4)"
+msgstr "impossibile eliminare il peakfile %1 per %2 (%3)"
+
+#: libs/ardour/audiosource.cc:350
+#, fuzzy
+msgid "AudioSource: cannot stat peakfile \"%1\""
+msgstr "FileSource: impossibile avviare il peakfile per %1"
+
+#: libs/ardour/audiosource.cc:451
+msgid "cannot read sample data for unscaled peak computation"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:472 libs/ardour/audiosource.cc:543
+#: libs/ardour/audiosource.cc:787 libs/ardour/audiosource.cc:878
+#, fuzzy
+msgid "AudioSource: cannot open peakpath \"%1\" (%2)"
+msgstr "SndFileSource: impossibile accedere al file \"%1\" (%2)"
+
+#: libs/ardour/audiosource.cc:644
+#, fuzzy
+msgid "AudioSource[%1]: peak read - cannot read %2 samples at offset %3"
+msgstr "DiskStream %1: impossibile leggere %2 dalla playlista al frame %3"
+
+#: libs/ardour/audiosource.cc:798
+msgid "%1: could not write read raw data for peak computation (%2)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:823
+msgid "%1: could not write peak file data (%2)"
+msgstr ""
+
+#: libs/ardour/automation_event.cc:65 libs/ardour/location.cc:345
+#: libs/ardour/tempo.cc:226
 msgid "initial"
 msgstr "iniziale"
 
-#: libs/ardour/automation_event.cc:231
+#: libs/ardour/automation_event.cc:232
 msgid "cleared"
 msgstr "pulito"
 
-#: libs/ardour/automation_event.cc:403
+#: libs/ardour/automation_event.cc:404
 msgid "added event"
 msgstr "aggiunto evento"
 
-#: libs/ardour/automation_event.cc:420
+#: libs/ardour/automation_event.cc:421
 msgid "removed event"
 msgstr "rimosso evento"
 
-#: libs/ardour/automation_event.cc:435
+#: libs/ardour/automation_event.cc:436
 msgid "removed multiple events"
 msgstr "rimossi molteplici eventi"
 
-#: libs/ardour/automation_event.cc:461
+#: libs/ardour/automation_event.cc:467 libs/ardour/automation_event.cc:498
 msgid "removed range"
 msgstr "rimosso intervallo"
 
-#: libs/ardour/automation_event.cc:491
+#: libs/ardour/automation_event.cc:528
 msgid "event range adjusted"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:513
+#: libs/ardour/automation_event.cc:550
 msgid "event adjusted"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:628 libs/ardour/automation_event.cc:733
-#: libs/ardour/panner.cc:1040
+#: libs/ardour/automation_event.cc:665 libs/ardour/automation_event.cc:770
+#: libs/ardour/panner.cc:1041
 msgid "programming error:"
 msgstr "errore di programmazione:"
 
-#: libs/ardour/automation_event.cc:1042
+#: libs/ardour/automation_event.cc:1079
 msgid "cut/copy/clear"
 msgstr "taglia/copia/pulisci"
 
-#: libs/ardour/automation_event.cc:1075
+#: libs/ardour/automation_event.cc:1112
 msgid "copy"
 msgstr "copia"
 
-#: libs/ardour/automation_event.cc:1143 libs/ardour/playlist.cc:939
+#: libs/ardour/automation_event.cc:1180 libs/ardour/playlist.cc:939
 msgid "paste"
 msgstr "incolla"
 
-#: libs/ardour/automation_event.cc:1198
+#: libs/ardour/automation_event.cc:1235
 msgid ""
 "automation list: no x-coordinate stored for control point (point ignored)"
 msgstr ""
 "lista automazione: nessuna coordinata X salvata per punto di controllo "
 "(ignorato)"
 
-#: libs/ardour/automation_event.cc:1204
+#: libs/ardour/automation_event.cc:1241
 msgid ""
 "automation list: no y-coordinate stored for control point (point ignored)"
 msgstr ""
 "lista automazione: nessuna coordinata Y salvata per punto di controllo "
 "(ignorato)"
 
-#: libs/ardour/basic_ui.cc:68
-msgid "unnamed"
-msgstr ""
-
-#: libs/ardour/configuration.cc:79
+#: libs/ardour/configuration.cc:80
 #, fuzzy
 msgid "loading system configuration file %1"
 msgstr ""
 "Ardour: impossibile leggere il file di configurazione di sistema \"%1\""
 
-#: libs/ardour/configuration.cc:82
+#: libs/ardour/configuration.cc:83
 msgid "Ardour: cannot read system configuration file \"%1\""
 msgstr ""
 "Ardour: impossibile leggere il file di configurazione di sistema \"%1\""
 
-#: libs/ardour/configuration.cc:87
+#: libs/ardour/configuration.cc:88
 msgid "Ardour: system configuration file \"%1\" not loaded successfully."
 msgstr ""
 "Ardour: il file di configurazione di sistema \"%1\" non  stato caricato con "
 "successo"
 
-#: libs/ardour/configuration.cc:104
+#: libs/ardour/configuration.cc:105
 #, fuzzy
 msgid "loading user configuration file %1"
 msgstr "Ardour: impossibile la lettura del file di configurazione \"%1\""
 
-#: libs/ardour/configuration.cc:107
+#: libs/ardour/configuration.cc:108
 msgid "Ardour: cannot read configuration file \"%1\""
 msgstr "Ardour: impossibile la lettura del file di configurazione \"%1\""
 
-#: libs/ardour/configuration.cc:112
+#: libs/ardour/configuration.cc:113
 #, fuzzy
 msgid "Ardour: user configuration file \"%1\" not loaded successfully."
 msgstr ""
 "Ardour: il file di configurazione \"%1\" non  stato caricato con successo"
 
-#: libs/ardour/configuration.cc:136
+#: libs/ardour/configuration.cc:137
 #, fuzzy
 msgid "Config file %1 not saved"
 msgstr "File di configurazione non salvato"
 
-#: libs/ardour/configuration.cc:209
+#: libs/ardour/configuration.cc:210
 msgid "ill-formed MIDI port specification in ardour rcfile (ignored)"
 msgstr ""
 "porta MIDI mal configurata nel file di configurazione di ardour (ignorato)"
@@ -329,28 +515,41 @@ msgstr "Il nodo per la connessione non possiede l'attributo \"nome\""
 msgid "Node for Connection has no \"connections\" property"
 msgstr "Il nodo per la connessione non ha l'attributo \"connessioni\""
 
-#: libs/ardour/connection.cc:227 libs/ardour/io.cc:1889
+#: libs/ardour/connection.cc:227 libs/ardour/io.cc:1902
 msgid "IO: badly formed string in XML node for inputs \"%1\""
 msgstr "IO: stringa malformata nel nodo XML per le entrate \"%1\""
 
-#: libs/ardour/connection.cc:232 libs/ardour/io.cc:1894
+#: libs/ardour/connection.cc:232 libs/ardour/io.cc:1907
 msgid "bad input string in XML node \"%1\""
 msgstr "stringa malformata nel nodo XML \"%1\""
 
-#: libs/ardour/control_protocol_manager.cc:79
+#: libs/ardour/control_protocol_manager.cc:80
 msgid "control protocol name \"%1\" has no descriptor"
 msgstr ""
 
-#: libs/ardour/control_protocol_manager.cc:84
+#: libs/ardour/control_protocol_manager.cc:85
 msgid "control protocol name \"%1\" could not be initialized"
 msgstr ""
 
-#: libs/ardour/control_protocol_manager.cc:180
+#: libs/ardour/control_protocol_manager.cc:141
+msgid "Instantiating mandatory control protocol %1"
+msgstr ""
+
+#: libs/ardour/control_protocol_manager.cc:175
+#, fuzzy
+msgid "Control protocol %1 not usable"
+msgstr "La porta MIDI \"%1\" non  disponibile: nessun controllo MTC possibile"
+
+#: libs/ardour/control_protocol_manager.cc:187
+msgid "Control surface protocol discovered: \"%1\""
+msgstr ""
+
+#: libs/ardour/control_protocol_manager.cc:205
 #, fuzzy
 msgid "ControlProtocolManager: cannot load module \"%1\" (%2)"
 msgstr "LADSPA: impossibile caricare il modulo \"%1\" (%2)"
 
-#: libs/ardour/control_protocol_manager.cc:188
+#: libs/ardour/control_protocol_manager.cc:213
 #, fuzzy
 msgid "ControlProtocolManager: module \"%1\" has no descriptor function."
 msgstr "LADSPA: il modulo \"%1\" non ha alcuna funzione descriptor."
@@ -381,365 +580,103 @@ msgstr "livello cambiato"
 msgid "old-style crossfade information - no position information"
 msgstr "il nodo XML per la Location non ha informazioni sull'inizio"
 
-#: libs/ardour/curve.cc:112 libs/ardour/insert.cc:454
-#: libs/ardour/session.cc:2452 libs/ardour/session.cc:2504
+#: libs/ardour/curve.cc:112 libs/ardour/globals.cc:340
+#: libs/ardour/insert.cc:454 libs/ardour/session.cc:2466
+#: libs/ardour/session.cc:2518
 msgid "programming error: "
 msgstr "errore di programmazione: "
 
-#: libs/ardour/cycle_timer.cc:35
+#: libs/ardour/cycle_timer.cc:37
 msgid "CycleTimer::get_mhz(): can't open /proc/cpuinfo"
 msgstr "CycleTimer::get_mhz(): impossibile accedere a /proc/cpuinfo"
 
-#: libs/ardour/cycle_timer.cc:47
+#: libs/ardour/cycle_timer.cc:49
 msgid "CycleTimer::get_mhz(): cannot locate cpu MHz in /proc/cpuinfo"
 msgstr ""
 "CycleTimer::get_mhz(): impossibile localizzare \"cpu MHz\" in /proc/cpuinfo"
 
-#: libs/ardour/cycle_timer.cc:70
+#: libs/ardour/cycle_timer.cc:72
 msgid "cannot locate cpu MHz in /proc/cpuinfo"
 msgstr "impossibile localizzare \"cpu MHz\" in /proc/cpuinfo"
 
-#: libs/ardour/destructive_filesource.cc:197
+#: libs/ardour/destructive_filesource.cc:188
 msgid "DestructiveFileSource: \"%1\" bad read retval: %2 of %5 (%3: %4)"
 msgstr ""
 
-#: libs/ardour/destructive_filesource.cc:210
-#: libs/ardour/destructive_filesource.cc:252
-#: libs/ardour/destructive_filesource.cc:259
+#: libs/ardour/destructive_filesource.cc:201
+#: libs/ardour/destructive_filesource.cc:243
+#: libs/ardour/destructive_filesource.cc:250
 msgid "DestructiveFileSource: \"%1\" bad write (%2)"
 msgstr ""
 
-#: libs/ardour/diskstream.cc:337
-msgid "DiskStream: Session doesn't know about a Playlist called \"%1\""
-msgstr "DiskStream: La sessione non riconosce la Playlist chiamata \"%1\""
-
-#: libs/ardour/diskstream.cc:342
-msgid "DiskStream: Playlist \"%1\" isn't an audio playlist"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:433
-msgid "DiskStream %1: there is no existing playlist to make a copy of!"
-msgstr "DiskStream %1: non esiste alcuna playlist di cui fare una copia!"
-
-#: libs/ardour/diskstream.cc:1113 libs/ardour/diskstream.cc:1124
-msgid "DiskStream %1: when refilling, cannot read %2 from playlist at frame %3"
-msgstr "DiskStream %1: impossibile leggere %2 dalla playlista al frame %3"
-
-#: libs/ardour/diskstream.cc:1256
-msgid "DiskStream %1: cannot read %2 from playlist at frame %3"
-msgstr "DiskStream %1: impossibile leggere %2 dalla playlista al frame %3"
-
-#: libs/ardour/diskstream.cc:1623 libs/ardour/diskstream.cc:1640
-msgid "DiskStream %1: cannot write to disk"
-msgstr "DiskStream %1: impossibile scrivere sul disco"
-
-#: libs/ardour/diskstream.cc:1700
-msgid "DiskStream \"%1\": cannot flush captured data to disk!"
-msgstr "DiskStream \"%1\": impossibile scaricare i dati acquisiti sul disco!"
-
-#: libs/ardour/diskstream.cc:1797
-msgid "%1: could not create region for complete audio file"
-msgstr "%1: impossibile creare una regione per il file audio completo"
-
-#: libs/ardour/diskstream.cc:1820
-msgid "DiskStream: could not create region for captured audio!"
-msgstr "DiskStream: impossibile creare una regione per l'audio registrato!"
-
-#: libs/ardour/diskstream.cc:1875
-#, fuzzy
-msgid "programmer error: %1"
-msgstr "errore di programmazione: %1"
-
-#: libs/ardour/diskstream.cc:2155
-#, fuzzy
-msgid "DiskStream: channel %1 out of range"
-msgstr "DiskStream: canale fuori margine"
-
-#: libs/ardour/diskstream.cc:2180
-msgid "%1:%2 new capture file not initialized correctly"
-msgstr "%1:%2 nuovo file di registrazione non � stato avviato correttamente"
-
-#: libs/ardour/diskstream.cc:2413
-msgid "Location \"%1\" not valid for track loop (start >= end)"
-msgstr "La Location \"%1\" non  valida per il loop (inizio >= fine)"
-
-#: libs/ardour/diskstream.cc:2491
-#, fuzzy
-msgid "%1: cannot restore pending capture source file %2"
-msgstr "Import: impossibile aprire il file audio di input \"%1\""
-
-#: libs/ardour/diskstream.cc:2513
-msgid "%1: incorrect number of pending sources listed - ignoring them all"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:2529
-#, fuzzy
-msgid "%1: cannot create whole-file region from pending capture sources"
-msgstr "Playlist: impossibile creare la Regione dal file di stato"
-
-#: libs/ardour/diskstream.cc:2541
-#, fuzzy
-msgid "%1: cannot create region from pending capture sources"
-msgstr "Playlist: impossibile creare la Regione dal file di stato"
-
-#: libs/ardour/filesource.cc:175
-msgid "FileSource: search path not set"
-msgstr "FileSource: percorso di ricerca non specificato"
-
-#: libs/ardour/filesource.cc:190
-msgid "FileSource: \"%1\" not found when searching %2 using %3"
-msgstr "FileSource: \"%1\" non trovato nel cercare %2 utilizzando %3"
-
-#: libs/ardour/filesource.cc:196
-msgid ""
-"FileSource: \"%1\" is ambigous when searching %2\n"
-"\t"
-msgstr ""
-"FileSource: \"%1\" � risultato ambiguo nel cercare %2\n"
-"\t"
-
-#: libs/ardour/filesource.cc:231
-msgid "Filesource: cannot find required file (%1): %2"
-msgstr "FileSource: impossibile trovare il file richiesto (%1): %2"
-
-#: libs/ardour/filesource.cc:239
-msgid "Filesource: cannot check for existing file (%1): %2"
-msgstr "FileSource: impossibile controllare il file esistente (%1): %2"
-
-#: libs/ardour/filesource.cc:245 libs/ardour/filesource.cc:1127
-#: libs/ardour/filesource.cc:1210
-msgid "FileSource: could not open \"%1\": (%2)"
-msgstr "FileSource: impossibile aprire \"%1\": (%2)"
-
-#: libs/ardour/filesource.cc:278
-msgid "FileSource: cannot write header in %1"
-msgstr "FileSource: impossibile scrivere header in %1"
-
-#: libs/ardour/filesource.cc:293
-msgid "FileSource: cannot locate chunks in %1"
-msgstr "FileSource: impossibile trovare spezzoni in %1"
-
-#: libs/ardour/filesource.cc:298
-msgid "FileSource: cannot read header in %1"
-msgstr "FileSource: impossibile leggere header in %1"
-
-#: libs/ardour/filesource.cc:303
-msgid "FileSource: cannot check header in %1"
-msgstr "FileSource: impossibile controllare header in %1"
-
-#: libs/ardour/filesource.cc:311
-#, fuzzy
-msgid "FileSource: cannot initialize peakfile for %1 as %2"
-msgstr "FileSource: impossibile avviare il peakfile per %1"
-
-#: libs/ardour/filesource.cc:359 libs/ardour/insert.cc:525
-msgid "programming error: %1"
-msgstr "errore di programmazione: %1"
-
-#: libs/ardour/filesource.cc:364
-#, fuzzy
-msgid "cannot rename audio file for %1 to %2"
-msgstr "impossibile rinominare file audio sorgente da %1 a %2 (%3)"
-
-#: libs/ardour/filesource.cc:390
-msgid "FileSource: cannot seek to end of file"
-msgstr "FileSource: impossibile cercare fino alla fine del file"
-
-#: libs/ardour/filesource.cc:395
-msgid "FileSource: cannot read RIFF/WAVE chunk from file"
-msgstr "FileSource: impossibile accedere allo spezzone RIFF/WAVE dal file"
-
-#: libs/ardour/filesource.cc:407
-msgid "FileSource %1: not a RIFF/WAVE file"
-msgstr "FileSource %1: il file non  un file RIFF/WAVE"
-
-#: libs/ardour/filesource.cc:434
-msgid "FileSource: can't read a chunk"
-msgstr "FileSource: impossibile accedere ad uno spezzone"
-
-#: libs/ardour/filesource.cc:451
-msgid "filesource: correcting mis-written RIFF file to become a RIFX: "
-msgstr ""
-
-#: libs/ardour/filesource.cc:567
-msgid "FileSource: cannot get user information for BWF header (%1)"
-msgstr "FileSource: impossibile otterene info utente dall'header BWF (%1)"
-
-#: libs/ardour/filesource.cc:571
-msgid "FileSource: cannot get host information for BWF header (%1)"
-msgstr "FileSource: impossibile ottenere info sull'host dall'header BWF (%1)"
-
-#: libs/ardour/filesource.cc:716
-msgid "FileSource[%1]: cannot update data size: %2"
-msgstr "FileSource[%1]: impossibile aggiornare la dimensione dei dati: %2"
-
-#: libs/ardour/filesource.cc:733
-msgid "FileSource: can't find RIFF chunk info"
-msgstr "FileSource: impossibile trovare info sullo spezzone RIFF"
-
-#: libs/ardour/filesource.cc:737
-#, fuzzy
-msgid "FileSource: can't find RIFX chunk info"
-msgstr "FileSource: impossibile trovare info sullo spezzone RIFF"
-
-#: libs/ardour/filesource.cc:758
-msgid "FileSource: can't read RIFF chunk"
-msgstr "FileSource: impossibile accedere allo spezzone RIFF"
-
-#: libs/ardour/filesource.cc:768
-msgid "FileSource: can't find format chunk info"
-msgstr "FileSource: impossibile trovare info sul formato dello spezzone"
-
-#: libs/ardour/filesource.cc:773
-msgid "FileSource: can't read format chunk"
-msgstr "FileSource: impossibile leggere il formato dello spezzone"
-
-#: libs/ardour/filesource.cc:782
-msgid "FileSource: can't find data chunk info"
-msgstr "FileSource: impossibile trovare info sui dati dello spezzone"
-
-#: libs/ardour/filesource.cc:787
-msgid "FileSource: can't read data chunk"
-msgstr "FileSource: impossibile leggere dati dello spezzone"
-
-#: libs/ardour/filesource.cc:804
-msgid ""
-"FileSource: cannot read Broadcast Wave data from existing audio file \"%1"
-"\" (%2)"
-msgstr ""
-"FileSource: impossibile leggere dati Broadcast Wave dal file audio esistente "
-"\"%1\" (%2) "
-
-#: libs/ardour/filesource.cc:820
-msgid ""
-"FileSource: cannot read Broadcast Wave coding history from audio file \"%1"
-"\" (%2)"
-msgstr ""
-"FileSource: impossibile leggere lo storico del Broadcast Wave dal file audio "
-"\"%1\" (%2)"
-
-#: libs/ardour/filesource.cc:862
-#, fuzzy
-msgid ""
-"FileSource \"%1\" does not use valid sample format.\n"
-"This is probably a programming error."
-msgstr ""
-"FileSource \"%1\" non usa il formato floating point.\n"
-"Questo  probabilmente un errore di programmazione."
-
-#: libs/ardour/filesource.cc:901
-msgid "FileSource \"%1\" has no \"data\" chunk"
-msgstr "FileSource \"%1\" non ha uno spezzone di \"dati\""
-
-#: libs/ardour/filesource.cc:906
-msgid "%1: data length in header (%2) differs from implicit size in file (%3)"
-msgstr ""
-"%1: la lunghezza dei dati nell'header (%2)  diversa dalla dimensione "
-"implicita nel file (%3)"
-
-#: libs/ardour/filesource.cc:911
-msgid "\"%1\" has a sample rate of %2 instead of %3 as used by this session"
-msgstr ""
-"\"%1\" ha una sample rate di %2 anzicch di %3 come il resto della sessione"
-
-#: libs/ardour/filesource.cc:934
-msgid "FileSource: cannot write WAVE chunk: %1"
-msgstr "FileSource: impossibile scrivere lo spezzone WAVE: %1"
-
-#: libs/ardour/filesource.cc:978
-msgid "FileSource: cannot write format chunk: %1"
-msgstr "FileSource: impossibile scrivere il formato dello spezzone: %1"
-
-#: libs/ardour/filesource.cc:990
-msgid "FileSource: cannot data chunk: %1"
-msgstr ""
-
-#: libs/ardour/filesource.cc:1103 libs/ardour/filesource.cc:1188
-msgid "FileSource: \"%1\" bad write (%2)"
-msgstr ""
-
-#: libs/ardour/filesource.cc:1335 libs/ardour/session_state.cc:3093
-msgid ""
-"there are already 1000 files with names like %1; versioning discontinued"
-msgstr ""
-"ci sono gia' 1000 file con nomi come %1; tracciamento di versione interrotto"
-
-#: libs/ardour/filesource.cc:1349 libs/ardour/session_state.cc:3107
-msgid "cannot rename audio file source from %1 to %2 (%3)"
-msgstr "impossibile rinominare file audio sorgente da %1 a %2 (%3)"
-
-#: libs/ardour/filesource.cc:1356 libs/ardour/session_state.cc:3122
-msgid "cannot remove peakfile %1 for %2 (%3)"
-msgstr "impossibile eliminare il peakfile %1 per %2 (%3)"
-
-#: libs/ardour/globals.cc:82
+#: libs/ardour/globals.cc:109
 msgid "no MIDI ports specified: no MMC or MTC control possible"
 msgstr "Nessuna porta MIDI specificata: impossibile alcun controllo MMC o MTC"
 
-#: libs/ardour/globals.cc:97
+#: libs/ardour/globals.cc:124
 msgid "MIDI port specifications for \"%1\" are not understandable."
 msgstr "Le specifiche per la porta MIDI \"%1\" non sono state capite"
 
-#: libs/ardour/globals.cc:110 libs/ardour/globals.cc:114
-#: libs/ardour/globals.cc:118
+#: libs/ardour/globals.cc:137 libs/ardour/globals.cc:141
+#: libs/ardour/globals.cc:145
 msgid "default"
 msgstr ""
 
-#: libs/ardour/globals.cc:146
+#: libs/ardour/globals.cc:173
 msgid "No MMC control (MIDI port \"%1\" not available)"
 msgstr "La porta MIDI \"%1\" non  disponibile: nessun controllo MTC possibile"
 
-#: libs/ardour/globals.cc:152
+#: libs/ardour/globals.cc:179
 msgid "No MTC support (MIDI port \"%1\" not available)"
 msgstr "La porta MIDI \"%1\" non  disponibile: nessun controllo MTC possibile"
 
-#: libs/ardour/globals.cc:157
+#: libs/ardour/globals.cc:184
 #, fuzzy
 msgid "No MIDI parameter support (MIDI port \"%1\" not available)"
 msgstr "La porta MIDI \"%1\" non  disponibile: nessun controllo MTC possibile"
 
-#: libs/ardour/import.cc:71
+#: libs/ardour/import.cc:75
 msgid "Import: cannot open input sound file \"%1\""
 msgstr "Import: impossibile aprire il file audio di input \"%1\""
 
-#: libs/ardour/import.cc:76
+#: libs/ardour/import.cc:80
 msgid "resampling audio"
 msgstr ""
 
-#: libs/ardour/import.cc:80
+#: libs/ardour/import.cc:84
 msgid "Import: cannot open converted sound file \"%1\""
 msgstr "Import: impossibile aprire il file audio convertito \"%1\""
 
-#: libs/ardour/import.cc:85
+#: libs/ardour/import.cc:89
 msgid "Import: error while resampling sound file \"%1\""
 msgstr "Import: errore nel resampling deil file audio \"%1\""
 
-#: libs/ardour/import.cc:141
+#: libs/ardour/import.cc:148
 msgid "Session::import_audiofile: cannot open new file source for channel %1"
 msgstr ""
 "Session::import_audiofile: impossibile aprire il nuovo file per il canale %1"
 
-#: libs/ardour/import.cc:160
+#: libs/ardour/import.cc:167
 msgid "converting audio"
 msgstr "conversione dell'audio"
 
-#: libs/ardour/import.cc:192
+#: libs/ardour/import.cc:199
 msgid "building region"
 msgstr "costruzione della regione"
 
-#: libs/ardour/import.cc:194
+#: libs/ardour/import.cc:201
 msgid "building regions"
 msgstr "costruzione delle regioni"
 
-#: libs/ardour/import.cc:318
+#: libs/ardour/import.cc:325
 msgid "Import: could not open temp file: %1"
 msgstr "Import: impossibile aprire il file audio temporaneo \"%1\""
 
-#: libs/ardour/import.cc:327
+#: libs/ardour/import.cc:334
 msgid "Import: src_new() failed : %1"
 msgstr ""
 
-#: libs/ardour/import.cc:355
+#: libs/ardour/import.cc:362
 msgid "Import: %1"
 msgstr ""
 
@@ -796,280 +733,280 @@ msgstr "PortInsert: impossibile aggiungere una porta d'uscita"
 msgid "non-port insert XML used for port plugin insert"
 msgstr "insert non-port XML usato per insert di plugin di porta"
 
-#: libs/ardour/io.cc:585
+#: libs/ardour/io.cc:598
 msgid "IO: cannot disconnect input port %1 from %2"
 msgstr "IO: impossibile disconnettere la porta d'entrata %1 da %2"
 
-#: libs/ardour/io.cc:653
+#: libs/ardour/io.cc:666
 msgid "IO: cannot disconnect output port %1 from %2"
 msgstr "IO: impossibile disconnettere la porta d'uscita %1 da %2"
 
-#: libs/ardour/io.cc:794 libs/ardour/io.cc:1138 libs/ardour/io.cc:1264
+#: libs/ardour/io.cc:807 libs/ardour/io.cc:1151 libs/ardour/io.cc:1277
 #, c-format
 msgid "%s/out"
 msgstr ""
 
-#: libs/ardour/io.cc:796 libs/ardour/io.cc:1140 libs/ardour/io.cc:1266
-#: libs/ardour/io.cc:2826
+#: libs/ardour/io.cc:809 libs/ardour/io.cc:1153 libs/ardour/io.cc:1279
+#: libs/ardour/io.cc:2849
 #, c-format
 msgid "%s/out %u"
 msgstr ""
 
-#: libs/ardour/io.cc:800 libs/ardour/io.cc:1145 libs/ardour/io.cc:1270
+#: libs/ardour/io.cc:813 libs/ardour/io.cc:1158 libs/ardour/io.cc:1283
 msgid "IO: cannot register output port %1"
 msgstr "IO: impossibile registrare la porta %1"
 
-#: libs/ardour/io.cc:895 libs/ardour/io.cc:998 libs/ardour/io.cc:1104
+#: libs/ardour/io.cc:908 libs/ardour/io.cc:1011 libs/ardour/io.cc:1117
 #, c-format
 msgid "%s/in"
 msgstr ""
 
-#: libs/ardour/io.cc:897 libs/ardour/io.cc:1001 libs/ardour/io.cc:1107
-#: libs/ardour/io.cc:2796
+#: libs/ardour/io.cc:910 libs/ardour/io.cc:1014 libs/ardour/io.cc:1120
+#: libs/ardour/io.cc:2819
 #, c-format
 msgid "%s/in %u"
 msgstr ""
 
-#: libs/ardour/io.cc:901 libs/ardour/io.cc:1007 libs/ardour/io.cc:1112
+#: libs/ardour/io.cc:914 libs/ardour/io.cc:1020 libs/ardour/io.cc:1125
 msgid "IO: cannot register input port %1"
 msgstr "IO: impossibile registrare la porta %1"
 
-#: libs/ardour/io.cc:1528
+#: libs/ardour/io.cc:1541
 msgid "IO::connecting_became_legal() called without a pending state node"
 msgstr ""
 
-#: libs/ardour/io.cc:1551
+#: libs/ardour/io.cc:1564
 msgid "IO::ports_became_legal() called without a pending state node"
 msgstr ""
 
-#: libs/ardour/io.cc:1581
+#: libs/ardour/io.cc:1594
 msgid "incorrect XML node \"%1\" passed to IO object"
 msgstr ""
 
-#: libs/ardour/io.cc:1636
+#: libs/ardour/io.cc:1649
 msgid ""
 "MIDI gain control specification for %1 is incomplete, so it has been ignored"
 msgstr ""
 
-#: libs/ardour/io.cc:1726 libs/ardour/io.cc:1838
+#: libs/ardour/io.cc:1739 libs/ardour/io.cc:1851
 msgid "Unknown connection \"%1\" listed for output of %2"
 msgstr ""
 
-#: libs/ardour/io.cc:1728 libs/ardour/io.cc:1840
+#: libs/ardour/io.cc:1741 libs/ardour/io.cc:1853
 msgid "out 1"
 msgstr ""
 
-#: libs/ardour/io.cc:1729 libs/ardour/io.cc:1841
+#: libs/ardour/io.cc:1742 libs/ardour/io.cc:1854
 msgid "No output connections available as a replacement"
 msgstr ""
 
-#: libs/ardour/io.cc:1733 libs/ardour/io.cc:1845
+#: libs/ardour/io.cc:1746 libs/ardour/io.cc:1858
 msgid "Connection %1 was not available - \"out 1\" used instead"
 msgstr ""
 
-#: libs/ardour/io.cc:1747
+#: libs/ardour/io.cc:1760
 msgid "%1: cannot create I/O ports"
 msgstr ""
 
-#: libs/ardour/io.cc:1854
+#: libs/ardour/io.cc:1867
 msgid "improper output channel list in XML node (%1)"
 msgstr ""
 
-#: libs/ardour/io.cc:1939
+#: libs/ardour/io.cc:1952
 msgid "IO: badly formed string in XML node for outputs \"%1\""
 msgstr "IO: stringa mal formata nel nodo XML per le uscite \"%1\""
 
-#: libs/ardour/io.cc:1944
+#: libs/ardour/io.cc:1957
 msgid "IO: bad output string in XML node \"%1\""
 msgstr "IO: stringa mal formata nel nodo XML \"%1\""
 
-#: libs/ardour/io.cc:2502
+#: libs/ardour/io.cc:2525
 msgid "%1: could not open automation event file \"%2\""
 msgstr ""
 
-#: libs/ardour/io.cc:2541
+#: libs/ardour/io.cc:2564
 msgid "%1: cannot open automation event file \"%2\""
 msgstr ""
 
-#: libs/ardour/io.cc:2556
+#: libs/ardour/io.cc:2579
 msgid "badly formed version number in automation event file \"%1\""
 msgstr ""
 
-#: libs/ardour/io.cc:2560
+#: libs/ardour/io.cc:2583
 msgid "no version information in automation event file \"%1\""
 msgstr ""
 
-#: libs/ardour/io.cc:2565
+#: libs/ardour/io.cc:2588
 msgid "mismatched automation event file version (%1)"
 msgstr ""
 
-#: libs/ardour/io.cc:2573
+#: libs/ardour/io.cc:2596
 msgid "badly formatted automation event record at line %1 of %2 (ignored)"
 msgstr ""
 
-#: libs/ardour/io.cc:2593
+#: libs/ardour/io.cc:2616
 msgid "dubious automation event found (and ignored)"
 msgstr ""
 
-#: libs/ardour/io.cc:2597 libs/ardour/panner.cc:437
+#: libs/ardour/io.cc:2620 libs/ardour/panner.cc:438
 #: libs/ardour/redirect.cc:148
 msgid "loaded from disk"
 msgstr ""
 
-#: libs/ardour/io.cc:2768
+#: libs/ardour/io.cc:2791
 msgid "automation write/touch"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:86
+#: libs/ardour/ladspa_plugin.cc:87
 msgid "LADSPA: module has no descriptor function."
 msgstr "LADSPA: il modulo non ha alcuna funzione descriptor."
 
-#: libs/ardour/ladspa_plugin.cc:91
+#: libs/ardour/ladspa_plugin.cc:92
 msgid "LADSPA: plugin has gone away since discovery!"
 msgstr "LADSPA: il plugin � stato rimosso"
 
-#: libs/ardour/ladspa_plugin.cc:98
+#: libs/ardour/ladspa_plugin.cc:99
 msgid "LADSPA: \"%1\" cannot be used, since it cannot do inplace processing"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:328
+#: libs/ardour/ladspa_plugin.cc:329
 msgid ""
 "illegal parameter number used with plugin \"%1\". This mayindicate a change "
 "in the plugin design, and presets may beinvalid"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:429
+#: libs/ardour/ladspa_plugin.cc:430
 msgid "Bad node sent to LadspaPlugin::set_state"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:442
+#: libs/ardour/ladspa_plugin.cc:443
 msgid "LADSPA: no ladspa port number"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:448
+#: libs/ardour/ladspa_plugin.cc:449
 msgid "LADSPA: no ladspa port data"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:497
+#: libs/ardour/ladspa_plugin.cc:498
 msgid ""
 "LADSPA LadspaPlugin MIDI control specification for port %1 is incomplete, so "
 "it has been ignored"
 msgstr ""
 
-#: libs/ardour/location.cc:268
+#: libs/ardour/location.cc:269
 msgid "incorrect XML node passed to Location::set_state"
 msgstr ""
 
-#: libs/ardour/location.cc:275
+#: libs/ardour/location.cc:276
 msgid "XML node for Location has no name information"
 msgstr "il nodo XML per la Location non ha informazioni sul nome"
 
-#: libs/ardour/location.cc:282
+#: libs/ardour/location.cc:283
 msgid "XML node for Location has no start information"
 msgstr "il nodo XML per la Location non ha informazioni sull'inizio"
 
-#: libs/ardour/location.cc:293
+#: libs/ardour/location.cc:294
 msgid "XML node for Location has no end information"
 msgstr "il nodo XML per la Location non ha informazioni sulla fine"
 
-#: libs/ardour/location.cc:302
+#: libs/ardour/location.cc:303
 msgid "XML node for Location has no flags information"
 msgstr "il nodo XML per la Location non ha informazioni sui flags"
 
-#: libs/ardour/location.cc:390
+#: libs/ardour/location.cc:391
 msgid "Locations: attempt to use unknown location as selected location"
 msgstr ""
 
-#: libs/ardour/location.cc:417 libs/ardour/playlist.cc:1187
+#: libs/ardour/location.cc:418 libs/ardour/playlist.cc:1187
 msgid "clear"
 msgstr "pulisci"
 
-#: libs/ardour/location.cc:442
+#: libs/ardour/location.cc:443
 msgid "clear markers"
 msgstr ""
 
-#: libs/ardour/location.cc:470
+#: libs/ardour/location.cc:471
 msgid "clear ranges"
 msgstr ""
 
-#: libs/ardour/location.cc:488
+#: libs/ardour/location.cc:489
 msgid "add"
 msgstr ""
 
-#: libs/ardour/location.cc:526
+#: libs/ardour/location.cc:527
 msgid "remove"
 msgstr "rimuovi"
 
-#: libs/ardour/location.cc:566
+#: libs/ardour/location.cc:567
 msgid "incorrect XML mode passed to Locations::set_state"
 msgstr ""
 
-#: libs/ardour/mtc_slave.cc:195
+#: libs/ardour/mtc_slave.cc:196
 msgid "MTC Slave: atomic read of current time failed, sleeping!"
 msgstr ""
 
-#: libs/ardour/named_selection.cc:76
+#: libs/ardour/named_selection.cc:77
 msgid "Chunk %1 uses an unknown playlist \"%2\""
 msgstr "Lo spezzone %1 usa una playlist sconosciuta \"%2\""
 
-#: libs/ardour/named_selection.cc:79
+#: libs/ardour/named_selection.cc:80
 msgid "Chunk %1 contains misformed playlist information"
 msgstr "Lo spezzone %1 contiene informazioni sulla playlist mal formate"
 
-#: libs/ardour/panner.cc:255
+#: libs/ardour/panner.cc:256
 msgid "MIDI pan control specification is incomplete, so it has been ignored"
 msgstr ""
 
-#: libs/ardour/panner.cc:360
+#: libs/ardour/panner.cc:361
 msgid "automation write pass"
 msgstr ""
 
-#: libs/ardour/panner.cc:400
+#: libs/ardour/panner.cc:401
 #, c-format
 msgid "error writing pan automation file (%s)"
 msgstr "errore nello scrivere il file per l'automazione pan (%s)"
 
-#: libs/ardour/panner.cc:428
+#: libs/ardour/panner.cc:429
 msgid ""
 "badly formatted pan automation event record at line %1 of %2 (ignored) [%3]"
 msgstr ""
 
-#: libs/ardour/panner.cc:943
+#: libs/ardour/panner.cc:944
 msgid "badly-formed positional data for Multi2dPanner - ignored"
 msgstr ""
 
-#: libs/ardour/panner.cc:1236
+#: libs/ardour/panner.cc:1237
 msgid "cannot open pan automation file \"%1\" for saving (%s)"
 msgstr ""
 "impossibile aprire il file dell'automazione pan \"%1\" per salvare (%s)"
 
-#: libs/ardour/panner.cc:1272
+#: libs/ardour/panner.cc:1273
 msgid "cannot open pan automation file %1 (%2)"
 msgstr "impossibile accedere al file dell'automazione pan %1 (%2)"
 
-#: libs/ardour/panner.cc:1285
+#: libs/ardour/panner.cc:1286
 msgid "badly formed version number in pan automation event file \"%1\""
 msgstr ""
 
-#: libs/ardour/panner.cc:1289
+#: libs/ardour/panner.cc:1290
 msgid ""
 "no version information in pan automation event file \"%1\" (first line = %2)"
 msgstr ""
 
-#: libs/ardour/panner.cc:1295
+#: libs/ardour/panner.cc:1296
 msgid "mismatched pan automation event file version (%1)"
 msgstr ""
 
-#: libs/ardour/panner.cc:1309
+#: libs/ardour/panner.cc:1310
 msgid "too many panner states found in pan automation file %1"
 msgstr ""
 
-#: libs/ardour/panner.cc:1450
+#: libs/ardour/panner.cc:1451
 #, fuzzy
 msgid "Unknown panner plugin \"%1\" found in pan state - ignored"
 msgstr "Nodo sconosciuto \"%1\" trovato in Connections list dal file di stato"
 
-#: libs/ardour/panner.cc:1456
+#: libs/ardour/panner.cc:1457
 #, fuzzy
 msgid "panner plugin node has no type information!"
 msgstr "il nodo XML per la Location non ha informazioni sulla fine"
@@ -1123,63 +1060,63 @@ msgstr "Playlist: impossibile creare la Regione dal file di stato"
 msgid "nudged"
 msgstr "spostato"
 
-#: libs/ardour/playlist_factory.cc:26 libs/ardour/playlist_factory.cc:41
+#: libs/ardour/playlist_factory.cc:49 libs/ardour/playlist_factory.cc:64
 msgid ""
 "programming error: Playlist::createRegion called with unknown Region type"
 msgstr ""
 
-#: libs/ardour/playlist_factory.cc:63
+#: libs/ardour/playlist_factory.cc:86
 msgid ""
 "programming error: Playlist::copyPlaylist called with unknown Playlist type"
 msgstr ""
 
-#: libs/ardour/plugin.cc:327
+#: libs/ardour/plugin.cc:328
 msgid "Could not locate HOME.  Preset not saved."
 msgstr "impossibile localizzare HOME.  Preset non salvato."
 
-#: libs/ardour/plugin.cc:337 libs/ardour/plugin.cc:343
+#: libs/ardour/plugin.cc:338 libs/ardour/plugin.cc:344
 msgid "Could not create %1.  Preset not saved. (%2)"
 msgstr "Impossibile creare %1 . Preset non salvato. (%2)"
 
-#: libs/ardour/plugin.cc:348
+#: libs/ardour/plugin.cc:349
 msgid "Error saving presets file %1."
 msgstr "Errore nel salvare il file di preset %1."
 
-#: libs/ardour/plugin_manager.cc:193
+#: libs/ardour/plugin_manager.cc:194
 #, fuzzy
 msgid "Could not parse rdf file: %1"
 msgstr "IO: impossibile registrare la porta %1"
 
-#: libs/ardour/plugin_manager.cc:234
+#: libs/ardour/plugin_manager.cc:235
 msgid "LADSPA: cannot load module \"%1\" (%2)"
 msgstr "LADSPA: impossibile caricare il modulo \"%1\" (%2)"
 
-#: libs/ardour/plugin_manager.cc:241
+#: libs/ardour/plugin_manager.cc:242
 msgid "LADSPA: module \"%1\" has no descriptor function."
 msgstr "LADSPA: il modulo \"%1\" non ha alcuna funzione descriptor."
 
-#: libs/ardour/plugin_manager.cc:296
+#: libs/ardour/plugin_manager.cc:297
 #, fuzzy
 msgid "VST: cannot load module from \"%1\""
 msgstr "LADPSA: impossibile caricare il modulo da \"%1\""
 
-#: libs/ardour/plugin_manager.cc:301
+#: libs/ardour/plugin_manager.cc:302
 msgid "You asked ardour to not use any VST plugins"
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:304
+#: libs/ardour/plugin_manager.cc:305
 msgid "This version of ardour has no support for VST plugins"
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:311
+#: libs/ardour/plugin_manager.cc:312
 msgid "LADSPA: cannot load module from \"%1\""
 msgstr "LADPSA: impossibile caricare il modulo da \"%1\""
 
-#: libs/ardour/plugin_manager.cc:373 libs/ardour/plugin_manager.cc:385
+#: libs/ardour/plugin_manager.cc:374 libs/ardour/plugin_manager.cc:386
 msgid "Unknown"
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:463
+#: libs/ardour/plugin_manager.cc:464
 msgid ""
 "VST plugin %1 does not support processReplacing, and so cannot be used in "
 "ardour at this time"
@@ -1194,11 +1131,11 @@ msgstr "impossibile accedere al file di sessione recente %1 (%2)"
 msgid "programming error: unknown Redirect type in Redirect::Clone!\n"
 msgstr ""
 
-#: libs/ardour/redirect.cc:102 libs/ardour/utils.cc:199
+#: libs/ardour/redirect.cc:102 libs/ardour/utils.cc:203
 msgid "pre"
 msgstr ""
 
-#: libs/ardour/redirect.cc:104 libs/ardour/utils.cc:202
+#: libs/ardour/redirect.cc:104 libs/ardour/utils.cc:206
 #, fuzzy
 msgid "post"
 msgstr "incolla"
@@ -1253,265 +1190,260 @@ msgstr ""
 msgid "active_changed"
 msgstr "livello cambiato"
 
-#: libs/ardour/region.cc:884
+#: libs/ardour/region.cc:885
 msgid "Session: XMLNode describing a Region is incomplete (no id)"
 msgstr ""
 
-#: libs/ardour/region.cc:891
+#: libs/ardour/region.cc:892
 msgid "Session: XMLNode describing a Region is incomplete (no name)"
 msgstr ""
 
-#: libs/ardour/route.cc:79 libs/ardour/session.cc:1541
-#: libs/ardour/session.cc:1547 libs/ardour/session.cc:3064
+#: libs/ardour/route.cc:79 libs/ardour/session.cc:1554
+#: libs/ardour/session.cc:1560 libs/ardour/session.cc:3093
 msgid "signal"
 msgstr "segnale"
 
-#: libs/ardour/route.cc:1433
+#: libs/ardour/route.cc:1430
 msgid "Could not get state of route.  Problem with save_automation"
 msgstr ""
 
-#: libs/ardour/route.cc:1485
+#: libs/ardour/route.cc:1482
 msgid "Send construction failed"
 msgstr ""
 
-#: libs/ardour/route.cc:1507
+#: libs/ardour/route.cc:1504
 msgid "unknown Insert type \"%1\"; ignored"
 msgstr ""
 
-#: libs/ardour/route.cc:1513
+#: libs/ardour/route.cc:1510
 msgid "Insert XML node has no type property"
 msgstr ""
 
-#: libs/ardour/route.cc:1518
+#: libs/ardour/route.cc:1515
 msgid "insert could not be created. Ignored."
 msgstr ""
 
-#: libs/ardour/route.cc:1536
+#: libs/ardour/route.cc:1533
 msgid "Bad node sent to Route::set_state() [%1]"
 msgstr ""
 
-#: libs/ardour/route.cc:1595
+#: libs/ardour/route.cc:1592
 msgid "Route %1: unknown edit group \"%2 in saved state (ignored)"
 msgstr ""
 
-#: libs/ardour/route.cc:1611 libs/ardour/route.cc:1615
+#: libs/ardour/route.cc:1608 libs/ardour/route.cc:1612
 msgid "badly formed order key string in state file! [%1] ... ignored."
 msgstr ""
 
-#: libs/ardour/route.cc:1696 libs/ardour/route.cc:1823
+#: libs/ardour/route.cc:1693 libs/ardour/route.cc:1820
 msgid "[control]"
 msgstr ""
 
-#: libs/ardour/route.cc:1716
+#: libs/ardour/route.cc:1713
 msgid "Route %1: unknown mix group \"%2 in saved state (ignored)"
 msgstr ""
 
-#: libs/ardour/route.cc:1745 libs/ardour/route.cc:1753
+#: libs/ardour/route.cc:1742 libs/ardour/route.cc:1750
 msgid ""
 "MIDI mute control specification for %1 is incomplete, so it has been ignored"
 msgstr ""
 
-#: libs/ardour/send.cc:98
+#: libs/ardour/send.cc:99
 msgid "XML node describing a send is missing a Redirect node"
 msgstr ""
 
-#: libs/ardour/session.cc:99
+#: libs/ardour/session.cc:103
 #, fuzzy
 msgid "Could not resolve path: %1 (%2)"
 msgstr "impossibile controllare il percorso %1 (%2)"
 
-#: libs/ardour/session.cc:111
+#: libs/ardour/session.cc:115
 msgid "cannot check session path %1 (%2)"
 msgstr "impossibile controllare il percorso %1 (%2)"
 
-#: libs/ardour/session.cc:141
+#: libs/ardour/session.cc:145
 msgid "cannot check statefile %1 (%2)"
 msgstr "impossibile controllare il file di stato %1 (%2)"
 
-#: libs/ardour/session.cc:177
+#: libs/ardour/session.cc:181
 msgid "%1 is not an Ardour snapshot file"
 msgstr "%1 non � un file di istantanea di Ardour"
 
-#: libs/ardour/session.cc:194
+#: libs/ardour/session.cc:198
 msgid "cannot determine current working directory (%1)"
 msgstr "impossibile determinare la cartella di lavoro corrente (%1)"
 
-#: libs/ardour/session.cc:211
+#: libs/ardour/session.cc:215
 msgid "unknown file type for session %1"
 msgstr "tipo di fle sconosciuto per la sessione %1"
 
-#: libs/ardour/session.cc:316
+#: libs/ardour/session.cc:320
 msgid "monitor"
 msgstr ""
 
-#: libs/ardour/session.cc:323
+#: libs/ardour/session.cc:327
 msgid "master"
 msgstr ""
 
-#: libs/ardour/session.cc:607
+#: libs/ardour/session.cc:611
 msgid "could not setup Click I/O"
 msgstr "impossibile impostare entrata/uscita del click"
 
-#: libs/ardour/session.cc:628
+#: libs/ardour/session.cc:632
 msgid "cannot setup Click I/O"
 msgstr "impossibile impostare entrata/uscita del click"
 
-#: libs/ardour/session.cc:650
+#: libs/ardour/session.cc:654
 msgid "cannot create Auditioner: no auditioning of regions possible"
 msgstr "impossibile creare l'Auditioner"
 
-#: libs/ardour/session.cc:662
+#: libs/ardour/session.cc:666
 #, c-format
 msgid "out %<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:674
+#: libs/ardour/session.cc:678
 #, c-format
 msgid "in %<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:688
+#: libs/ardour/session.cc:692
 #, c-format
 msgid "out %<PRIu32>+%<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:702
+#: libs/ardour/session.cc:706
 #, c-format
 msgid "in %<PRIu32>+%<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:735
+#: libs/ardour/session.cc:739
 #, fuzzy
 msgid "cannot setup master inputs"
 msgstr "IO: impossibile registrare la porta %1"
 
-#: libs/ardour/session.cc:743
+#: libs/ardour/session.cc:747
 #, fuzzy
 msgid "cannot setup master outputs"
 msgstr "IO: impossibile registrare la porta %1"
 
-#: libs/ardour/session.cc:754
+#: libs/ardour/session.cc:758
 msgid "Master Out"
 msgstr ""
 
-#: libs/ardour/session.cc:820
+#: libs/ardour/session.cc:830
 #, fuzzy
 msgid "cannot setup control inputs"
 msgstr "impossibile impostare entrata/uscita del click"
 
-#: libs/ardour/session.cc:828
+#: libs/ardour/session.cc:838
 #, fuzzy
 msgid "cannot set up master outputs"
 msgstr "IO: impossibile registrare la porta %1"
 
-#: libs/ardour/session.cc:1100
+#: libs/ardour/session.cc:1110
 msgid "Session: you can't use that location for auto punch (start <= end)"
 msgstr ""
 "Sessione: non si pu� usare quella location per l'auto punch (inizio <= fine)"
 
-#: libs/ardour/session.cc:1179
+#: libs/ardour/session.cc:1189
 msgid "Session: you can't use a mark for auto loop"
 msgstr "Sessione: non si pu� usare un marcatore per l'auto loop"
 
-#: libs/ardour/session.cc:1559
+#: libs/ardour/session.cc:1572
 msgid "feedback loop setup between %1 and %2"
 msgstr ""
 
-#: libs/ardour/session.cc:1711 libs/ardour/session.cc:1808
+#: libs/ardour/session.cc:1724 libs/ardour/session.cc:1821
 msgid "cannot configure %1 in/%2 out configuration for new audio track"
 msgstr ""
 
-#: libs/ardour/session.cc:1767
+#: libs/ardour/session.cc:1780
 msgid "Session: could not create new audio track."
 msgstr "Sessione: impossibile creare una nuova traccia audio"
 
-#: libs/ardour/session.cc:1857
+#: libs/ardour/session.cc:1870
 msgid "Session: could not create new route."
 msgstr "Sessione: impossibile creare un nuovo route"
 
-#: libs/ardour/session.cc:2340
+#: libs/ardour/session.cc:2354
 msgid "cannot create new name for region \"%1\""
 msgstr "impossibile creare un nuovo nome per la regione \"%1\""
 
-#: libs/ardour/session.cc:2404
+#: libs/ardour/session.cc:2418
 msgid "too many regions with names like %1"
 msgstr "troppe regioni con nomi come %1"
 
-#: libs/ardour/session.cc:2860
+#: libs/ardour/session.cc:2883
 msgid "There are already %1 recordings for %2, which I consider too many."
 msgstr "Ci sono gi� %1 registrazioni per %2, che io considero troppe"
 
-#: libs/ardour/session.cc:3229
+#: libs/ardour/session.cc:3258
 msgid "programming error: unknown type of Insert created!"
 msgstr ""
 
-#: libs/ardour/session.cc:3235
+#: libs/ardour/session.cc:3264
 msgid "programming error: unknown type of Redirect created!"
 msgstr ""
 
-#: libs/ardour/session.cc:3258
+#: libs/ardour/session.cc:3287
 msgid "programming error: unknown type of Insert deleted!"
 msgstr ""
 
-#: libs/ardour/session.cc:3264
+#: libs/ardour/session.cc:3293
 msgid "programming error: unknown type of Redirect deleted!"
 msgstr ""
 
-#: libs/ardour/session.cc:3605
+#: libs/ardour/session.cc:3636
 msgid "too many bounced versions of playlist \"%1\""
 msgstr ""
 
-#: libs/ardour/session.cc:3614
+#: libs/ardour/session.cc:3649
 msgid "cannot create new audio file \"%1\" for %2"
 msgstr "impossibile creare un nuovo file audio \"%1\" per %2"
 
-#: libs/ardour/session_butler.cc:81 libs/ardour/session_midi.cc:1183
-#: libs/ardour/source.cc:233
-msgid "Cannot create transport request signal pipe (%1)"
-msgstr ""
-
-#: libs/ardour/session_butler.cc:86 libs/ardour/session_butler.cc:91
+#: libs/ardour/session_butler.cc:85 libs/ardour/session_butler.cc:90
 msgid "UI: cannot set O_NONBLOCK on butler request pipe (%1)"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:96
+#: libs/ardour/session_butler.cc:95
 msgid "Session: could not create butler thread"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:190
+#: libs/ardour/session_butler.cc:189
 msgid "poll on butler request pipe failed (%1)"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:197
+#: libs/ardour/session_butler.cc:196
 msgid "Error on butler thread request pipe"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:239
+#: libs/ardour/session_butler.cc:238
 #, fuzzy
 msgid "Error reading from butler request pipe"
 msgstr "Errore nel leggere dalla porta MIDI %1"
 
-#: libs/ardour/session_butler.cc:276
+#: libs/ardour/session_butler.cc:275
 msgid "Butler read ahead failure on dstream %1"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:320
+#: libs/ardour/session_butler.cc:319
 msgid "Butler write-behind failure on dstream %1"
 msgstr ""
 
-#: libs/ardour/session_click.cc:157
+#: libs/ardour/session_click.cc:158
 msgid "cannot open click soundfile %1 (%2)"
 msgstr "impossibile accedere al file audio per il click %1 (%2)"
 
-#: libs/ardour/session_click.cc:166
+#: libs/ardour/session_click.cc:167
 msgid "cannot read data from click soundfile"
 msgstr "impossibile leggere dati dal file audio per il click"
 
-#: libs/ardour/session_click.cc:191
+#: libs/ardour/session_click.cc:192
 msgid "cannot open click emphasis soundfile %1 (%2)"
 msgstr "impossibile accedere al file audio di enfasi per il click %1 (%2)"
 
-#: libs/ardour/session_click.cc:199
+#: libs/ardour/session_click.cc:200
 msgid "cannot read data from click emphasis soundfile"
 msgstr "impossibile leggere dati dal file audio di enfasi per il click"
 
@@ -1611,7 +1543,7 @@ msgstr ""
 msgid "Error reading from transport request pipe"
 msgstr ""
 
-#: libs/ardour/session_process.cc:105
+#: libs/ardour/session_process.cc:104
 msgid "Session: error in no roll for %1"
 msgstr ""
 
@@ -1629,154 +1561,154 @@ msgstr ""
 msgid "start"
 msgstr "separa"
 
-#: libs/ardour/session_state.cc:501
+#: libs/ardour/session_state.cc:502
 msgid "Session: cannot create session dir \"%1\" (%2)"
 msgstr "Sessione: impossibile creare la cartella per la sessione \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:512
+#: libs/ardour/session_state.cc:513
 #, fuzzy
 msgid "Session: cannot create session peakfile dir \"%1\" (%2)"
 msgstr "Sessione: impossibile creare la cartella per la sessione \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:521
+#: libs/ardour/session_state.cc:522
 msgid "Session: cannot create session sounds dir \"%1\" (%2)"
 msgstr ""
 "Sessione: impossibile creare la cartella sounds per la sessione \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:530
+#: libs/ardour/session_state.cc:531
 #, fuzzy
 msgid "Session: cannot create session tape dir \"%1\" (%2)"
 msgstr "Sessione: impossibile creare la cartella per la sessione \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:539
+#: libs/ardour/session_state.cc:540
 #, fuzzy
 msgid "Session: cannot create session dead sounds dir \"%1\" (%2)"
 msgstr ""
 "Sessione: impossibile creare la cartella sounds per la sessione \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:548
+#: libs/ardour/session_state.cc:549
 msgid "Session: cannot create session automation dir \"%1\" (%2)"
 msgstr ""
 "Sessione: impossibile creare la cartella automation per la sessione \"%1\" (%"
 "2)"
 
-#: libs/ardour/session_state.cc:579
+#: libs/ardour/session_state.cc:580
 #, fuzzy
 msgid "Could not open %1 for writing mix template"
 msgstr "Impossibile accedere a %1 per scrivere il modello di mixaggio"
 
-#: libs/ardour/session_state.cc:585
+#: libs/ardour/session_state.cc:586
 #, fuzzy
 msgid "Could not open mix template %1 for reading"
 msgstr "Impossibile aprire il modello di mixaggio %1 per leggere"
 
-#: libs/ardour/session_state.cc:592
+#: libs/ardour/session_state.cc:593
 msgid "Session already exists.  Not overwriting"
 msgstr "La sessione esiste gi�. Non sovrascrivo"
 
-#: libs/ardour/session_state.cc:635
+#: libs/ardour/session_state.cc:636
 msgid "Session: could not load diskstream via XML state"
 msgstr ""
 
-#: libs/ardour/session_state.cc:684
+#: libs/ardour/session_state.cc:685
 msgid "could not backup old state file, current state not saved."
 msgstr ""
 "impossibile fare copia di sicurezza del file di stato, stato attuale non "
 "salvato"
 
-#: libs/ardour/session_state.cc:697
+#: libs/ardour/session_state.cc:698
 #, fuzzy
 msgid "state could not be saved to %1"
 msgstr "stato non salvato"
 
-#: libs/ardour/session_state.cc:704
+#: libs/ardour/session_state.cc:705
 #, fuzzy
 msgid "could not remove corrupt state file %1"
 msgstr "IO: impossibile registrare la porta %1"
 
-#: libs/ardour/session_state.cc:708
+#: libs/ardour/session_state.cc:709
 #, fuzzy
 msgid "could not restore state file from backup %1"
 msgstr "Esportazione: impossibile scrivere dati sul file di output (%1)"
 
-#: libs/ardour/session_state.cc:777
+#: libs/ardour/session_state.cc:778
 msgid "%1: session state information file \"%2\" doesn't exist!"
 msgstr ""
 "%1: il file di informazioni sullo stato della sessione \"%2\" non esiste!"
 
-#: libs/ardour/session_state.cc:788
+#: libs/ardour/session_state.cc:789
 #, fuzzy
 msgid "Could not understand ardour file %1"
 msgstr "IO: impossibile registrare la porta %1"
 
-#: libs/ardour/session_state.cc:1492
+#: libs/ardour/session_state.cc:1493
 msgid "programming error: Session: incorrect XML node sent to set_state()"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1538
+#: libs/ardour/session_state.cc:1539
 msgid "Session: XML state has no options section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione option"
 
-#: libs/ardour/session_state.cc:1543
+#: libs/ardour/session_state.cc:1544
 msgid "Session: XML state has no sources section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione sources"
 
-#: libs/ardour/session_state.cc:1550
+#: libs/ardour/session_state.cc:1551
 msgid "Session: XML state has no Regions section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione Regions"
 
-#: libs/ardour/session_state.cc:1557
+#: libs/ardour/session_state.cc:1558
 msgid "Session: XML state has no playlists section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione playlist"
 
-#: libs/ardour/session_state.cc:1576
+#: libs/ardour/session_state.cc:1577
 msgid "Session: XML state has no diskstreams section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione diskstream"
 
-#: libs/ardour/session_state.cc:1583
+#: libs/ardour/session_state.cc:1584
 msgid "Session: XML state has no connections section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione connections"
 
-#: libs/ardour/session_state.cc:1590
+#: libs/ardour/session_state.cc:1591
 msgid "Session: XML state has no locations section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione locations"
 
-#: libs/ardour/session_state.cc:1623
+#: libs/ardour/session_state.cc:1624
 msgid "Session: XML state has no edit groups section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione edit groups"
 
-#: libs/ardour/session_state.cc:1630
+#: libs/ardour/session_state.cc:1631
 msgid "Session: XML state has no mix groups section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione mix groups"
 
-#: libs/ardour/session_state.cc:1637
+#: libs/ardour/session_state.cc:1638
 msgid "Session: XML state has no Tempo Map section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione Tempo Map"
 
-#: libs/ardour/session_state.cc:1644
+#: libs/ardour/session_state.cc:1645
 msgid "Session: XML state has no routes section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione routes"
 
-#: libs/ardour/session_state.cc:1651
+#: libs/ardour/session_state.cc:1652
 #, fuzzy
 msgid "Session: XML state has no click section"
 msgstr "Sessione: il file di stato XML non ha alcuna sezione click"
 
-#: libs/ardour/session_state.cc:1696
+#: libs/ardour/session_state.cc:1697
 msgid "Session: cannot create Route from XML description."
 msgstr "Sessione: impossibile creare Route dalla descrizione XML"
 
-#: libs/ardour/session_state.cc:1734
+#: libs/ardour/session_state.cc:1735
 msgid "Session: cannot create Region from XML description."
 msgstr "Sessione: impossibile creare regione dalla descrizione XML"
 
-#: libs/ardour/session_state.cc:1762
+#: libs/ardour/session_state.cc:1764
 #, fuzzy
 msgid "Session: XMLNode describing a AudioRegion is incomplete (no source)"
 msgstr ""
 "Sessione: il nodo XML descrivente una Regione � incompleto (nessun source)"
 
-#: libs/ardour/session_state.cc:1770 libs/ardour/session_state.cc:1784
+#: libs/ardour/session_state.cc:1772 libs/ardour/session_state.cc:1792
 #, fuzzy
 msgid ""
 "Session: XMLNode describing a AudioRegion references an unknown source id =%1"
@@ -1784,62 +1716,73 @@ msgstr ""
 "Sessione: il nodo XML descrivente una Regione fa riferimento ad un source "
 "con id sconosciuto =%1"
 
-#: libs/ardour/session_state.cc:1852
+#: libs/ardour/session_state.cc:1778 libs/ardour/session_state.cc:1798
+#, fuzzy
+msgid ""
+"Session: XMLNode describing a AudioRegion references a non-audio source id =%"
+"1"
+msgstr ""
+"Sessione: il nodo XML descrivente una Regione fa riferimento ad un source "
+"con id sconosciuto =%1"
+
+#: libs/ardour/session_state.cc:1868
 msgid "Session: cannot create Source from XML description."
 msgstr "Sessione: impossibile creare Source dalla descrizione XML"
 
-#: libs/ardour/session_state.cc:1883
-msgid "Found a sound file that cannot be used by Ardour. See the progammers."
+#: libs/ardour/session_state.cc:1889
+#, fuzzy
+msgid ""
+"Found a sound file that cannot be used by Ardour. Talk to the progammers."
 msgstr "E' stato trovato un file audio che non pu� essere usato da Ardour."
 
-#: libs/ardour/session_state.cc:1908
+#: libs/ardour/session_state.cc:1913
 msgid "Could not create mix templates directory \"%1\" (%2)"
 msgstr "Impossibile creare la cartella per i modelli di mixaggio \"%1\" (%2)"
 
-#: libs/ardour/session_state.cc:1922
+#: libs/ardour/session_state.cc:1927
 msgid "Template \"%1\" already exists - new version not created"
 msgstr "Il modello \"%1\" esiste gi� - non � stata creata una nuova versione"
 
-#: libs/ardour/session_state.cc:1929
+#: libs/ardour/session_state.cc:1934
 msgid "mix template not saved"
 msgstr "modello di mixaggio non salvato"
 
-#: libs/ardour/session_state.cc:1989
+#: libs/ardour/session_state.cc:1994
 msgid "cannot create session directory \"%1\"; ignored"
 msgstr "impossibile creare la cartella per la sessione %1; ignorato"
 
-#: libs/ardour/session_state.cc:2002
+#: libs/ardour/session_state.cc:2007
 msgid "cannot create sounds directory \"%1\"; ignored"
 msgstr "impossibile creare la cartella sounds \"%1\"; ignorato"
 
-#: libs/ardour/session_state.cc:2013
+#: libs/ardour/session_state.cc:2018
 #, fuzzy
 msgid "cannot create dead sounds directory \"%1\"; ignored"
 msgstr "impossibile creare la cartella sounds \"%1\"; ignorato"
 
-#: libs/ardour/session_state.cc:2024
+#: libs/ardour/session_state.cc:2029
 #, fuzzy
 msgid "cannot create peak file directory \"%1\"; ignored"
 msgstr "impossibile creare la cartella per la sessione %1; ignorato"
 
-#: libs/ardour/session_state.cc:2163 libs/ardour/session_state.cc:2184
+#: libs/ardour/session_state.cc:2168 libs/ardour/session_state.cc:2189
 msgid "Session: cannot create Playlist from XML description."
 msgstr "Sessione: impossibile creare Playlist dalla descrizione XML"
 
-#: libs/ardour/session_state.cc:2223
+#: libs/ardour/session_state.cc:2228
 msgid "Session: cannot create Named Selection from XML description."
 msgstr "Sessione: impossibile creare Named Selection dalla descizione XML"
 
-#: libs/ardour/session_state.cc:2355
+#: libs/ardour/session_state.cc:2360
 msgid "Unknown node \"%1\" found in Connections list from state file"
 msgstr "Nodo sconosciuto \"%1\" trovato in Connections list dal file di stato"
 
-#: libs/ardour/session_state.cc:3195
+#: libs/ardour/session_state.cc:3197
 #, fuzzy
 msgid "cannot remove dead sound file %1 (%2)"
 msgstr "impossibile accedere al file audio per il click %1 (%2)"
 
-#: libs/ardour/session_time.cc:736
+#: libs/ardour/session_time.cc:375
 msgid "Unknown JACK transport state %1 in sync callback"
 msgstr ""
 
@@ -1848,43 +1791,43 @@ msgid "tempoize: error creating name for new audio file based on %1"
 msgstr ""
 "tempoize: errore nel creare il nome per il nuovo file audio basato su %1"
 
-#: libs/ardour/session_timefx.cc:85
+#: libs/ardour/session_timefx.cc:88
 msgid "tempoize: error creating new audio file %1 (%2)"
 msgstr "tempoize: errore nel creare un nuovo file audio %1 (%2)"
 
-#: libs/ardour/session_timefx.cc:111
+#: libs/ardour/session_timefx.cc:114
 msgid "tempoize: error reading data from %1"
 msgstr "tempoize: errore nel leggere dati da %1"
 
-#: libs/ardour/session_timefx.cc:124 libs/ardour/session_timefx.cc:136
+#: libs/ardour/session_timefx.cc:127 libs/ardour/session_timefx.cc:139
 msgid "error writing tempo-adjusted data to %1"
 msgstr ""
 
-#: libs/ardour/session_timefx.cc:142
+#: libs/ardour/session_timefx.cc:145
 msgid "timefx code failure. please notify ardour-developers."
 msgstr ""
 
-#: libs/ardour/session_transport.cc:116
+#: libs/ardour/session_transport.cc:117
 msgid "Cannot loop - no loop range defined"
 msgstr ""
 
-#: libs/ardour/session_transport.cc:478
+#: libs/ardour/session_transport.cc:479
 msgid ""
 "Seamless looping cannot be supported while Ardour is using JACK transport.\n"
 "Recommend changing the configured options"
 msgstr ""
 
-#: libs/ardour/session_transport.cc:754
+#: libs/ardour/session_transport.cc:755
 msgid ""
 "Global varispeed cannot be supported while Ardour is connected to JACK "
 "transport control"
 msgstr ""
 
-#: libs/ardour/session_transport.cc:954
+#: libs/ardour/session_transport.cc:955
 msgid "please stop the transport before adjusting slave settings"
 msgstr ""
 
-#: libs/ardour/session_transport.cc:990
+#: libs/ardour/session_transport.cc:991
 msgid "No MTC port defined: MTC slaving is impossible."
 msgstr ""
 
@@ -1972,11 +1915,22 @@ msgstr ""
 msgid "Big-endian (Mac)"
 msgstr ""
 
-#: libs/ardour/sndfilesource.cc:75
-msgid "SndFileSource: cannot open file \"%1\" (%2)"
+#: libs/ardour/sndfilesource.cc:146
+msgid "FileSource: cannot get host information for BWF header (%1)"
+msgstr "FileSource: impossibile ottenere info sull'host dall'header BWF (%1)"
+
+#: libs/ardour/sndfilesource.cc:168
+msgid ""
+"cannot set broadcast info for audio file %1 (%2); dropping broadcast info "
+"for this file"
+msgstr ""
+
+#: libs/ardour/sndfilesource.cc:224
+#, fuzzy
+msgid "SndFileSource: cannot open file \"%1\" for %2 (%3)"
 msgstr "SndFileSource: impossibile accedere al file \"%1\" (%2)"
 
-#: libs/ardour/sndfilesource.cc:80
+#: libs/ardour/sndfilesource.cc:230
 msgid ""
 "SndFileSource: file only contains %1 channels; %2 is invalid as a channel "
 "number"
@@ -1984,205 +1938,169 @@ msgstr ""
 "SndFileSource: il file contiene solo %1 canali; %2 non � valido come numero "
 "di canale"
 
-#: libs/ardour/sndfilesource.cc:122
+#: libs/ardour/sndfilesource.cc:307
 msgid "SndFileSource: could not seek to frame %1 within %2 (%3)"
 msgstr ""
 
-#: libs/ardour/source.cc:161
-msgid "poll on peak request pipe failed (%1)"
-msgstr ""
-
-#: libs/ardour/source.cc:168
-msgid "Error on peak thread request pipe"
-msgstr ""
-
-#: libs/ardour/source.cc:201
+#: libs/ardour/sndfilesource.cc:358
 #, fuzzy
-msgid "Error reading from peak request pipe"
-msgstr "Errore nel leggere dalla porta MIDI %1"
-
-#: libs/ardour/source.cc:238 libs/ardour/source.cc:243
-msgid "UI: cannot set O_NONBLOCK on peak request pipe (%1)"
-msgstr ""
-
-#: libs/ardour/source.cc:248
-msgid "Source: could not create peak thread"
-msgstr ""
-
-#: libs/ardour/source.cc:326
-#, fuzzy
-msgid "cannot rename peakfile for %1 from %2 to %3 (%4)"
-msgstr "impossibile eliminare il peakfile %1 per %2 (%3)"
-
-#: libs/ardour/source.cc:357
-msgid "Source: cannot stat peakfile \"%1\""
-msgstr ""
-
-#: libs/ardour/source.cc:444
-msgid "cannot read sample data for unscaled peak computation"
-msgstr ""
-
-#: libs/ardour/source.cc:465 libs/ardour/source.cc:536
-#: libs/ardour/source.cc:780 libs/ardour/source.cc:881
-msgid "Source: cannot open peakpath \"%1\" (%2)"
-msgstr ""
-
-#: libs/ardour/source.cc:637
-msgid "Source[%1]: peak read - cannot read %2 samples at offset %3"
-msgstr ""
+msgid "programming error: %1 %2"
+msgstr "errore di programmazione: %1"
 
-#: libs/ardour/source.cc:789
-msgid "%1: could not write read raw data for peak computation (%2)"
+#: libs/ardour/sndfilesource.cc:458
+msgid ""
+"cannot set broadcast info for audio file %1; Dropping broadcast info for "
+"this file"
 msgstr ""
 
-#: libs/ardour/source.cc:814
-msgid "%1: could not write peak file data (%2)"
+#: libs/ardour/sndfilesource.cc:500
+msgid "%1: cannot seek to %2"
 msgstr ""
 
-#: libs/ardour/state_manager.cc:46
+#: libs/ardour/state_manager.cc:47
 #, fuzzy
 msgid "cleared history"
 msgstr "pulito"
 
-#: libs/ardour/state_manager.cc:59
+#: libs/ardour/state_manager.cc:60
 msgid ""
 "programming error: illegal state ID (%1) passed to StateManager::set_state() "
 "(range = 0-%2)"
 msgstr ""
 
-#: libs/ardour/stateful.cc:100
+#: libs/ardour/stateful.cc:102
 #, fuzzy
 msgid "Error: could not write %1"
 msgstr "Esportazione: impossibile scrivere dati sul file di output (%1)"
 
-#: libs/ardour/stateful.cc:114
+#: libs/ardour/stateful.cc:116
 msgid "Could not understand XML file %1"
 msgstr ""
 
-#: libs/ardour/tempo.cc:66
+#: libs/ardour/tempo.cc:67
 msgid "TempoSection XML node has no \"start\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:74
+#: libs/ardour/tempo.cc:75
 msgid "TempoSection XML node has an illegal \"start\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:81
+#: libs/ardour/tempo.cc:82
 msgid "TempoSection XML node has no \"beats-per-minute\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:86
+#: libs/ardour/tempo.cc:87
 msgid "TempoSection XML node has an illegal \"beats_per_minute\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:91
+#: libs/ardour/tempo.cc:92
 msgid "TempoSection XML node has no \"movable\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:130
+#: libs/ardour/tempo.cc:131
 msgid "MeterSection XML node has no \"start\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:138
+#: libs/ardour/tempo.cc:139
 msgid "MeterSection XML node has an illegal \"start\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:145
+#: libs/ardour/tempo.cc:146
 msgid "MeterSection XML node has no \"beats-per-bar\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:150
+#: libs/ardour/tempo.cc:151
 msgid "MeterSection XML node has an illegal \"beats-per-bar\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:155
+#: libs/ardour/tempo.cc:156
 msgid "MeterSection XML node has no \"note-type\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:160
+#: libs/ardour/tempo.cc:161
 msgid "MeterSection XML node has an illegal \"note-type\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:165
+#: libs/ardour/tempo.cc:166
 msgid "MeterSection XML node has no \"movable\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:258
+#: libs/ardour/tempo.cc:259
 msgid "move metric"
 msgstr ""
 
-#: libs/ardour/tempo.cc:329
+#: libs/ardour/tempo.cc:330
 msgid "metric removed"
 msgstr ""
 
-#: libs/ardour/tempo.cc:372
+#: libs/ardour/tempo.cc:373
 #, fuzzy
 msgid "add tempo"
 msgstr "aggiungi regione"
 
-#: libs/ardour/tempo.cc:401
+#: libs/ardour/tempo.cc:402
 #, fuzzy
 msgid "replace tempo"
 msgstr "sostituisci la regione"
 
-#: libs/ardour/tempo.cc:434
+#: libs/ardour/tempo.cc:435
 msgid "add meter"
 msgstr ""
 
-#: libs/ardour/tempo.cc:462
+#: libs/ardour/tempo.cc:463
 #, fuzzy
 msgid "replaced meter"
 msgstr "sostituisci la regione"
 
-#: libs/ardour/tempo.cc:482 libs/ardour/tempo.cc:498
+#: libs/ardour/tempo.cc:483 libs/ardour/tempo.cc:499
 msgid "programming error: no tempo section in tempo map!"
 msgstr ""
 
-#: libs/ardour/tempo.cc:537
+#: libs/ardour/tempo.cc:538
 msgid "programming error: unhandled MetricSection type"
 msgstr ""
 
-#: libs/ardour/tempo.cc:1225 libs/ardour/tempo.cc:1237
+#: libs/ardour/tempo.cc:1226 libs/ardour/tempo.cc:1238
 msgid "Tempo map: could not set new state, restoring old one."
 msgstr ""
 
-#: libs/ardour/tempo.cc:1261
+#: libs/ardour/tempo.cc:1262
 msgid "load XML data"
 msgstr ""
 
-#: libs/ardour/utils.cc:242
+#: libs/ardour/utils.cc:246
 #, fuzzy
 msgid "illegal or badly-formed string used for path (%1)"
 msgstr "il percorso indicato per il RAID � non valido o malformato"
 
-#: libs/ardour/utils.cc:247
+#: libs/ardour/utils.cc:251
 #, fuzzy
 msgid "path (%1) is ambiguous"
 msgstr "il percorso indicato per la ricerca RAID � ambiguo"
 
-#: libs/ardour/vst_plugin.cc:186
+#: libs/ardour/vst_plugin.cc:187
 #, fuzzy
 msgid "cannot create VST chunk directory: %1"
 msgstr "impossibile creare la cartella sounds \"%1\"; ignorato"
 
-#: libs/ardour/vst_plugin.cc:194
+#: libs/ardour/vst_plugin.cc:195
 #, fuzzy
 msgid "cannot check VST chunk directory: %1"
 msgstr "impossibile determinare la cartella di lavoro corrente (%1)"
 
-#: libs/ardour/vst_plugin.cc:201
+#: libs/ardour/vst_plugin.cc:202
 msgid "%1 exists but is not a directory"
 msgstr ""
 
-#: libs/ardour/vst_plugin.cc:239
+#: libs/ardour/vst_plugin.cc:240
 msgid "Bad node sent to VSTPlugin::set_state"
 msgstr ""
 
-#: libs/ardour/vst_plugin.cc:342 libs/ardour/vst_plugin.cc:353
+#: libs/ardour/vst_plugin.cc:343 libs/ardour/vst_plugin.cc:354
 msgid "no support for presets using chunks at this time"
 msgstr ""
 
-#: libs/ardour/coreaudio_source.cc:93
+#: libs/ardour/coreaudio_source.cc:99
 #, fuzzy
 msgid ""
 "CoreAudioSource: file only contains %1 channels; %2 is invalid as a channel "
@@ -2191,17 +2109,116 @@ msgstr ""
 "SndFileSource: il file contiene solo %1 canali; %2 non � valido come numero "
 "di canale"
 
-#: libs/ardour/coreaudio_source.cc:157
+#: libs/ardour/coreaudio_source.cc:164
 msgid "CoreAudioSource: could not seek to frame %1 within %2 (%3)"
 msgstr ""
 
+#~ msgid "FileSource: \"%1\" not found when searching %2 using %3"
+#~ msgstr "FileSource: \"%1\" non trovato nel cercare %2 utilizzando %3"
+
+#~ msgid "FileSource: could not open \"%1\": (%2)"
+#~ msgstr "FileSource: impossibile aprire \"%1\": (%2)"
+
+#~ msgid "FileSource: cannot write header in %1"
+#~ msgstr "FileSource: impossibile scrivere header in %1"
+
+#~ msgid "FileSource: cannot locate chunks in %1"
+#~ msgstr "FileSource: impossibile trovare spezzoni in %1"
+
+#~ msgid "FileSource: cannot read header in %1"
+#~ msgstr "FileSource: impossibile leggere header in %1"
+
+#~ msgid "FileSource: cannot check header in %1"
+#~ msgstr "FileSource: impossibile controllare header in %1"
+
 #, fuzzy
-#~ msgid "cannot create feedback request pipe (%1)"
-#~ msgstr "Errore nel leggere dalla porta MIDI %1"
+#~ msgid "FileSource: cannot initialize peakfile for %1 as %2"
+#~ msgstr "FileSource: impossibile avviare il peakfile per %1"
+
+#~ msgid "FileSource: cannot seek to end of file"
+#~ msgstr "FileSource: impossibile cercare fino alla fine del file"
+
+#~ msgid "FileSource: cannot read RIFF/WAVE chunk from file"
+#~ msgstr "FileSource: impossibile accedere allo spezzone RIFF/WAVE dal file"
+
+#~ msgid "FileSource %1: not a RIFF/WAVE file"
+#~ msgstr "FileSource %1: il file non  un file RIFF/WAVE"
+
+#~ msgid "FileSource: can't read a chunk"
+#~ msgstr "FileSource: impossibile accedere ad uno spezzone"
+
+#~ msgid "FileSource: cannot get user information for BWF header (%1)"
+#~ msgstr "FileSource: impossibile otterene info utente dall'header BWF (%1)"
+
+#~ msgid "FileSource[%1]: cannot update data size: %2"
+#~ msgstr "FileSource[%1]: impossibile aggiornare la dimensione dei dati: %2"
+
+#~ msgid "FileSource: can't find RIFF chunk info"
+#~ msgstr "FileSource: impossibile trovare info sullo spezzone RIFF"
 
 #, fuzzy
-#~ msgid "Session: could not create feedback thread"
-#~ msgstr "Sessione: impossibile creare un nuovo route"
+#~ msgid "FileSource: can't find RIFX chunk info"
+#~ msgstr "FileSource: impossibile trovare info sullo spezzone RIFF"
+
+#~ msgid "FileSource: can't read RIFF chunk"
+#~ msgstr "FileSource: impossibile accedere allo spezzone RIFF"
+
+#~ msgid "FileSource: can't find format chunk info"
+#~ msgstr "FileSource: impossibile trovare info sul formato dello spezzone"
+
+#~ msgid "FileSource: can't read format chunk"
+#~ msgstr "FileSource: impossibile leggere il formato dello spezzone"
+
+#~ msgid "FileSource: can't find data chunk info"
+#~ msgstr "FileSource: impossibile trovare info sui dati dello spezzone"
+
+#~ msgid "FileSource: can't read data chunk"
+#~ msgstr "FileSource: impossibile leggere dati dello spezzone"
+
+#~ msgid ""
+#~ "FileSource: cannot read Broadcast Wave data from existing audio file \"%1"
+#~ "\" (%2)"
+#~ msgstr ""
+#~ "FileSource: impossibile leggere dati Broadcast Wave dal file audio "
+#~ "esistente \"%1\" (%2) "
+
+#~ msgid ""
+#~ "FileSource: cannot read Broadcast Wave coding history from audio file \"%1"
+#~ "\" (%2)"
+#~ msgstr ""
+#~ "FileSource: impossibile leggere lo storico del Broadcast Wave dal file "
+#~ "audio \"%1\" (%2)"
+
+#, fuzzy
+#~ msgid ""
+#~ "FileSource \"%1\" does not use valid sample format.\n"
+#~ "This is probably a programming error."
+#~ msgstr ""
+#~ "FileSource \"%1\" non usa il formato floating point.\n"
+#~ "Questo  probabilmente un errore di programmazione."
+
+#~ msgid "FileSource \"%1\" has no \"data\" chunk"
+#~ msgstr "FileSource \"%1\" non ha uno spezzone di \"dati\""
+
+#~ msgid ""
+#~ "%1: data length in header (%2) differs from implicit size in file (%3)"
+#~ msgstr ""
+#~ "%1: la lunghezza dei dati nell'header (%2)  diversa dalla dimensione "
+#~ "implicita nel file (%3)"
+
+#~ msgid "\"%1\" has a sample rate of %2 instead of %3 as used by this session"
+#~ msgstr ""
+#~ "\"%1\" ha una sample rate di %2 anzicch di %3 come il resto della sessione"
+
+#~ msgid "FileSource: cannot write WAVE chunk: %1"
+#~ msgstr "FileSource: impossibile scrivere lo spezzone WAVE: %1"
+
+#~ msgid "FileSource: cannot write format chunk: %1"
+#~ msgstr "FileSource: impossibile scrivere il formato dello spezzone: %1"
+
+#, fuzzy
+#~ msgid "cannot create feedback request pipe (%1)"
+#~ msgstr "Errore nel leggere dalla porta MIDI %1"
 
 #, fuzzy
 #~ msgid "Error on feedback thread request pipe"
@@ -2217,7 +2234,3 @@ msgstr ""
 #, fuzzy
 #~ msgid "Could not find a template called %1 in %2"
 #~ msgstr "Impossibile aprire il modello di mixaggio %1 per leggere"
-
-#, fuzzy
-#~ msgid "Source: cannot stat peakfile \"%1\" or \"%2\""
-#~ msgstr "FileSource: impossibile avviare il peakfile per %1"
index e21d70b37167fd6ebb3aca9b98062bbf15603213..922d304e2d951649af128abe7dfe50660823ffd6 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: libardour 0.716.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 15:09-0400\n"
 "PO-Revision-Date: 2004-03-31 00:55+0300\n"
 "Last-Translator: Igor Blinov pitstop@nm.ru\n"
 "Language-Team: Russian\n"
@@ -14,286 +14,453 @@ msgstr ""
 "Content-Type: text/plain; charset=koi8-r\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: libs/ardour/audio_library.cc:91
-msgid "channels"
+#: libs/ardour/audio_diskstream.cc:337
+msgid "AudioDiskstream: Session doesn't know about a Playlist called \"%1\""
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:342
+msgid "AudioDiskstream: Playlist \"%1\" isn't an audio playlist"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:433
+msgid "AudioDiskstream %1: there is no existing playlist to make a copy of!"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:1114 libs/ardour/audio_diskstream.cc:1125
+msgid ""
+"AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:1254
+msgid "AudioDiskstream %1: cannot read %2 from playlist at frame %3"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:1621 libs/ardour/audio_diskstream.cc:1638
+msgid "AudioDiskstream %1: cannot write to disk"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:1698
+msgid "AudioDiskstream \"%1\": cannot flush captured data to disk!"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:1795
+msgid "%1: could not create region for complete audio file"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:1818
+msgid "AudioDiskstream: could not create region for captured audio!"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:1873
+#, fuzzy
+msgid "programmer error: %1"
+msgstr "������ ���������: "
+
+#: libs/ardour/audio_diskstream.cc:2145
+msgid "AudioDiskstream: channel %1 out of range"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:2170
+msgid "%1:%2 new capture file not initialized correctly"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:2403
+msgid "Location \"%1\" not valid for track loop (start >= end)"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:2484
+msgid "%1: cannot restore pending capture source file %2"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:2506
+msgid "%1: incorrect number of pending sources listed - ignoring them all"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:2522
+msgid "%1: cannot create whole-file region from pending capture sources"
+msgstr ""
+
+#: libs/ardour/audio_diskstream.cc:2534
+msgid "%1: cannot create region from pending capture sources"
 msgstr ""
 
 #: libs/ardour/audio_library.cc:92
+msgid "channels"
+msgstr ""
+
+#: libs/ardour/audio_library.cc:93
 #, fuzzy
 msgid "samplerate"
 msgstr "���������"
 
-#: libs/ardour/audio_library.cc:93
+#: libs/ardour/audio_library.cc:94
 msgid "resolution"
 msgstr ""
 
-#: libs/ardour/audio_library.cc:94
+#: libs/ardour/audio_library.cc:95
 msgid "format"
 msgstr ""
 
-#: libs/ardour/audio_library.cc:101
+#: libs/ardour/audio_library.cc:102
 msgid "Could not open %1.  Audio Library not saved"
 msgstr ""
 
-#: libs/ardour/audio_playlist.cc:52 libs/ardour/audio_playlist.cc:62
-#: libs/ardour/audio_playlist.cc:73 libs/ardour/audio_playlist.cc:120
+#: libs/ardour/audio_playlist.cc:53 libs/ardour/audio_playlist.cc:63
+#: libs/ardour/audio_playlist.cc:74 libs/ardour/audio_playlist.cc:121
 #: libs/ardour/insert.cc:76 libs/ardour/insert.cc:95 libs/ardour/insert.cc:120
-#: libs/ardour/insert.cc:838 libs/ardour/insert.cc:846 libs/ardour/send.cc:38
-#: libs/ardour/send.cc:52 libs/ardour/send.cc:61
-#: libs/ardour/session_state.cc:1620 libs/ardour/session_state.cc:1666
+#: libs/ardour/insert.cc:838 libs/ardour/insert.cc:846 libs/ardour/send.cc:39
+#: libs/ardour/send.cc:53 libs/ardour/send.cc:62
+#: libs/ardour/session_state.cc:1621 libs/ardour/session_state.cc:1667
 msgid "initial state"
 msgstr ""
 
-#: libs/ardour/audio_playlist.cc:274 libs/ardour/audio_playlist.cc:768
+#: libs/ardour/audio_playlist.cc:275 libs/ardour/audio_playlist.cc:769
 msgid ""
 "programming error: non-audio Region passed to remove_overlap in audio "
 "playlist"
 msgstr ""
 
-#: libs/ardour/audio_playlist.cc:401
+#: libs/ardour/audio_playlist.cc:402
 msgid ""
 "programming error: non-audio Region tested for overlap in audio playlist"
 msgstr ""
 
-#: libs/ardour/audio_playlist.cc:877
+#: libs/ardour/audio_playlist.cc:878
 msgid "xfade change"
 msgstr ""
 
-#: libs/ardour/audio_playlist.cc:926
+#: libs/ardour/audio_playlist.cc:933
 msgid "region modified"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:121 libs/ardour/io.cc:1703
-#: libs/ardour/io.cc:1813
+#: libs/ardour/audio_track.cc:133 libs/ardour/io.cc:1716
+#: libs/ardour/io.cc:1826
 msgid "Unknown connection \"%1\" listed for input of %2"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:123 libs/ardour/io.cc:1705
-#: libs/ardour/io.cc:1815
+#: libs/ardour/audio_track.cc:135 libs/ardour/io.cc:1718
+#: libs/ardour/io.cc:1828
 msgid "in 1"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:124 libs/ardour/io.cc:1706
-#: libs/ardour/io.cc:1816
+#: libs/ardour/audio_track.cc:136 libs/ardour/io.cc:1719
+#: libs/ardour/io.cc:1829
 msgid "No input connections available as a replacement"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:128 libs/ardour/io.cc:1710
-#: libs/ardour/io.cc:1820
+#: libs/ardour/audio_track.cc:140 libs/ardour/io.cc:1723
+#: libs/ardour/io.cc:1833
 msgid "Connection %1 was not available - \"in 1\" used instead"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:137 libs/ardour/io.cc:1829
+#: libs/ardour/audio_track.cc:149 libs/ardour/io.cc:1842
 msgid "improper input channel list in XML node (%1)"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:182 libs/ardour/audio_track.cc:195
+#: libs/ardour/audio_track.cc:194 libs/ardour/audio_track.cc:207
 msgid "AudioTrack: diskstream \"%1\" not known by session"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:293
+#: libs/ardour/audio_track.cc:305
 msgid ""
 "MIDI rec_enable control specification for %1 is incomplete, so it has been "
 "ignored"
 msgstr ""
 
-#: libs/ardour/audio_track.cc:305
+#: libs/ardour/audio_track.cc:317
 msgid "programming error: AudioTrack given state without diskstream!"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:147
+#: libs/ardour/audioengine.cc:150
 msgid "cannot activate JACK client"
 msgstr "�� ������� ������������ ������� JACK �������"
 
-#: libs/ardour/audioengine.cc:432
+#: libs/ardour/audioengine.cc:401
 msgid "register audio input port called before engine was started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:463
+#: libs/ardour/audioengine.cc:432
 msgid "register audio output port called before engine was started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:524
+#: libs/ardour/audioengine.cc:493
 msgid "connect called before engine was started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:540
+#: libs/ardour/audioengine.cc:509
 msgid "AudioEngine: cannot connect %1 (%2) to %3 (%4)"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:553 libs/ardour/audioengine.cc:582
+#: libs/ardour/audioengine.cc:522 libs/ardour/audioengine.cc:551
 msgid "disconnect called before engine was started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:640
+#: libs/ardour/audioengine.cc:609
 msgid "get_port_by_name() called before engine was started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:673
+#: libs/ardour/audioengine.cc:642
 msgid "get_ports called before engine was started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:748
+#: libs/ardour/audioengine.cc:717
 msgid "get_nth_physical called before engine was started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:776
+#: libs/ardour/audioengine.cc:745
 msgid "get_port_total_latency() called with no JACK client connection"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:782
+#: libs/ardour/audioengine.cc:751
 msgid "get_port_total_latency() called before engine was started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:906
+#: libs/ardour/audioengine.cc:875
 msgid "Unable to connect to JACK server"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:909
+#: libs/ardour/audioengine.cc:878
 msgid "Could not connect to JACK server as  \"%1\""
 msgstr ""
 
-#: libs/ardour/audioengine.cc:914
+#: libs/ardour/audioengine.cc:883
 msgid "JACK server started"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:948
+#: libs/ardour/audioengine.cc:917
 msgid "cannot shutdown connection to JACK"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:973
+#: libs/ardour/audioengine.cc:942
 msgid "failed to connect to JACK"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:989
+#: libs/ardour/audioengine.cc:958
 msgid "could not reregister %1"
 msgstr ""
 
-#: libs/ardour/audioengine.cc:1046
+#: libs/ardour/audioengine.cc:1015
 msgid "could not reconnect %1 and %2 (err = %3)"
 msgstr ""
 
-#: libs/ardour/audiofilter.cc:44
+#: libs/ardour/audiofilesource.cc:445 libs/ardour/session_state.cc:3095
+msgid ""
+"there are already 1000 files with names like %1; versioning discontinued"
+msgstr ""
+
+#: libs/ardour/audiofilesource.cc:459 libs/ardour/session_state.cc:3109
+msgid "cannot rename audio file source from %1 to %2 (%3)"
+msgstr ""
+
+#: libs/ardour/audiofilesource.cc:466 libs/ardour/session_state.cc:3124
+msgid "cannot remove peakfile %1 for %2 (%3)"
+msgstr ""
+
+#: libs/ardour/audiofilesource.cc:510
+msgid "FileSource: search path not set"
+msgstr ""
+
+#: libs/ardour/audiofilesource.cc:534
+msgid ""
+"FileSource: \"%1\" is ambigous when searching %2\n"
+"\t"
+msgstr ""
+
+#: libs/ardour/audiofilesource.cc:540
+msgid "Filesource: cannot find required file (%1): while searching %2"
+msgstr ""
+
+#: libs/ardour/audiofilesource.cc:563
+msgid "Filesource: cannot find required file (%1): %2"
+msgstr ""
+
+#: libs/ardour/audiofilesource.cc:568
+msgid "Filesource: cannot check for existing file (%1): %2"
+msgstr ""
+
+#: libs/ardour/audiofilesource.cc:640 libs/ardour/insert.cc:525
+#: libs/ardour/sndfilesource.cc:112
+#, fuzzy
+msgid "programming error: %1"
+msgstr "������ ���������: "
+
+#: libs/ardour/audiofilesource.cc:645
+msgid "cannot rename audio file for %1 to %2"
+msgstr ""
+
+#: libs/ardour/audiofilter.cc:45
 msgid "audiofilter: error creating name for new audio file based on %1"
 msgstr ""
 
-#: libs/ardour/audiofilter.cc:54
+#: libs/ardour/audiofilter.cc:58
 msgid "audiofilter: error creating new audio file %1 (%2)"
 msgstr ""
 
-#: libs/ardour/audioregion.cc:855 libs/ardour/audioregion.cc:917
+#: libs/ardour/audioregion.cc:857 libs/ardour/audioregion.cc:919
 msgid "fade in change"
 msgstr ""
 
-#: libs/ardour/audioregion.cc:1341
+#: libs/ardour/audioregion.cc:1349
 #, c-format
 msgid "normalized to %.2fdB"
 msgstr ""
 
-#: libs/ardour/audioregion.cc:1359
+#: libs/ardour/audioregion.cc:1367
 msgid "envelope change"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:64 libs/ardour/location.cc:344
-#: libs/ardour/tempo.cc:225
+#: libs/ardour/audiosource.cc:143
+msgid "poll on peak request pipe failed (%1)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:150
+msgid "Error on peak thread request pipe"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:183
+msgid "Error reading from peak request pipe"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:215 libs/ardour/session_butler.cc:80
+#: libs/ardour/session_midi.cc:1183
+msgid "Cannot create transport request signal pipe (%1)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:220 libs/ardour/audiosource.cc:225
+msgid "UI: cannot set O_NONBLOCK on peak request pipe (%1)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:230
+msgid "AudioSource: could not create peak thread"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:308
+msgid "cannot rename peakfile for %1 from %2 to %3 (%4)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:350
+#, fuzzy
+msgid "AudioSource: cannot stat peakfile \"%1\""
+msgstr "Ardour: �� ������� ��������� ���� ������������ ������������ \"%1\""
+
+#: libs/ardour/audiosource.cc:451
+msgid "cannot read sample data for unscaled peak computation"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:472 libs/ardour/audiosource.cc:543
+#: libs/ardour/audiosource.cc:787 libs/ardour/audiosource.cc:878
+#, fuzzy
+msgid "AudioSource: cannot open peakpath \"%1\" (%2)"
+msgstr "LADSPA: �� ������� ��������� ������ \"%1\" (%2)"
+
+#: libs/ardour/audiosource.cc:644
+msgid "AudioSource[%1]: peak read - cannot read %2 samples at offset %3"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:798
+msgid "%1: could not write read raw data for peak computation (%2)"
+msgstr ""
+
+#: libs/ardour/audiosource.cc:823
+msgid "%1: could not write peak file data (%2)"
+msgstr ""
+
+#: libs/ardour/automation_event.cc:65 libs/ardour/location.cc:345
+#: libs/ardour/tempo.cc:226
 msgid "initial"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:231
+#: libs/ardour/automation_event.cc:232
 msgid "cleared"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:403
+#: libs/ardour/automation_event.cc:404
 msgid "added event"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:420
+#: libs/ardour/automation_event.cc:421
 #, fuzzy
 msgid "removed event"
 msgstr "������� �������"
 
-#: libs/ardour/automation_event.cc:435
+#: libs/ardour/automation_event.cc:436
 msgid "removed multiple events"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:461
+#: libs/ardour/automation_event.cc:467 libs/ardour/automation_event.cc:498
 #, fuzzy
 msgid "removed range"
 msgstr "������� �������"
 
-#: libs/ardour/automation_event.cc:491
+#: libs/ardour/automation_event.cc:528
 msgid "event range adjusted"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:513
+#: libs/ardour/automation_event.cc:550
 msgid "event adjusted"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:628 libs/ardour/automation_event.cc:733
-#: libs/ardour/panner.cc:1040
+#: libs/ardour/automation_event.cc:665 libs/ardour/automation_event.cc:770
+#: libs/ardour/panner.cc:1041
 #, fuzzy
 msgid "programming error:"
 msgstr "������ ���������: "
 
-#: libs/ardour/automation_event.cc:1042
+#: libs/ardour/automation_event.cc:1079
 msgid "cut/copy/clear"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:1075
+#: libs/ardour/automation_event.cc:1112
 msgid "copy"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:1143 libs/ardour/playlist.cc:939
+#: libs/ardour/automation_event.cc:1180 libs/ardour/playlist.cc:939
 msgid "paste"
 msgstr "��������"
 
-#: libs/ardour/automation_event.cc:1198
+#: libs/ardour/automation_event.cc:1235
 msgid ""
 "automation list: no x-coordinate stored for control point (point ignored)"
 msgstr ""
 
-#: libs/ardour/automation_event.cc:1204
+#: libs/ardour/automation_event.cc:1241
 msgid ""
 "automation list: no y-coordinate stored for control point (point ignored)"
 msgstr ""
 
-#: libs/ardour/basic_ui.cc:68
-msgid "unnamed"
-msgstr ""
-
-#: libs/ardour/configuration.cc:79
+#: libs/ardour/configuration.cc:80
 #, fuzzy
 msgid "loading system configuration file %1"
 msgstr "Ardour: �� ������� ��������� ���� ������������ ��������� \"%1\""
 
-#: libs/ardour/configuration.cc:82
+#: libs/ardour/configuration.cc:83
 msgid "Ardour: cannot read system configuration file \"%1\""
 msgstr "Ardour: �� ������� ��������� ���� ������������ ��������� \"%1\""
 
-#: libs/ardour/configuration.cc:87
+#: libs/ardour/configuration.cc:88
 msgid "Ardour: system configuration file \"%1\" not loaded successfully."
 msgstr "Ardour: �� ������� ��������� ���� ������������ ��������� \"%1\"."
 
-#: libs/ardour/configuration.cc:104
+#: libs/ardour/configuration.cc:105
 #, fuzzy
 msgid "loading user configuration file %1"
 msgstr "Ardour: �� ������� ��������� ���� ������������ ������������ \"%1\""
 
-#: libs/ardour/configuration.cc:107
+#: libs/ardour/configuration.cc:108
 msgid "Ardour: cannot read configuration file \"%1\""
 msgstr "Ardour: �� ������� ��������� ���� ������������ ������������ \"%1\""
 
-#: libs/ardour/configuration.cc:112
+#: libs/ardour/configuration.cc:113
 #, fuzzy
 msgid "Ardour: user configuration file \"%1\" not loaded successfully."
 msgstr "Ardour: �� ������� ��������� ���� ������������ ������������ \"%1\"."
 
-#: libs/ardour/configuration.cc:136
+#: libs/ardour/configuration.cc:137
 #, fuzzy
 msgid "Config file %1 not saved"
 msgstr "���� ������������ �� �����Σ�"
 
-#: libs/ardour/configuration.cc:209
+#: libs/ardour/configuration.cc:210
 msgid "ill-formed MIDI port specification in ardour rcfile (ignored)"
 msgstr ""
 
@@ -305,28 +472,40 @@ msgstr ""
 msgid "Node for Connection has no \"connections\" property"
 msgstr ""
 
-#: libs/ardour/connection.cc:227 libs/ardour/io.cc:1889
+#: libs/ardour/connection.cc:227 libs/ardour/io.cc:1902
 msgid "IO: badly formed string in XML node for inputs \"%1\""
 msgstr ""
 
-#: libs/ardour/connection.cc:232 libs/ardour/io.cc:1894
+#: libs/ardour/connection.cc:232 libs/ardour/io.cc:1907
 msgid "bad input string in XML node \"%1\""
 msgstr ""
 
-#: libs/ardour/control_protocol_manager.cc:79
+#: libs/ardour/control_protocol_manager.cc:80
 msgid "control protocol name \"%1\" has no descriptor"
 msgstr ""
 
-#: libs/ardour/control_protocol_manager.cc:84
+#: libs/ardour/control_protocol_manager.cc:85
 msgid "control protocol name \"%1\" could not be initialized"
 msgstr ""
 
-#: libs/ardour/control_protocol_manager.cc:180
+#: libs/ardour/control_protocol_manager.cc:141
+msgid "Instantiating mandatory control protocol %1"
+msgstr ""
+
+#: libs/ardour/control_protocol_manager.cc:175
+msgid "Control protocol %1 not usable"
+msgstr ""
+
+#: libs/ardour/control_protocol_manager.cc:187
+msgid "Control surface protocol discovered: \"%1\""
+msgstr ""
+
+#: libs/ardour/control_protocol_manager.cc:205
 #, fuzzy
 msgid "ControlProtocolManager: cannot load module \"%1\" (%2)"
 msgstr "LADSPA: �� ������� ��������� ������ \"%1\" (%2)"
 
-#: libs/ardour/control_protocol_manager.cc:188
+#: libs/ardour/control_protocol_manager.cc:213
 msgid "ControlProtocolManager: module \"%1\" has no descriptor function."
 msgstr ""
 
@@ -354,343 +533,100 @@ msgstr ""
 msgid "old-style crossfade information - no position information"
 msgstr ""
 
-#: libs/ardour/curve.cc:112 libs/ardour/insert.cc:454
-#: libs/ardour/session.cc:2452 libs/ardour/session.cc:2504
+#: libs/ardour/curve.cc:112 libs/ardour/globals.cc:340
+#: libs/ardour/insert.cc:454 libs/ardour/session.cc:2466
+#: libs/ardour/session.cc:2518
 msgid "programming error: "
 msgstr "������ ���������: "
 
-#: libs/ardour/cycle_timer.cc:35
+#: libs/ardour/cycle_timer.cc:37
 msgid "CycleTimer::get_mhz(): can't open /proc/cpuinfo"
 msgstr ""
 
-#: libs/ardour/cycle_timer.cc:47
+#: libs/ardour/cycle_timer.cc:49
 msgid "CycleTimer::get_mhz(): cannot locate cpu MHz in /proc/cpuinfo"
 msgstr ""
 
-#: libs/ardour/cycle_timer.cc:70
+#: libs/ardour/cycle_timer.cc:72
 msgid "cannot locate cpu MHz in /proc/cpuinfo"
 msgstr ""
 
-#: libs/ardour/destructive_filesource.cc:197
+#: libs/ardour/destructive_filesource.cc:188
 msgid "DestructiveFileSource: \"%1\" bad read retval: %2 of %5 (%3: %4)"
 msgstr ""
 
-#: libs/ardour/destructive_filesource.cc:210
-#: libs/ardour/destructive_filesource.cc:252
-#: libs/ardour/destructive_filesource.cc:259
+#: libs/ardour/destructive_filesource.cc:201
+#: libs/ardour/destructive_filesource.cc:243
+#: libs/ardour/destructive_filesource.cc:250
 msgid "DestructiveFileSource: \"%1\" bad write (%2)"
 msgstr ""
 
-#: libs/ardour/diskstream.cc:337
-msgid "DiskStream: Session doesn't know about a Playlist called \"%1\""
-msgstr ""
-
-#: libs/ardour/diskstream.cc:342
-msgid "DiskStream: Playlist \"%1\" isn't an audio playlist"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:433
-msgid "DiskStream %1: there is no existing playlist to make a copy of!"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:1113 libs/ardour/diskstream.cc:1124
-msgid "DiskStream %1: when refilling, cannot read %2 from playlist at frame %3"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:1256
-msgid "DiskStream %1: cannot read %2 from playlist at frame %3"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:1623 libs/ardour/diskstream.cc:1640
-msgid "DiskStream %1: cannot write to disk"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:1700
-msgid "DiskStream \"%1\": cannot flush captured data to disk!"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:1797
-msgid "%1: could not create region for complete audio file"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:1820
-msgid "DiskStream: could not create region for captured audio!"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:1875
-#, fuzzy
-msgid "programmer error: %1"
-msgstr "������ ���������: "
-
-#: libs/ardour/diskstream.cc:2155
-msgid "DiskStream: channel %1 out of range"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:2180
-msgid "%1:%2 new capture file not initialized correctly"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:2413
-msgid "Location \"%1\" not valid for track loop (start >= end)"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:2491
-msgid "%1: cannot restore pending capture source file %2"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:2513
-msgid "%1: incorrect number of pending sources listed - ignoring them all"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:2529
-msgid "%1: cannot create whole-file region from pending capture sources"
-msgstr ""
-
-#: libs/ardour/diskstream.cc:2541
-msgid "%1: cannot create region from pending capture sources"
-msgstr ""
-
-#: libs/ardour/filesource.cc:175
-msgid "FileSource: search path not set"
-msgstr ""
-
-#: libs/ardour/filesource.cc:190
-msgid "FileSource: \"%1\" not found when searching %2 using %3"
-msgstr ""
-
-#: libs/ardour/filesource.cc:196
-msgid ""
-"FileSource: \"%1\" is ambigous when searching %2\n"
-"\t"
-msgstr ""
-
-#: libs/ardour/filesource.cc:231
-msgid "Filesource: cannot find required file (%1): %2"
-msgstr ""
-
-#: libs/ardour/filesource.cc:239
-msgid "Filesource: cannot check for existing file (%1): %2"
-msgstr ""
-
-#: libs/ardour/filesource.cc:245 libs/ardour/filesource.cc:1127
-#: libs/ardour/filesource.cc:1210
-msgid "FileSource: could not open \"%1\": (%2)"
-msgstr ""
-
-#: libs/ardour/filesource.cc:278
-msgid "FileSource: cannot write header in %1"
-msgstr ""
-
-#: libs/ardour/filesource.cc:293
-msgid "FileSource: cannot locate chunks in %1"
-msgstr ""
-
-#: libs/ardour/filesource.cc:298
-msgid "FileSource: cannot read header in %1"
-msgstr ""
-
-#: libs/ardour/filesource.cc:303
-msgid "FileSource: cannot check header in %1"
-msgstr ""
-
-#: libs/ardour/filesource.cc:311
-msgid "FileSource: cannot initialize peakfile for %1 as %2"
-msgstr ""
-
-#: libs/ardour/filesource.cc:359 libs/ardour/insert.cc:525
-#, fuzzy
-msgid "programming error: %1"
-msgstr "������ ���������: "
-
-#: libs/ardour/filesource.cc:364
-msgid "cannot rename audio file for %1 to %2"
-msgstr ""
-
-#: libs/ardour/filesource.cc:390
-msgid "FileSource: cannot seek to end of file"
-msgstr ""
-
-#: libs/ardour/filesource.cc:395
-msgid "FileSource: cannot read RIFF/WAVE chunk from file"
-msgstr ""
-
-#: libs/ardour/filesource.cc:407
-msgid "FileSource %1: not a RIFF/WAVE file"
-msgstr ""
-
-#: libs/ardour/filesource.cc:434
-msgid "FileSource: can't read a chunk"
-msgstr ""
-
-#: libs/ardour/filesource.cc:451
-msgid "filesource: correcting mis-written RIFF file to become a RIFX: "
-msgstr ""
-
-#: libs/ardour/filesource.cc:567
-msgid "FileSource: cannot get user information for BWF header (%1)"
-msgstr ""
-
-#: libs/ardour/filesource.cc:571
-msgid "FileSource: cannot get host information for BWF header (%1)"
-msgstr ""
-
-#: libs/ardour/filesource.cc:716
-msgid "FileSource[%1]: cannot update data size: %2"
-msgstr ""
-
-#: libs/ardour/filesource.cc:733
-msgid "FileSource: can't find RIFF chunk info"
-msgstr ""
-
-#: libs/ardour/filesource.cc:737
-msgid "FileSource: can't find RIFX chunk info"
-msgstr ""
-
-#: libs/ardour/filesource.cc:758
-msgid "FileSource: can't read RIFF chunk"
-msgstr ""
-
-#: libs/ardour/filesource.cc:768
-msgid "FileSource: can't find format chunk info"
-msgstr ""
-
-#: libs/ardour/filesource.cc:773
-msgid "FileSource: can't read format chunk"
-msgstr ""
-
-#: libs/ardour/filesource.cc:782
-msgid "FileSource: can't find data chunk info"
-msgstr ""
-
-#: libs/ardour/filesource.cc:787
-msgid "FileSource: can't read data chunk"
-msgstr ""
-
-#: libs/ardour/filesource.cc:804
-msgid ""
-"FileSource: cannot read Broadcast Wave data from existing audio file \"%1"
-"\" (%2)"
-msgstr ""
-
-#: libs/ardour/filesource.cc:820
-msgid ""
-"FileSource: cannot read Broadcast Wave coding history from audio file \"%1"
-"\" (%2)"
-msgstr ""
-
-#: libs/ardour/filesource.cc:862
-msgid ""
-"FileSource \"%1\" does not use valid sample format.\n"
-"This is probably a programming error."
-msgstr ""
-
-#: libs/ardour/filesource.cc:901
-msgid "FileSource \"%1\" has no \"data\" chunk"
-msgstr ""
-
-#: libs/ardour/filesource.cc:906
-msgid "%1: data length in header (%2) differs from implicit size in file (%3)"
-msgstr ""
-
-#: libs/ardour/filesource.cc:911
-msgid "\"%1\" has a sample rate of %2 instead of %3 as used by this session"
-msgstr ""
-
-#: libs/ardour/filesource.cc:934
-msgid "FileSource: cannot write WAVE chunk: %1"
-msgstr ""
-
-#: libs/ardour/filesource.cc:978
-msgid "FileSource: cannot write format chunk: %1"
-msgstr ""
-
-#: libs/ardour/filesource.cc:990
-msgid "FileSource: cannot data chunk: %1"
-msgstr ""
-
-#: libs/ardour/filesource.cc:1103 libs/ardour/filesource.cc:1188
-msgid "FileSource: \"%1\" bad write (%2)"
-msgstr ""
-
-#: libs/ardour/filesource.cc:1335 libs/ardour/session_state.cc:3093
-msgid ""
-"there are already 1000 files with names like %1; versioning discontinued"
-msgstr ""
-
-#: libs/ardour/filesource.cc:1349 libs/ardour/session_state.cc:3107
-msgid "cannot rename audio file source from %1 to %2 (%3)"
-msgstr ""
-
-#: libs/ardour/filesource.cc:1356 libs/ardour/session_state.cc:3122
-msgid "cannot remove peakfile %1 for %2 (%3)"
-msgstr ""
-
-#: libs/ardour/globals.cc:82
+#: libs/ardour/globals.cc:109
 msgid "no MIDI ports specified: no MMC or MTC control possible"
 msgstr ""
 
-#: libs/ardour/globals.cc:97
+#: libs/ardour/globals.cc:124
 msgid "MIDI port specifications for \"%1\" are not understandable."
 msgstr ""
 
-#: libs/ardour/globals.cc:110 libs/ardour/globals.cc:114
-#: libs/ardour/globals.cc:118
+#: libs/ardour/globals.cc:137 libs/ardour/globals.cc:141
+#: libs/ardour/globals.cc:145
 msgid "default"
 msgstr ""
 
-#: libs/ardour/globals.cc:146
+#: libs/ardour/globals.cc:173
 msgid "No MMC control (MIDI port \"%1\" not available)"
 msgstr ""
 
-#: libs/ardour/globals.cc:152
+#: libs/ardour/globals.cc:179
 msgid "No MTC support (MIDI port \"%1\" not available)"
 msgstr ""
 
-#: libs/ardour/globals.cc:157
+#: libs/ardour/globals.cc:184
 msgid "No MIDI parameter support (MIDI port \"%1\" not available)"
 msgstr ""
 
-#: libs/ardour/import.cc:71
+#: libs/ardour/import.cc:75
 msgid "Import: cannot open input sound file \"%1\""
 msgstr ""
 
-#: libs/ardour/import.cc:76
+#: libs/ardour/import.cc:80
 msgid "resampling audio"
 msgstr ""
 
-#: libs/ardour/import.cc:80
+#: libs/ardour/import.cc:84
 msgid "Import: cannot open converted sound file \"%1\""
 msgstr ""
 
-#: libs/ardour/import.cc:85
+#: libs/ardour/import.cc:89
 msgid "Import: error while resampling sound file \"%1\""
 msgstr ""
 
-#: libs/ardour/import.cc:141
+#: libs/ardour/import.cc:148
 msgid "Session::import_audiofile: cannot open new file source for channel %1"
 msgstr ""
 
-#: libs/ardour/import.cc:160
+#: libs/ardour/import.cc:167
 msgid "converting audio"
 msgstr ""
 
-#: libs/ardour/import.cc:192
+#: libs/ardour/import.cc:199
 msgid "building region"
 msgstr ""
 
-#: libs/ardour/import.cc:194
+#: libs/ardour/import.cc:201
 msgid "building regions"
 msgstr ""
 
-#: libs/ardour/import.cc:318
+#: libs/ardour/import.cc:325
 msgid "Import: could not open temp file: %1"
 msgstr ""
 
-#: libs/ardour/import.cc:327
+#: libs/ardour/import.cc:334
 msgid "Import: src_new() failed : %1"
 msgstr ""
 
-#: libs/ardour/import.cc:355
+#: libs/ardour/import.cc:362
 msgid "Import: %1"
 msgstr "������: %1"
 
@@ -744,278 +680,278 @@ msgstr ""
 msgid "non-port insert XML used for port plugin insert"
 msgstr ""
 
-#: libs/ardour/io.cc:585
+#: libs/ardour/io.cc:598
 msgid "IO: cannot disconnect input port %1 from %2"
 msgstr ""
 
-#: libs/ardour/io.cc:653
+#: libs/ardour/io.cc:666
 msgid "IO: cannot disconnect output port %1 from %2"
 msgstr ""
 
-#: libs/ardour/io.cc:794 libs/ardour/io.cc:1138 libs/ardour/io.cc:1264
+#: libs/ardour/io.cc:807 libs/ardour/io.cc:1151 libs/ardour/io.cc:1277
 #, c-format
 msgid "%s/out"
 msgstr ""
 
-#: libs/ardour/io.cc:796 libs/ardour/io.cc:1140 libs/ardour/io.cc:1266
-#: libs/ardour/io.cc:2826
+#: libs/ardour/io.cc:809 libs/ardour/io.cc:1153 libs/ardour/io.cc:1279
+#: libs/ardour/io.cc:2849
 #, c-format
 msgid "%s/out %u"
 msgstr ""
 
-#: libs/ardour/io.cc:800 libs/ardour/io.cc:1145 libs/ardour/io.cc:1270
+#: libs/ardour/io.cc:813 libs/ardour/io.cc:1158 libs/ardour/io.cc:1283
 msgid "IO: cannot register output port %1"
 msgstr ""
 
-#: libs/ardour/io.cc:895 libs/ardour/io.cc:998 libs/ardour/io.cc:1104
+#: libs/ardour/io.cc:908 libs/ardour/io.cc:1011 libs/ardour/io.cc:1117
 #, c-format
 msgid "%s/in"
 msgstr ""
 
-#: libs/ardour/io.cc:897 libs/ardour/io.cc:1001 libs/ardour/io.cc:1107
-#: libs/ardour/io.cc:2796
+#: libs/ardour/io.cc:910 libs/ardour/io.cc:1014 libs/ardour/io.cc:1120
+#: libs/ardour/io.cc:2819
 #, c-format
 msgid "%s/in %u"
 msgstr ""
 
-#: libs/ardour/io.cc:901 libs/ardour/io.cc:1007 libs/ardour/io.cc:1112
+#: libs/ardour/io.cc:914 libs/ardour/io.cc:1020 libs/ardour/io.cc:1125
 msgid "IO: cannot register input port %1"
 msgstr ""
 
-#: libs/ardour/io.cc:1528
+#: libs/ardour/io.cc:1541
 msgid "IO::connecting_became_legal() called without a pending state node"
 msgstr ""
 
-#: libs/ardour/io.cc:1551
+#: libs/ardour/io.cc:1564
 msgid "IO::ports_became_legal() called without a pending state node"
 msgstr ""
 
-#: libs/ardour/io.cc:1581
+#: libs/ardour/io.cc:1594
 msgid "incorrect XML node \"%1\" passed to IO object"
 msgstr ""
 
-#: libs/ardour/io.cc:1636
+#: libs/ardour/io.cc:1649
 msgid ""
 "MIDI gain control specification for %1 is incomplete, so it has been ignored"
 msgstr ""
 
-#: libs/ardour/io.cc:1726 libs/ardour/io.cc:1838
+#: libs/ardour/io.cc:1739 libs/ardour/io.cc:1851
 msgid "Unknown connection \"%1\" listed for output of %2"
 msgstr ""
 
-#: libs/ardour/io.cc:1728 libs/ardour/io.cc:1840
+#: libs/ardour/io.cc:1741 libs/ardour/io.cc:1853
 msgid "out 1"
 msgstr ""
 
-#: libs/ardour/io.cc:1729 libs/ardour/io.cc:1841
+#: libs/ardour/io.cc:1742 libs/ardour/io.cc:1854
 msgid "No output connections available as a replacement"
 msgstr ""
 
-#: libs/ardour/io.cc:1733 libs/ardour/io.cc:1845
+#: libs/ardour/io.cc:1746 libs/ardour/io.cc:1858
 msgid "Connection %1 was not available - \"out 1\" used instead"
 msgstr ""
 
-#: libs/ardour/io.cc:1747
+#: libs/ardour/io.cc:1760
 msgid "%1: cannot create I/O ports"
 msgstr ""
 
-#: libs/ardour/io.cc:1854
+#: libs/ardour/io.cc:1867
 msgid "improper output channel list in XML node (%1)"
 msgstr ""
 
-#: libs/ardour/io.cc:1939
+#: libs/ardour/io.cc:1952
 msgid "IO: badly formed string in XML node for outputs \"%1\""
 msgstr ""
 
-#: libs/ardour/io.cc:1944
+#: libs/ardour/io.cc:1957
 msgid "IO: bad output string in XML node \"%1\""
 msgstr ""
 
-#: libs/ardour/io.cc:2502
+#: libs/ardour/io.cc:2525
 msgid "%1: could not open automation event file \"%2\""
 msgstr ""
 
-#: libs/ardour/io.cc:2541
+#: libs/ardour/io.cc:2564
 msgid "%1: cannot open automation event file \"%2\""
 msgstr ""
 
-#: libs/ardour/io.cc:2556
+#: libs/ardour/io.cc:2579
 msgid "badly formed version number in automation event file \"%1\""
 msgstr ""
 
-#: libs/ardour/io.cc:2560
+#: libs/ardour/io.cc:2583
 msgid "no version information in automation event file \"%1\""
 msgstr ""
 
-#: libs/ardour/io.cc:2565
+#: libs/ardour/io.cc:2588
 msgid "mismatched automation event file version (%1)"
 msgstr ""
 
-#: libs/ardour/io.cc:2573
+#: libs/ardour/io.cc:2596
 msgid "badly formatted automation event record at line %1 of %2 (ignored)"
 msgstr ""
 
-#: libs/ardour/io.cc:2593
+#: libs/ardour/io.cc:2616
 msgid "dubious automation event found (and ignored)"
 msgstr ""
 
-#: libs/ardour/io.cc:2597 libs/ardour/panner.cc:437
+#: libs/ardour/io.cc:2620 libs/ardour/panner.cc:438
 #: libs/ardour/redirect.cc:148
 msgid "loaded from disk"
 msgstr ""
 
-#: libs/ardour/io.cc:2768
+#: libs/ardour/io.cc:2791
 msgid "automation write/touch"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:86
+#: libs/ardour/ladspa_plugin.cc:87
 msgid "LADSPA: module has no descriptor function."
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:91
+#: libs/ardour/ladspa_plugin.cc:92
 msgid "LADSPA: plugin has gone away since discovery!"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:98
+#: libs/ardour/ladspa_plugin.cc:99
 msgid "LADSPA: \"%1\" cannot be used, since it cannot do inplace processing"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:328
+#: libs/ardour/ladspa_plugin.cc:329
 msgid ""
 "illegal parameter number used with plugin \"%1\". This mayindicate a change "
 "in the plugin design, and presets may beinvalid"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:429
+#: libs/ardour/ladspa_plugin.cc:430
 msgid "Bad node sent to LadspaPlugin::set_state"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:442
+#: libs/ardour/ladspa_plugin.cc:443
 msgid "LADSPA: no ladspa port number"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:448
+#: libs/ardour/ladspa_plugin.cc:449
 msgid "LADSPA: no ladspa port data"
 msgstr ""
 
-#: libs/ardour/ladspa_plugin.cc:497
+#: libs/ardour/ladspa_plugin.cc:498
 msgid ""
 "LADSPA LadspaPlugin MIDI control specification for port %1 is incomplete, so "
 "it has been ignored"
 msgstr ""
 
-#: libs/ardour/location.cc:268
+#: libs/ardour/location.cc:269
 msgid "incorrect XML node passed to Location::set_state"
 msgstr ""
 
-#: libs/ardour/location.cc:275
+#: libs/ardour/location.cc:276
 msgid "XML node for Location has no name information"
 msgstr ""
 
-#: libs/ardour/location.cc:282
+#: libs/ardour/location.cc:283
 msgid "XML node for Location has no start information"
 msgstr ""
 
-#: libs/ardour/location.cc:293
+#: libs/ardour/location.cc:294
 msgid "XML node for Location has no end information"
 msgstr ""
 
-#: libs/ardour/location.cc:302
+#: libs/ardour/location.cc:303
 msgid "XML node for Location has no flags information"
 msgstr ""
 
-#: libs/ardour/location.cc:390
+#: libs/ardour/location.cc:391
 msgid "Locations: attempt to use unknown location as selected location"
 msgstr ""
 
-#: libs/ardour/location.cc:417 libs/ardour/playlist.cc:1187
+#: libs/ardour/location.cc:418 libs/ardour/playlist.cc:1187
 msgid "clear"
 msgstr ""
 
-#: libs/ardour/location.cc:442
+#: libs/ardour/location.cc:443
 msgid "clear markers"
 msgstr ""
 
-#: libs/ardour/location.cc:470
+#: libs/ardour/location.cc:471
 msgid "clear ranges"
 msgstr ""
 
-#: libs/ardour/location.cc:488
+#: libs/ardour/location.cc:489
 msgid "add"
 msgstr "��������"
 
-#: libs/ardour/location.cc:526
+#: libs/ardour/location.cc:527
 msgid "remove"
 msgstr "�������"
 
-#: libs/ardour/location.cc:566
+#: libs/ardour/location.cc:567
 msgid "incorrect XML mode passed to Locations::set_state"
 msgstr ""
 
-#: libs/ardour/mtc_slave.cc:195
+#: libs/ardour/mtc_slave.cc:196
 msgid "MTC Slave: atomic read of current time failed, sleeping!"
 msgstr ""
 
-#: libs/ardour/named_selection.cc:76
+#: libs/ardour/named_selection.cc:77
 msgid "Chunk %1 uses an unknown playlist \"%2\""
 msgstr ""
 
-#: libs/ardour/named_selection.cc:79
+#: libs/ardour/named_selection.cc:80
 msgid "Chunk %1 contains misformed playlist information"
 msgstr ""
 
-#: libs/ardour/panner.cc:255
+#: libs/ardour/panner.cc:256
 msgid "MIDI pan control specification is incomplete, so it has been ignored"
 msgstr ""
 
-#: libs/ardour/panner.cc:360
+#: libs/ardour/panner.cc:361
 msgid "automation write pass"
 msgstr ""
 
-#: libs/ardour/panner.cc:400
+#: libs/ardour/panner.cc:401
 #, c-format
 msgid "error writing pan automation file (%s)"
 msgstr ""
 
-#: libs/ardour/panner.cc:428
+#: libs/ardour/panner.cc:429
 msgid ""
 "badly formatted pan automation event record at line %1 of %2 (ignored) [%3]"
 msgstr ""
 
-#: libs/ardour/panner.cc:943
+#: libs/ardour/panner.cc:944
 msgid "badly-formed positional data for Multi2dPanner - ignored"
 msgstr ""
 
-#: libs/ardour/panner.cc:1236
+#: libs/ardour/panner.cc:1237
 msgid "cannot open pan automation file \"%1\" for saving (%s)"
 msgstr ""
 
-#: libs/ardour/panner.cc:1272
+#: libs/ardour/panner.cc:1273
 msgid "cannot open pan automation file %1 (%2)"
 msgstr ""
 
-#: libs/ardour/panner.cc:1285
+#: libs/ardour/panner.cc:1286
 msgid "badly formed version number in pan automation event file \"%1\""
 msgstr ""
 
-#: libs/ardour/panner.cc:1289
+#: libs/ardour/panner.cc:1290
 msgid ""
 "no version information in pan automation event file \"%1\" (first line = %2)"
 msgstr ""
 
-#: libs/ardour/panner.cc:1295
+#: libs/ardour/panner.cc:1296
 msgid "mismatched pan automation event file version (%1)"
 msgstr ""
 
-#: libs/ardour/panner.cc:1309
+#: libs/ardour/panner.cc:1310
 msgid "too many panner states found in pan automation file %1"
 msgstr ""
 
-#: libs/ardour/panner.cc:1450
+#: libs/ardour/panner.cc:1451
 msgid "Unknown panner plugin \"%1\" found in pan state - ignored"
 msgstr ""
 
-#: libs/ardour/panner.cc:1456
+#: libs/ardour/panner.cc:1457
 msgid "panner plugin node has no type information!"
 msgstr ""
 
@@ -1067,62 +1003,62 @@ msgstr ""
 msgid "nudged"
 msgstr ""
 
-#: libs/ardour/playlist_factory.cc:26 libs/ardour/playlist_factory.cc:41
+#: libs/ardour/playlist_factory.cc:49 libs/ardour/playlist_factory.cc:64
 msgid ""
 "programming error: Playlist::createRegion called with unknown Region type"
 msgstr ""
 
-#: libs/ardour/playlist_factory.cc:63
+#: libs/ardour/playlist_factory.cc:86
 msgid ""
 "programming error: Playlist::copyPlaylist called with unknown Playlist type"
 msgstr ""
 
-#: libs/ardour/plugin.cc:327
+#: libs/ardour/plugin.cc:328
 msgid "Could not locate HOME.  Preset not saved."
 msgstr ""
 
-#: libs/ardour/plugin.cc:337 libs/ardour/plugin.cc:343
+#: libs/ardour/plugin.cc:338 libs/ardour/plugin.cc:344
 msgid "Could not create %1.  Preset not saved. (%2)"
 msgstr ""
 
-#: libs/ardour/plugin.cc:348
+#: libs/ardour/plugin.cc:349
 msgid "Error saving presets file %1."
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:193
+#: libs/ardour/plugin_manager.cc:194
 msgid "Could not parse rdf file: %1"
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:234
+#: libs/ardour/plugin_manager.cc:235
 msgid "LADSPA: cannot load module \"%1\" (%2)"
 msgstr "LADSPA: �� ������� ��������� ������ \"%1\" (%2)"
 
-#: libs/ardour/plugin_manager.cc:241
+#: libs/ardour/plugin_manager.cc:242
 msgid "LADSPA: module \"%1\" has no descriptor function."
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:296
+#: libs/ardour/plugin_manager.cc:297
 #, fuzzy
 msgid "VST: cannot load module from \"%1\""
 msgstr "LADSPA: �� ������� ��������� ������ \"%1\" (%2)"
 
-#: libs/ardour/plugin_manager.cc:301
+#: libs/ardour/plugin_manager.cc:302
 msgid "You asked ardour to not use any VST plugins"
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:304
+#: libs/ardour/plugin_manager.cc:305
 msgid "This version of ardour has no support for VST plugins"
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:311
+#: libs/ardour/plugin_manager.cc:312
 msgid "LADSPA: cannot load module from \"%1\""
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:373 libs/ardour/plugin_manager.cc:385
+#: libs/ardour/plugin_manager.cc:374 libs/ardour/plugin_manager.cc:386
 msgid "Unknown"
 msgstr ""
 
-#: libs/ardour/plugin_manager.cc:463
+#: libs/ardour/plugin_manager.cc:464
 msgid ""
 "VST plugin %1 does not support processReplacing, and so cannot be used in "
 "ardour at this time"
@@ -1136,11 +1072,11 @@ msgstr ""
 msgid "programming error: unknown Redirect type in Redirect::Clone!\n"
 msgstr ""
 
-#: libs/ardour/redirect.cc:102 libs/ardour/utils.cc:199
+#: libs/ardour/redirect.cc:102 libs/ardour/utils.cc:203
 msgid "pre"
 msgstr "���"
 
-#: libs/ardour/redirect.cc:104 libs/ardour/utils.cc:202
+#: libs/ardour/redirect.cc:104 libs/ardour/utils.cc:206
 msgid "post"
 msgstr "����"
 
@@ -1192,259 +1128,254 @@ msgstr ""
 msgid "active_changed"
 msgstr ""
 
-#: libs/ardour/region.cc:884
+#: libs/ardour/region.cc:885
 msgid "Session: XMLNode describing a Region is incomplete (no id)"
 msgstr ""
 
-#: libs/ardour/region.cc:891
+#: libs/ardour/region.cc:892
 msgid "Session: XMLNode describing a Region is incomplete (no name)"
 msgstr ""
 
-#: libs/ardour/route.cc:79 libs/ardour/session.cc:1541
-#: libs/ardour/session.cc:1547 libs/ardour/session.cc:3064
+#: libs/ardour/route.cc:79 libs/ardour/session.cc:1554
+#: libs/ardour/session.cc:1560 libs/ardour/session.cc:3093
 msgid "signal"
 msgstr ""
 
-#: libs/ardour/route.cc:1433
+#: libs/ardour/route.cc:1430
 msgid "Could not get state of route.  Problem with save_automation"
 msgstr ""
 
-#: libs/ardour/route.cc:1485
+#: libs/ardour/route.cc:1482
 msgid "Send construction failed"
 msgstr ""
 
-#: libs/ardour/route.cc:1507
+#: libs/ardour/route.cc:1504
 msgid "unknown Insert type \"%1\"; ignored"
 msgstr ""
 
-#: libs/ardour/route.cc:1513
+#: libs/ardour/route.cc:1510
 msgid "Insert XML node has no type property"
 msgstr ""
 
-#: libs/ardour/route.cc:1518
+#: libs/ardour/route.cc:1515
 msgid "insert could not be created. Ignored."
 msgstr ""
 
-#: libs/ardour/route.cc:1536
+#: libs/ardour/route.cc:1533
 msgid "Bad node sent to Route::set_state() [%1]"
 msgstr ""
 
-#: libs/ardour/route.cc:1595
+#: libs/ardour/route.cc:1592
 msgid "Route %1: unknown edit group \"%2 in saved state (ignored)"
 msgstr ""
 
-#: libs/ardour/route.cc:1611 libs/ardour/route.cc:1615
+#: libs/ardour/route.cc:1608 libs/ardour/route.cc:1612
 msgid "badly formed order key string in state file! [%1] ... ignored."
 msgstr ""
 
-#: libs/ardour/route.cc:1696 libs/ardour/route.cc:1823
+#: libs/ardour/route.cc:1693 libs/ardour/route.cc:1820
 msgid "[control]"
 msgstr ""
 
-#: libs/ardour/route.cc:1716
+#: libs/ardour/route.cc:1713
 msgid "Route %1: unknown mix group \"%2 in saved state (ignored)"
 msgstr ""
 
-#: libs/ardour/route.cc:1745 libs/ardour/route.cc:1753
+#: libs/ardour/route.cc:1742 libs/ardour/route.cc:1750
 msgid ""
 "MIDI mute control specification for %1 is incomplete, so it has been ignored"
 msgstr ""
 
-#: libs/ardour/send.cc:98
+#: libs/ardour/send.cc:99
 msgid "XML node describing a send is missing a Redirect node"
 msgstr ""
 
-#: libs/ardour/session.cc:99
+#: libs/ardour/session.cc:103
 msgid "Could not resolve path: %1 (%2)"
 msgstr ""
 
-#: libs/ardour/session.cc:111
+#: libs/ardour/session.cc:115
 msgid "cannot check session path %1 (%2)"
 msgstr ""
 
-#: libs/ardour/session.cc:141
+#: libs/ardour/session.cc:145
 msgid "cannot check statefile %1 (%2)"
 msgstr ""
 
-#: libs/ardour/session.cc:177
+#: libs/ardour/session.cc:181
 msgid "%1 is not an Ardour snapshot file"
 msgstr ""
 
-#: libs/ardour/session.cc:194
+#: libs/ardour/session.cc:198
 msgid "cannot determine current working directory (%1)"
 msgstr ""
 
-#: libs/ardour/session.cc:211
+#: libs/ardour/session.cc:215
 msgid "unknown file type for session %1"
 msgstr ""
 
-#: libs/ardour/session.cc:316
+#: libs/ardour/session.cc:320
 msgid "monitor"
 msgstr "�������"
 
-#: libs/ardour/session.cc:323
+#: libs/ardour/session.cc:327
 msgid "master"
 msgstr "������"
 
-#: libs/ardour/session.cc:607
+#: libs/ardour/session.cc:611
 msgid "could not setup Click I/O"
 msgstr ""
 
-#: libs/ardour/session.cc:628
+#: libs/ardour/session.cc:632
 msgid "cannot setup Click I/O"
 msgstr ""
 
-#: libs/ardour/session.cc:650
+#: libs/ardour/session.cc:654
 msgid "cannot create Auditioner: no auditioning of regions possible"
 msgstr ""
 
-#: libs/ardour/session.cc:662
+#: libs/ardour/session.cc:666
 #, c-format
 msgid "out %<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:674
+#: libs/ardour/session.cc:678
 #, c-format
 msgid "in %<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:688
+#: libs/ardour/session.cc:692
 #, c-format
 msgid "out %<PRIu32>+%<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:702
+#: libs/ardour/session.cc:706
 #, c-format
 msgid "in %<PRIu32>+%<PRIu32>"
 msgstr ""
 
-#: libs/ardour/session.cc:735
+#: libs/ardour/session.cc:739
 msgid "cannot setup master inputs"
 msgstr ""
 
-#: libs/ardour/session.cc:743
+#: libs/ardour/session.cc:747
 msgid "cannot setup master outputs"
 msgstr ""
 
-#: libs/ardour/session.cc:754
+#: libs/ardour/session.cc:758
 #, fuzzy
 msgid "Master Out"
 msgstr "������"
 
-#: libs/ardour/session.cc:820
+#: libs/ardour/session.cc:830
 msgid "cannot setup control inputs"
 msgstr ""
 
-#: libs/ardour/session.cc:828
+#: libs/ardour/session.cc:838
 msgid "cannot set up master outputs"
 msgstr ""
 
-#: libs/ardour/session.cc:1100
+#: libs/ardour/session.cc:1110
 msgid "Session: you can't use that location for auto punch (start <= end)"
 msgstr ""
 
-#: libs/ardour/session.cc:1179
+#: libs/ardour/session.cc:1189
 msgid "Session: you can't use a mark for auto loop"
 msgstr ""
 
-#: libs/ardour/session.cc:1559
+#: libs/ardour/session.cc:1572
 msgid "feedback loop setup between %1 and %2"
 msgstr ""
 
-#: libs/ardour/session.cc:1711 libs/ardour/session.cc:1808
+#: libs/ardour/session.cc:1724 libs/ardour/session.cc:1821
 msgid "cannot configure %1 in/%2 out configuration for new audio track"
 msgstr ""
 
-#: libs/ardour/session.cc:1767
+#: libs/ardour/session.cc:1780
 msgid "Session: could not create new audio track."
 msgstr ""
 
-#: libs/ardour/session.cc:1857
+#: libs/ardour/session.cc:1870
 msgid "Session: could not create new route."
 msgstr ""
 
-#: libs/ardour/session.cc:2340
+#: libs/ardour/session.cc:2354
 msgid "cannot create new name for region \"%1\""
 msgstr ""
 
-#: libs/ardour/session.cc:2404
+#: libs/ardour/session.cc:2418
 msgid "too many regions with names like %1"
 msgstr ""
 
-#: libs/ardour/session.cc:2860
+#: libs/ardour/session.cc:2883
 msgid "There are already %1 recordings for %2, which I consider too many."
 msgstr ""
 
-#: libs/ardour/session.cc:3229
+#: libs/ardour/session.cc:3258
 msgid "programming error: unknown type of Insert created!"
 msgstr ""
 
-#: libs/ardour/session.cc:3235
+#: libs/ardour/session.cc:3264
 msgid "programming error: unknown type of Redirect created!"
 msgstr ""
 
-#: libs/ardour/session.cc:3258
+#: libs/ardour/session.cc:3287
 msgid "programming error: unknown type of Insert deleted!"
 msgstr ""
 
-#: libs/ardour/session.cc:3264
+#: libs/ardour/session.cc:3293
 msgid "programming error: unknown type of Redirect deleted!"
 msgstr ""
 
-#: libs/ardour/session.cc:3605
+#: libs/ardour/session.cc:3636
 msgid "too many bounced versions of playlist \"%1\""
 msgstr ""
 
-#: libs/ardour/session.cc:3614
+#: libs/ardour/session.cc:3649
 msgid "cannot create new audio file \"%1\" for %2"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:81 libs/ardour/session_midi.cc:1183
-#: libs/ardour/source.cc:233
-msgid "Cannot create transport request signal pipe (%1)"
-msgstr ""
-
-#: libs/ardour/session_butler.cc:86 libs/ardour/session_butler.cc:91
+#: libs/ardour/session_butler.cc:85 libs/ardour/session_butler.cc:90
 msgid "UI: cannot set O_NONBLOCK on butler request pipe (%1)"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:96
+#: libs/ardour/session_butler.cc:95
 msgid "Session: could not create butler thread"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:190
+#: libs/ardour/session_butler.cc:189
 msgid "poll on butler request pipe failed (%1)"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:197
+#: libs/ardour/session_butler.cc:196
 msgid "Error on butler thread request pipe"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:239
+#: libs/ardour/session_butler.cc:238
 msgid "Error reading from butler request pipe"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:276
+#: libs/ardour/session_butler.cc:275
 msgid "Butler read ahead failure on dstream %1"
 msgstr ""
 
-#: libs/ardour/session_butler.cc:320
+#: libs/ardour/session_butler.cc:319
 msgid "Butler write-behind failure on dstream %1"
 msgstr ""
 
-#: libs/ardour/session_click.cc:157
+#: libs/ardour/session_click.cc:158
 msgid "cannot open click soundfile %1 (%2)"
 msgstr ""
 
-#: libs/ardour/session_click.cc:166
+#: libs/ardour/session_click.cc:167
 msgid "cannot read data from click soundfile"
 msgstr ""
 
-#: libs/ardour/session_click.cc:191
+#: libs/ardour/session_click.cc:192
 msgid "cannot open click emphasis soundfile %1 (%2)"
 msgstr ""
 
-#: libs/ardour/session_click.cc:199
+#: libs/ardour/session_click.cc:200
 msgid "cannot read data from click emphasis soundfile"
 msgstr ""
 
@@ -1544,7 +1475,7 @@ msgstr ""
 msgid "Error reading from transport request pipe"
 msgstr ""
 
-#: libs/ardour/session_process.cc:105
+#: libs/ardour/session_process.cc:104
 msgid "Session: error in no roll for %1"
 msgstr ""
 
@@ -1561,192 +1492,199 @@ msgstr ""
 msgid "start"
 msgstr "���������"
 
-#: libs/ardour/session_state.cc:501
+#: libs/ardour/session_state.cc:502
 msgid "Session: cannot create session dir \"%1\" (%2)"
 msgstr ""
 
-#: libs/ardour/session_state.cc:512
+#: libs/ardour/session_state.cc:513
 msgid "Session: cannot create session peakfile dir \"%1\" (%2)"
 msgstr ""
 
-#: libs/ardour/session_state.cc:521
+#: libs/ardour/session_state.cc:522
 msgid "Session: cannot create session sounds dir \"%1\" (%2)"
 msgstr ""
 
-#: libs/ardour/session_state.cc:530
+#: libs/ardour/session_state.cc:531
 msgid "Session: cannot create session tape dir \"%1\" (%2)"
 msgstr ""
 
-#: libs/ardour/session_state.cc:539
+#: libs/ardour/session_state.cc:540
 msgid "Session: cannot create session dead sounds dir \"%1\" (%2)"
 msgstr ""
 
-#: libs/ardour/session_state.cc:548
+#: libs/ardour/session_state.cc:549
 msgid "Session: cannot create session automation dir \"%1\" (%2)"
 msgstr ""
 
-#: libs/ardour/session_state.cc:579
+#: libs/ardour/session_state.cc:580
 msgid "Could not open %1 for writing mix template"
 msgstr ""
 
-#: libs/ardour/session_state.cc:585
+#: libs/ardour/session_state.cc:586
 msgid "Could not open mix template %1 for reading"
 msgstr ""
 
-#: libs/ardour/session_state.cc:592
+#: libs/ardour/session_state.cc:593
 msgid "Session already exists.  Not overwriting"
 msgstr ""
 
-#: libs/ardour/session_state.cc:635
+#: libs/ardour/session_state.cc:636
 msgid "Session: could not load diskstream via XML state"
 msgstr ""
 
-#: libs/ardour/session_state.cc:684
+#: libs/ardour/session_state.cc:685
 msgid "could not backup old state file, current state not saved."
 msgstr ""
 
-#: libs/ardour/session_state.cc:697
+#: libs/ardour/session_state.cc:698
 msgid "state could not be saved to %1"
 msgstr ""
 
-#: libs/ardour/session_state.cc:704
+#: libs/ardour/session_state.cc:705
 msgid "could not remove corrupt state file %1"
 msgstr ""
 
-#: libs/ardour/session_state.cc:708
+#: libs/ardour/session_state.cc:709
 msgid "could not restore state file from backup %1"
 msgstr ""
 
-#: libs/ardour/session_state.cc:777
+#: libs/ardour/session_state.cc:778
 msgid "%1: session state information file \"%2\" doesn't exist!"
 msgstr ""
 
-#: libs/ardour/session_state.cc:788
+#: libs/ardour/session_state.cc:789
 msgid "Could not understand ardour file %1"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1492
+#: libs/ardour/session_state.cc:1493
 msgid "programming error: Session: incorrect XML node sent to set_state()"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1538
+#: libs/ardour/session_state.cc:1539
 msgid "Session: XML state has no options section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1543
+#: libs/ardour/session_state.cc:1544
 msgid "Session: XML state has no sources section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1550
+#: libs/ardour/session_state.cc:1551
 msgid "Session: XML state has no Regions section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1557
+#: libs/ardour/session_state.cc:1558
 msgid "Session: XML state has no playlists section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1576
+#: libs/ardour/session_state.cc:1577
 msgid "Session: XML state has no diskstreams section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1583
+#: libs/ardour/session_state.cc:1584
 msgid "Session: XML state has no connections section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1590
+#: libs/ardour/session_state.cc:1591
 msgid "Session: XML state has no locations section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1623
+#: libs/ardour/session_state.cc:1624
 msgid "Session: XML state has no edit groups section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1630
+#: libs/ardour/session_state.cc:1631
 msgid "Session: XML state has no mix groups section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1637
+#: libs/ardour/session_state.cc:1638
 msgid "Session: XML state has no Tempo Map section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1644
+#: libs/ardour/session_state.cc:1645
 msgid "Session: XML state has no routes section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1651
+#: libs/ardour/session_state.cc:1652
 msgid "Session: XML state has no click section"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1696
+#: libs/ardour/session_state.cc:1697
 msgid "Session: cannot create Route from XML description."
 msgstr ""
 
-#: libs/ardour/session_state.cc:1734
+#: libs/ardour/session_state.cc:1735
 msgid "Session: cannot create Region from XML description."
 msgstr ""
 
-#: libs/ardour/session_state.cc:1762
+#: libs/ardour/session_state.cc:1764
 msgid "Session: XMLNode describing a AudioRegion is incomplete (no source)"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1770 libs/ardour/session_state.cc:1784
+#: libs/ardour/session_state.cc:1772 libs/ardour/session_state.cc:1792
 msgid ""
 "Session: XMLNode describing a AudioRegion references an unknown source id =%1"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1852
+#: libs/ardour/session_state.cc:1778 libs/ardour/session_state.cc:1798
+msgid ""
+"Session: XMLNode describing a AudioRegion references a non-audio source id =%"
+"1"
+msgstr ""
+
+#: libs/ardour/session_state.cc:1868
 msgid "Session: cannot create Source from XML description."
 msgstr ""
 
-#: libs/ardour/session_state.cc:1883
-msgid "Found a sound file that cannot be used by Ardour. See the progammers."
+#: libs/ardour/session_state.cc:1889
+msgid ""
+"Found a sound file that cannot be used by Ardour. Talk to the progammers."
 msgstr ""
 
-#: libs/ardour/session_state.cc:1908
+#: libs/ardour/session_state.cc:1913
 msgid "Could not create mix templates directory \"%1\" (%2)"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1922
+#: libs/ardour/session_state.cc:1927
 msgid "Template \"%1\" already exists - new version not created"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1929
+#: libs/ardour/session_state.cc:1934
 msgid "mix template not saved"
 msgstr ""
 
-#: libs/ardour/session_state.cc:1989
+#: libs/ardour/session_state.cc:1994
 msgid "cannot create session directory \"%1\"; ignored"
 msgstr ""
 
-#: libs/ardour/session_state.cc:2002
+#: libs/ardour/session_state.cc:2007
 msgid "cannot create sounds directory \"%1\"; ignored"
 msgstr ""
 
-#: libs/ardour/session_state.cc:2013
+#: libs/ardour/session_state.cc:2018
 msgid "cannot create dead sounds directory \"%1\"; ignored"
 msgstr ""
 
-#: libs/ardour/session_state.cc:2024
+#: libs/ardour/session_state.cc:2029
 msgid "cannot create peak file directory \"%1\"; ignored"
 msgstr ""
 
-#: libs/ardour/session_state.cc:2163 libs/ardour/session_state.cc:2184
+#: libs/ardour/session_state.cc:2168 libs/ardour/session_state.cc:2189
 msgid "Session: cannot create Playlist from XML description."
 msgstr ""
 
-#: libs/ardour/session_state.cc:2223
+#: libs/ardour/session_state.cc:2228
 msgid "Session: cannot create Named Selection from XML description."
 msgstr ""
 
-#: libs/ardour/session_state.cc:2355
+#: libs/ardour/session_state.cc:2360
 msgid "Unknown node \"%1\" found in Connections list from state file"
 msgstr ""
 
-#: libs/ardour/session_state.cc:3195
+#: libs/ardour/session_state.cc:3197
 msgid "cannot remove dead sound file %1 (%2)"
 msgstr ""
 
-#: libs/ardour/session_time.cc:736
+#: libs/ardour/session_time.cc:375
 msgid "Unknown JACK transport state %1 in sync callback"
 msgstr ""
 
@@ -1754,43 +1692,43 @@ msgstr ""
 msgid "tempoize: error creating name for new audio file based on %1"
 msgstr ""
 
-#: libs/ardour/session_timefx.cc:85
+#: libs/ardour/session_timefx.cc:88
 msgid "tempoize: error creating new audio file %1 (%2)"
 msgstr ""
 
-#: libs/ardour/session_timefx.cc:111
+#: libs/ardour/session_timefx.cc:114
 msgid "tempoize: error reading data from %1"
 msgstr ""
 
-#: libs/ardour/session_timefx.cc:124 libs/ardour/session_timefx.cc:136
+#: libs/ardour/session_timefx.cc:127 libs/ardour/session_timefx.cc:139
 msgid "error writing tempo-adjusted data to %1"
 msgstr ""
 
-#: libs/ardour/session_timefx.cc:142
+#: libs/ardour/session_timefx.cc:145
 msgid "timefx code failure. please notify ardour-developers."
 msgstr ""
 
-#: libs/ardour/session_transport.cc:116
+#: libs/ardour/session_transport.cc:117
 msgid "Cannot loop - no loop range defined"
 msgstr ""
 
-#: libs/ardour/session_transport.cc:478
+#: libs/ardour/session_transport.cc:479
 msgid ""
 "Seamless looping cannot be supported while Ardour is using JACK transport.\n"
 "Recommend changing the configured options"
 msgstr ""
 
-#: libs/ardour/session_transport.cc:754
+#: libs/ardour/session_transport.cc:755
 msgid ""
 "Global varispeed cannot be supported while Ardour is connected to JACK "
 "transport control"
 msgstr ""
 
-#: libs/ardour/session_transport.cc:954
+#: libs/ardour/session_transport.cc:955
 msgid "please stop the transport before adjusting slave settings"
 msgstr ""
 
-#: libs/ardour/session_transport.cc:990
+#: libs/ardour/session_transport.cc:991
 msgid "No MTC port defined: MTC slaving is impossible."
 msgstr ""
 
@@ -1878,209 +1816,185 @@ msgstr ""
 msgid "Big-endian (Mac)"
 msgstr ""
 
-#: libs/ardour/sndfilesource.cc:75
-msgid "SndFileSource: cannot open file \"%1\" (%2)"
+#: libs/ardour/sndfilesource.cc:146
+msgid "FileSource: cannot get host information for BWF header (%1)"
 msgstr ""
 
-#: libs/ardour/sndfilesource.cc:80
+#: libs/ardour/sndfilesource.cc:168
 msgid ""
-"SndFileSource: file only contains %1 channels; %2 is invalid as a channel "
-"number"
-msgstr ""
-
-#: libs/ardour/sndfilesource.cc:122
-msgid "SndFileSource: could not seek to frame %1 within %2 (%3)"
-msgstr ""
-
-#: libs/ardour/source.cc:161
-msgid "poll on peak request pipe failed (%1)"
-msgstr ""
-
-#: libs/ardour/source.cc:168
-msgid "Error on peak thread request pipe"
-msgstr ""
-
-#: libs/ardour/source.cc:201
-msgid "Error reading from peak request pipe"
-msgstr ""
-
-#: libs/ardour/source.cc:238 libs/ardour/source.cc:243
-msgid "UI: cannot set O_NONBLOCK on peak request pipe (%1)"
-msgstr ""
-
-#: libs/ardour/source.cc:248
-msgid "Source: could not create peak thread"
+"cannot set broadcast info for audio file %1 (%2); dropping broadcast info "
+"for this file"
 msgstr ""
 
-#: libs/ardour/source.cc:326
-msgid "cannot rename peakfile for %1 from %2 to %3 (%4)"
+#: libs/ardour/sndfilesource.cc:224
+msgid "SndFileSource: cannot open file \"%1\" for %2 (%3)"
 msgstr ""
 
-#: libs/ardour/source.cc:357
-msgid "Source: cannot stat peakfile \"%1\""
-msgstr ""
-
-#: libs/ardour/source.cc:444
-msgid "cannot read sample data for unscaled peak computation"
+#: libs/ardour/sndfilesource.cc:230
+msgid ""
+"SndFileSource: file only contains %1 channels; %2 is invalid as a channel "
+"number"
 msgstr ""
 
-#: libs/ardour/source.cc:465 libs/ardour/source.cc:536
-#: libs/ardour/source.cc:780 libs/ardour/source.cc:881
-msgid "Source: cannot open peakpath \"%1\" (%2)"
+#: libs/ardour/sndfilesource.cc:307
+msgid "SndFileSource: could not seek to frame %1 within %2 (%3)"
 msgstr ""
 
-#: libs/ardour/source.cc:637
-msgid "Source[%1]: peak read - cannot read %2 samples at offset %3"
-msgstr ""
+#: libs/ardour/sndfilesource.cc:358
+#, fuzzy
+msgid "programming error: %1 %2"
+msgstr "������ ���������: "
 
-#: libs/ardour/source.cc:789
-msgid "%1: could not write read raw data for peak computation (%2)"
+#: libs/ardour/sndfilesource.cc:458
+msgid ""
+"cannot set broadcast info for audio file %1; Dropping broadcast info for "
+"this file"
 msgstr ""
 
-#: libs/ardour/source.cc:814
-msgid "%1: could not write peak file data (%2)"
+#: libs/ardour/sndfilesource.cc:500
+msgid "%1: cannot seek to %2"
 msgstr ""
 
-#: libs/ardour/state_manager.cc:46
+#: libs/ardour/state_manager.cc:47
 msgid "cleared history"
 msgstr ""
 
-#: libs/ardour/state_manager.cc:59
+#: libs/ardour/state_manager.cc:60
 msgid ""
 "programming error: illegal state ID (%1) passed to StateManager::set_state() "
 "(range = 0-%2)"
 msgstr ""
 
-#: libs/ardour/stateful.cc:100
+#: libs/ardour/stateful.cc:102
 msgid "Error: could not write %1"
 msgstr ""
 
-#: libs/ardour/stateful.cc:114
+#: libs/ardour/stateful.cc:116
 msgid "Could not understand XML file %1"
 msgstr ""
 
-#: libs/ardour/tempo.cc:66
+#: libs/ardour/tempo.cc:67
 msgid "TempoSection XML node has no \"start\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:74
+#: libs/ardour/tempo.cc:75
 msgid "TempoSection XML node has an illegal \"start\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:81
+#: libs/ardour/tempo.cc:82
 msgid "TempoSection XML node has no \"beats-per-minute\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:86
+#: libs/ardour/tempo.cc:87
 msgid "TempoSection XML node has an illegal \"beats_per_minute\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:91
+#: libs/ardour/tempo.cc:92
 msgid "TempoSection XML node has no \"movable\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:130
+#: libs/ardour/tempo.cc:131
 msgid "MeterSection XML node has no \"start\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:138
+#: libs/ardour/tempo.cc:139
 msgid "MeterSection XML node has an illegal \"start\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:145
+#: libs/ardour/tempo.cc:146
 msgid "MeterSection XML node has no \"beats-per-bar\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:150
+#: libs/ardour/tempo.cc:151
 msgid "MeterSection XML node has an illegal \"beats-per-bar\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:155
+#: libs/ardour/tempo.cc:156
 msgid "MeterSection XML node has no \"note-type\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:160
+#: libs/ardour/tempo.cc:161
 msgid "MeterSection XML node has an illegal \"note-type\" value"
 msgstr ""
 
-#: libs/ardour/tempo.cc:165
+#: libs/ardour/tempo.cc:166
 msgid "MeterSection XML node has no \"movable\" property"
 msgstr ""
 
-#: libs/ardour/tempo.cc:258
+#: libs/ardour/tempo.cc:259
 msgid "move metric"
 msgstr ""
 
-#: libs/ardour/tempo.cc:329
+#: libs/ardour/tempo.cc:330
 msgid "metric removed"
 msgstr ""
 
-#: libs/ardour/tempo.cc:372
+#: libs/ardour/tempo.cc:373
 msgid "add tempo"
 msgstr ""
 
-#: libs/ardour/tempo.cc:401
+#: libs/ardour/tempo.cc:402
 msgid "replace tempo"
 msgstr ""
 
-#: libs/ardour/tempo.cc:434
+#: libs/ardour/tempo.cc:435
 msgid "add meter"
 msgstr ""
 
-#: libs/ardour/tempo.cc:462
+#: libs/ardour/tempo.cc:463
 msgid "replaced meter"
 msgstr ""
 
-#: libs/ardour/tempo.cc:482 libs/ardour/tempo.cc:498
+#: libs/ardour/tempo.cc:483 libs/ardour/tempo.cc:499
 msgid "programming error: no tempo section in tempo map!"
 msgstr ""
 
-#: libs/ardour/tempo.cc:537
+#: libs/ardour/tempo.cc:538
 msgid "programming error: unhandled MetricSection type"
 msgstr ""
 
-#: libs/ardour/tempo.cc:1225 libs/ardour/tempo.cc:1237
+#: libs/ardour/tempo.cc:1226 libs/ardour/tempo.cc:1238
 msgid "Tempo map: could not set new state, restoring old one."
 msgstr ""
 
-#: libs/ardour/tempo.cc:1261
+#: libs/ardour/tempo.cc:1262
 msgid "load XML data"
 msgstr ""
 
-#: libs/ardour/utils.cc:242
+#: libs/ardour/utils.cc:246
 msgid "illegal or badly-formed string used for path (%1)"
 msgstr ""
 
-#: libs/ardour/utils.cc:247
+#: libs/ardour/utils.cc:251
 msgid "path (%1) is ambiguous"
 msgstr ""
 
-#: libs/ardour/vst_plugin.cc:186
+#: libs/ardour/vst_plugin.cc:187
 msgid "cannot create VST chunk directory: %1"
 msgstr ""
 
-#: libs/ardour/vst_plugin.cc:194
+#: libs/ardour/vst_plugin.cc:195
 msgid "cannot check VST chunk directory: %1"
 msgstr ""
 
-#: libs/ardour/vst_plugin.cc:201
+#: libs/ardour/vst_plugin.cc:202
 msgid "%1 exists but is not a directory"
 msgstr ""
 
-#: libs/ardour/vst_plugin.cc:239
+#: libs/ardour/vst_plugin.cc:240
 msgid "Bad node sent to VSTPlugin::set_state"
 msgstr ""
 
-#: libs/ardour/vst_plugin.cc:342 libs/ardour/vst_plugin.cc:353
+#: libs/ardour/vst_plugin.cc:343 libs/ardour/vst_plugin.cc:354
 msgid "no support for presets using chunks at this time"
 msgstr ""
 
-#: libs/ardour/coreaudio_source.cc:93
+#: libs/ardour/coreaudio_source.cc:99
 msgid ""
 "CoreAudioSource: file only contains %1 channels; %2 is invalid as a channel "
 "number"
 msgstr ""
 
-#: libs/ardour/coreaudio_source.cc:157
+#: libs/ardour/coreaudio_source.cc:164
 msgid "CoreAudioSource: could not seek to frame %1 within %2 (%3)"
 msgstr ""
index efbdb807f734b341a1f53ba9b9bc54dc6ef3a6e6..954162dd183547c3589ef964fe5aa7d724a92481 100644 (file)
@@ -27,9 +27,9 @@
 #include <ardour/utils.h>
 #include "i18n.h"
 
-
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 int
 ARDOUR::read_recent_sessions (RecentSessions& rs)
index 746d2790e229f18c7fccb6dd8e0852df01449903..33fec5088f189ebe08693b2d0007426df9319dd3 100644 (file)
@@ -39,7 +39,7 @@
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 const string Redirect::state_node_name = "Redirect";
 sigc::signal<void,Redirect*> Redirect::RedirectCreated;
index 08df23146b0bc607c0307698683def1fab00d92c..8c27a3bebc699732449943c0cf7bf9d6a959a0b9 100644 (file)
@@ -37,6 +37,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 Change Region::FadeChanged = ARDOUR::new_change ();
 Change Region::SyncOffsetChanged = ARDOUR::new_change ();
index 335dacad6ed1b6ec6711e47c611b447365c2ecfc..13dd531bac5dafc1eb0c427020deb1e852cf1b9d 100644 (file)
@@ -24,7 +24,7 @@
 
 #include <ardour/types.h>
 #include <ardour/reverse.h>
-#include <ardour/filesource.h>
+#include <ardour/audiofilesource.h>
 #include <ardour/session.h>
 #include <ardour/audioregion.h>
 
index 93fbb85e497eed9a754cbeedcb0af31abd8642ca..3f51b2f140d78cfc3e810399ab6f35ea1f321033 100644 (file)
@@ -44,7 +44,7 @@
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 
 uint32_t Route::order_key_cnt = 0;
@@ -2002,7 +2002,7 @@ Route::set_active (bool yn)
 }
 
 void
-Route::transport_stopped (bool abort_ignored, bool did_locate, bool can_flush_redirects)
+Route::handle_transport_stopped (bool abort_ignored, bool did_locate, bool can_flush_redirects)
 {
        jack_nframes_t now = _session.transport_frame();
 
index ae807e66e15b3b8186fbeb401d0d2362067c1c65..57306237427ff581a17e352b615d29516ccf3bc0 100644 (file)
@@ -29,7 +29,7 @@
 
 #include <ardour/route_group.h>
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/configuration.h>
 
 using namespace ARDOUR;
index 50fdd4a96a0de82d6f2f02555552b5881e284206..2b72fb9bdbdf660b856949528eeb1bdc5b08045b 100644 (file)
@@ -29,6 +29,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace PBD;
 
 Send::Send (Session& s, Placement p)
        : Redirect (s, s.next_send_name(), p)
index d729b5d7f7c4f4da47b5b0a23d87dc8e90d6449b..864e6178d2fc9f9c4e123ae530d0b1752f0bd1d5 100644 (file)
@@ -32,7 +32,8 @@
 #include <sigc++/bind.h>
 #include <sigc++/retype.h>
 
-#include <glibmm.h>
+#include <glibmm/thread.h>
+#include <glibmm/miscutils.h>
 
 #include <pbd/error.h>
 #include <glibmm/thread.h>
 #include <ardour/audioengine.h>
 #include <ardour/configuration.h>
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/utils.h>
 #include <ardour/audioplaylist.h>
 #include <ardour/audioregion.h>
-#include <ardour/source.h>
-#include <ardour/filesource.h>
+#include <ardour/audiofilesource.h>
 #include <ardour/destructive_filesource.h>
-#include <ardour/sndfilesource.h>
 #include <ardour/auditioner.h>
 #include <ardour/recent_sessions.h>
 #include <ardour/redirect.h>
@@ -74,7 +73,7 @@
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 const char* Session::_template_suffix = X_(".template");
 const char* Session::_statefile_suffix = X_(".ardour");
@@ -90,6 +89,7 @@ Session::mix_buffers_with_gain_t      Session::mix_buffers_with_gain  = 0;
 Session::mix_buffers_no_gain_t         Session::mix_buffers_no_gain    = 0;
 
 sigc::signal<int> Session::AskAboutPendingState;
+sigc::signal<void> Session::SMPTEOffsetChanged;
 
 int
 Session::find_session (string str, string& path, string& snapshot, bool& isnew)
@@ -455,10 +455,10 @@ Session::~Session ()
        }
 
 #ifdef TRACK_DESTRUCTION
-       cerr << "delete diskstreams\n";
+       cerr << "delete audio_diskstreams\n";
 #endif /* TRACK_DESTRUCTION */
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ) {
-               DiskStreamList::iterator tmp;
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ) {
+               AudioDiskstreamList::iterator tmp;
 
                tmp = i;
                ++tmp;
@@ -469,10 +469,10 @@ Session::~Session ()
        }
 
 #ifdef TRACK_DESTRUCTION
-       cerr << "delete sources\n";
+       cerr << "delete audio sources\n";
 #endif /* TRACK_DESTRUCTION */
-       for (SourceList::iterator i = sources.begin(); i != sources.end(); ) {
-               SourceList::iterator tmp;
+       for (AudioSourceList::iterator i = audio_sources.begin(); i != audio_sources.end(); ) {
+               AudioSourceList::iterator tmp;
 
                tmp = i;
                ++tmp;
@@ -881,7 +881,7 @@ Session::playlist_length_changed (Playlist* pl)
 }
 
 void
-Session::diskstream_playlist_changed (DiskStream* dstream)
+Session::diskstream_playlist_changed (AudioDiskstream* dstream)
 {
        Playlist *playlist;
 
@@ -961,7 +961,7 @@ Session::set_auto_input (bool yn)
                           The rarity and short potential lock duration makes this "OK"
                        */
                        Glib::RWLock::ReaderLock dsm (diskstream_lock);
-                       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                if ((*i)->record_enabled ()) {
                                        //cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
                                        (*i)->monitor_input (!auto_input);   
@@ -979,7 +979,7 @@ Session::reset_input_monitor_state ()
 {
        if (transport_rolling()) {
                Glib::RWLock::ReaderLock dsm (diskstream_lock);
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        if ((*i)->record_enabled ()) {
                                //cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
                                (*i)->monitor_input (Config->get_use_hardware_monitoring() && !auto_input);
@@ -987,7 +987,7 @@ Session::reset_input_monitor_state ()
                }
        } else {
                Glib::RWLock::ReaderLock dsm (diskstream_lock);
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        if ((*i)->record_enabled ()) {
                                //cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
                                (*i)->monitor_input (Config->get_use_hardware_monitoring());
@@ -1068,7 +1068,7 @@ Session::auto_loop_changed (Location* location)
                }
                else if (seamless_loop && !loop_changing) {
                        
-                       // schedule a locate-roll to refill the diskstreams at the
+                       // schedule a locate-roll to refill the audio_diskstreams at the
                        // previous loop end
                        loop_changing = true;
 
@@ -1265,7 +1265,7 @@ Session::enable_record ()
                        */
                        Glib::RWLock::ReaderLock dsm (diskstream_lock);
                        
-                       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                if ((*i)->record_enabled ()) {
                                        (*i)->monitor_input (true);   
                                }
@@ -1300,7 +1300,7 @@ Session::disable_record (bool rt_context, bool force)
                        */
                        Glib::RWLock::ReaderLock dsm (diskstream_lock);
                        
-                       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                if ((*i)->record_enabled ()) {
                                        (*i)->monitor_input (false);   
                                }
@@ -1327,7 +1327,7 @@ Session::step_back_from_record ()
                */
                Glib::RWLock::ReaderLock dsm (diskstream_lock);
                
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        if (auto_input && (*i)->record_enabled ()) {
                                //cerr << "switching from input" << __FILE__ << __LINE__ << endl << endl;
                                (*i)->monitor_input (false);   
@@ -1432,6 +1432,9 @@ Session::set_frame_rate (jack_nframes_t frames_per_second)
 
        Route::set_automation_interval ((jack_nframes_t) ceil ((double) frames_per_second * 0.25));
 
+       // XXX we need some equivalent to this, somehow
+       // DestructiveFileSource::setup_standard_crossfades (frames_per_second);
+
        set_dirty();
 
        /* XXX need to reset/reinstantiate all LADSPA plugins */
@@ -1493,7 +1496,7 @@ Session::set_block_size (jack_nframes_t nframes)
                        (*i)->set_block_size (nframes);
                }
                
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        (*i)->set_block_size (nframes);
                }
 
@@ -1900,14 +1903,14 @@ Session::add_route (Route* route)
 }
 
 void
-Session::add_diskstream (DiskStream* dstream)
+Session::add_diskstream (AudioDiskstream* dstream)
 {
        /* need to do this in case we're rolling at the time, to prevent false underruns */
        dstream->do_refill(0, 0, 0);
        
        { 
                Glib::RWLock::WriterLock lm (diskstream_lock);
-               diskstreams.push_back (dstream);
+               audio_diskstreams.push_back (dstream);
        }
 
        /* take a reference to the diskstream, preventing it from
@@ -1927,7 +1930,7 @@ Session::add_diskstream (DiskStream* dstream)
        set_dirty();
        save_state (_current_snapshot_name);
 
-       DiskStreamAdded (dstream); /* EMIT SIGNAL */
+       AudioDiskstreamAdded (dstream); /* EMIT SIGNAL */
 }
 
 void
@@ -1961,18 +1964,24 @@ Session::remove_route (Route& route)
                update_route_solo_state ();
        }
 
-       {
-               Glib::RWLock::WriterLock lm (diskstream_lock);
-
-               AudioTrack* at;
+       AudioTrack* at;
+       AudioDiskstream* ds = 0;
+       
+       if ((at = dynamic_cast<AudioTrack*>(&route)) != 0) {
+               ds = &at->disk_stream();
+       }
+       
+       if (ds) {
 
-               if ((at = dynamic_cast<AudioTrack*>(&route)) != 0) {
-                       diskstreams.remove (&at->disk_stream());
-                       at->disk_stream().unref ();
+               {
+                       Glib::RWLock::WriterLock lm (diskstream_lock);
+                       audio_diskstreams.remove (ds);
                }
 
-               find_current_end ();
+               ds->unref ();
        }
+
+       find_current_end ();
        
        update_latency_compensation (false, false);
        set_dirty();
@@ -2255,7 +2264,7 @@ Session::get_maximum_extent () const
           ensure atomicity.
        */
 
-       for (DiskStreamList::const_iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::const_iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                Playlist* pl = (*i)->playlist();
                if ((me = pl->get_maximum_extent()) > max) {
                        max = me;
@@ -2265,12 +2274,12 @@ Session::get_maximum_extent () const
        return max;
 }
 
-DiskStream *
+AudioDiskstream *
 Session::diskstream_by_name (string name)
 {
        Glib::RWLock::ReaderLock lm (diskstream_lock);
 
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                if ((*i)->name() == name) {
                        return* i;
                }
@@ -2279,12 +2288,12 @@ Session::diskstream_by_name (string name)
        return 0;
 }
 
-DiskStream *
+AudioDiskstream *
 Session::diskstream_by_id (id_t id)
 {
        Glib::RWLock::ReaderLock lm (diskstream_lock);
 
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                if ((*i)->id() == id) {
                        return *i;
                }
@@ -2583,7 +2592,10 @@ Session::destroy_region (Region* region)
        for (vector<Source*>::iterator i = srcs.begin(); i != srcs.end(); ++i) {
                
                if ((*i)->use_cnt() == 0) {
-                       (*i)->mark_for_remove ();
+                       AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*i);
+                       if (afs) {
+                               (afs)->mark_for_remove ();
+                       }
                        delete *i;
                }
        }
@@ -2607,7 +2619,7 @@ Session::remove_last_capture ()
 
        Glib::RWLock::ReaderLock lm (diskstream_lock);
        
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                list<Region*>& l = (*i)->last_capture_regions();
                
                if (!l.empty()) {
@@ -2630,15 +2642,15 @@ Session::remove_region_from_region_list (Region& r)
 /* Source Management */
 
 void
-Session::add_source (Source* source)
+Session::add_audio_source (AudioSource* source)
 {
-       pair<SourceList::key_type, SourceList::mapped_type> entry;
+       pair<AudioSourceList::key_type, AudioSourceList::mapped_type> entry;
 
        {
-               Glib::Mutex::Lock lm (source_lock);
+               Glib::Mutex::Lock lm (audio_source_lock);
                entry.first = source->id();
                entry.second = source;
-               sources.insert (entry);
+               audio_sources.insert (entry);
        }
        
        source->GoingAway.connect (mem_fun (this, &Session::remove_source));
@@ -2650,13 +2662,13 @@ Session::add_source (Source* source)
 void
 Session::remove_source (Source* source)
 {
-       SourceList::iterator i;
+       AudioSourceList::iterator i;
 
        { 
-               Glib::Mutex::Lock lm (source_lock);
+               Glib::Mutex::Lock lm (audio_source_lock);
 
-               if ((i = sources.find (source->id())) != sources.end()) {
-                       sources.erase (i);
+               if ((i = audio_sources.find (source->id())) != audio_sources.end()) {
+                       audio_sources.erase (i);
                }
        }
 
@@ -2675,15 +2687,21 @@ Session::remove_source (Source* source)
 Source *
 Session::get_source (ARDOUR::id_t id)
 {
-       Glib::Mutex::Lock lm (source_lock);
-       SourceList::iterator i;
+       Glib::Mutex::Lock lm (audio_source_lock);
+       AudioSourceList::iterator i;
        Source* source = 0;
 
-       if ((i = sources.find (id)) != sources.end()) {
+       if ((i = audio_sources.find (id)) != audio_sources.end()) {
                source = (*i).second;
        }
 
-       return source;
+       if (source) {
+               return source;
+       }
+
+       /* XXX search MIDI or other searches here */
+       
+       return 0;
 }
 
 string
@@ -2890,17 +2908,23 @@ Session::audio_path_from_name (string name, uint32_t nchan, uint32_t chan, bool
        return spath;
 }
 
-FileSource *
-Session::create_file_source (DiskStream& ds, int32_t chan, bool destructive)
+AudioFileSource *
+Session::create_audio_source_for_session (AudioDiskstream& ds, uint32_t chan, bool destructive)
 {
        string spath = audio_path_from_name (ds.name(), ds.n_channels(), chan, destructive);
 
        /* this might throw failed_constructor(), which is OK */
-
+       
        if (destructive) {
-               return new DestructiveFileSource (spath, frame_rate(), false, Config->get_native_file_data_format());
+               return new DestructiveFileSource (spath,
+                                                 Config->get_native_file_data_format(),
+                                                 Config->get_native_file_header_format(),
+                                                 frame_rate());
        } else {
-               return new FileSource (spath, frame_rate(), false, Config->get_native_file_data_format());
+               return new SndFileSource (spath, 
+                                         Config->get_native_file_data_format(),
+                                         Config->get_native_file_header_format(),
+                                         frame_rate());
        }
 }
 
@@ -3082,7 +3106,7 @@ Session::remove_empty_sounds ()
        
        for (vector<string *>::iterator i = possible_audiofiles->begin(); i != possible_audiofiles->end(); ++i) {
 
-               if (FileSource::is_empty (*(*i))) {
+               if (AudioFileSource::is_empty (*(*i))) {
 
                        unlink ((*i)->c_str());
                        
@@ -3140,12 +3164,12 @@ Session::set_all_mute (bool yn)
 }
                
 uint32_t
-Session::n_diskstreams () const
+Session::n_audio_diskstreams () const
 {
        Glib::RWLock::ReaderLock lm (diskstream_lock);
        uint32_t n = 0;
 
-       for (DiskStreamList::const_iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::const_iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                if (!(*i)->hidden()) {
                        n++;
                }
@@ -3154,10 +3178,10 @@ Session::n_diskstreams () const
 }
 
 void 
-Session::foreach_diskstream (void (DiskStream::*func)(void)) 
+Session::foreach_audio_diskstream (void (AudioDiskstream::*func)(void)) 
 {
        Glib::RWLock::ReaderLock lm (diskstream_lock);
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                if (!(*i)->hidden()) {
                        ((*i)->*func)();
                }
@@ -3184,7 +3208,7 @@ Session::graph_reordered ()
           reflect any changes in latencies within the graph.
        */
        
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                (*i)->set_capture_offset ();
        }
 }
@@ -3467,7 +3491,7 @@ Session::reset_native_file_format ()
        //RWLockMonitor lm1 (route_lock, true, __LINE__, __FILE__);
        Glib::RWLock::ReaderLock lm2 (diskstream_lock);
 
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                (*i)->reset_write_sources (false);
        }
 }
@@ -3487,7 +3511,7 @@ Session::route_name_unique (string n) const
 }
 
 int
-Session::remove_file_source (FileSource& fs)
+Session::cleanup_audio_file_source (AudioFileSource& fs)
 {
        return fs.move_to_trash (dead_sound_dir_name);
 }
@@ -3562,12 +3586,12 @@ Session::freeze (InterThreadInfo& itt)
 }
 
 int
-Session::write_one_track (AudioTrack& track, jack_nframes_t start, jack_nframes_t len,         bool overwrite, vector<Source*>& srcs,
-                         InterThreadInfo& itt)
+Session::write_one_audio_track (AudioTrack& track, jack_nframes_t start, jack_nframes_t len,   
+                              bool overwrite, vector<AudioSource*>& srcs, InterThreadInfo& itt)
 {
        int ret = -1;
        Playlist* playlist;
-       FileSource* fsource;
+       AudioFileSource* fsource;
        uint32_t x;
        char buf[PATH_MAX+1];
        string dir;
@@ -3577,7 +3601,9 @@ Session::write_one_track (AudioTrack& track, jack_nframes_t start, jack_nframes_
        jack_nframes_t to_do;
        vector<Sample*> buffers;
        char *  workbuf = 0;
-       const jack_nframes_t chunk_size = (256 * 1024)/4;
+
+       // any bigger than this seems to cause stack overflows in called functions
+       const jack_nframes_t chunk_size = (128 * 1024)/4;
 
        g_atomic_int_set (&processing_prohibited, 1);
        
@@ -3612,7 +3638,11 @@ Session::write_one_track (AudioTrack& track, jack_nframes_t start, jack_nframes_
                }
                
                try {
-                       fsource = new FileSource (buf, frame_rate(), false, Config->get_native_file_data_format());
+                       fsource =  new SndFileSource (buf, 
+                                                     Config->get_native_file_data_format(),
+                                                     Config->get_native_file_header_format(),
+                                                     frame_rate());
+                                                           
                }
                
                catch (failed_constructor& err) {
@@ -3651,9 +3681,13 @@ Session::write_one_track (AudioTrack& track, jack_nframes_t start, jack_nframes_
                }
 
                uint32_t n = 0;
-               for (vector<Source*>::iterator src=srcs.begin(); src != srcs.end(); ++src, ++n) {
-                       if ((*src)->write (buffers[n], this_chunk, workbuf) != this_chunk) {
-                               goto out;
+               for (vector<AudioSource*>::iterator src=srcs.begin(); src != srcs.end(); ++src, ++n) {
+                       AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*src);
+
+                       if (afs) {
+                               if (afs->write (buffers[n], this_chunk, workbuf) != this_chunk) {
+                                       goto out;
+                               }
                        }
                }
                
@@ -3671,14 +3705,20 @@ Session::write_one_track (AudioTrack& track, jack_nframes_t start, jack_nframes_
                time (&now);
                xnow = localtime (&now);
                
-               for (vector<Source*>::iterator src=srcs.begin(); src != srcs.end(); ++src) {
-                       dynamic_cast<FileSource*>((*src))->update_header (position, *xnow, now);
+               for (vector<AudioSource*>::iterator src=srcs.begin(); src != srcs.end(); ++src) {
+                       AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*src);
+                       if (afs) {
+                               afs->update_header (position, *xnow, now);
+                       }
                }
                
                /* build peakfile for new source */
                
-               for (vector<Source*>::iterator src=srcs.begin(); src != srcs.end(); ++src) {
-                       dynamic_cast<FileSource*>(*src)->build_peaks ();
+               for (vector<AudioSource*>::iterator src=srcs.begin(); src != srcs.end(); ++src) {
+                       AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*src);
+                       if (afs) {
+                               afs->build_peaks ();
+                       }
                }
                
                ret = 0;
@@ -3686,8 +3726,11 @@ Session::write_one_track (AudioTrack& track, jack_nframes_t start, jack_nframes_
                
   out:
        if (ret) {
-               for (vector<Source*>::iterator src=srcs.begin(); src != srcs.end(); ++src) {
-                       dynamic_cast<FileSource*>(*src)->mark_for_remove ();
+               for (vector<AudioSource*>::iterator src=srcs.begin(); src != srcs.end(); ++src) {
+                       AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*src);
+                       if (afs) {
+                               afs->mark_for_remove ();
+                       }
                        delete *src;
                }
        }
index ebe0d645482d7620261980f70a6121fcaac68bd4..4613bfccf9c2b4467b2ed8da5d43b6fb20ae581b 100644 (file)
@@ -34,7 +34,7 @@
 #include <ardour/configuration.h>
 #include <ardour/audioengine.h>
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/crossfade.h>
 #include <ardour/timestamps.h>
 
@@ -42,7 +42,7 @@
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 static float _read_data_rate;
 static float _write_data_rate;
@@ -168,10 +168,10 @@ Session::butler_thread_work ()
        struct timeval begin, end;
        struct pollfd pfd[1];
        bool disk_work_outstanding = false;
-       DiskStreamList::iterator i;
+       AudioDiskstreamList::iterator i;
 
-       butler_mixdown_buffer = new Sample[DiskStream::disk_io_frames()];
-       butler_gain_buffer = new gain_t[DiskStream::disk_io_frames()];
+       butler_mixdown_buffer = new Sample[AudioDiskstream::disk_io_frames()];
+       butler_gain_buffer = new gain_t[AudioDiskstream::disk_io_frames()];
        // this buffer is used for temp conversion purposes in filesources
        char * conv_buffer = conversion_buffer(ButlerContext);
 
@@ -241,7 +241,7 @@ Session::butler_thread_work ()
                        }
                }
        
-               for (i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        // cerr << "BEFORE " << (*i)->name() << ": pb = " << (*i)->playback_buffer_load() << " cp = " << (*i)->capture_buffer_load() << endl;
                }
 
@@ -257,7 +257,7 @@ Session::butler_thread_work ()
 
                Glib::RWLock::ReaderLock dsm (diskstream_lock);
                
-               for (i = diskstreams.begin(); !transport_work_requested() && butler_should_run && i != diskstreams.end(); ++i) {
+               for (i = audio_diskstreams.begin(); !transport_work_requested() && butler_should_run && i != audio_diskstreams.end(); ++i) {
                        
                        // cerr << "rah fondr " << (*i)->io()->name () << endl;
 
@@ -278,7 +278,7 @@ Session::butler_thread_work ()
 
                }
 
-               if (i != diskstreams.end()) {
+               if (i != audio_diskstreams.end()) {
                        /* we didn't get to all the streams */
                        disk_work_outstanding = true;
                }
@@ -300,7 +300,7 @@ Session::butler_thread_work ()
                compute_io = true;
                gettimeofday (&begin, 0);
                
-               for (i = diskstreams.begin(); !transport_work_requested() && butler_should_run && i != diskstreams.end(); ++i) {
+               for (i = audio_diskstreams.begin(); !transport_work_requested() && butler_should_run && i != audio_diskstreams.end(); ++i) {
                        
                        // cerr << "write behind for " << (*i)->name () << endl;
                        
@@ -330,7 +330,7 @@ Session::butler_thread_work ()
                        request_stop ();
                }
 
-               if (i != diskstreams.end()) {
+               if (i != audio_diskstreams.end()) {
                        /* we didn't get to all the streams */
                        disk_work_outstanding = true;
                }
@@ -357,7 +357,7 @@ Session::butler_thread_work ()
                        Glib::Mutex::Lock lm (butler_request_lock);
 
                        if (butler_should_run && (disk_work_outstanding || transport_work_requested())) {
-//                             for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+//                             for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
 //                                     cerr << "AFTER " << (*i)->name() << ": pb = " << (*i)->playback_buffer_load() << " cp = " << (*i)->capture_buffer_load() << endl;
 //                             }
 
@@ -375,7 +375,7 @@ Session::butler_thread_work ()
 
 
 void
-Session::request_overwrite_buffer (DiskStream* stream)
+Session::request_overwrite_buffer (AudioDiskstream* stream)
 {
        Event *ev = new Event (Event::Overwrite, Event::Add, Event::Immediate, 0, 0, 0.0);
        ev->set_ptr (stream);
@@ -383,7 +383,7 @@ Session::request_overwrite_buffer (DiskStream* stream)
 }
 
 void
-Session::overwrite_some_buffers (DiskStream* ds)
+Session::overwrite_some_buffers (AudioDiskstream* ds)
 {
        /* executed by the audio thread */
 
@@ -398,7 +398,7 @@ Session::overwrite_some_buffers (DiskStream* ds)
        } else {
 
                Glib::RWLock::ReaderLock dm (diskstream_lock);
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        (*i)->set_pending_overwrite (true);
                }
        }
index 4503287da12aff17508b9aea87fbf0f3b38d4fbf..1d14fd4a80a77307365b0cb7369d0e5521377fe5 100644 (file)
@@ -32,6 +32,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 Pool Session::Click::pool ("click", sizeof (Click), 128);
 
index 8e0a3e99a17d0c78d6a3b2884da3224b8e85c4bd..afecc146b7823160a6cf01e4feeec31b7882b679 100644 (file)
@@ -1,8 +1,8 @@
 
 #include <ardour/session.h>
-#include <ardour/control_protocol.h>
-#include <ardour/generic_midi_control_protocol.h>
-#include <ardour/tranzport_control_protocol.h>
+#include <control_protocol/control_protocol.h>
+#include <generic_midi/generic_midi_control_protocol.h>
+#include <transport/tranzport_control_protocol.h>
 
 using namespace ARDOUR;
 
index d48bbe3053c2b93b6de05f5d4f708a403d145512..e918e0383f56897e10c5634ab1e2be0965668e7e 100644 (file)
 
 #include <ardour/ardour.h>
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 
 #include "i18n.h"
 
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 MultiAllocSingleReleasePool Session::Event::pool ("event", sizeof (Session::Event), 512);
 
@@ -389,11 +389,11 @@ Session::process_event (Event* ev)
                break;
 
        case Event::Overwrite:
-               overwrite_some_buffers (static_cast<DiskStream*>(ev->ptr));
+               overwrite_some_buffers (static_cast<AudioDiskstream*>(ev->ptr));
                break;
 
        case Event::SetDiskstreamSpeed:
-               set_diskstream_speed (static_cast<DiskStream*> (ev->ptr), ev->speed);
+               set_diskstream_speed (static_cast<AudioDiskstream*> (ev->ptr), ev->speed);
                break;
 
        case Event::SetSlaveSource:
index 183b6df2373a023fc9578c26cf059a81796913e8..ddced9cc5f85f169169d036a6c2f25f11647747e 100644 (file)
 #include <ardour/sndfile_helpers.h>
 #include <ardour/port.h>
 #include <ardour/audioengine.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/panner.h>
 
 #include "i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 static int
 convert_spec_to_info (AudioExportSpecification& spec, SF_INFO& sfinfo)
@@ -495,7 +495,7 @@ Session::prepare_to_export (AudioExportSpecification& spec)
 
        {
                Glib::RWLock::ReaderLock lm (diskstream_lock);
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        if ((*i)-> seek (spec.start_frame, true)) {
                                error << string_compose (_("%1: cannot seek to %2 for export"),
                                                  (*i)->name(), spec.start_frame)
index ea8580b3c2023603d23be1cb6334d3adc2023b66..1fd8389e117a27c230c0393b4f6f56321068c5c6 100644 (file)
 
 #include <glibmm/thread.h>
 
-#include <pbd/error.h>
 #include <pbd/pthread_utils.h>
 
 #include <ardour/configuration.h>
 #include <ardour/audioengine.h>
 #include <ardour/session.h>
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
-#include <ardour/control_protocol.h>
+#include <ardour/audio_diskstream.h>
+#include <control_protocol/control_protocol.h>
 
 #include "i18n.h"
 
index d8382c69a4c36b7d9e0b1f33d2bf18310aeae65a..60bd95464fa8669d13e0123b772acaaeb7ac7a21 100644 (file)
@@ -37,7 +37,7 @@
 #include <ardour/audioengine.h>
 #include <ardour/session.h>
 #include <ardour/audio_track.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/slave.h>
 #include <ardour/cycles.h>
 
@@ -45,7 +45,7 @@
 
 using namespace std;
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 using namespace MIDI;
 
 MachineControl::CommandSignature MMC_CommandSignature;
@@ -724,7 +724,7 @@ Session::mmc_locate (MIDI::MachineControl &mmc, const MIDI::byte* mmc_tc)
        }
 
        jack_nframes_t target_frame;
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
 
        smpte.hours = mmc_tc[0] & 0xf;
        smpte.minutes = mmc_tc[1];
@@ -858,7 +858,7 @@ Session::send_full_time_code ()
 
 {
        MIDI::byte msg[10];
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
 
        if (_mtc_port == 0 || !send_mtc) {
                return 0;
@@ -884,7 +884,7 @@ Session::send_full_time_code ()
                outbound_mtc_smpte_frame = _transport_frame;
                if (((mtc_smpte_bits >> 5) != MIDI::MTC_25_FPS) && (transmitting_smpte_time.frames % 2)) {
                        // start MTC quarter frame transmission on an even frame
-                       smpte_increment( transmitting_smpte_time );
+                       SMPTE::increment( transmitting_smpte_time );
                        outbound_mtc_smpte_frame += (jack_nframes_t) _frames_per_smpte_frame;
                }
        }
@@ -985,8 +985,8 @@ Session::send_midi_time_code ()
                                // Wrap quarter frame counter
                                next_quarter_frame_to_send = 0;
                                // Increment smpte time twice
-                               smpte_increment( transmitting_smpte_time );
-                               smpte_increment( transmitting_smpte_time );        
+                               SMPTE::increment( transmitting_smpte_time );
+                               SMPTE::increment( transmitting_smpte_time );        
                                // Re-calculate timing of first quarter frame
                                smpte_to_sample( transmitting_smpte_time, outbound_mtc_smpte_frame, true /* use_offset */, false );
                                // Compensate for audio latency
@@ -1024,7 +1024,7 @@ Session::deliver_mmc (MIDI::MachineControl::Command cmd, jack_nframes_t where)
 {
        using namespace MIDI;
        int nbytes = 4;
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
 
        if (_mmc_port == 0 || !send_mmc) {
                return;
index 2f098a384f05acd134df23c457b3b3bd360142d8..ad4e9a64bb0674281f9e1eecc47e13a4c2096fc3 100644 (file)
@@ -30,7 +30,7 @@
 #include <ardour/ardour.h>
 #include <ardour/session.h>
 #include <ardour/timestamps.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/audioengine.h>
 #include <ardour/slave.h>
 #include <ardour/auditioner.h>
@@ -40,7 +40,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 using namespace std;
 
 void
@@ -64,7 +64,7 @@ Session::process (jack_nframes_t nframes)
 void
 Session::prepare_diskstreams ()
 {
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                (*i)->prepare ();
        }
 }
@@ -136,12 +136,12 @@ Session::process_routes (jack_nframes_t nframes, jack_nframes_t offset)
 
                if ((ret = (*i)->roll (nframes, _transport_frame, _transport_frame + nframes, offset, declick, record_active, rec_monitors)) < 0) {
 
-                       /* we have to do this here. Route::roll() for an AudioTrack will have called DiskStream::process(),
-                          and the DS will expect DiskStream::commit() to be called. but we're aborting from that
+                       /* we have to do this here. Route::roll() for an AudioTrack will have called AudioDiskstream::process(),
+                          and the DS will expect AudioDiskstream::commit() to be called. but we're aborting from that
                           call path, so make sure we release any outstanding locks here before we return failure.
                        */
 
-                       for (DiskStreamList::iterator ids = diskstreams.begin(); ids != diskstreams.end(); ++ids) {
+                       for (AudioDiskstreamList::iterator ids = audio_diskstreams.begin(); ids != audio_diskstreams.end(); ++ids) {
                                (*ids)->recover ();
                        }
 
@@ -175,12 +175,12 @@ Session::silent_process_routes (jack_nframes_t nframes, jack_nframes_t offset)
 
                if ((ret = (*i)->silent_roll (nframes, _transport_frame, _transport_frame + nframes, offset, record_active, rec_monitors)) < 0) {
                        
-                       /* we have to do this here. Route::roll() for an AudioTrack will have called DiskStream::process(),
-                          and the DS will expect DiskStream::commit() to be called. but we're aborting from that
+                       /* we have to do this here. Route::roll() for an AudioTrack will have called AudioDiskstream::process(),
+                          and the DS will expect AudioDiskstream::commit() to be called. but we're aborting from that
                           call path, so make sure we release any outstanding locks here before we return failure.
                        */
 
-                       for (DiskStreamList::iterator ids = diskstreams.begin(); ids != diskstreams.end(); ++ids) {
+                       for (AudioDiskstreamList::iterator ids = audio_diskstreams.begin(); ids != audio_diskstreams.end(); ++ids) {
                                (*ids)->recover ();
                        }
 
@@ -199,7 +199,7 @@ Session::commit_diskstreams (jack_nframes_t nframes, bool &needs_butler)
        float pworst = 1.0f;
        float cworst = 1.0f;
 
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
 
                if ((*i)->hidden()) {
                        continue;
@@ -566,7 +566,7 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
                                bool ok = true;
                                jack_nframes_t frame_delta = slave_transport_frame - _transport_frame;
                                
-                               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                        if (!(*i)->can_internal_playback_seek (frame_delta)) {
                                                ok = false;
                                                break;
@@ -574,7 +574,7 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
                                }
 
                                if (ok) {
-                                       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                                       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                                (*i)->internal_playback_seek (frame_delta);
                                        }
                                        _transport_frame += frame_delta;
index 5ef717de8ae299f1d56cfa11d5d30ebf16c8a408..92a21ea794ff6ab6becbe60a7ca4e916419bfed4 100644 (file)
 #include <ardour/audioengine.h>
 #include <ardour/configuration.h>
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/utils.h>
 #include <ardour/audioplaylist.h>
-#include <ardour/source.h>
-#include <ardour/filesource.h>
+#include <ardour/audiofilesource.h>
 #include <ardour/destructive_filesource.h>
-#include <ardour/sndfilesource.h>
 #include <ardour/sndfile_helpers.h>
 #include <ardour/auditioner.h>
 #include <ardour/export.h>
@@ -89,6 +87,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 void
 Session::first_stage_init (string fullpath, string snapshot_name)
@@ -196,12 +195,13 @@ Session::first_stage_init (string fullpath, string snapshot_name)
        destructive_index = 0;
 
        /* allocate conversion buffers */
-       _conversion_buffers[ButlerContext] = new char[DiskStream::disk_io_frames() * 4];
-       _conversion_buffers[TransportContext] = new char[DiskStream::disk_io_frames() * 4];
+       _conversion_buffers[ButlerContext] = new char[AudioDiskstream::disk_io_frames() * 4];
+       _conversion_buffers[TransportContext] = new char[AudioDiskstream::disk_io_frames() * 4];
        
        /* default short fade = 15ms */
 
        Crossfade::set_short_xfade_length ((jack_nframes_t) floor ((15.0 * frame_rate()) / 1000.0));
+       DestructiveFileSource::setup_standard_crossfades (frame_rate());
 
        last_mmc_step.tv_sec = 0;
        last_mmc_step.tv_usec = 0;
@@ -267,10 +267,10 @@ Session::first_stage_init (string fullpath, string snapshot_name)
        /* These are all static "per-class" signals */
 
        Region::CheckNewRegion.connect (mem_fun (*this, &Session::add_region));
-       Source::SourceCreated.connect (mem_fun (*this, &Session::add_source));
+       AudioSource::AudioSourceCreated.connect (mem_fun (*this, &Session::add_audio_source));
        Playlist::PlaylistCreated.connect (mem_fun (*this, &Session::add_playlist));
        Redirect::RedirectCreated.connect (mem_fun (*this, &Session::add_redirect));
-       DiskStream::DiskStreamCreated.connect (mem_fun (*this, &Session::add_diskstream));
+       AudioDiskstream::AudioDiskstreamCreated.connect (mem_fun (*this, &Session::add_diskstream));
        NamedSelection::NamedSelectionCreated.connect (mem_fun (*this, &Session::add_named_selection));
 
        IO::MoreOutputs.connect (mem_fun (*this, &Session::ensure_passthru_buffers));
@@ -285,7 +285,7 @@ Session::first_stage_init (string fullpath, string snapshot_name)
 int
 Session::second_stage_init (bool new_session)
 {
-       ExternalSource::set_peak_dir (peak_dir());
+       AudioFileSource::set_peak_dir (peak_dir());
 
        if (!new_session) {
                if (load_state (_current_snapshot_name)) {
@@ -425,7 +425,7 @@ Session::setup_raid_path (string path)
                }
                fspath += tape_dir_name;
                
-               FileSource::set_search_path (fspath);
+               AudioFileSource::set_search_path (fspath);
 
                return;
        }
@@ -481,9 +481,9 @@ Session::setup_raid_path (string path)
                session_dirs.push_back (sp);
        }
 
-       /* set the FileSource search path */
+       /* set the AudioFileSource search path */
 
-       FileSource::set_search_path (fspath);
+       AudioFileSource::set_search_path (fspath);
 
        /* reset the round-robin soundfile path thingie */
 
@@ -625,11 +625,11 @@ Session::load_diskstreams (const XMLNode& node)
 
        for (citer = clist.begin(); citer != clist.end(); ++citer) {
                
-               DiskStream* dstream;
+               AudioDiskstream* dstream;
 
                try {
-                       dstream = new DiskStream (*this, **citer);
-                       /* added automatically by DiskStreamCreated handler */
+                       dstream = new AudioDiskstream (*this, **citer);
+                       /* added automatically by AudioDiskstreamCreated handler */
                } 
                
                catch (failed_constructor& err) {
@@ -1335,15 +1335,15 @@ Session::state(bool full_state)
        child = node->add_child ("Sources");
 
        if (full_state) {
-               Glib::Mutex::Lock sl (source_lock);
+               Glib::Mutex::Lock sl (audio_source_lock);
 
-               for (SourceList::iterator siter = sources.begin(); siter != sources.end(); ++siter) {
+               for (AudioSourceList::iterator siter = audio_sources.begin(); siter != audio_sources.end(); ++siter) {
                        
-                       /* Don't save information about FileSources that are empty */
+                       /* Don't save information about AudioFileSources that are empty */
                        
-                       FileSource* fs;
+                       AudioFileSource* fs;
 
-                       if ((fs = dynamic_cast<FileSource*> ((*siter).second)) != 0) {
+                       if ((fs = dynamic_cast<AudioFileSource*> ((*siter).second)) != 0) {
                                DestructiveFileSource* dfs = dynamic_cast<DestructiveFileSource*> (fs);
 
                                /* destructive file sources are OK if they are empty, because
@@ -1380,7 +1380,7 @@ Session::state(bool full_state)
 
        { 
                Glib::RWLock::ReaderLock dl (diskstream_lock);
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        if (!(*i)->hidden()) {
                                child->add_child_nocopy ((*i)->get_state());
                        }
@@ -1511,7 +1511,7 @@ Session::set_state (const XMLNode& node)
        Options
        Sources
        AudioRegions
-       DiskStreams
+       AudioDiskstreams
        Connections
        Locations
        Routes
@@ -1745,6 +1745,7 @@ Session::XMLRegionFactory (const XMLNode& node, bool full)
        const XMLProperty* prop;
        id_t s_id;
        Source* source;
+       AudioSource* as;
        AudioRegion::SourceList sources;
        uint32_t nchans = 1;
        char buf[128];
@@ -1772,7 +1773,13 @@ Session::XMLRegionFactory (const XMLNode& node, bool full)
                return 0;
        }
 
-       sources.push_back(source);
+       as = dynamic_cast<AudioSource*>(source);
+       if (!as) {
+               error << string_compose(_("Session: XMLNode describing a AudioRegion references a non-audio source id =%1"), s_id) << endmsg;
+               return 0;
+       }
+
+       sources.push_back (as);
 
        /* pickup other channels */
 
@@ -1785,7 +1792,13 @@ Session::XMLRegionFactory (const XMLNode& node, bool full)
                                error << string_compose(_("Session: XMLNode describing a AudioRegion references an unknown source id =%1"), s_id) << endmsg;
                                return 0;
                        }
-                       sources.push_back(source);
+                       
+                       as = dynamic_cast<AudioSource*>(source);
+                       if (!as) {
+                               error << string_compose(_("Session: XMLNode describing a AudioRegion references a non-audio source id =%1"), s_id) << endmsg;
+                               return 0;
+                       }
+                       sources.push_back (as);
                }
        }
        
@@ -1804,12 +1817,14 @@ Session::get_sources_as_xml ()
 
 {
        XMLNode* node = new XMLNode (X_("Sources"));
-       Glib::Mutex::Lock lm (source_lock);
+       Glib::Mutex::Lock lm (audio_source_lock);
 
-       for (SourceList::iterator i = sources.begin(); i != sources.end(); ++i) {
+       for (AudioSourceList::iterator i = audio_sources.begin(); i != audio_sources.end(); ++i) {
                node->add_child_nocopy ((*i).second->get_state());
        }
 
+       /* XXX get MIDI and other sources here */
+
        return *node;
 }
 
@@ -1867,23 +1882,12 @@ Session::XMLSourceFactory (const XMLNode& node)
        }
 
        try {
-               if (node.property (X_("destructive")) != 0) {
-                       src = new DestructiveFileSource (node, frame_rate());
-               } else {
-                       src = new FileSource (node, frame_rate());
-               }
+               src = AudioFileSource::create (node);
        }
        
        catch (failed_constructor& err) {
-
-               try {
-                       src = ExternalSource::create (node);
-               }
-
-               catch (failed_constructor& err) {
-                       error << _("Found a sound file that cannot be used by Ardour. See the progammers.") << endmsg;
-                       return 0;
-               } 
+               error << _("Found a sound file that cannot be used by Ardour. Talk to the progammers.") << endmsg;
+               return 0;
        }
 
        return src;
@@ -2930,9 +2934,9 @@ Session::cleanup_sources (Session::cleanup_report& rep)
        rep.paths.clear ();
        rep.space = 0;
 
-       for (SourceList::iterator i = sources.begin(); i != sources.end(); ) {
+       for (AudioSourceList::iterator i = audio_sources.begin(); i != audio_sources.end(); ) {
 
-               SourceList::iterator tmp;
+               AudioSourceList::iterator tmp;
 
                tmp = i;
                ++tmp;
@@ -2949,7 +2953,7 @@ Session::cleanup_sources (Session::cleanup_report& rep)
                           adding it to the list of all sources below
                        */
 
-                       sources.erase (i);
+                       audio_sources.erase (i);
                }
 
                i = tmp;
@@ -3013,20 +3017,17 @@ Session::cleanup_sources (Session::cleanup_report& rep)
           state file on disk still references sources we may have already
           dropped.
        */
-
+       
        find_all_sources_across_snapshots (all_sources, true);
 
-       /* add our current source list
+       /*  add our current source list
         */
-
-       for (SourceList::iterator i = sources.begin(); i != sources.end(); ++i) {
-               FileSource* fs;
-               ExternalSource* sfs;
+       
+       for (AudioSourceList::iterator i = audio_sources.begin(); i != audio_sources.end(); ++i) {
+               AudioFileSource* fs;
                
-               if ((fs = dynamic_cast<FileSource*> ((*i).second)) != 0) {
+               if ((fs = dynamic_cast<AudioFileSource*> ((*i).second)) != 0) {
                        all_sources.insert (fs->path());
-               } else if ((sfs = dynamic_cast<ExternalSource*> ((*i).second)) != 0) {
-                       all_sources.insert (sfs->path());
                } 
        }
 
index e3badc5b114b0cf448d32eddc4bf42a609ad9671..07b702618e0169d9002aa3621b9cbeee3387053b 100644 (file)
 #include <ardour/audioengine.h>
 #include <ardour/session.h>
 #include <ardour/tempo.h>
+#include <ardour/audiofilesource.h>
 
 #include "i18n.h"
 
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 /* BBT TIME*/
 
@@ -91,6 +92,9 @@ Session::set_smpte_offset (jack_nframes_t off)
 {
        _smpte_offset = off;
        last_smpte_valid = false;
+
+       AudioFileSource::set_header_position_offset (_smpte_offset, _smpte_offset_negative);
+
        SMPTEOffsetChanged (); /* EMIT SIGNAL */
 }
 
@@ -99,380 +103,15 @@ Session::set_smpte_offset_negative (bool neg)
 {
        _smpte_offset_negative = neg;
        last_smpte_valid = false;
-       SMPTEOffsetChanged (); /* EMIT SIGNAL */
-}
-
-#define SMPTE_IS_AROUND_ZERO( sm ) (!(sm).frames && !(sm).seconds && !(sm).minutes && !(sm).hours)
-#define SMPTE_IS_ZERO( sm ) (!(sm).frames && !(sm).seconds && !(sm).minutes && !(sm).hours && !(sm.subframes))
-
-// Increment by exactly one frame (keep subframes value)
-// Return true if seconds wrap
-smpte_wrap_t
-Session::smpte_increment( SMPTE_Time& smpte ) const
-{
-       smpte_wrap_t wrap = smpte_wrap_none;
-
-       if (smpte.negative) {
-               if (SMPTE_IS_AROUND_ZERO(smpte) && smpte.subframes) {
-                       // We have a zero transition involving only subframes
-                       smpte.subframes = 80 - smpte.subframes;
-                       smpte.negative = false;
-                       return smpte_wrap_seconds;
-               }
-    
-               smpte.negative = false;
-               wrap = smpte_decrement( smpte );
-               if (!SMPTE_IS_ZERO( smpte )) {
-                       smpte.negative = true;
-               }
-               return wrap;
-       }
-  
-       switch (mtc_smpte_bits >> 5) {
-       case MIDI::MTC_24_FPS:
-               if (smpte.frames == 23) {
-                       smpte.frames = 0;
-                       wrap = smpte_wrap_seconds;
-               }
-               break;
-       case MIDI::MTC_25_FPS:
-               if (smpte.frames == 24) {
-                       smpte.frames = 0;
-                       wrap = smpte_wrap_seconds;
-               }
-               break;
-       case MIDI::MTC_30_FPS_DROP:
-               if (smpte.frames == 29) {
-                       if ( ((smpte.minutes + 1) % 10) && (smpte.seconds == 59) ) {
-                               smpte.frames = 2;
-                       }
-                       else {
-                               smpte.frames = 0;
-                       }
-                       wrap = smpte_wrap_seconds;
-               }
-               break;
-       case MIDI::MTC_30_FPS:
-               if (smpte.frames == 29) {
-                       smpte.frames = 0;
-                       wrap = smpte_wrap_seconds;
-               }
-               break;
-       }
-  
-       if (wrap == smpte_wrap_seconds) {
-               if (smpte.seconds == 59) {
-                       smpte.seconds = 0;
-                       wrap = smpte_wrap_minutes;
-                       if (smpte.minutes == 59) {
-                               smpte.minutes = 0;
-                               wrap = smpte_wrap_hours;
-                               smpte.hours++;
-                       } else {
-                               smpte.minutes++;
-                       }
-               } else {
-                       smpte.seconds++;
-               }
-       } else {
-               smpte.frames++;
-       }
-  
-       return wrap;
-}
-
-// Decrement by exactly one frame (keep subframes value)
-smpte_wrap_t
-Session::smpte_decrement( SMPTE_Time& smpte ) const
-{
-       smpte_wrap_t wrap = smpte_wrap_none;
-  
-  
-       if (smpte.negative || SMPTE_IS_ZERO(smpte)) {
-               smpte.negative = false;
-               wrap = smpte_increment( smpte );
-               smpte.negative = true;
-               return wrap;
-       } else if (SMPTE_IS_AROUND_ZERO(smpte) && smpte.subframes) {
-               // We have a zero transition involving only subframes
-               smpte.subframes = 80 - smpte.subframes;
-               smpte.negative = true;
-               return smpte_wrap_seconds;
-       }
-  
-       switch (mtc_smpte_bits >> 5) {
-       case MIDI::MTC_24_FPS:
-               if (smpte.frames == 0) {
-                       smpte.frames = 23;
-                       wrap = smpte_wrap_seconds;
-               }
-               break;
-       case MIDI::MTC_25_FPS:
-               if (smpte.frames == 0) {
-                       smpte.frames = 24;
-                       wrap = smpte_wrap_seconds;
-               }
-               break;
-       case MIDI::MTC_30_FPS_DROP:
-               if ((smpte.minutes % 10) && (smpte.seconds == 0)) {
-                       if (smpte.frames <= 2) {
-                               smpte.frames = 29;
-                               wrap = smpte_wrap_seconds;
-                       }
-               } else if (smpte.frames == 0) {
-                       smpte.frames = 29;
-                       wrap = smpte_wrap_seconds;
-               }
-               break;
-       case MIDI::MTC_30_FPS:
-               if (smpte.frames == 0) {
-                       smpte.frames = 29;
-                       wrap = smpte_wrap_seconds;
-               }
-               break;
-       }
-  
-       if (wrap == smpte_wrap_seconds) {
-               if (smpte.seconds == 0) {
-                       smpte.seconds = 59;
-                       wrap = smpte_wrap_minutes;
-                       if (smpte.minutes == 0) {
-                               smpte.minutes = 59;
-                               wrap = smpte_wrap_hours;
-                               smpte.hours--;
-                       }
-                       else {
-                               smpte.minutes--;
-                       }
-               } else {
-                       smpte.seconds--;
-               }
-       } else {
-               smpte.frames--;
-       }
-  
-       if (SMPTE_IS_ZERO( smpte )) {
-               smpte.negative = false;
-       }
-  
-       return wrap;
-}
-
-// Go to lowest absolute subframe value in this frame (set to 0 :-)
-void
-Session::smpte_frames_floor( SMPTE_Time& smpte ) const
-{
-       smpte.subframes = 0;
-       if (SMPTE_IS_ZERO(smpte)) {
-               smpte.negative = false;
-       }
-}
-
-// Increment by one subframe
-smpte_wrap_t
-Session::smpte_increment_subframes( SMPTE_Time& smpte ) const
-{
-       smpte_wrap_t wrap = smpte_wrap_none;
-  
-       if (smpte.negative) {
-               smpte.negative = false;
-               wrap = smpte_decrement_subframes( smpte );
-               if (!SMPTE_IS_ZERO(smpte)) {
-                       smpte.negative = true;
-               }
-               return wrap;
-       }
-  
-       smpte.subframes++;
-       if (smpte.subframes >= 80) {
-               smpte.subframes = 0;
-               smpte_increment( smpte );
-               return smpte_wrap_frames;
-       }
-       return smpte_wrap_none;
-}
-
-
-// Decrement by one subframe
-smpte_wrap_t
-Session::smpte_decrement_subframes( SMPTE_Time& smpte ) const
-{
-       smpte_wrap_t wrap = smpte_wrap_none;
-  
-       if (smpte.negative) {
-               smpte.negative = false;
-               wrap = smpte_increment_subframes( smpte );
-               smpte.negative = true;
-               return wrap;
-       }
-  
-       if (smpte.subframes <= 0) {
-               smpte.subframes = 0;
-               if (SMPTE_IS_ZERO(smpte)) {
-                       smpte.negative = true;
-                       smpte.subframes = 1;
-                       return smpte_wrap_frames;
-               } else {
-                       smpte_decrement( smpte );
-                       smpte.subframes = 79;
-                       return smpte_wrap_frames;
-               }
-       } else {
-               smpte.subframes--;
-               if (SMPTE_IS_ZERO(smpte)) {
-                       smpte.negative = false;
-               }
-               return smpte_wrap_none;
-       }
-}
-
-
-// Go to next whole second (frames == 0 or frames == 2)
-smpte_wrap_t
-Session::smpte_increment_seconds( SMPTE_Time& smpte ) const
-{
-       smpte_wrap_t wrap = smpte_wrap_none;
-  
-       // Clear subframes
-       smpte_frames_floor( smpte );
-  
-       if (smpte.negative) {
-               // Wrap second if on second boundary
-               wrap = smpte_increment(smpte);
-               // Go to lowest absolute frame value
-               smpte_seconds_floor( smpte );
-               if (SMPTE_IS_ZERO(smpte)) {
-                       smpte.negative = false;
-               }
-       } else {
-               // Go to highest possible frame in this second
-               switch (mtc_smpte_bits >> 5) {
-               case MIDI::MTC_24_FPS:
-                       smpte.frames = 23;
-                       break;
-               case MIDI::MTC_25_FPS:
-                       smpte.frames = 24;
-                       break;
-               case MIDI::MTC_30_FPS_DROP:
-               case MIDI::MTC_30_FPS:
-                       smpte.frames = 29;
-                       break;
-               }
-    
-               // Increment by one frame
-               wrap = smpte_increment( smpte );
-       }
-  
-       return wrap;
-}
-
-// Go to lowest (absolute) frame value in this second
-// Doesn't care about positive/negative
-void
-Session::smpte_seconds_floor( SMPTE_Time& smpte ) const
-{
-       // Clear subframes
-       smpte_frames_floor( smpte );
-  
-       // Go to lowest possible frame in this second
-       switch (mtc_smpte_bits >> 5) {
-       case MIDI::MTC_24_FPS:
-       case MIDI::MTC_25_FPS:
-       case MIDI::MTC_30_FPS:
-               smpte.frames = 0;
-               break;
-       case MIDI::MTC_30_FPS_DROP:
-               if ((smpte.minutes % 10) && (smpte.seconds == 0)) {
-                       smpte.frames = 2;
-               } else {
-                       smpte.frames = 0;
-               }
-               break;
-       }
-  
-       if (SMPTE_IS_ZERO(smpte)) {
-               smpte.negative = false;
-       }
-}
-
-
-// Go to next whole minute (seconds == 0, frames == 0 or frames == 2)
-smpte_wrap_t
-Session::smpte_increment_minutes( SMPTE_Time& smpte ) const
-{
-       smpte_wrap_t wrap = smpte_wrap_none;
-  
-       // Clear subframes
-       smpte_frames_floor( smpte );
-  
-       if (smpte.negative) {
-               // Wrap if on minute boundary
-               wrap = smpte_increment_seconds( smpte );
-               // Go to lowest possible value in this minute
-               smpte_minutes_floor( smpte );
-       } else {
-               // Go to highest possible second
-               smpte.seconds = 59;
-               // Wrap minute by incrementing second
-               wrap = smpte_increment_seconds( smpte );
-       }
-  
-       return wrap;
-}
-
-// Go to lowest absolute value in this minute
-void
-Session::smpte_minutes_floor( SMPTE_Time& smpte ) const
-{
-       // Go to lowest possible second
-       smpte.seconds = 0;
-       // Go to lowest possible frame
-       smpte_seconds_floor( smpte );
 
-       if (SMPTE_IS_ZERO(smpte)) {
-               smpte.negative = false;
-       }
-}
+       AudioFileSource::set_header_position_offset (_smpte_offset, _smpte_offset_negative);
 
-// Go to next whole hour (minute = 0, second = 0, frame = 0)
-smpte_wrap_t
-Session::smpte_increment_hours( SMPTE_Time& smpte ) const
-{
-       smpte_wrap_t wrap = smpte_wrap_none;
-  
-       // Clear subframes
-       smpte_frames_floor(smpte);
-  
-       if (smpte.negative) {
-               // Wrap if on hour boundary
-               wrap = smpte_increment_minutes( smpte );
-               // Go to lowest possible value in this hour
-               smpte_hours_floor( smpte );
-       } else {
-               smpte.minutes = 59;
-               wrap = smpte_increment_minutes( smpte );
-       }
-  
-       return wrap;
-}
-
-// Go to lowest absolute value in this hour
-void
-Session::smpte_hours_floor( SMPTE_Time& smpte ) const
-{
-       smpte.minutes = 0;
-       smpte.seconds = 0;
-       smpte.frames = 0;
-       smpte.subframes = 0;
-  
-       if (SMPTE_IS_ZERO(smpte)) {
-               smpte.negative = false;
-       }
+       SMPTEOffsetChanged (); /* EMIT SIGNAL */
 }
 
 
 void
-Session::smpte_to_sample( SMPTE_Time& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes ) const
+Session::smpte_to_sample( SMPTE::Time& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes ) const
 {
        if (smpte_drop_frames) {
                // The drop frame format was created to better approximate the 30000/1001 = 29.97002997002997....
@@ -555,10 +194,10 @@ Session::smpte_to_sample( SMPTE_Time& smpte, jack_nframes_t& sample, bool use_of
 
 
 void
-Session::sample_to_smpte( jack_nframes_t sample, SMPTE_Time& smpte, bool use_offset, bool use_subframes ) const
+Session::sample_to_smpte( jack_nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes ) const
 {
        jack_nframes_t offset_sample;
-  
+
        if (!use_offset) {
                offset_sample = sample;
                smpte.negative = false;
@@ -649,7 +288,7 @@ Session::sample_to_smpte( jack_nframes_t sample, SMPTE_Time& smpte, bool use_off
 }
 
 void
-Session::smpte_time (jack_nframes_t when, SMPTE_Time& smpte)
+Session::smpte_time (jack_nframes_t when, SMPTE::Time& smpte)
 {
        if (last_smpte_valid && when == last_smpte_when) {
                smpte = last_smpte;
@@ -664,7 +303,7 @@ Session::smpte_time (jack_nframes_t when, SMPTE_Time& smpte)
 }
 
 void
-Session::smpte_time_subframes (jack_nframes_t when, SMPTE_Time& smpte)
+Session::smpte_time_subframes (jack_nframes_t when, SMPTE::Time& smpte)
 {
        if (last_smpte_valid && when == last_smpte_when) {
                smpte = last_smpte;
@@ -679,7 +318,7 @@ Session::smpte_time_subframes (jack_nframes_t when, SMPTE_Time& smpte)
 }
 
 void
-Session::smpte_duration (jack_nframes_t when, SMPTE_Time& smpte) const
+Session::smpte_duration (jack_nframes_t when, SMPTE::Time& smpte) const
 {
        sample_to_smpte( when, smpte, false /* use_offset */, true /* use_subframes */ );
 }
@@ -687,14 +326,14 @@ Session::smpte_duration (jack_nframes_t when, SMPTE_Time& smpte) const
 void
 Session::smpte_duration_string (char* buf, jack_nframes_t when) const
 {
-       SMPTE_Time smpte;
+       SMPTE::Time smpte;
 
        smpte_duration (when, smpte);
-       snprintf (buf, sizeof (buf), "%02ld:%02ld:%02ld:%02ld", smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
+       snprintf (buf, sizeof (buf), "%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32, smpte.hours, smpte.minutes, smpte.seconds, smpte.frames);
 }
 
 void
-Session::smpte_time (SMPTE_Time &t)
+Session::smpte_time (SMPTE::Time &t)
 
 {
        smpte_time (_transport_frame, t);
index 6351aa9825924ab3854b9cdf65baa14346de9260..7eec1e578ba2b2c6e50d8e4c105c7343b088615a 100644 (file)
 
 #include <ardour/session.h>
 #include <ardour/audioregion.h>
-#include <ardour/filesource.h>
 #include <ardour/sndfilesource.h>
 
 #include "i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 using namespace soundtouch;
 
 AudioRegion*
@@ -80,7 +80,10 @@ Session::tempoize_region (TimeStretchRequest& tsr)
                }
 
                try {
-                       sources.push_back(new FileSource (path, frame_rate(), false, Config->get_native_file_data_format()));
+                       sources.push_back (new SndFileSource (path, 
+                                                             Config->get_native_file_data_format(),
+                                                             Config->get_native_file_header_format(),
+                                                             frame_rate()));
                } catch (failed_constructor& err) {
                        error << string_compose (_("tempoize: error creating new audio file %1 (%2)"), path, strerror (errno)) << endmsg;
                        goto out;
@@ -150,13 +153,16 @@ Session::tempoize_region (TimeStretchRequest& tsr)
        xnow = localtime (&now);
 
        for (it = sources.begin(); it != sources.end(); ++it) {
-               dynamic_cast<FileSource*>(*it)->update_header (tsr.region->position(), *xnow, now);
+               AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*it);
+               if (afs) {
+                       afs->update_header (tsr.region->position(), *xnow, now);
+               }
        }
 
        region_name = tsr.region->name() + X_(".t");
 
        r = new AudioRegion (sources, 0, sources.front()->length(), region_name,
-                       0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile));
+                            0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile));
 
 
   out:
index db15b64c325221f8758d176848b408a86e205cc8..376dee11a2ae43e11a65e39a6bc3376fdea8ca1a 100644 (file)
@@ -36,7 +36,7 @@
 #include <ardour/ardour.h>
 #include <ardour/audioengine.h>
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 #include <ardour/auditioner.h>
 #include <ardour/slave.h>
 #include <ardour/location.h>
@@ -46,6 +46,7 @@
 using namespace std;
 using namespace ARDOUR;
 using namespace sigc;
+using namespace PBD;
 
 void
 Session::request_input_change_handling ()
@@ -78,7 +79,7 @@ Session::request_transport_speed (float speed)
 }
 
 void
-Session::request_diskstream_speed (DiskStream& ds, float speed)
+Session::request_diskstream_speed (AudioDiskstream& ds, float speed)
 {
        Event* ev = new Event (Event::SetDiskstreamSpeed, Event::Add, Event::Immediate, 0, speed);
        ev->set_ptr (&ds);
@@ -200,7 +201,7 @@ Session::butler_transport_work ()
        }
 
        if (post_transport_work & PostTransportInputChange) {
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        (*i)->non_realtime_input_change ();
                }
        }
@@ -216,7 +217,7 @@ Session::butler_transport_work ()
                cumulative_rf_motion = 0;
                reset_rf_scale (0);
 
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        if (!(*i)->hidden()) {
                                if ((*i)->speed() != 1.0f || (*i)->speed() != -1.0f) {
                                        (*i)->seek ((jack_nframes_t) (_transport_frame * (double) (*i)->speed()));
@@ -248,7 +249,7 @@ Session::non_realtime_set_speed ()
 {
        Glib::RWLock::ReaderLock lm (diskstream_lock);
 
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                (*i)->non_realtime_set_speed ();
        }
 }
@@ -258,7 +259,7 @@ Session::non_realtime_overwrite ()
 {
        Glib::RWLock::ReaderLock lm (diskstream_lock);
 
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                if ((*i)->pending_overwrite) {
                        (*i)->overwrite_existing_buffers ();
                }
@@ -274,7 +275,7 @@ Session::non_realtime_stop (bool abort)
        
        did_record = false;
        
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                if ((*i)->get_captured_frames () != 0) {
                        did_record = true;
                        break;
@@ -327,7 +328,7 @@ Session::non_realtime_stop (bool abort)
                _have_captured = true;
        }
 
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                (*i)->transport_stopped (*now, xnow, abort);
        }
        
@@ -364,7 +365,7 @@ Session::non_realtime_stop (bool abort)
        }
 #endif
 
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        if (!(*i)->hidden()) {
                                if ((*i)->speed() != 1.0f || (*i)->speed() != -1.0f) {
                                        (*i)->seek ((jack_nframes_t) (_transport_frame * (double) (*i)->speed()));
@@ -491,7 +492,7 @@ Session::set_auto_loop (bool yn)
 
                        if (seamless_loop) {
                                // set all diskstreams to use internal looping
-                               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                        if (!(*i)->hidden()) {
                                                (*i)->set_loop (loc);
                                        }
@@ -499,7 +500,7 @@ Session::set_auto_loop (bool yn)
                        }
                        else {
                                // set all diskstreams to NOT use internal looping
-                               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                        if (!(*i)->hidden()) {
                                                (*i)->set_loop (0);
                                        }
@@ -529,7 +530,7 @@ Session::set_auto_loop (bool yn)
                clear_events (Event::AutoLoop);
 
                // set all diskstreams to NOT use internal looping
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        if (!(*i)->hidden()) {
                                (*i)->set_loop (0);
                        }
@@ -645,7 +646,7 @@ Session::locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, b
                           The rarity and short potential lock duration makes this "OK"
                        */
                        Glib::RWLock::ReaderLock dsm (diskstream_lock);
-                       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                if ((*i)->record_enabled ()) {
                                        //cerr << "switching from input" << __FILE__ << __LINE__ << endl << endl;
                                        (*i)->monitor_input (!auto_input);
@@ -660,7 +661,7 @@ Session::locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, b
                           The rarity and short potential lock duration makes this "OK"
                        */
                        Glib::RWLock::ReaderLock dsm (diskstream_lock);
-                       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                if ((*i)->record_enabled ()) {
                                        //cerr << "switching to input" << __FILE__ << __LINE__ << endl << endl;
                                        (*i)->monitor_input (true);
@@ -704,7 +705,7 @@ Session::set_transport_speed (float speed, bool abort)
                           The rarity and short potential lock duration makes this "OK"
                        */
                        Glib::RWLock::ReaderLock dsm (diskstream_lock);
-                       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                if ((*i)->record_enabled ()) {
                                        //cerr << "switching to input" << __FILE__ << __LINE__ << endl << endl;
                                        (*i)->monitor_input (true);     
@@ -730,7 +731,7 @@ Session::set_transport_speed (float speed, bool abort)
                           The rarity and short potential lock duration makes this "OK"
                        */
                        Glib::RWLock::ReaderLock dsm (diskstream_lock);
-                       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+                       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                                if (auto_input && (*i)->record_enabled ()) {
                                        //cerr << "switching from input" << __FILE__ << __LINE__ << endl << endl;
                                        (*i)->monitor_input (false);    
@@ -781,7 +782,7 @@ Session::set_transport_speed (float speed, bool abort)
                _last_transport_speed = _transport_speed;
                _transport_speed = speed;
                
-               for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+               for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                        if ((*i)->realtime_set_speed ((*i)->speed(), true)) {
                                post_transport_work = PostTransportWork (post_transport_work | PostTransportSpeed);
                        }
@@ -871,7 +872,7 @@ Session::actually_start_transport ()
        transport_sub_state |= PendingDeclickIn;
        _transport_speed = 1.0;
        
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                (*i)->realtime_set_speed ((*i)->speed(), true);
        }
 
@@ -1001,7 +1002,7 @@ Session::set_slave_source (SlaveSource src, jack_nframes_t frame)
        
        _slave_type = src;
 
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                if (!(*i)->hidden()) {
                        if ((*i)->realtime_set_speed ((*i)->speed(), true)) {
                                non_rt_required = true;
@@ -1033,7 +1034,7 @@ Session::reverse_diskstream_buffers ()
 }
 
 void
-Session::set_diskstream_speed (DiskStream* stream, float speed)
+Session::set_diskstream_speed (AudioDiskstream* stream, float speed)
 {
        if (stream->realtime_set_speed (speed, false)) {
                post_transport_work = PostTransportWork (post_transport_work | PostTransportSpeed);
@@ -1198,8 +1199,8 @@ Session::update_latency_compensation (bool with_stop, bool abort)
 
        for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
                if (with_stop) {
-                       (*i)->transport_stopped (abort, (post_transport_work & PostTransportLocate), 
-                                                (!(post_transport_work & PostTransportLocate) || pending_locate_flush));
+                       (*i)->handle_transport_stopped (abort, (post_transport_work & PostTransportLocate), 
+                                                       (!(post_transport_work & PostTransportLocate) || pending_locate_flush));
                }
 
                jack_nframes_t old_latency = (*i)->signal_latency ();
@@ -1229,7 +1230,7 @@ Session::update_latency_compensation (bool with_stop, bool abort)
        /* reflect any changes in latencies into capture offsets
        */
        
-       for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
+       for (AudioDiskstreamList::iterator i = audio_diskstreams.begin(); i != audio_diskstreams.end(); ++i) {
                (*i)->set_capture_offset ();
        }
 }
index 87f7faf423dff8330f8c83f4a8976233044e2276..24a70f636be085987cb11987989d5f0c865ad51b 100644 (file)
     $Id$
 */
 
+#include <cerrno>
+#include <climits>
+
+#include <pwd.h>
+#include <sys/utsname.h>
+
+#include <glibmm/miscutils.h>
+
 #include <ardour/sndfilesource.h>
 
 #include "i18n.h"
 
+using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 SndFileSource::SndFileSource (const XMLNode& node)
-       : ExternalSource (node)
+       : AudioFileSource (node)
 {
-       init (_name, true);
-       SourceCreated (this); /* EMIT SIGNAL */
+       init (_name);
+
+       if (open()) {
+               throw failed_constructor ();
+       }
+
+       if (_build_peakfiles) {
+               if (initialize_peakfile (false, _path)) {
+                       sf_close (sf);
+                       sf = 0;
+                       throw failed_constructor ();
+               }
+       }
+
+       AudioSourceCreated (this); /* EMIT SIGNAL */
+}
+
+SndFileSource::SndFileSource (string idstr, Flag flags)
+       : AudioFileSource (idstr, Flag (flags & ~(Writable|Removable|RemovableIfEmpty|RemoveAtDestroy)))
+{
+       init (idstr);
+
+       if (open()) {
+               throw failed_constructor ();
+       }
+
+       if (_build_peakfiles) {
+               if (initialize_peakfile (false, _path)) {
+                       sf_close (sf);
+                       sf = 0;
+                       throw failed_constructor ();
+               }
+       }
+
+
+       AudioSourceCreated (this); /* EMIT SIGNAL */
 }
 
-SndFileSource::SndFileSource (const string& idstr, bool build_peak)
-       : ExternalSource(idstr, build_peak)
+SndFileSource::SndFileSource (string idstr, SampleFormat sfmt, HeaderFormat hf, jack_nframes_t rate, Flag flags)
+       : AudioFileSource(idstr, flags, sfmt, hf)
 {
-       init (idstr, build_peak);
+       int fmt = 0;
+
+       init (idstr);
+
+       switch (hf) {
+       case CAF:
+               fmt = SF_FORMAT_CAF;
+               _flags = Flag (_flags & ~Broadcast);
+               break;
+
+       case AIFF:
+               fmt = SF_FORMAT_AIFF;
+               _flags = Flag (_flags & ~Broadcast);
+               break;
+
+       case BWF:
+               fmt = SF_FORMAT_WAV;
+               _flags = Flag (_flags | Broadcast);
+               break;
+
+       case WAVE:
+               fmt = SF_FORMAT_WAV;
+               _flags = Flag (_flags & ~Broadcast);
+               break;
+
+       case WAVE64:
+               fmt = SF_FORMAT_W64;
+               _flags = Flag (_flags & ~Broadcast);
+               break;
+
+       default:
+               fatal << string_compose (_("programming error: %1"), X_("unsupported audio header format requested")) << endmsg;
+               /*NOTREACHED*/
+               break;
+
+       }
+
+       switch (sfmt) {
+       case FormatFloat:
+               fmt |= SF_FORMAT_FLOAT;
+               break;
+
+       case FormatInt24:
+               fmt |= SF_FORMAT_PCM_24;
+               break;
+       }
+       
+       _info.channels = 1;
+       _info.samplerate = rate;
+       _info.format = fmt;
+
+       if (open()) {
+               throw failed_constructor();
+       }
+
+       if (writable() && (_flags & Broadcast)) {
+
+               _broadcast_info = new SF_BROADCAST_INFO;
+               memset (_broadcast_info, 0, sizeof (*_broadcast_info));
+               
+               snprintf (_broadcast_info->description, sizeof (_broadcast_info->description), "BWF %s", _name.c_str());
+               
+               struct utsname utsinfo;
 
-       if (build_peak) {
-                SourceCreated (this); /* EMIT SIGNAL */
+               if (uname (&utsinfo)) {
+                       error << string_compose(_("FileSource: cannot get host information for BWF header (%1)"), strerror(errno)) << endmsg;
+                       return;
+               }
+               
+               snprintf (_broadcast_info->originator, sizeof (_broadcast_info->originator), "ardour:%s:%s:%s:%s:%s)", 
+                         Glib::get_real_name().c_str(),
+                         utsinfo.nodename,
+                         utsinfo.sysname,
+                         utsinfo.release,
+                         utsinfo.version);
+               
+               _broadcast_info->version = 1;  
+               
+               /* XXX do something about this field */
+               
+               snprintf (_broadcast_info->umid, sizeof (_broadcast_info->umid), "%s", "fnord");
+               
+               /* coding history is added by libsndfile */
+
+               if (sf_command (sf, SFC_SET_BROADCAST_INFO, _broadcast_info, sizeof (_broadcast_info)) != SF_TRUE) {
+                       char errbuf[256];
+                       sf_error_str (0, errbuf, sizeof (errbuf) - 1);
+                       error << string_compose (_("cannot set broadcast info for audio file %1 (%2); dropping broadcast info for this file"), _path, errbuf) << endmsg;
+                       _flags = Flag (_flags & ~Broadcast);
+                       delete _broadcast_info;
+                       _broadcast_info = 0;
+               }
        }
+       
+       if (_build_peakfiles) {
+               if (initialize_peakfile (true, _path)) {
+                       sf_close (sf);
+                       sf = 0;
+                       throw failed_constructor ();
+               }
+       }
+
+       /* since SndFileSource's constructed with this constructor can be writable, make sure we update if the header info changes */
+
+       if (writable()) {
+               HeaderPositionOffsetChanged.connect (mem_fun (*this, &AudioFileSource::handle_header_position_change));
+       }
+
+       AudioSourceCreated (this); /* EMIT SIGNAL */
 }
 
 void 
-SndFileSource::init (const string& idstr, bool build_peak)
+SndFileSource::init (const string& idstr)
 {
        string::size_type pos;
        string file;
 
-       tmpbuf = 0;
-       tmpbufsize = 0;
+       interleave_buf = 0;
+       interleave_bufsize = 0;
        sf = 0;
-
-       _name = idstr;
+       _broadcast_info = 0;
 
        if ((pos = idstr.find_last_of (':')) == string::npos) {
                channel = 0;
-               file = idstr;
+               _name = Glib::path_get_basename (idstr);
        } else {
                channel = atoi (idstr.substr (pos+1).c_str());
-               file = idstr.substr (0, pos);
+               _name = Glib::path_get_basename (idstr.substr (0, pos));
        }
 
        /* although libsndfile says we don't need to set this,
@@ -66,46 +213,56 @@ SndFileSource::init (const string& idstr, bool build_peak)
        */
 
        memset (&_info, 0, sizeof(_info));
+}
 
-       /* note that we temporarily truncated _id at the colon */
-       
-       if ((sf = sf_open (file.c_str(), SFM_READ, &_info)) == 0) {
+int
+SndFileSource::open ()
+{
+       if ((sf = sf_open (_path.c_str(), (writable() ? SFM_RDWR : SFM_READ), &_info)) == 0) {
                char errbuf[256];
                sf_error_str (0, errbuf, sizeof (errbuf) - 1);
-               error << string_compose(_("SndFileSource: cannot open file \"%1\" (%2)"), file, errbuf) << endmsg;
-               throw failed_constructor();
+               error << string_compose(_("SndFileSource: cannot open file \"%1\" for %2 (%3)"), 
+                                       _path, (writable() ? "read+write" : "reading"), errbuf) << endmsg;
+               return -1;
        }
 
        if (channel >= _info.channels) {
                error << string_compose(_("SndFileSource: file only contains %1 channels; %2 is invalid as a channel number"), _info.channels, channel) << endmsg;
                sf_close (sf);
                sf = 0;
-               throw failed_constructor();
+               return -1;
        }
 
        _length = _info.frames;
-       _path = file;
 
-       if (build_peak) {
-               if (initialize_peakfile (false, _path)) {
-                       sf_close (sf);
-                       sf = 0;
-                       throw failed_constructor ();
-               }
+       if (writable()) {
+               sf_command (sf, SFC_SET_UPDATE_HEADER_AUTO, 0, SF_FALSE);
        }
+
+       return 0;
 }
 
-SndFileSource::~SndFileSource ()
+void
+SndFileSource::close ()
+{
+       if (sf) {
+               sf_close (sf);
+               sf = 0;
+       }
+}
 
+SndFileSource::~SndFileSource ()
 {
        GoingAway (this); /* EMIT SIGNAL */
 
-       if (sf) {
-               sf_close (sf);
+       close ();
+
+       if (interleave_buf) {
+               delete [] interleave_buf;
        }
 
-       if (tmpbuf) {
-               delete [] tmpbuf;
+       if (_broadcast_info) {
+               delete [] _broadcast_info;
        }
 }
 
@@ -116,49 +273,73 @@ SndFileSource::sample_rate () const
 }
 
 jack_nframes_t
-SndFileSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const
+SndFileSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const
 {
        int32_t nread;
        float *ptr;
        uint32_t real_cnt;
+       jack_nframes_t file_cnt;
 
-       if (sf_seek (sf, (off_t) start, SEEK_SET) < 0) {
-               char errbuf[256];
-               sf_error_str (0, errbuf, sizeof (errbuf) - 1);
-               error << string_compose(_("SndFileSource: could not seek to frame %1 within %2 (%3)"), start, _name.substr (1), errbuf) << endmsg;
-               return 0;
-       }
+       if (start > _length) {
 
-       if (_info.channels == 1) {
-               jack_nframes_t ret = sf_read_float (sf, dst, cnt);
-               _read_data_count = cnt * sizeof(float);
-               return ret;
-       }
+               /* read starts beyond end of data, just memset to zero */
+               
+               file_cnt = 0;
 
-       real_cnt = cnt * _info.channels;
+       } else if (start + cnt > _length) {
+               
+               /* read ends beyond end of data, read some, memset the rest */
+               
+               file_cnt = _length - start;
 
-       {
-               Glib::Mutex::Lock lm (_tmpbuf_lock);
+       } else {
                
-               if (tmpbufsize < real_cnt) {
-                       
-                       if (tmpbuf) {
-                               delete [] tmpbuf;
-                       }
-                       tmpbufsize = real_cnt;
-                       tmpbuf = new float[tmpbufsize];
+               /* read is entirely within data */
+
+               file_cnt = cnt;
+       }
+       
+       if (file_cnt) {
+
+               if (sf_seek (sf, (sf_count_t) start, SEEK_SET|SFM_READ) != (sf_count_t) start) {
+                       char errbuf[256];
+                       sf_error_str (0, errbuf, sizeof (errbuf) - 1);
+                       error << string_compose(_("SndFileSource: could not seek to frame %1 within %2 (%3)"), start, _name.substr (1), errbuf) << endmsg;
+                       return 0;
                }
                
-               nread = sf_read_float (sf, tmpbuf, real_cnt);
-               ptr = tmpbuf + channel;
-               nread /= _info.channels;
-               
-               /* stride through the interleaved data */
+               if (_info.channels == 1) {
+                       jack_nframes_t ret = sf_read_float (sf, dst, file_cnt);
+                       _read_data_count = cnt * sizeof(float);
+                       return ret;
+               }
+       }
+
+       if (file_cnt != cnt) {
+               jack_nframes_t delta = cnt - file_cnt;
+               memset (dst+file_cnt, 0, sizeof (Sample) * delta);
+       }
+
+       real_cnt = cnt * _info.channels;
+
+       if (interleave_bufsize < real_cnt) {
                
-               for (int32_t n = 0; n < nread; ++n) {
-                       dst[n] = *ptr;
-                       ptr += _info.channels;
+               if (interleave_buf) {
+                       delete [] interleave_buf;
                }
+               interleave_bufsize = real_cnt;
+               interleave_buf = new float[interleave_bufsize];
+       }
+       
+       nread = sf_read_float (sf, interleave_buf, real_cnt);
+       ptr = interleave_buf + channel;
+       nread /= _info.channels;
+       
+       /* stride through the interleaved data */
+       
+       for (int32_t n = 0; n < nread; ++n) {
+               dst[n] = *ptr;
+               ptr += _info.channels;
        }
 
        _read_data_count = cnt * sizeof(float);
@@ -166,3 +347,163 @@ SndFileSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char
        return nread;
 }
 
+jack_nframes_t 
+SndFileSource::write_unlocked (Sample *data, jack_nframes_t cnt, char * workbuf)
+{
+       if (!writable()) {
+               return 0;
+       }
+
+       if (_info.channels != 1) {
+               fatal << string_compose (_("programming error: %1 %2"), X_("SndFileSource::write called on non-mono file"), _path) << endmsg;
+               /*NOTREACHED*/
+               return 0;
+       }
+       
+       jack_nframes_t oldlen;
+       int32_t frame_pos = _length;
+       
+       if (write_float (data, frame_pos, cnt) != cnt) {
+               return 0;
+       }
+
+       oldlen = _length;
+       update_length (oldlen, cnt);
+
+       if (_build_peakfiles) {
+               PeakBuildRecord *pbr = 0;
+               
+               if (pending_peak_builds.size()) {
+                               pbr = pending_peak_builds.back();
+                       }
+                       
+                       if (pbr && pbr->frame + pbr->cnt == oldlen) {
+                               
+                               /* the last PBR extended to the start of the current write,
+                                  so just extend it again.
+                               */
+
+                               pbr->cnt += cnt;
+                       } else {
+                               pending_peak_builds.push_back (new PeakBuildRecord (oldlen, cnt));
+                       }
+                       
+                       _peaks_built = false;
+       }
+       
+       
+       if (_build_peakfiles) {
+               queue_for_peaks (*this);
+       }
+
+       _write_data_count = cnt;
+       
+       return cnt;
+}
+
+int
+SndFileSource::update_header (jack_nframes_t when, struct tm& now, time_t tnow)
+{      
+       /* allow derived classes to override how this is done */
+
+       set_timeline_position (when);
+
+       if (_flags & Broadcast) {
+               /* this will flush the header implicitly */
+               return setup_broadcast_info (when, now, tnow);
+       } else {
+               return flush_header ();
+       }
+}
+
+int
+SndFileSource::flush_header ()
+{
+       return (sf_command (sf, SFC_UPDATE_HEADER_NOW, 0, 0) != SF_TRUE);
+}
+
+int
+SndFileSource::setup_broadcast_info (jack_nframes_t when, struct tm& now, time_t tnow)
+{
+       /* random code is 9 digits */
+       
+       int random_code = random() % 999999999;
+       
+       snprintf (_broadcast_info->originator_reference, sizeof (_broadcast_info->originator_reference), "%2s%3s%12s%02d%02d%02d%9d",
+                 bwf_country_code,
+                 bwf_organization_code,
+                 bwf_serial_number,
+                 now.tm_hour,
+                 now.tm_min,
+                 now.tm_sec,
+                 random_code);
+       
+       snprintf (_broadcast_info->origination_date, sizeof (_broadcast_info->origination_date), "%4d-%02d-%02d",
+                 1900 + now.tm_year,
+                 now.tm_mon,
+                 now.tm_mday);
+       
+       snprintf (_broadcast_info->origination_time, sizeof (_broadcast_info->origination_time), "%02d-%02d-%02d",
+                 now.tm_hour,
+                 now.tm_min,
+                 now.tm_sec);
+
+       /* now update header position taking header offset into account */
+       
+       set_header_timeline_position ();
+
+       /* note that libsndfile flushes the header to disk when resetting the broadcast info */
+
+       if (sf_command (sf, SFC_SET_BROADCAST_INFO, _broadcast_info, sizeof (*_broadcast_info)) != SF_TRUE) {
+               error << string_compose (_("cannot set broadcast info for audio file %1; Dropping broadcast info for this file"), _path) << endmsg;
+               _flags = Flag (_flags & ~Broadcast);
+               delete _broadcast_info;
+               _broadcast_info = 0;
+               return -1;
+       }
+
+       return 0;
+}
+
+void
+SndFileSource::set_header_timeline_position ()
+{
+       uint64_t pos;
+
+       _broadcast_info->time_reference_high = 0;
+
+       if (header_position_negative) {
+
+               if (ULONG_LONG_MAX - header_position_offset < timeline_position) {
+                       pos = ULONG_LONG_MAX; // impossible
+               } else {
+                       pos = timeline_position + header_position_offset;
+               }
+
+       } else {
+
+               if (timeline_position < header_position_offset) {
+                       pos = 0;
+               } else {
+                       pos = timeline_position - header_position_offset;
+               }
+       }
+
+       _broadcast_info->time_reference_high = (pos >> 32);
+       _broadcast_info->time_reference_low = (pos & 0xffffffff);
+}
+
+jack_nframes_t
+SndFileSource::write_float (Sample* data, jack_nframes_t frame_pos, jack_nframes_t cnt)
+{
+       if (sf_seek (sf, frame_pos, SEEK_SET|SFM_WRITE) != frame_pos) {
+               error << string_compose (_("%1: cannot seek to %2"), _path, frame_pos) << endmsg;
+               return 0;
+       }
+       
+       if (sf_writef_float (sf, data, cnt) != (ssize_t) cnt) {
+               return 0;
+       }
+       
+       return cnt;
+}
index 7d790a036d7f24c6a345872bb36925076a7cc543..0d32ea4a216ec6134dbb93281819747bd24ec8c5 100644 (file)
@@ -42,35 +42,18 @@ using std::max;
 
 using namespace ARDOUR;
 
-sigc::signal<void,Source *>  Source::SourceCreated;
-pthread_t                    Source::peak_thread;
-bool                         Source::have_peak_thread = false;
-vector<Source*>              Source::pending_peak_sources;
-Glib::StaticMutex            Source::pending_peak_sources_lock = GLIBMM_STATIC_MUTEX_INIT;
-int                          Source::peak_request_pipe[2];
-
-bool Source::_build_missing_peakfiles = false;
-bool Source::_build_peakfiles = false;
-
-Source::Source (bool announce)
+Source::Source (string name)
 {
+       _name = name;
        _id = ARDOUR::new_id();
        _use_cnt = 0;
-       _peaks_built = false;
-       next_peak_clear_should_notify = true;
        _timestamp = 0;
-       _read_data_count = 0;
-       _write_data_count = 0;
 }
 
 Source::Source (const XMLNode& node) 
 {
        _use_cnt = 0;
-       _peaks_built = false;
-       next_peak_clear_should_notify = true;
        _timestamp = 0;
-       _read_data_count = 0;
-       _write_data_count = 0;
 
        if (set_state (node)) {
                throw failed_constructor();
@@ -96,10 +79,6 @@ Source::get_state ()
                node->add_property ("timestamp", buf);
        }
 
-       if (_captured_for.length()) {
-               node->add_property ("captured-for", _captured_for);
-       }
-
        return *node;
 }
 
@@ -124,734 +103,9 @@ Source::set_state (const XMLNode& node)
                sscanf (prop->value().c_str(), "%ld", &_timestamp);
        }
 
-       if ((prop = node.property ("captured-for")) != 0) {
-               _captured_for = prop->value();
-       }
-
-       return 0;
-}
-
-/***********************************************************************
-  PEAK FILE STUFF
- ***********************************************************************/
-
-void*
-Source::peak_thread_work (void* arg)
-{
-       PBD::ThreadCreated (pthread_self(), X_("Peak"));
-       struct pollfd pfd[1];
-
-       Glib::Mutex::Lock lm (pending_peak_sources_lock);
-
-       while (true) {
-
-               pfd[0].fd = peak_request_pipe[0];
-               pfd[0].events = POLLIN|POLLERR|POLLHUP;
-
-               pending_peak_sources_lock.unlock();
-
-               if (poll (pfd, 1, -1) < 0) {
-
-                       if (errno == EINTR) {
-                               pending_peak_sources_lock.lock();
-                               continue;
-                       }
-                       
-                       error << string_compose (_("poll on peak request pipe failed (%1)"),
-                                         strerror (errno))
-                             << endmsg;
-                       break;
-               }
-
-               if (pfd[0].revents & ~POLLIN) {
-                       error << _("Error on peak thread request pipe") << endmsg;
-                       break;
-               }
-
-               if (pfd[0].revents & POLLIN) {
-
-                       char req;
-                       
-                       /* empty the pipe of all current requests */
-
-                       while (1) {
-                               size_t nread = ::read (peak_request_pipe[0], &req, sizeof (req));
-
-                               if (nread == 1) {
-                                       switch ((PeakRequest::Type) req) {
-                                       
-                                       case PeakRequest::Build:
-                                               break;
-                                               
-                                       case PeakRequest::Quit:
-                                               pthread_exit_pbd (0);
-                                               /*NOTREACHED*/
-                                               break;
-                                               
-                                       default:
-                                               break;
-                                       }
-
-                               } else if (nread == 0) {
-                                       break;
-                               } else if (errno == EAGAIN) {
-                                       break;
-                               } else {
-                                       fatal << _("Error reading from peak request pipe") << endmsg;
-                                       /*NOTREACHED*/
-                               }
-                       }
-               }
-
-               pending_peak_sources_lock.lock();
-
-               while (!pending_peak_sources.empty()) {
-
-                       Source* s = pending_peak_sources.front();
-                       pending_peak_sources.erase (pending_peak_sources.begin());
-
-                       pending_peak_sources_lock.unlock();
-                       s->build_peaks();
-                       pending_peak_sources_lock.lock();
-               }
-       }
-
-       pthread_exit_pbd (0);
-       /*NOTREACHED*/
-       return 0;
-}
-
-int
-Source::start_peak_thread ()
-{
-       if (!_build_peakfiles) {
-               return 0;
-       }
-
-       if (pipe (peak_request_pipe)) {
-               error << string_compose(_("Cannot create transport request signal pipe (%1)"), strerror (errno)) << endmsg;
-               return -1;
-       }
-
-       if (fcntl (peak_request_pipe[0], F_SETFL, O_NONBLOCK)) {
-               error << string_compose(_("UI: cannot set O_NONBLOCK on peak request pipe (%1)"), strerror (errno)) << endmsg;
-               return -1;
-       }
-
-       if (fcntl (peak_request_pipe[1], F_SETFL, O_NONBLOCK)) {
-               error << string_compose(_("UI: cannot set O_NONBLOCK on peak request pipe (%1)"), strerror (errno)) << endmsg;
-               return -1;
-       }
-
-       if (pthread_create_and_store ("peak file builder", &peak_thread, 0, peak_thread_work, 0)) {
-               error << _("Source: could not create peak thread") << endmsg;
-               return -1;
-       }
-
-       have_peak_thread = true;
        return 0;
 }
 
-void
-Source::stop_peak_thread ()
-{
-       if (!have_peak_thread) {
-               return;
-       }
-
-       void* status;
-
-       char c = (char) PeakRequest::Quit;
-       ::write (peak_request_pipe[1], &c, 1);
-       pthread_join (peak_thread, &status);
-}
-
-void 
-Source::queue_for_peaks (Source& source)
-{
-       if (have_peak_thread) {
-
-               Glib::Mutex::Lock lm (pending_peak_sources_lock);
-
-               source.next_peak_clear_should_notify = true;
-
-               if (find (pending_peak_sources.begin(),
-                         pending_peak_sources.end(),
-                         &source) == pending_peak_sources.end()) {
-                       pending_peak_sources.push_back (&source);
-               }
-
-               char c = (char) PeakRequest::Build;
-               ::write (peak_request_pipe[1], &c, 1);
-       }
-}
-
-void Source::clear_queue_for_peaks ()
-{
-       /* this is done to cancel a group of running peak builds */
-       if (have_peak_thread) {
-               Glib::Mutex::Lock lm (pending_peak_sources_lock);
-               pending_peak_sources.clear ();
-       }
-}
-
-
-bool
-Source::peaks_ready (sigc::slot<void> the_slot, sigc::connection& conn) const
-{
-       bool ret;
-       Glib::Mutex::Lock lm (_lock);
-
-       /* check to see if the peak data is ready. if not
-          connect the slot while still holding the lock.
-       */
-
-       if (!(ret = _peaks_built)) {
-               conn = PeaksReady.connect (the_slot);
-       }
-
-       return ret;
-}
-
-int
-Source::rename_peakfile (string newpath)
-{
-       /* caller must hold _lock */
-
-       string oldpath = peakpath;
-
-       if (access (oldpath.c_str(), F_OK) == 0) {
-               if (rename (oldpath.c_str(), newpath.c_str()) != 0) {
-                       error << string_compose (_("cannot rename peakfile for %1 from %2 to %3 (%4)"), _name, oldpath, newpath, strerror (errno)) << endmsg;
-                       return -1;
-               }
-       }
-
-       peakpath = newpath;
-
-       return 0;
-}
-
-int
-Source::initialize_peakfile (bool newfile, string audio_path)
-{
-       struct stat statbuf;
-
-       peakpath = peak_path (audio_path);
-
-       if (newfile) {
-
-               if (!_build_peakfiles) {
-                       return 0;
-               }
-
-               _peaks_built = false;
-
-       } else {
-
-               if (stat (peakpath.c_str(), &statbuf)) {
-                       if (errno != ENOENT) {
-                               /* it exists in the peaks dir, but there is some kind of error */
-                               
-                               error << string_compose(_("Source: cannot stat peakfile \"%1\""), peakpath) << endmsg;
-                               return -1;
-                       }
-
-               } else {
-                       
-                       /* we found it in the peaks dir */
-               }
-               
-               if (statbuf.st_size == 0) {
-                       _peaks_built = false;
-               } else {
-                       // Check if the audio file has changed since the peakfile was built.
-                       struct stat stat_file;
-                       int err = stat (audio_path.c_str(), &stat_file);
-                       
-                       if (!err && stat_file.st_mtime > statbuf.st_mtime){
-                               _peaks_built = false;
-                       } else {
-                               _peaks_built = true;
-                       }
-               }
-       }
-
-       if (!newfile && !_peaks_built && _build_missing_peakfiles && _build_peakfiles) {
-               build_peaks_from_scratch ();
-       } 
-
-       return 0;
-}
-
-int 
-Source::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t start, jack_nframes_t cnt, double samples_per_visual_peak) const
-{
-       Glib::Mutex::Lock lm (_lock);
-       double scale;
-       double expected_peaks;
-       PeakData::PeakDatum xmax;
-       PeakData::PeakDatum xmin;
-       int32_t to_read;
-       uint32_t nread;
-       jack_nframes_t zero_fill = 0;
-       int ret = -1;
-       PeakData* staging = 0;
-       Sample* raw_staging = 0;
-       char * workbuf = 0;
-       int peakfile = -1;
-
-       expected_peaks = (cnt / (double) frames_per_peak);
-       scale = npeaks/expected_peaks;
-
-#if 0
-       cerr << "======>RP: npeaks = " << npeaks 
-            << " start = " << start 
-            << " cnt = " << cnt 
-            << " len = " << _length 
-            << "   samples_per_visual_peak =" << samples_per_visual_peak 
-            << " expected was " << expected_peaks << " ... scale = " << scale
-            << " PD ptr = " << peaks
-            <<endl;
-       
-#endif
-
-       /* fix for near-end-of-file conditions */
-
-       if (cnt > _length - start) {
-               // cerr << "too close to end @ " << _length << " given " << start << " + " << cnt << endl;
-               cnt = _length - start;
-               jack_nframes_t old = npeaks;
-               npeaks = min ((jack_nframes_t) floor (cnt / samples_per_visual_peak), npeaks);
-               zero_fill = old - npeaks;
-       }
-
-       // cerr << "actual npeaks = " << npeaks << " zf = " << zero_fill << endl;
-       
-       if (npeaks == cnt) {
-
-               // cerr << "RAW DATA\n";
-               
-               /* no scaling at all, just get the sample data and duplicate it for
-                  both max and min peak values.
-               */
-
-               Sample* raw_staging = new Sample[cnt];
-               workbuf = new char[cnt*4];
-               
-               if (read_unlocked (raw_staging, start, cnt, workbuf) != cnt) {
-                       error << _("cannot read sample data for unscaled peak computation") << endmsg;
-                       return -1;
-               }
-
-               for (jack_nframes_t i = 0; i < npeaks; ++i) {
-                       peaks[i].max = raw_staging[i];
-                       peaks[i].min = raw_staging[i];
-               }
-
-               delete [] raw_staging;
-               delete [] workbuf;
-               return 0;
-       }
-
-       if (scale == 1.0) {
-
-               off_t first_peak_byte = (start / frames_per_peak) * sizeof (PeakData);
-
-               /* open, read, close */
-
-               if ((peakfile = ::open (peakpath.c_str(), O_RDWR|O_CREAT, 0664)) < 0) {
-                       error << string_compose(_("Source: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
-                       return -1;
-               }
-
-               // cerr << "DIRECT PEAKS\n";
-               
-               nread = ::pread (peakfile, peaks, sizeof (PeakData)* npeaks, first_peak_byte);
-               close (peakfile);
-
-               if (nread != sizeof (PeakData) * npeaks) {
-                       cerr << "Source["
-                            << _name
-                            << "]: cannot read peaks from peakfile! (read only " 
-                            << nread
-                            << " not " 
-                            << npeaks
-                             << "at sample " 
-                            << start
-                            << " = byte "
-                            << first_peak_byte
-                            << ')'
-                            << endl;
-                       return -1;
-               }
-
-               if (zero_fill) {
-                       memset (&peaks[npeaks], 0, sizeof (PeakData) * zero_fill);
-               }
-
-               return 0;
-       }
-
-
-       jack_nframes_t tnp;
-
-       if (scale < 1.0) {
-
-               // cerr << "DOWNSAMPLE\n";
-
-               /* the caller wants:
-
-                   - more frames-per-peak (lower resolution) than the peakfile, or to put it another way,
-                    - less peaks than the peakfile holds for the same range
-
-                   So, read a block into a staging area, and then downsample from there.
-
-                   to avoid confusion, I'll refer to the requested peaks as visual_peaks and the peakfile peaks as stored_peaks  
-               */
-
-               const uint32_t chunksize = (uint32_t) min (expected_peaks, 4096.0);
-               
-               staging = new PeakData[chunksize];
-               
-               /* compute the rounded up frame position  */
-       
-               jack_nframes_t current_frame = start;
-               jack_nframes_t current_stored_peak = (jack_nframes_t) ceil (current_frame / (double) frames_per_peak);
-               uint32_t       next_visual_peak  = (uint32_t) ceil (current_frame / samples_per_visual_peak);
-               double         next_visual_peak_frame = next_visual_peak * samples_per_visual_peak;
-               uint32_t       stored_peak_before_next_visual_peak = (jack_nframes_t) next_visual_peak_frame / frames_per_peak;
-               uint32_t       nvisual_peaks = 0;
-               uint32_t       stored_peaks_read = 0;
-               uint32_t       i = 0;
-
-               /* handle the case where the initial visual peak is on a pixel boundary */
-
-               current_stored_peak = min (current_stored_peak, stored_peak_before_next_visual_peak);
-
-               /* open ... close during out: handling */
-
-               if ((peakfile = ::open (peakpath.c_str(), O_RDWR|O_CREAT, 0664)) < 0) {
-                       error << string_compose(_("Source: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
-                       return 0;
-               }
-
-               while (nvisual_peaks < npeaks) {
-
-                       if (i == stored_peaks_read) {
-
-                               uint32_t       start_byte = current_stored_peak * sizeof(PeakData);
-                               tnp = min ((_length/frames_per_peak - current_stored_peak), (jack_nframes_t) expected_peaks);
-                               to_read = min (chunksize, tnp);
-                               
-                               off_t fend = lseek (peakfile, 0, SEEK_END);
-                               
-                               if ((nread = ::pread (peakfile, staging, sizeof (PeakData) * to_read, start_byte))
-                                   != sizeof (PeakData) * to_read) {
-                                       cerr << "Source["
-                                            << _name
-                                            << "]: cannot read peak data from peakfile ("
-                                            << (nread / sizeof(PeakData))
-                                            << " peaks instead of "
-                                            << to_read
-                                            << ") ("
-                                            << strerror (errno)
-                                            << ')'
-                                            << " at start_byte = " << start_byte 
-                                            << " _length = " << _length << " versus len = " << fend
-                                            << " expected maxpeaks = " << (_length - current_frame)/frames_per_peak
-                                            << " npeaks was " << npeaks
-                                            << endl;
-                                       goto out;
-                               }
-
-                               i = 0;
-                               stored_peaks_read = nread / sizeof(PeakData);
-                       }
-
-                       xmax = -1.0;
-                       xmin = 1.0;
-
-                       while ((i < stored_peaks_read) && (current_stored_peak <= stored_peak_before_next_visual_peak)) {
-
-                               xmax = max (xmax, staging[i].max);
-                               xmin = min (xmin, staging[i].min);
-                               ++i;
-                               ++current_stored_peak;
-                               --expected_peaks;
-                       }
-
-                       peaks[nvisual_peaks].max = xmax;
-                       peaks[nvisual_peaks].min = xmin;
-                       ++nvisual_peaks;
-                       ++next_visual_peak;
-
-                       //next_visual_peak_frame = min ((next_visual_peak * samples_per_visual_peak), (next_visual_peak_frame+samples_per_visual_peak) );
-                       next_visual_peak_frame =  min ((double) start+cnt, (next_visual_peak_frame+samples_per_visual_peak) );
-                       stored_peak_before_next_visual_peak = (uint32_t) next_visual_peak_frame / frames_per_peak; 
-               }
-
-               if (zero_fill) {
-                       memset (&peaks[npeaks], 0, sizeof (PeakData) * zero_fill);
-               }
-               
-               ret = 0;
-
-       } else {
-               
-               // cerr << "UPSAMPLE\n";
-
-               /* the caller wants 
-
-                    - less frames-per-peak (more resolution)
-                    - more peaks than stored in the Peakfile
-
-                  So, fetch data from the raw source, and generate peak
-                  data on the fly.
-               */
-
-               jack_nframes_t frames_read = 0;
-               jack_nframes_t current_frame = start;
-               jack_nframes_t i = 0;
-               jack_nframes_t nvisual_peaks = 0;
-               jack_nframes_t chunksize = (jack_nframes_t) min (cnt, (jack_nframes_t) 4096);
-               raw_staging = new Sample[chunksize];
-               workbuf = new char[chunksize *4];
-               
-               jack_nframes_t frame_pos = start;
-               double pixel_pos = floor (frame_pos / samples_per_visual_peak);
-               double next_pixel_pos = ceil (frame_pos / samples_per_visual_peak);
-               double pixels_per_frame = 1.0 / samples_per_visual_peak;
-
-               xmin = 1.0;
-               xmax = -1.0;
-
-               while (nvisual_peaks < npeaks) {
-
-                       if (i == frames_read) {
-                               
-                               to_read = min (chunksize, (_length - current_frame));
-                               
-                               if ((frames_read = read_unlocked (raw_staging, current_frame, to_read, workbuf)) < 0) {
-                                       error << string_compose(_("Source[%1]: peak read - cannot read %2 samples at offset %3")
-                                                        , _name, to_read, current_frame) 
-                                             << endmsg;
-                                       goto out;
-                               }
-
-                               i = 0;
-                       }
-                       
-                       xmax = max (xmax, raw_staging[i]);
-                       xmin = min (xmin, raw_staging[i]);
-                       ++i;
-                       ++current_frame;
-                       pixel_pos += pixels_per_frame;
-
-                       if (pixel_pos >= next_pixel_pos) {
-
-                               peaks[nvisual_peaks].max = xmax;
-                               peaks[nvisual_peaks].min = xmin;
-                               ++nvisual_peaks;
-                               xmin = 1.0;
-                               xmax = -1.0;
-
-                               next_pixel_pos = ceil (pixel_pos + 0.5);
-                       }
-               }
-               
-               if (zero_fill) {
-                       memset (&peaks[npeaks], 0, sizeof (PeakData) * zero_fill);
-               }
-
-               ret = 0;
-       }
-
-  out:
-       if (peakfile >= 0) {
-               close (peakfile);
-       }
-
-       if (staging) {
-               delete [] staging;
-       } 
-
-       if (raw_staging) {
-               delete [] raw_staging;
-       }
-
-       if (workbuf) {
-               delete [] workbuf;
-       }
-       
-       return ret;
-}
-
-#undef DEBUG_PEAK_BUILD
-
-int
-Source::build_peaks ()
-{
-       vector<PeakBuildRecord*> built;
-       int status = -1;
-       bool pr_signal = false;
-       list<PeakBuildRecord*> copy;
-
-       {
-               Glib::Mutex::Lock lm (_lock);
-               copy = pending_peak_builds;
-               pending_peak_builds.clear ();
-       }
-               
-#ifdef DEBUG_PEAK_BUILD
-       cerr << "build peaks with " << copy.size() << " requests pending\n";
-#endif         
-
-       for (list<PeakBuildRecord *>::iterator i = copy.begin(); i != copy.end(); ++i) {
-               
-               if ((status = do_build_peak ((*i)->frame, (*i)->cnt)) != 0) { 
-                       unlink (peakpath.c_str());
-                       break;
-               }
-               built.push_back (new PeakBuildRecord (*(*i)));
-               delete *i;
-       }
-
-       { 
-               Glib::Mutex::Lock lm (_lock);
-
-               if (status == 0) {
-                       _peaks_built = true;
-                       
-                       if (next_peak_clear_should_notify) {
-                               next_peak_clear_should_notify = false;
-                               pr_signal = true;
-                       }
-               }
-       }
-
-       if (status == 0) {
-               for (vector<PeakBuildRecord *>::iterator i = built.begin(); i != built.end(); ++i) {
-                       PeakRangeReady ((*i)->frame, (*i)->cnt); /* EMIT SIGNAL */
-                       delete *i;
-               }
-
-               if (pr_signal) {
-                       PeaksReady (); /* EMIT SIGNAL */
-               }
-       }
-
-       return status;
-}
-
-int
-Source::do_build_peak (jack_nframes_t first_frame, jack_nframes_t cnt)
-{
-       jack_nframes_t current_frame;
-       Sample buf[frames_per_peak];
-       Sample xmin, xmax;
-       uint32_t  peaki;
-       PeakData* peakbuf;
-       char * workbuf = 0;
-       jack_nframes_t frames_read;
-       jack_nframes_t frames_to_read;
-       off_t first_peak_byte;
-       int peakfile = -1;
-       int ret = -1;
-
-#ifdef DEBUG_PEAK_BUILD
-       cerr << pthread_self() << ": " << _name << ": building peaks for " << first_frame << " to " << first_frame + cnt - 1 << endl;
-#endif
-
-       first_peak_byte = (first_frame / frames_per_peak) * sizeof (PeakData);
-
-#ifdef DEBUG_PEAK_BUILD
-       cerr << "seeking to " << first_peak_byte << " before writing new peak data\n";
-#endif
-
-       current_frame = first_frame;
-       peakbuf = new PeakData[(cnt/frames_per_peak)+1];
-       peaki = 0;
-
-       workbuf = new char[max(frames_per_peak, cnt) * 4];
-       
-       if ((peakfile = ::open (peakpath.c_str(), O_RDWR|O_CREAT, 0664)) < 0) {
-               error << string_compose(_("Source: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
-               return -1;
-       }
-       
-       while (cnt) {
-
-               frames_to_read = min (frames_per_peak, cnt);
-
-               if ((frames_read = read_unlocked (buf, current_frame, frames_to_read, workbuf)) != frames_to_read) {
-                       error << string_compose(_("%1: could not write read raw data for peak computation (%2)"), _name, strerror (errno)) << endmsg;
-                       goto out;
-               }
-
-               xmin = buf[0];
-               xmax = buf[0];
-
-               for (jack_nframes_t n = 1; n < frames_read; ++n) {
-                       xmax = max (xmax, buf[n]);
-                       xmin = min (xmin, buf[n]);
-
-//                     if (current_frame < frames_read) {
-//                             cerr << "sample = " << buf[n] << " max = " << xmax << " min = " << xmin << " max of 2 = " << max (xmax, buf[n]) << endl;
-//                     }
-               }
-
-               peakbuf[peaki].max = xmax;
-               peakbuf[peaki].min = xmin;
-               peaki++;
-
-               current_frame += frames_read;
-               cnt -= frames_read;
-       }
-
-       if (::pwrite (peakfile, peakbuf, sizeof (PeakData) * peaki, first_peak_byte) != (ssize_t) (sizeof (PeakData) * peaki)) {
-               error << string_compose(_("%1: could not write peak file data (%2)"), _name, strerror (errno)) << endmsg;
-               goto out;
-       }
-
-       ret = 0;
-
-  out:
-       delete [] peakbuf;
-       if (peakfile >= 0) {
-               close (peakfile);
-       }
-       if (workbuf)
-               delete [] workbuf;
-       return ret;
-}
-
-void
-Source::build_peaks_from_scratch ()
-{
-       Glib::Mutex::Lock lp (_lock); 
-
-       next_peak_clear_should_notify = true;
-       pending_peak_builds.push_back (new PeakBuildRecord (0, _length));
-       queue_for_peaks (*this);
-}
-
-bool
-Source::file_changed (string path)
-{
-       struct stat stat_file;
-       struct stat stat_peak;
-
-       int e1 = stat (path.c_str(), &stat_file);
-       int e2 = stat (peak_path(path).c_str(), &stat_peak);
-       
-       if (!e1 && !e2 && stat_file.st_mtime > stat_peak.st_mtime){
-               return true;
-       } else {
-               return false;
-       }
-}
-
 void
 Source::use ()
 {
@@ -864,30 +118,3 @@ Source::release ()
        if (_use_cnt) --_use_cnt;
 }
 
-jack_nframes_t
-Source::available_peaks (double zoom_factor) const
-{
-       int peakfile;
-       off_t end;
-
-       if (zoom_factor < frames_per_peak) {
-               return length(); // peak data will come from the audio file
-       } 
-       
-       /* peak data comes from peakfile */
-
-       if ((peakfile = ::open (peakpath.c_str(), O_RDONLY)) < 0) {
-               error << string_compose(_("Source: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
-               return 0;
-       }
-
-       { 
-               Glib::Mutex::Lock lm (_lock);
-               end = lseek (peakfile, 0, SEEK_END);
-       }
-
-       close (peakfile);
-
-       return (end/sizeof(PeakData)) * frames_per_peak;
-}
-
index bb24c8eb583cd53a371a931bc49d396050fea910..bcffe381c382be341f3ef1b90c7d89b82f4383f2 100644 (file)
@@ -5,6 +5,7 @@
 
 using namespace ARDOUR;
 using namespace std;
+using namespace PBD;
 
 bool StateManager::_allow_save = true;
 sigc::signal<void,const char*> StateManager::SaveAllowed;
index d08be38ecd5b570839a7d2646fa0e65c3d1fa258..b8e301b2739f0501ce8a5f62fdc64fa4628d86ce 100644 (file)
@@ -27,6 +27,8 @@
 
 #include "i18n.h"
 
+using namespace PBD;
+
 Stateful::Stateful ()
 {
        _extra_xml = 0;
index 64964b29dd6bdcb04f1a0837a4bee8909e0df749..c0e52279e1bd7280633b38eddd6371ddb23471c7 100644 (file)
@@ -35,6 +35,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace PBD;
 
 /* _default tempo is 4/4 qtr=120 */
 
index 15d0c6be813b7cde495a4da0700fd9b07b0f6a53..9adc7c72cd39f2cac11afc9f38634516570dec60 100644 (file)
@@ -42,6 +42,7 @@
 
 using namespace ARDOUR;
 using namespace std;
+using namespace PBD;
 
 void
 elapsed_time_to_str (char *buf, uint32_t seconds)
@@ -177,7 +178,7 @@ tokenize_fullpath (string fullpath, string& path, string& name)
 int
 touch_file (string path)
 {
-       int fd = open (path.c_str(), O_RDONLY|O_CREAT);
+       int fd = open (path.c_str(), O_RDWR|O_CREAT, 0660);
        if (fd >= 0) {
                close (fd);
                return 0;
index 2f3653a16af626a1788a24184cfbc542fc7dd0fc..80c36dab950450ed48b6e423eff9d94934d1a63c 100644 (file)
@@ -54,6 +54,7 @@
 #include <locale.h>
 
 using namespace ARDOUR;
+using namespace PBD;
 using std::min;
 using std::max;
 
diff --git a/libs/fst/SConscript b/libs/fst/SConscript
new file mode 100644 (file)
index 0000000..0499f11
--- /dev/null
@@ -0,0 +1,27 @@
+# -*- python -*-
+
+import os
+import os.path
+import glob
+
+fst_src = glob.glob('*.c')
+
+Import('env install_prefix')
+fst = env.Copy(CC="winegcc")
+fst.Append (CPPPATH=".")
+
+hackSDK = fst.Command('vst/aeffectx.h', 'vstsdk2.3/source/common/aeffectx.h', [
+    Delete ('${TARGET.dir}'),
+    Copy ('${TARGET.dir}', '${SOURCE.dir}'),
+    "sed -i '/struct VstFileType\|struct VstFileSelect/,/};/d' $TARGET"
+])
+
+a = fst.Object ('fst', 'fst.c')
+b = fst.Object ('fstinfofile', 'fstinfofile.c')
+c = fst.Object ('vstwin', 'vstwin.c')
+d = fst.Object ('vsti', 'vsti.c')
+
+Default([hackSDK,a,b,c,d])
+
+env.Alias('tarball', env.Distribute (env['DISTTREE'], fst_src + ['SConscript'] ))
+
diff --git a/libs/fst/fst.c b/libs/fst/fst.c
new file mode 100644 (file)
index 0000000..8547357
--- /dev/null
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "fst.h"
+
+
+void 
+default_fst_error_callback (const char *desc)
+{
+       fprintf(stderr, "%s\n", desc);
+}
+
+void (*fst_error_callback)(const char *desc) = &default_fst_error_callback;
+
+void 
+fst_error (const char *fmt, ...)
+{
+       va_list ap;
+       char buffer[512];
+
+       va_start (ap, fmt);
+       vsnprintf (buffer, sizeof(buffer), fmt, ap);
+       fst_error_callback (buffer);
+       va_end (ap);
+}
+
+
diff --git a/libs/fst/fst.h b/libs/fst/fst.h
new file mode 100644 (file)
index 0000000..9055eac
--- /dev/null
@@ -0,0 +1,108 @@
+#ifndef __fst_fst_h__
+#define __fst_fst_h__
+
+#include <setjmp.h>
+#include <signal.h>
+#include <pthread.h>
+
+/**
+ * Display FST error message.
+ *
+ * @param fmt printf-style formatting specification
+ */
+extern void fst_error (const char *fmt, ...);
+
+/**
+ * Set the @ref fst_error_callback for error message display.
+ *
+ * The FST library provides two built-in callbacks for this purpose:
+ * default_fst_error_callback().
+ *
+ * The default will print the message (plus a newline) to stderr.
+ *
+ */
+void fst_set_error_function (void (*func)(const char *));
+
+#include <vst/AEffect.h>
+
+typedef struct _FST FST;
+typedef struct _FSTHandle FSTHandle;
+typedef struct _FSTInfo FSTInfo;
+
+struct _FSTInfo 
+{
+    char *name;
+    int UniqueID;
+    char *Category;
+    
+    int numInputs;
+    int numOutputs;
+    int numParams;
+
+    int wantMidi;
+    int wantEvents;
+    int hasEditor;
+    int canProcessReplacing; // what do we need this for ?
+
+    // i think we should save the parameter Info Stuff soon.
+    // struct VstParameterInfo *infos;
+    char **ParamNames;
+    char **ParamLabels;
+};
+
+struct _FSTHandle
+{
+    void*    dll;
+    char*    name;
+    char*    nameptr; /* ptr returned from strdup() etc. */
+    AEffect* (*main_entry)(audioMasterCallback);
+
+    int plugincnt;
+};
+
+struct _FST 
+{
+    AEffect*    plugin;
+    void*       window; /* win32 HWND */
+    int         xid; /* X11 XWindow */
+    FSTHandle*  handle;
+    int        width;
+    int        height;
+    int         destroy;
+
+    struct _FST* next;
+
+    pthread_mutex_t lock;
+    pthread_cond_t  window_status_change;
+    int             been_activated;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int  fst_init ();
+
+extern FSTHandle* fst_load (const char*);
+extern int        fst_unload (FSTHandle*);
+
+extern FST*       fst_instantiate (FSTHandle*, audioMasterCallback amc, void* userptr);
+extern void       fst_close (FST*);
+
+extern void fst_event_loop_remove_plugin (FST* fst);
+extern void fst_event_loop_add_plugin (FST* fst);
+
+extern int  fst_run_editor (FST*);
+extern void  fst_destroy_editor (FST*);
+extern int  fst_get_XID (FST*);
+
+extern void fst_signal_handler (int sig, siginfo_t* info, void* context);
+
+extern FSTInfo *fst_get_info( char *dllpathname );
+extern void fst_free_info( FSTInfo *info );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __fst_fst_h__ */
diff --git a/libs/fst/fstinfofile.c b/libs/fst/fstinfofile.c
new file mode 100644 (file)
index 0000000..7cc98d2
--- /dev/null
@@ -0,0 +1,266 @@
+
+#include "fst.h"
+#include "vst/aeffectx.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define MAX_STRING_LEN 256
+
+#define FALSE 0
+#define TRUE !FALSE
+
+static char *read_string( FILE *fp ) {
+    char buf[MAX_STRING_LEN];
+
+    fgets( buf, MAX_STRING_LEN, fp );
+    if( strlen( buf ) < MAX_STRING_LEN ) {
+       
+       if( strlen(buf) )
+           buf[strlen(buf)-1] = 0;
+
+       return strdup( buf );
+    } else {
+       return NULL;
+    }
+}
+
+static FSTInfo *load_fst_info_file( char *filename ) {
+
+    FSTInfo *info = (FSTInfo *) malloc( sizeof( FSTInfo ) );
+    FILE *fp;
+    int i;
+
+
+    if( info == NULL )
+       return NULL;
+
+    fp = fopen( filename, "r" );
+    
+    if( fp == NULL ) {
+       free( info );
+       return NULL;
+    }
+
+    if( (info->name = read_string( fp )) == NULL ) goto error;
+    if( 1 != fscanf( fp, "%d\n", &info->UniqueID ) ) goto error;
+    if( (info->Category = read_string( fp )) == NULL ) goto error;
+    if( 1 != fscanf( fp, "%d\n", &info->numInputs ) ) goto error;
+    if( 1 != fscanf( fp, "%d\n", &info->numOutputs ) ) goto error;
+    if( 1 != fscanf( fp, "%d\n", &info->numParams ) ) goto error;
+    if( 1 != fscanf( fp, "%d\n", &info->wantMidi ) ) goto error;
+    if( 1 != fscanf( fp, "%d\n", &info->hasEditor ) ) goto error;
+    if( 1 != fscanf( fp, "%d\n", &info->canProcessReplacing ) ) goto error;
+
+    if( (info->ParamNames = (char **) malloc( sizeof( char * ) * info->numParams )) == NULL ) goto error;
+    for( i=0; i<info->numParams; i++ ) {
+       if( (info->ParamNames[i] = read_string( fp )) == NULL ) goto error;
+    }
+    if( (info->ParamLabels = (char **) malloc( sizeof( char * ) * info->numParams )) == NULL ) goto error;
+    for( i=0; i<info->numParams; i++ ) {
+       if( (info->ParamLabels[i] = read_string( fp )) == NULL ) goto error;
+    }
+       
+
+    fclose( fp );
+    return info;
+
+error:
+    fclose( fp );
+    free( info );
+    return NULL;
+}
+
+static int save_fst_info_file( FSTInfo *info, char *filename ) {
+
+    FILE *fp;
+    int i;
+
+
+    if( info == NULL ) {
+       fst_error( "info is NULL\n" );
+       return TRUE;
+    }
+
+    fp = fopen( filename, "w" );
+    
+    if( fp == NULL ) {
+       fst_error( "Cant write info file %s\n", filename );
+       return TRUE;
+    }
+
+    fprintf( fp, "%s\n", info->name );
+    fprintf( fp, "%d\n", info->UniqueID );
+    fprintf( fp, "%s\n", info->Category );
+    fprintf( fp, "%d\n", info->numInputs );
+    fprintf( fp, "%d\n", info->numOutputs );
+    fprintf( fp, "%d\n", info->numParams );
+    fprintf( fp, "%d\n", info->wantMidi );
+    fprintf( fp, "%d\n", info->hasEditor );
+    fprintf( fp, "%d\n", info->canProcessReplacing );
+
+    for( i=0; i<info->numParams; i++ ) {
+       fprintf( fp, "%s\n", info->ParamNames[i] );
+    }
+    for( i=0; i<info->numParams; i++ ) {
+       fprintf( fp, "%s\n", info->ParamLabels[i] );
+    }
+       
+
+    fclose( fp );
+
+    return FALSE;
+}
+
+static char *fst_dllpath_to_infopath( char *dllpath ) {
+    char *retval;
+    if( strstr( dllpath, ".dll" ) == NULL ) return NULL;
+    
+    retval = strdup( dllpath );
+    sprintf( retval + strlen(retval) - 4, ".fst" );
+    return retval;
+}
+
+static int fst_info_file_is_valid( char *dllpath ) {
+    struct stat dllstat, fststat;
+    char *fstpath = fst_dllpath_to_infopath( dllpath );
+
+    if( !fstpath ) return FALSE;
+    
+    if( stat( dllpath, &dllstat ) ){ fst_error( "dll path %s invalid\n", dllpath );  return TRUE; }
+    if( stat( fstpath, &fststat ) ) return FALSE;
+
+    free( fstpath );
+    if( dllstat.st_mtime > fststat.st_mtime )
+       return FALSE;
+    else 
+       return TRUE;
+}
+
+static int fst_can_midi( FST *fst ) {
+       AEffect *plugin = fst->plugin;
+       int vst_version = plugin->dispatcher (plugin, effGetVstVersion, 0, 0, NULL, 0.0f);
+
+       if (vst_version >= 2) {
+               
+                /* should we send it VST events (i.e. MIDI) */
+               
+               if ((plugin->flags & effFlagsIsSynth) ||
+                   (plugin->dispatcher (plugin, effCanDo, 0, 0,(void*) "receiveVstEvents", 0.0f) > 0))
+                   return TRUE;
+       }
+       return FALSE;
+
+}
+static FSTInfo *fst_info_from_plugin( FST *fst ) {
+    FSTInfo *info = (FSTInfo *) malloc( sizeof( FSTInfo ) );
+    AEffect *plugin;
+    int i;
+
+    if( ! fst ) {
+       fst_error( "fst is NULL\n" );
+       return NULL;
+    }
+
+    if( ! info ) return NULL;
+    
+    plugin = fst->plugin;
+    
+
+    info->name = strdup(fst->handle->name ); 
+    info->UniqueID = plugin->uniqueID;
+    info->Category = strdup( "None" );          // FIXME:  
+    info->numInputs = plugin->numInputs;
+    info->numOutputs = plugin->numOutputs;
+    info->numParams = plugin->numParams;
+    info->wantMidi = fst_can_midi( fst ); 
+    info->hasEditor = plugin->flags & effFlagsHasEditor ? TRUE : FALSE;
+    info->canProcessReplacing = plugin->flags & effFlagsCanReplacing ? TRUE : FALSE;
+
+    info->ParamNames = (char **) malloc( sizeof( char * ) * info->numParams );
+    info->ParamLabels = (char **) malloc( sizeof( char * ) * info->numParams );
+    for( i=0; i<info->numParams; i++ ) {
+       char name[20];
+       char label[9];
+               plugin->dispatcher (plugin,
+                                   effGetParamName,
+                                   i, 0, name, 0);
+               
+               plugin->dispatcher (plugin,
+                                   effGetParamLabel,
+                                   i, 0, label, 0);
+
+       info->ParamNames[i] = strdup( name );
+       info->ParamLabels[i] = strdup( label );
+    }
+    return info;
+}
+
+// most simple one :) could be sufficient.... 
+static long simple_master_callback( AEffect *fx, long opcode, long index, long value, void *ptr, float opt ) {
+    if( opcode == audioMasterVersion )
+       return 2;
+    else
+       return 0;
+}
+
+FSTInfo *fst_get_info( char *dllpath ) {
+
+    if( fst_info_file_is_valid( dllpath ) ) {
+       FSTInfo *info;
+       char *fstpath = fst_dllpath_to_infopath( dllpath );
+
+       info = load_fst_info_file( fstpath );
+       free( fstpath );
+       return info;
+
+    } else {
+
+       FSTHandle *h;
+       FST *fst;
+       FSTInfo *info;
+       char *fstpath;
+
+       if( !(h = fst_load( dllpath )) ) return NULL;
+       if( !(fst = fst_instantiate( h, simple_master_callback, NULL )) ) {
+           fst_unload( h );
+           fst_error( "instantiate failed\n" );
+           return NULL;
+       }
+       fstpath = fst_dllpath_to_infopath( dllpath );
+       if( !fstpath ) {
+           fst_close( fst );
+           fst_unload( h );
+           fst_error( "get fst filename failed\n" );
+           return NULL;
+       }
+       info = fst_info_from_plugin( fst );
+       save_fst_info_file( info, fstpath );
+
+       free( fstpath );
+       fst_close( fst );
+       fst_unload( h );
+       return info;
+    }
+}
+
+void fst_free_info( FSTInfo *info ) {
+
+    int i;
+
+    for( i=0; i<info->numParams; i++ ) {
+       free( info->ParamNames[i] );
+       free( info->ParamLabels[i] );
+    }
+    free( info->name );
+    free( info->Category );
+    free( info );
+}
+
+
diff --git a/libs/fst/jackvst.h b/libs/fst/jackvst.h
new file mode 100644 (file)
index 0000000..abb9e22
--- /dev/null
@@ -0,0 +1,35 @@
+#ifndef __jack_vst_h__
+#define __jack_vst_h__
+
+#include </usr/include/sys/types.h>
+#include </usr/include/sys/time.h>
+#include <jack/jack.h>
+#include <jack/ringbuffer.h>
+#include <fst.h>
+#include <alsa/asoundlib.h>
+
+typedef struct _JackVST JackVST;
+
+struct _JackVST {
+    jack_client_t *client;
+    FSTHandle*     handle;
+    FST*           fst;
+    float        **ins;
+    float        **outs;
+    jack_port_t  **inports;
+    jack_port_t  **outports;
+    void*          userdata;
+    int            bypassed;
+    int            muted;
+
+    int                   resume_called;
+    /* For VST/i support */
+
+    pthread_t          midi_thread;
+    snd_seq_t*         seq;
+    int                midiquit;
+    jack_ringbuffer_t* event_queue;
+    struct VstEvents*  events;
+};
+
+#endif /* __jack_vst_h__ */
diff --git a/libs/fst/vsti.c b/libs/fst/vsti.c
new file mode 100644 (file)
index 0000000..f6d8725
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ *   VST instrument support
+ *
+ *   Derived from code that was marked:    
+ *   Copyright (C) Kjetil S. Matheussen 2004 (k.s.matheussen@notam02.no)
+ *   Alsa-seq midi-code made by looking at the jack-rack source made by Bob Ham.
+ *    
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *   $Id: vsti.c,v 1.2 2004/04/07 01:56:23 pauld Exp $
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <jackvst.h>
+#include <vst/aeffectx.h>
+
+snd_seq_t *
+create_sequencer (const char* client_name, bool isinput)
+{
+       snd_seq_t * seq;
+       int err;
+       
+       if ((err = snd_seq_open (&seq, "default", SND_SEQ_OPEN_DUPLEX, 0)) != 0) {
+               fst_error ("Could not open ALSA sequencer, aborting\n\n%s\n\n"
+                          "Make sure you have configure ALSA properly and that\n"
+                          "/proc/asound/seq/clients exists and contains relevant\n"
+                          "devices (%s).", 
+                          snd_strerror (err));
+               return NULL;
+       }
+       
+       snd_seq_set_client_name (seq, client_name);
+       
+       if ((err = snd_seq_create_simple_port (seq, isinput? "Input" : "Output",
+                                              (isinput? SND_SEQ_PORT_CAP_WRITE: SND_SEQ_PORT_CAP_READ)| SND_SEQ_PORT_CAP_DUPLEX |
+                                              SND_SEQ_PORT_CAP_SUBS_READ|SND_SEQ_PORT_CAP_SUBS_WRITE,
+                                              SND_SEQ_PORT_TYPE_APPLICATION|SND_SEQ_PORT_TYPE_SPECIFIC)) != 0) {
+               fst_error ("Could not create ALSA port: %s", snd_strerror (err));
+               snd_seq_close(seq);
+               return NULL;
+       }
+       
+       return seq;
+}
+
+static void 
+queue_midi (JackVST *jvst, int val1, int val2, int val3)
+{
+       struct VstMidiEvent *pevent;
+       jack_ringbuffer_data_t vec[2];
+
+       jack_ringbuffer_get_write_vector (jvst->event_queue, vec);
+
+       if (vec[0].len < sizeof (struct VstMidiEvent)) {
+               fst_error ("event queue has no write space");
+               return;
+       }
+               
+       pevent = (struct VstMidiEevent *) vec[0].buf;
+
+       //  printf("note: %d\n",note);
+       
+       pevent->type = kVstMidiType;
+       pevent->byteSize = 24;
+       pevent->deltaFrames = 0;
+       pevent->flags = 0;
+       pevent->detune = 0;
+       pevent->noteLength = 0;
+       pevent->noteOffset = 0;
+       pevent->reserved1 = 0;
+       pevent->reserved2 = 0;
+       pevent->noteOffVelocity = 0;
+       pevent->midiData[0] = val1;
+       pevent->midiData[1] = val2;
+       pevent->midiData[2] = val3;
+       pevent->midiData[3] = 0;
+       
+       //printf("Sending: %x %x %x\n",val1,val2,val3);
+
+       jack_ringbuffer_write_advance (jvst->event_queue, sizeof (struct VstMidiEvent));
+}
+
+void *midireceiver(void *arg)
+{
+       snd_seq_event_t *event;
+       JackVST *jvst = (JackVST* )arg;
+       int val;
+
+       while (1) {
+
+               snd_seq_event_input (jvst->seq, &event);
+
+               if (jvst->midiquit) {
+                       break;
+               }
+
+               switch(event->type){
+               case SND_SEQ_EVENT_NOTEON:
+                       queue_midi(jvst,0x90+event->data.note.channel,event->data.note.note,event->data.note.velocity);
+                       //printf("Noteon, channel: %d note: %d vol: %d\n",event->data.note.channel,event->data.note.note,event->data.note.velocity);
+                       break;
+               case SND_SEQ_EVENT_NOTEOFF:
+                       queue_midi(jvst,0x80+event->data.note.channel,event->data.note.note,0);
+                       //printf("Noteoff, channel: %d note: %d vol: %d\n",event->data.note.channel,event->data.note.note,event->data.note.velocity);
+                       break;
+               case SND_SEQ_EVENT_KEYPRESS:
+                       //printf("Keypress, channel: %d note: %d vol: %d\n",event->data.note.channel,event->data.note.note,event->data.note.velocity);
+                       queue_midi(jvst,0xa0+event->data.note.channel,event->data.note.note,event->data.note.velocity);
+                       break;
+               case SND_SEQ_EVENT_CONTROLLER:
+                       queue_midi(jvst,0xb0+event->data.control.channel,event->data.control.param,event->data.control.value);
+                       //printf("Control: %d %d %d\n",event->data.control.channel,event->data.control.param,event->data.control.value);
+                       break;
+               case SND_SEQ_EVENT_PITCHBEND:
+                       val=event->data.control.value + 0x2000;
+                       queue_midi(jvst,0xe0+event->data.control.channel,val&127,val>>7);
+                       //printf("Pitch: %d %d %d\n",event->data.control.channel,event->data.control.param,event->data.control.value);
+                       break;
+               case SND_SEQ_EVENT_CHANPRESS:
+                       //printf("chanpress: %d %d %d\n",event->data.control.channel,event->data.control.param,event->data.control.value);
+                       queue_midi(jvst,0xd0+event->data.control.channel,event->data.control.value,0);
+                       break;
+               case SND_SEQ_EVENT_PGMCHANGE:
+                       //printf("pgmchange: %d %d %d\n",event->data.control.channel,event->data.control.param,event->data.control.value);
+                       queue_midi(jvst,0xc0+event->data.control.channel,event->data.control.value,0);
+                       break;
+               default:
+                       //printf("Unknown type: %d\n",event->type);
+                       break;
+               }
+       }
+       
+       return NULL;
+}
+
+void stop_midireceiver (JackVST *jvst)
+{
+       int err; 
+       snd_seq_event_t event;
+       snd_seq_t *seq2 = create_sequencer ("jfstquit", true);
+       
+       jvst->midiquit = 1;
+       
+       snd_seq_connect_to (seq2, 0, snd_seq_client_id (jvst->seq),0);
+       snd_seq_ev_clear      (&event);
+       snd_seq_ev_set_direct (&event);
+       snd_seq_ev_set_subs   (&event);
+       snd_seq_ev_set_source (&event, 0);
+       snd_seq_ev_set_controller (&event,1,0x80,50);
+       
+       if ((err = snd_seq_event_output (seq2, &event)) < 0) {
+               fst_error ("cannot send stop event to midi thread: %s\n",
+                          snd_strerror (err));
+       }
+
+       snd_seq_drain_output (seq2);
+       snd_seq_close (seq2);
+       pthread_join (jvst->midi_thread,NULL);
+       snd_seq_close (jvst->seq);
+}
+
+
+
diff --git a/libs/fst/vstwin.c b/libs/fst/vstwin.c
new file mode 100644 (file)
index 0000000..8911ff4
--- /dev/null
@@ -0,0 +1,583 @@
+#include <stdio.h>
+#include <libgen.h>
+#include <windows.h>
+#include <winnt.h>
+#include <wine/exception.h>
+#include <pthread.h>
+#include <signal.h>
+
+//#include <x11/xlib.h>
+//#include <x11/xresource.h>
+//#include <x11/xutil.h>
+//#include <x11/xatom.h>
+
+#include "fst.h"
+
+
+struct ERect{
+    short top;
+    short left;
+    short bottom;
+    short right;
+};
+
+static pthread_mutex_t plugin_mutex = PTHREAD_MUTEX_INITIALIZER;
+static FST* fst_first = NULL;
+
+DWORD  gui_thread_id = 0;
+
+static char* message_name (int message)
+{
+       switch (message) {
+       case 0x0000:
+               return "WM_NULL";
+
+       case 0x0001:
+               return "WM_CREATE";
+
+       case 0x0002:
+               return "WM_DESTROY";
+
+       case 0x0003:
+               return "WM_MOVE";
+
+       case 0x0004:
+               return "WM_SIZEWAIT";
+
+       case 0x0005:
+               return "WM_SIZE";
+
+       case 0x0006:
+               return "WM_ACTIVATE";
+
+       case 0x0007:
+               return "WM_SETFOCUS";
+
+       case 0x0008:
+               return "WM_KILLFOCUS";
+
+       case 0x0009:
+               return "WM_SETVISIBLE";
+
+       case 0x000a:
+               return "WM_ENABLE";
+
+       case 0x000b:
+               return "WM_SETREDRAW";
+
+       case 0x000c:
+               return "WM_SETTEXT";
+
+       case 0x000d:
+               return "WM_GETTEXT";
+
+       case 0x000e:
+               return "WM_GETTEXTLENGTH";
+
+       case 0x000f:
+               return "WM_PAINT";
+
+       case 0x0010:
+               return "WM_CLOSE";
+
+       case 0x0011:
+               return "WM_QUERYENDSESSION";
+
+       case 0x0012:
+               return "WM_QUIT";
+
+       case 0x0013:
+               return "WM_QUERYOPEN";
+
+       case 0x0014:
+               return "WM_ERASEBKGND";
+
+       case 0x0015:
+               return "WM_SYSCOLORCHANGE";
+
+       case 0x0016:
+               return "WM_ENDSESSION";
+
+       case 0x0017:
+               return "WM_SYSTEMERROR";
+
+       case 0x0018:
+               return "WM_SHOWWINDOW";
+
+       case 0x0019:
+               return "WM_CTLCOLOR";
+
+       case 0x001a:
+               return "WM_WININICHANGE";
+
+       case 0x001b:
+               return "WM_DEVMODECHANGE";
+
+       case 0x001c:
+               return "WM_ACTIVATEAPP";
+
+       case 0x001d:
+               return "WM_FONTCHANGE";
+
+       case 0x001e:
+               return "WM_TIMECHANGE";
+
+       case 0x001f:
+               return "WM_CANCELMODE";
+
+       case 0x0020:
+               return "WM_SETCURSOR";
+
+       case 0x0021:
+               return "WM_MOUSEACTIVATE";
+
+       case 0x0022:
+               return "WM_CHILDACTIVATE";
+
+       case 0x0023:
+               return "WM_QUEUESYNC";
+
+       case 0x0024:
+               return "WM_GETMINMAXINFO";
+
+       default:
+               break;
+       }
+       return "--- OTHER ---";
+}
+       
+static LRESULT WINAPI 
+my_window_proc (HWND w, UINT msg, WPARAM wp, LPARAM lp)
+{
+       FST* fst;
+
+//     if (msg != WM_TIMER) {
+//             fst_error ("window callback handler, msg = 0x%x (%s) win=%p\n", msg, message_name (msg), w);
+//     }
+
+       switch (msg) {
+       case WM_KEYUP:
+       case WM_KEYDOWN:
+               break;
+
+       case WM_CLOSE:
+               PostQuitMessage (0);
+
+       case WM_DESTROY:
+       case WM_NCDESTROY:
+               /* we should never get these */
+               //return 0;
+               break;
+
+       case WM_PAINT:
+               if ((fst = GetPropA (w, "fst_ptr")) != NULL) {
+                       if (fst->window && !fst->been_activated) {
+                               fst->been_activated = TRUE;
+                               pthread_cond_signal (&fst->window_status_change);
+                               pthread_mutex_unlock (&fst->lock);
+                       }
+               }
+               break;
+
+       default:
+               break;
+       }
+
+       return DefWindowProcA (w, msg, wp, lp );
+}
+
+static FST* 
+fst_new ()
+{
+       FST* fst = (FST*) calloc (1, sizeof (FST));
+
+       pthread_mutex_init (&fst->lock, NULL);
+       pthread_cond_init (&fst->window_status_change, NULL);
+
+       return fst;
+}
+
+static FSTHandle* 
+fst_handle_new ()
+{
+       FSTHandle* fst = (FSTHandle*) calloc (1, sizeof (FSTHandle));
+       return fst;
+}
+
+int
+fst_create_editor (FST* fst)
+{
+       HMODULE hInst;
+       HWND window;
+
+       /* "guard point" to trap errors that occur during plugin loading */
+
+       /* Note: fst->lock is held while this function is called */
+
+       if (!(fst->plugin->flags & effFlagsHasEditor)) {
+               fst_error ("Plugin \"%s\" has no editor", fst->handle->name);
+               return -1;
+       }
+
+       if ((hInst = GetModuleHandleA (NULL)) == NULL) {
+               fst_error ("can't get module handle");
+               return 1;
+       }
+       
+//     if ((window = CreateWindowExA (WS_EX_TOOLWINDOW | WS_EX_TRAYWINDOW, "FST", fst->handle->name,
+       if ((window = CreateWindowExA (0, "FST", fst->handle->name,
+                                      (WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX),
+                                      0, 0, 1, 1,
+                                      NULL, NULL,
+                                      hInst,
+                                      NULL)) == NULL) {
+               fst_error ("cannot create editor window");
+               return 1;
+       }
+
+       if (!SetPropA (window, "fst_ptr", fst)) {
+               fst_error ("cannot set fst_ptr on window");
+       }
+
+       fst->window = window;
+       fst->xid = (int) GetPropA (window, "__wine_x11_whole_window");
+
+       {
+               struct ERect* er;
+
+               ShowWindow (fst->window, SW_SHOW);
+       
+               fst->plugin->dispatcher (fst->plugin, effEditOpen, 0, 0, fst->window, 0 );
+               fst->plugin->dispatcher (fst->plugin, effEditGetRect, 0, 0, &er, 0 );
+               
+               fst->width =  er->right-er->left;
+               fst->height =  er->bottom-er->top;
+               
+               SetWindowPos (fst->window, 0, 0, 0, er->right-er->left+8, er->bottom-er->top+26, SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOZORDER);
+       }
+
+       return 0;
+}
+
+void
+fst_destroy_editor (FST* fst)
+{
+       pthread_mutex_lock (&fst->lock);
+       if (fst->window) {
+               fst->destroy = TRUE;
+               if (!PostThreadMessageA (gui_thread_id, WM_USER, 0, 0)) {
+                       fst_error ("could not post message to gui thread");
+               }
+               pthread_cond_wait (&fst->window_status_change, &fst->lock);
+
+       }
+       pthread_mutex_unlock (&fst->lock);
+}
+
+void
+fst_event_loop_remove_plugin (FST* fst)
+{
+       FST* p;
+       FST* prev;
+
+       for (p = fst_first, prev = NULL; p->next; prev = p, p = p->next) {
+               if (p == fst) {
+                       if (prev) {
+                               prev->next = p->next;
+                       }
+               }
+       }
+
+       if (fst_first == fst) {
+               fst_first = fst_first->next;
+       }
+
+}
+
+void debreak( void ) { printf( "debreak\n" ); }
+
+DWORD WINAPI gui_event_loop (LPVOID param)
+{
+       MSG msg;
+       FST* fst;
+       HMODULE hInst;
+       HWND window;
+
+       gui_thread_id = GetCurrentThreadId ();
+
+       /* create a dummy window for timer events */
+
+       if ((hInst = GetModuleHandleA (NULL)) == NULL) {
+               fst_error ("can't get module handle");
+               return 1;
+       }
+       
+       if ((window = CreateWindowExA (0, "FST", "dummy",
+                                      WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX,
+                                      CW_USEDEFAULT, CW_USEDEFAULT,
+                                      CW_USEDEFAULT, CW_USEDEFAULT,
+                                      NULL, NULL,
+                                      hInst,
+                                      NULL )) == NULL) {
+               fst_error ("cannot create dummy timer window");
+       }
+
+       if (!SetTimer (window, 1000, 100, NULL)) {
+               fst_error ("cannot set timer on dummy window");
+       }
+
+       while (GetMessageA (&msg, NULL, 0,0)) {
+               
+           if( msg.message == WM_KEYDOWN ) debreak();
+               TranslateMessage( &msg );
+               DispatchMessageA (&msg);
+
+               /* handle window creation requests, destroy requests, 
+                  and run idle callbacks 
+               */
+               
+
+               if( msg.message == WM_TIMER ) {
+                   pthread_mutex_lock (&plugin_mutex);
+again:
+                   for (fst = fst_first; fst; fst = fst->next) {
+
+                       if (fst->destroy) {
+                           if (fst->window) {
+                               fst->plugin->dispatcher( fst->plugin, effEditClose, 0, 0, NULL, 0.0 );
+                               CloseWindow (fst->window);
+                               fst->window = NULL;
+                               fst->destroy = FALSE;
+                           }
+                           fst_event_loop_remove_plugin (fst);
+                           fst->been_activated = FALSE;
+                           pthread_mutex_lock (&fst->lock);
+                           pthread_cond_signal (&fst->window_status_change);
+                           pthread_mutex_unlock (&fst->lock);
+                           goto again;
+                       } 
+
+                       if (fst->window == NULL) {
+                           pthread_mutex_lock (&fst->lock);
+                           if (fst_create_editor (fst)) {
+                               fst_error ("cannot create editor for plugin %s", fst->handle->name);
+                               fst_event_loop_remove_plugin (fst);
+                               pthread_cond_signal (&fst->window_status_change);
+                               pthread_mutex_unlock (&fst->lock);
+                               goto again;
+                           }
+                           /* condition/unlock handled when we receive WM_ACTIVATE */
+                       }
+
+                       fst->plugin->dispatcher (fst->plugin, effEditIdle, 0, 0, NULL, 0);
+                   }
+                   pthread_mutex_unlock (&plugin_mutex);
+               }
+       }
+       fst_error ("FST GUI event loop has quit!");
+       return 0;
+}
+
+int
+fst_init ()
+{
+       WNDCLASSA wc;
+       HMODULE hInst;
+
+       if ((hInst = GetModuleHandleA (NULL)) == NULL) {
+               fst_error ("can't get module handle");
+               return -1;
+       }
+       wc.style = 0;
+       wc.lpfnWndProc = my_window_proc;
+       wc.cbClsExtra = 0;
+       wc.cbWndExtra = 0;
+       wc.hInstance = hInst;
+       wc.hIcon = LoadIconA( hInst, "FST");
+       wc.hCursor = LoadCursorA( NULL, IDI_APPLICATION );
+       wc.hbrBackground = GetStockObject( BLACK_BRUSH );
+       wc.lpszMenuName = "MENU_FST";
+       wc.lpszClassName = "FST";
+
+       if (!RegisterClassA(&wc)){
+               return 1;
+       }
+
+       if (CreateThread (NULL, 0, gui_event_loop, NULL, 0, NULL) == NULL) {
+               fst_error ("could not create new thread proxy");
+               return -1;
+       }
+
+       return 0;
+}
+
+int
+fst_run_editor (FST* fst)
+{
+       /* Add the FST to the list of all that should be handled by the GUI thread */
+
+       pthread_mutex_lock (&plugin_mutex);
+
+       if (fst_first == NULL) {
+               fst_first = fst;
+       } else {
+               FST* p = fst_first;
+               while (p->next) {
+                       p = p->next;
+               }
+               p->next = fst;
+       }
+
+       if (!PostThreadMessageA (gui_thread_id, WM_USER, 0, 0)) {
+               fst_error ("could not post message to gui thread");
+               return -1;
+       }
+
+       pthread_mutex_unlock (&plugin_mutex);
+
+       /* wait for the plugin editor window to be created (or not) */
+
+       pthread_mutex_lock (&fst->lock);
+       if (!fst->window) {
+               pthread_cond_wait (&fst->window_status_change, &fst->lock);
+       } 
+       pthread_mutex_unlock (&fst->lock);
+
+       if (!fst->window) {
+               fst_error ("no window created for VST plugin editor");
+               return -1;
+       }
+
+       return 0;
+}
+
+FSTHandle*
+fst_load (const char *path)
+{
+       char* buf;
+       FSTHandle* fhandle;
+       char* period;
+
+       fhandle = fst_handle_new ();
+       
+       // XXX: Would be nice to find the correct call for this.
+       //      if the user does not configure Z: to be / we are doomed :(
+
+       if (strstr (path, ".dll") == NULL) {
+
+               buf = (char *) malloc (strlen (path) + 7);
+
+               if( path[0] == '/' ) {
+                   sprintf (buf, "Z:%s.dll", path);
+               } else {
+                   sprintf (buf, "%s.dll", path);
+               }
+
+               fhandle->nameptr = strdup (path);
+
+       } else {
+
+               buf = (char *) malloc (strlen (path) + 3);
+
+               if( path[0] == '/' ) {
+                   sprintf (buf, "Z:%s", path);
+               } else {
+                   sprintf (buf, "%s", path);
+               }
+
+               fhandle->nameptr = strdup (path);
+       }
+       
+       fhandle->name = basename (fhandle->nameptr);
+
+       /* strip off .dll */
+
+       if ((period = strrchr (fhandle->name, '.')) != NULL) {
+               *period = '\0';
+       }
+
+       if ((fhandle->dll = LoadLibraryA (buf)) == NULL) {
+               fst_unload (fhandle);
+               return NULL;
+       }
+
+       if ((fhandle->main_entry = GetProcAddress (fhandle->dll, "main")) == NULL) {
+               fst_unload (fhandle);
+               return NULL;
+       }
+
+       return fhandle;
+}
+
+int
+fst_unload (FSTHandle* fhandle)
+{
+       if (fhandle->plugincnt) {
+               return -1;
+       }
+
+       if (fhandle->dll) {
+               FreeLibrary (fhandle->dll);
+               fhandle->dll = NULL;
+       }
+
+       if (fhandle->nameptr) {
+               free (fhandle->nameptr);
+               fhandle->name = NULL;
+       }
+       
+       free (fhandle);
+       return 0;
+}
+
+FST*
+fst_instantiate (FSTHandle* fhandle, audioMasterCallback amc, void* userptr)
+{
+       FST* fst = fst_new ();
+
+       if( fhandle == NULL ) {
+           fst_error( "the handle was NULL\n" );
+           return NULL;
+       }
+
+       if ((fst->plugin = fhandle->main_entry (amc)) == NULL)  {
+               fst_error ("%s could not be instantiated\n", fhandle->name);
+               free (fst);
+               return NULL;
+       }
+       
+       fst->handle = fhandle;
+       fst->plugin->user = userptr;
+               
+       if (fst->plugin->magic != kEffectMagic) {
+               fst_error ("%s is not a VST plugin\n", fhandle->name);
+               free (fst);
+               return NULL;
+       }
+       
+       fst->plugin->dispatcher (fst->plugin, effOpen, 0, 0, 0, 0);
+       //fst->plugin->dispatcher (fst->plugin, effMainsChanged, 0, 0, NULL, 0);
+
+       fst->handle->plugincnt++;
+
+       return fst;
+}
+
+void
+fst_close (FST* fst)
+{
+       fst_destroy_editor (fst);
+
+       fst->plugin->dispatcher (fst->plugin, effMainsChanged, 0, 0, NULL, 0);
+       fst->plugin->dispatcher (fst->plugin, effClose, 0, 0, 0, 0);
+
+       if (fst->handle->plugincnt) {
+               --fst->handle->plugincnt;
+       }
+}
+
+int
+fst_get_XID (FST* fst)
+{
+       return fst->xid;
+}
index f0ee0ddea18159d513ca0b0f9fdab1d412ecac0a..3c489e08ffbcbb6f3500555b6103afbe4cc28d36 100644 (file)
@@ -354,11 +354,12 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
        // draw peak bar 
        if (hold_state && intersection.width > 0) {
                gint y = pixheight - (gint) floor (pixheight * current_peak);
+               int h = min(3, pixheight - y);
 
                get_window()->draw_pixbuf (get_style()->get_fg_gc(get_state()), pixbuf,
                                           intersection.x, y,
                                           intersection.x, y,
-                                          intersection.width, 3,
+                                          intersection.width, h,
                                           Gdk::RGB_DITHER_NONE, 0, 0);
        }
 
index 50d6114deeb492eb172f301da255f17c3b3cdb7e..55a6bebb02ba1313a48543054f118e9b39bbe730 100644 (file)
@@ -43,6 +43,7 @@
 using namespace Gtkmm2ext;
 using namespace Gtk;
 using namespace Glib;
+using namespace PBD;
 using std::map;
 
 pthread_t UI::gui_thread;
index 9329e844f9003df8173e2bf2d1b205a0e6155d57..cc10981aa8e48f880d701d52baabe3c408e4655d 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: 0.99beta23\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 15:09-0400\n"
 "PO-Revision-Date: 2005-01-11\n"
 "Last-Translator: Muadibas\n"
 "Language-Team: Hellenic(Greek) <LL@li.org>\n"
@@ -15,12 +15,12 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: libs/gtkmm2ext/barcontroller.cc:431 libs/gtkmm2ext/bindable_button.cc:131
+#: libs/gtkmm2ext/barcontroller.cc:432 libs/gtkmm2ext/bindable_button.cc:131
 #: libs/gtkmm2ext/controller.cc:50 libs/gtkmm2ext/slider_controller.cc:132
 msgid "operate MIDI controller now"
 msgstr "λειτουργία ελεγκτή MIDI τώρα"
 
-#: libs/gtkmm2ext/gtk_ui.cc:509
+#: libs/gtkmm2ext/gtk_ui.cc:510
 msgid "Press To Exit"
 msgstr ""
 
index a51e0580900a2add2a640fbdd760e5d027f54739..8b7dc8804df434b40e4ed58b37fa6967731c84cd 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gtkmm2ext\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 15:09-0400\n"
 "PO-Revision-Date: 2004-02-13 00:35+0300\n"
 "Last-Translator: Alex Krohn alexkrohn@fastmail.fm\n"
 "Language-Team: Spanish\n"
@@ -14,12 +14,12 @@ msgstr ""
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: libs/gtkmm2ext/barcontroller.cc:431 libs/gtkmm2ext/bindable_button.cc:131
+#: libs/gtkmm2ext/barcontroller.cc:432 libs/gtkmm2ext/bindable_button.cc:131
 #: libs/gtkmm2ext/controller.cc:50 libs/gtkmm2ext/slider_controller.cc:132
 msgid "operate MIDI controller now"
 msgstr "Operar controladora de MIDI ahora"
 
-#: libs/gtkmm2ext/gtk_ui.cc:509
+#: libs/gtkmm2ext/gtk_ui.cc:510
 msgid "Press To Exit"
 msgstr ""
 
index 3cd751eb73b886492eb294fd00eeb9c28573c1d8..66381c2d37ba499e5477ce8d1410b61d917572b0 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gtkmm2ext\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 15:09-0400\n"
 "PO-Revision-Date: 2004-05-17 20:36+0200\n"
 "Last-Translator: Chris Ross <chris.ross@tebibyte.org>\n"
 "Language-Team: Portuguese\n"
@@ -15,12 +15,12 @@ msgstr ""
 "Content-Type: text/plain; charset=ISO-8859-15\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: libs/gtkmm2ext/barcontroller.cc:431 libs/gtkmm2ext/bindable_button.cc:131
+#: libs/gtkmm2ext/barcontroller.cc:432 libs/gtkmm2ext/bindable_button.cc:131
 #: libs/gtkmm2ext/controller.cc:50 libs/gtkmm2ext/slider_controller.cc:132
 msgid "operate MIDI controller now"
 msgstr "Operar controladora de MIDI agora"
 
-#: libs/gtkmm2ext/gtk_ui.cc:509
+#: libs/gtkmm2ext/gtk_ui.cc:510
 msgid "Press To Exit"
 msgstr ""
 
index 7de883d439d5e3407865f4af35a8da1541ae8b94..4a3edcef5c4ba63057a432a6f42a051f8c242d56 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gtkmm2ext\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-25 17:46-0400\n"
+"POT-Creation-Date: 2006-06-21 15:09-0400\n"
 "PO-Revision-Date: 2004-02-13 00:35+0300\n"
 "Last-Translator: Igor Blinov pitstop@nm.ru\n"
 "Language-Team: Russian\n"
@@ -14,12 +14,12 @@ msgstr ""
 "Content-Type: text/plain; charset=koi8-r\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: libs/gtkmm2ext/barcontroller.cc:431 libs/gtkmm2ext/bindable_button.cc:131
+#: libs/gtkmm2ext/barcontroller.cc:432 libs/gtkmm2ext/bindable_button.cc:131
 #: libs/gtkmm2ext/controller.cc:50 libs/gtkmm2ext/slider_controller.cc:132
 msgid "operate MIDI controller now"
 msgstr "�������� MIDI-����������"
 
-#: libs/gtkmm2ext/gtk_ui.cc:509
+#: libs/gtkmm2ext/gtk_ui.cc:510
 msgid "Press To Exit"
 msgstr ""
 
index 00db129d6be3893ddc0b83eeb5aaf1161e56dfbd..7302de66e72f82bb9817de8872ecd79773c8243f 100644 (file)
@@ -25,7 +25,6 @@
 #include <gtkmm2ext/selector.h>
 #include <gtkmm2ext/utils.h>
 #include <pbd/pathscanner.h>
-#include <pbd/error.h>
 
 using namespace std;
 using namespace Gtkmm2ext;
index c30d7b61b457d08f663496e84bc8f6ea2119eab2..b627c88ffe66e6d8234f220238c4ccacd9af7c84 100644 (file)
@@ -1150,7 +1150,7 @@ sf_seek   (SNDFILE *sndfile, sf_count_t offset, int whence)
        ** it makes sense.
        */
        if (((whence & SFM_MASK) == SFM_WRITE && psf->mode == SFM_READ) ||
-                       ((whence & SFM_MASK) == SFM_WRITE && psf->mode == SFM_WRITE))
+                       ((whence & SFM_MASK) == SFM_READ && psf->mode == SFM_WRITE))
        {       psf->error = SFE_WRONG_SEEK ;
                return PSF_SEEK_ERROR ;
                } ;
@@ -1210,10 +1210,25 @@ sf_seek (SNDFILE *sndfile, sf_count_t offset, int whence)
        if (psf->error)
                return PSF_SEEK_ERROR ;
 
+#ifdef ECDL_ORIGINAL#
        if (seek_from_start < 0 || seek_from_start > psf->sf.frames)
        {       psf->error = SFE_BAD_SEEK ;
                return PSF_SEEK_ERROR ;
                } ;
+#else
+       if (((whence & SFM_MASK) == SFM_WRITE) || (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR))
+       {   if (seek_from_start < 0  /* || (seek_from_start > psf->sf.frames && post-audio chunks exist) */ )
+           {   psf->error = SFE_BAD_SEEK ;
+               return PSF_SEEK_ERROR ;
+               } 
+           }
+        else /* seek for reading */
+       {   if (seek_from_start < 0 || seek_from_start > psf->sf.frames)
+           {   psf->error = SFE_BAD_SEEK ;
+               return PSF_SEEK_ERROR ;
+               }
+           }
+#endif
 
        if (psf->seek)
        {       int new_mode = (whence & SFM_MASK) ? (whence & SFM_MASK) : psf->mode ;
@@ -1234,6 +1249,7 @@ sf_seek   (SNDFILE *sndfile, sf_count_t offset, int whence)
                                        break ;
                        } ;
 
+
                psf->last_op = new_mode ;
 
                return retval ;
index f2fbcd7b5052822e591d0f88c255629e7d9f3bf7..c627738c39f97d5ac9d3392e5af5aa12e42f7801 100644 (file)
@@ -539,7 +539,6 @@ wav_read_header      (SF_PRIVATE *psf, int *blockalign, int *framesperblock)
                                        break ;
 
                        case bext_MARKER :
-                                       parsestage |= HAVE_other ;
 
                                        psf_binheader_readf (psf, "4", &dword) ;
                                        if (dword < WAV_BEXT_CHUNK_SIZE)
index 2ced63c25915293bb7e86d991c5c02c1ca54ae5b..1d21642a002076fe068ae536b0edcc4082da4d3d 100644 (file)
@@ -29,6 +29,7 @@
 
 using namespace std;
 using namespace MIDI;
+using namespace PBD;
 
 string *FD_MidiPort::midi_dirpath = 0;
 string *FD_MidiPort::midi_filename_pattern = 0;
index f17782f3c4a2bcd8a36c760a8049a715f221c315..f0dbd9cb777af6a1617dc4ad06f389d727c4a499 100644 (file)
@@ -26,6 +26,7 @@
 
 using namespace sigc;
 using namespace MIDI;
+using namespace PBD;
 
 Controllable::Controllable (Port *p, bool is_bistate)
 {
index 692c06fe92403fc3b2e68935e9de44dce14b6a4b..e25a2737bab75dfd7d89e72dfd1abc47586820b9 100644 (file)
@@ -31,6 +31,7 @@
 
 using namespace std;
 using namespace MIDI;
+using namespace PBD;
 
 /* XXX check for strdup leaks */
 
index 3e1aefd4ebffe47ed86e1fa9507aff7cf3e8fb2e..61c47e856f96d82edd7e21ab74b6d17ccc40c116 100644 (file)
@@ -27,6 +27,7 @@
 
 using namespace std;
 using namespace MIDI;
+using namespace PBD;
 
 static std::map<int,string> mmc_cmd_map;
 static void build_mmc_cmd_map ()
index 25ea964dedf4c47e0c0dfbeb506a3e18e1655109..36fbd61124d9e1321e6205fe754378a954f29ca2 100644 (file)
@@ -16,6 +16,7 @@ TextReceiver text_receiver ("mmctest");
 #include "midi++/mmc.h"
 
 using namespace MIDI;
+using namespace PBD;
 
 Port *port;
 PortRequest midi_device;
index 4e64f12d43fa4348643a48cdbb1b239d9bdfc057..2766b3c5eda15f62027acbdf12164f6cf936c314 100644 (file)
@@ -22,6 +22,7 @@ basename.cc
 base_ui.cc
 convert.cc
 dmalloc.cc
+error.cc
 mountpoint.cc
 pathscanner.cc
 pool.cc
index 5598b20021d8f2b735ea9ae470c8c841ce6f231a..d3c8d5e4c77ca436b2253fbce44ae8d52473a5f8 100644 (file)
@@ -11,6 +11,7 @@
 #include "i18n.h"
 
 using namespace std;
+using namespace PBD;
        
 uint32_t BaseUI::rt_bit = 1;
 BaseUI::RequestType BaseUI::CallSlot = BaseUI::new_request_type();
diff --git a/libs/pbd3/error.cc b/libs/pbd3/error.cc
new file mode 100644 (file)
index 0000000..a6f8fb7
--- /dev/null
@@ -0,0 +1,7 @@
+#include <pbd/error.h>
+
+Transmitter  PBD::error (Transmitter::Error);
+Transmitter  PBD::info (Transmitter::Info);
+Transmitter  PBD::fatal (Transmitter::Fatal);
+Transmitter  PBD::warning (Transmitter::Warning);
+
index 5b96284a901ea5d6a0714e74b4cf9aceb146c231..2af227a3a03743935bde875aa592df7c9ca668ff 100644 (file)
@@ -27,6 +27,8 @@
 #include <pbd/pathscanner.h>
 #include <pbd/stl_delete.h>
 
+using namespace PBD;
+
 vector<string *> *
 PathScanner::operator() (const string &dirpath, const string &regexp,
                         bool match_fullpath, bool return_fullpath, 
index cb822e6210888ad8702bdbca6c3b9fe72c62b095..4136f02ee225d1e02fc3adfb625a0f810576db5f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 1998-99 Paul Barton-Davis
+    Copyright (C) 1998-2006 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 
     $Id$
 */
-#ifndef __libmisc_error_h__
-#define __libmisc_error_h__
+#ifndef __libpbd_error_h__
+#define __libpbd_error_h__
 
 #include "transmitter.h"
 
-extern Transmitter error;
-extern Transmitter info;
-extern Transmitter warning;
-extern Transmitter fatal;
+namespace PBD {
+       extern Transmitter error;
+       extern Transmitter info;
+       extern Transmitter warning;
+       extern Transmitter fatal;
+}
 
-#endif  // __libmisc_error_h__
+#endif  // __libpbd_error_h__
index 07fc266bcefdcb425b6e6d7eec44c8349363aab2..357cb9965fcffc6be67d7ea5f3ef1977c12c17d5 100644 (file)
@@ -104,6 +104,7 @@ endmsg (std::ostream &ostr)
        return ostr;
 }
 
+
 extern "C" { void pbd_c_error (const char *); }
 
 #endif // __libmisc_transmitter_h__
index 7318bd439812d76852dea1600bf7b399206ed2fa..089766482d0c7c54500358b038219344f301fa96 100644 (file)
@@ -25,6 +25,7 @@
 #include <pbd/error.h>
 
 using namespace std;
+using namespace PBD;
 
 Pool::Pool (string n, unsigned long item_size, unsigned long nitems)
 {
index 63f676a04fe7b64c3c636b6fec3592751c59a62b..876a9d86e5353cb70e7abcc0f40dc09f36ed31d3 100644 (file)
 #include <string>
 
 #include <pbd/transmitter.h>
+#include <pbd/error.h>
 
 using std::string;
 using std::ios;
 
-Transmitter  error (Transmitter::Error);
-Transmitter  info (Transmitter::Info);
-Transmitter  fatal (Transmitter::Fatal);
-Transmitter  warning (Transmitter::Warning);
-
 Transmitter::Transmitter (Channel c)
-
 {
        channel = c;
        switch (c) {
@@ -110,11 +105,11 @@ Transmitter::does_not_return ()
        }
 }
 
+
 extern "C" {
   void pbd_c_error (const char *str)
  
   {
-       extern Transmitter error;
-       error << str << endmsg;
+       PBD::error << str << endmsg;
   }
 }
index 38ff95d9f0da8c4f93d2d64359d48f9e1f5c3c82..f8a7d574f56622c573b0f57e3fa566890d746414 100644 (file)
@@ -23,6 +23,7 @@ cp.Append(POTFILE = domain + '.pot')
 cp_files=Split("""
 basic_ui.cc
 control_protocol.cc
+smpte.cc
 """)
 
 cp.Append(CCFLAGS="-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE")
@@ -53,4 +54,4 @@ env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), li
 env.Alias('tarball', env.Distribute (env['DISTTREE'],
                                     [ 'SConscript' ] +
                                     cp_files + 
-                                    glob.glob('po/*.po') + glob.glob('*.h')))
+                                    glob.glob('po/*.po') + glob.glob('*.h') + glob.glob('control_protocol/*.h')))
index 8cf157c26c7c698a205108d4b36ea434bdf40fa8..3dc93cc64ad980070886d6215a613b25a5288260 100644 (file)
@@ -24,7 +24,8 @@
 #include <ardour/session.h>
 #include <ardour/location.h>
 
-#include "basic_ui.h"
+#include <control_protocol/basic_ui.h>
+
 #include "i18n.h"
 
 using namespace ARDOUR;
@@ -263,19 +264,19 @@ BasicUI::smpte_frames_per_hour ()
 }
 
 void
-BasicUI::smpte_time (jack_nframes_t where, SMPTE_t& smpte)
+BasicUI::smpte_time (jack_nframes_t where, SMPTE::Time& smpte)
 {
-       session->smpte_time (where, *((SMPTE_Time *) &smpte));
+       session->smpte_time (where, *((SMPTE::Time *) &smpte));
 }
 
 void 
-BasicUI::smpte_to_sample (SMPTE_t& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes) const
+BasicUI::smpte_to_sample (SMPTE::Time& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes) const
 {
-       session->smpte_to_sample (*((SMPTE_Time*)&smpte), sample, use_offset, use_subframes);
+       session->smpte_to_sample (*((SMPTE::Time*)&smpte), sample, use_offset, use_subframes);
 }
 
 void 
-BasicUI::sample_to_smpte (jack_nframes_t sample, SMPTE_t& smpte, bool use_offset, bool use_subframes) const
+BasicUI::sample_to_smpte (jack_nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes) const
 {
-       session->sample_to_smpte (sample, *((SMPTE_Time*)&smpte), use_offset, use_subframes);
+       session->sample_to_smpte (sample, *((SMPTE::Time*)&smpte), use_offset, use_subframes);
 }
diff --git a/libs/surfaces/control_protocol/basic_ui.h b/libs/surfaces/control_protocol/basic_ui.h
deleted file mode 100644 (file)
index 81f2727..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-    Copyright (C) 2006 Paul Davis 
-
-    This program is free software; you can redistribute it
-    and/or modify it under the terms of the GNU Lesser
-    General Public License as published by the Free Software
-    Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#ifndef __ardour_basic_ui_h__
-#define __ardour_basic_ui_h__
-
-#include <string>
-
-#include <jack/types.h>
-
-namespace ARDOUR {
-       class Session;
-}
-
-class BasicUI {
-  public:
-       BasicUI (ARDOUR::Session&);
-       virtual ~BasicUI ();
-       
-       void add_marker ();
-
-       void register_thread (std::string name);
-
-       /* transport control */
-
-       void loop_toggle ();
-       void goto_start ();
-       void goto_end ();
-       void rewind ();
-       void ffwd ();
-       void transport_stop ();
-       void transport_play (bool jump_back = true);
-       void set_transport_speed (float speed);
-       float get_transport_speed ();
-
-       jack_nframes_t transport_frame ();
-       void locate (jack_nframes_t frame, bool play = false);
-       bool locating ();
-       bool locked ();
-
-       void save_state ();
-       void prev_marker ();
-       void next_marker ();
-       void undo ();
-       void redo ();
-       void toggle_punch_in ();
-       void toggle_punch_out ();
-
-       void set_record_enable (bool yn);
-       bool get_record_enabled ();
-
-       void rec_enable_toggle ();
-       void toggle_all_rec_enables ();
-
-       jack_nframes_t smpte_frames_per_hour ();
-
-       struct SMPTE_t {
-               bool negative;
-               uint32_t hours;
-               uint32_t minutes;
-               uint32_t seconds;
-               uint32_t frames;
-               uint32_t subframes; // mostly not used
-
-               SMPTE_t () {
-                       negative = false;
-                       hours = 0;
-                       minutes = 0;
-                       seconds = 0;
-                       frames = 0;
-                       subframes = 0;
-               }
-       };
-
-       void smpte_time (jack_nframes_t where, SMPTE_t&);
-       void smpte_to_sample (SMPTE_t& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes) const;
-       void sample_to_smpte (jack_nframes_t sample, SMPTE_t& smpte, bool use_offset, bool use_subframes) const;
-
-  protected:
-       BasicUI ();
-       ARDOUR::Session* session;
-};
-
-#endif /* __ardour_basic_ui_h__ */
index 6407c643857e856cf805e773f89b3c640494ebe4..10295bc698d522d970d045db1b5d3c8c170bc11f 100644 (file)
@@ -23,7 +23,7 @@
 #include <ardour/route.h>
 #include <ardour/audio_track.h>
 
-#include "control_protocol.h"
+#include <control_protocol/control_protocol.h>
 
 using namespace ARDOUR;
 using namespace std;
diff --git a/libs/surfaces/control_protocol/control_protocol.h b/libs/surfaces/control_protocol/control_protocol.h
deleted file mode 100644 (file)
index 720188c..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-    Copyright (C) 2006 Paul Davis 
-
-    This program is free software; you can redistribute it
-    and/or modify it under the terms of the GNU Lesser
-    General Public License as published by the Free Software
-    Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
-*/
-
-#ifndef ardour_control_protocols_h
-#define ardour_control_protocols_h
-
-#include <string>
-#include <vector>
-#include <list>
-#include <sigc++/sigc++.h>
-
-#include "basic_ui.h"
-
-namespace ARDOUR {
-
-class Route;
-class Session;
-
-class ControlProtocol : public sigc::trackable, public BasicUI {
-  public:
-       ControlProtocol (Session&, std::string name);
-       virtual ~ControlProtocol();
-
-       std::string name() const { return _name; }
-
-       virtual int set_active (bool yn) = 0;
-       bool get_active() const { return _active; }
-
-       sigc::signal<void> ActiveChanged;
-
-       /* signals that a control protocol can emit and other (presumably graphical)
-          user interfaces can respond to
-       */
-
-       static sigc::signal<void> ZoomToSession;
-       static sigc::signal<void> ZoomIn;
-       static sigc::signal<void> ZoomOut;
-       static sigc::signal<void> Enter;
-       static sigc::signal<void,float> ScrollTimeline;
-
-       /* the model here is as follows:
-
-          we imagine most control surfaces being able to control
-          from 1 to N tracks at a time, with a session that may
-          contain 1 to M tracks, where M may be smaller, larger or
-          equal to N. 
-
-          the control surface has a fixed set of physical controllers
-          which can potentially be mapped onto different tracks/busses
-          via some mechanism.
-
-          therefore, the control protocol object maintains
-          a table that reflects the current mapping between
-          the controls and route object.
-       */
-
-       void set_route_table_size (uint32_t size);
-       void set_route_table (uint32_t table_index, ARDOUR::Route*);
-       bool set_route_table (uint32_t table_index, uint32_t remote_control_id);
-
-       void route_set_rec_enable (uint32_t table_index, bool yn);
-       bool route_get_rec_enable (uint32_t table_index);
-
-       float route_get_gain (uint32_t table_index);
-       void route_set_gain (uint32_t table_index, float);
-       float route_get_effective_gain (uint32_t table_index);
-
-       float route_get_peak_input_power (uint32_t table_index, uint32_t which_input);
-
-       bool route_get_muted (uint32_t table_index);
-       void route_set_muted (uint32_t table_index, bool);
-
-       bool route_get_soloed (uint32_t table_index);
-       void route_set_soloed (uint32_t table_index, bool);
-
-       std::string route_get_name (uint32_t table_index);
-
-  protected:
-       std::vector<ARDOUR::Route*> route_table;
-       std::string _name;
-       bool _active;
-
-       void next_track (uint32_t initial_id);
-       void prev_track (uint32_t initial_id);
-};
-
-extern "C" {
-       struct ControlProtocolDescriptor {
-           const char* name;      /* descriptive */
-           const char* id;        /* unique and version-specific */
-           void*       ptr;       /* protocol can store a value here */
-           void*       module;    /* not for public access */
-           int         mandatory; /* if non-zero, always load and do not make optional */
-           bool             (*probe)(ControlProtocolDescriptor*);
-           ControlProtocol* (*initialize)(ControlProtocolDescriptor*,Session*);
-           void             (*destroy)(ControlProtocolDescriptor*,ControlProtocol*);
-           
-       };
-}
-
-}
-
-#endif // ardour_control_protocols_h
diff --git a/libs/surfaces/control_protocol/control_protocol/basic_ui.h b/libs/surfaces/control_protocol/control_protocol/basic_ui.h
new file mode 100644 (file)
index 0000000..23b274c
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+    Copyright (C) 2006 Paul Davis 
+
+    This program is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser
+    General Public License as published by the Free Software
+    Foundation; either version 2 of the License, or (at your
+    option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id$
+*/
+
+#ifndef __ardour_basic_ui_h__
+#define __ardour_basic_ui_h__
+
+#include <string>
+
+#include <jack/types.h>
+#include <control_protocol/smpte.h>
+
+namespace ARDOUR {
+       class Session;
+}
+
+class BasicUI {
+  public:
+       BasicUI (ARDOUR::Session&);
+       virtual ~BasicUI ();
+       
+       void add_marker ();
+
+       void register_thread (std::string name);
+
+       /* transport control */
+
+       void loop_toggle ();
+       void goto_start ();
+       void goto_end ();
+       void rewind ();
+       void ffwd ();
+       void transport_stop ();
+       void transport_play (bool jump_back = true);
+       void set_transport_speed (float speed);
+       float get_transport_speed ();
+
+       jack_nframes_t transport_frame ();
+       void locate (jack_nframes_t frame, bool play = false);
+       bool locating ();
+       bool locked ();
+
+       void save_state ();
+       void prev_marker ();
+       void next_marker ();
+       void undo ();
+       void redo ();
+       void toggle_punch_in ();
+       void toggle_punch_out ();
+
+       void set_record_enable (bool yn);
+       bool get_record_enabled ();
+
+       void rec_enable_toggle ();
+       void toggle_all_rec_enables ();
+
+       jack_nframes_t smpte_frames_per_hour ();
+
+       void smpte_time (jack_nframes_t where, SMPTE::Time&);
+       void smpte_to_sample (SMPTE::Time& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes) const;
+       void sample_to_smpte (jack_nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes) const;
+
+  protected:
+       BasicUI ();
+       ARDOUR::Session* session;
+};
+
+#endif /* __ardour_basic_ui_h__ */
diff --git a/libs/surfaces/control_protocol/control_protocol/control_protocol.h b/libs/surfaces/control_protocol/control_protocol/control_protocol.h
new file mode 100644 (file)
index 0000000..69135f2
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+    Copyright (C) 2006 Paul Davis 
+
+    This program is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser
+    General Public License as published by the Free Software
+    Foundation; either version 2 of the License, or (at your
+    option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id$
+*/
+
+#ifndef ardour_control_protocols_h
+#define ardour_control_protocols_h
+
+#include <string>
+#include <vector>
+#include <list>
+#include <sigc++/sigc++.h>
+
+#include <control_protocol/basic_ui.h>
+
+namespace ARDOUR {
+
+class Route;
+class Session;
+
+class ControlProtocol : public sigc::trackable, public BasicUI {
+  public:
+       ControlProtocol (Session&, std::string name);
+       virtual ~ControlProtocol();
+
+       std::string name() const { return _name; }
+
+       virtual int set_active (bool yn) = 0;
+       bool get_active() const { return _active; }
+
+       sigc::signal<void> ActiveChanged;
+
+       /* signals that a control protocol can emit and other (presumably graphical)
+          user interfaces can respond to
+       */
+
+       static sigc::signal<void> ZoomToSession;
+       static sigc::signal<void> ZoomIn;
+       static sigc::signal<void> ZoomOut;
+       static sigc::signal<void> Enter;
+       static sigc::signal<void,float> ScrollTimeline;
+
+       /* the model here is as follows:
+
+          we imagine most control surfaces being able to control
+          from 1 to N tracks at a time, with a session that may
+          contain 1 to M tracks, where M may be smaller, larger or
+          equal to N. 
+
+          the control surface has a fixed set of physical controllers
+          which can potentially be mapped onto different tracks/busses
+          via some mechanism.
+
+          therefore, the control protocol object maintains
+          a table that reflects the current mapping between
+          the controls and route object.
+       */
+
+       void set_route_table_size (uint32_t size);
+       void set_route_table (uint32_t table_index, ARDOUR::Route*);
+       bool set_route_table (uint32_t table_index, uint32_t remote_control_id);
+
+       void route_set_rec_enable (uint32_t table_index, bool yn);
+       bool route_get_rec_enable (uint32_t table_index);
+
+       float route_get_gain (uint32_t table_index);
+       void route_set_gain (uint32_t table_index, float);
+       float route_get_effective_gain (uint32_t table_index);
+
+       float route_get_peak_input_power (uint32_t table_index, uint32_t which_input);
+
+       bool route_get_muted (uint32_t table_index);
+       void route_set_muted (uint32_t table_index, bool);
+
+       bool route_get_soloed (uint32_t table_index);
+       void route_set_soloed (uint32_t table_index, bool);
+
+       std::string route_get_name (uint32_t table_index);
+
+  protected:
+       std::vector<ARDOUR::Route*> route_table;
+       std::string _name;
+       bool _active;
+
+       void next_track (uint32_t initial_id);
+       void prev_track (uint32_t initial_id);
+};
+
+extern "C" {
+       struct ControlProtocolDescriptor {
+           const char* name;      /* descriptive */
+           const char* id;        /* unique and version-specific */
+           void*       ptr;       /* protocol can store a value here */
+           void*       module;    /* not for public access */
+           int         mandatory; /* if non-zero, always load and do not make optional */
+           bool             (*probe)(ControlProtocolDescriptor*);
+           ControlProtocol* (*initialize)(ControlProtocolDescriptor*,Session*);
+           void             (*destroy)(ControlProtocolDescriptor*,ControlProtocol*);
+           
+       };
+}
+
+}
+
+#endif // ardour_control_protocols_h
diff --git a/libs/surfaces/control_protocol/control_protocol/smpte.h b/libs/surfaces/control_protocol/control_protocol/smpte.h
new file mode 100644 (file)
index 0000000..09c1c96
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+       Copyright (C) 2006 Paul Davis
+       
+       This program is free software; you can redistribute it and/or modify it
+       under the terms of the GNU Lesser General Public License as published
+       by the Free Software Foundation; either version 2 of the License, or
+       (at your option) any later version.
+       
+       This program is distributed in the hope that it will be useful, but WITHOUT
+       ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+       FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+       for more details.
+       
+       You should have received a copy of the GNU General Public License along
+       with this program; if not, write to the Free Software Foundation, Inc.,
+       675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef __ardour_smpte_h__
+#define __ardour_smpte_h__
+
+#include <inttypes.h>
+
+namespace SMPTE {
+
+enum Wrap {
+       NONE = 0,
+       FRAMES,
+       SECONDS,
+       MINUTES,
+       HOURS
+};
+
+/** SMPTE frame rate (in frames per second).
+ *
+ * This should be eliminated in favour of a float to support arbitrary rates.
+ */
+enum FPS {
+    MTC_24_FPS = 0,
+    MTC_25_FPS = 1,
+    MTC_30_FPS_DROP = 2,
+    MTC_30_FPS = 3
+};
+
+struct Time {
+       bool       negative;
+       uint32_t   hours;
+       uint32_t   minutes;
+       uint32_t   seconds;
+       uint32_t   frames;       ///< SMPTE frames (not audio samples)
+       uint32_t   subframes;    ///< Typically unused
+       FPS        rate;         ///< Frame rate of this Time
+       static FPS default_rate; ///< Rate to use for default constructor
+
+       Time(FPS a_rate = default_rate) {
+               negative = false;
+               hours = 0;
+               minutes = 0;
+               seconds = 0;
+               frames = 0;
+               subframes = 0;
+               rate = a_rate;
+       }
+};
+
+Wrap increment( Time& smpte );
+Wrap decrement( Time& smpte );
+Wrap increment_subframes( Time& smpte );
+Wrap decrement_subframes( Time& smpte );
+Wrap increment_seconds( Time& smpte );
+Wrap increment_minutes( Time& smpte );
+Wrap increment_hours( Time& smpte );
+void frames_floor( Time& smpte );
+void seconds_floor( Time& smpte );
+void minutes_floor( Time& smpte );
+void hours_floor( Time& smpte );
+
+} // namespace SMPTE
+
+#endif  // __ardour_smpte_h__
diff --git a/libs/surfaces/control_protocol/smpte.cc b/libs/surfaces/control_protocol/smpte.cc
new file mode 100644 (file)
index 0000000..55d0660
--- /dev/null
@@ -0,0 +1,406 @@
+/*
+       Copyright (C) 2006 Paul Davis
+       
+       This program is free software; you can redistribute it and/or modify it
+       under the terms of the GNU Lesser General Public License as published
+       by the Free Software Foundation; either version 2 of the License, or
+       (at your option) any later version.
+       
+       This program is distributed in the hope that it will be useful, but WITHOUT
+       ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+       FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+       for more details.
+       
+       You should have received a copy of the GNU General Public License along
+       with this program; if not, write to the Free Software Foundation, Inc.,
+       675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#define SMPTE_IS_AROUND_ZERO( sm ) (!(sm).frames && !(sm).seconds && !(sm).minutes && !(sm).hours)
+#define SMPTE_IS_ZERO( sm ) (!(sm).frames && !(sm).seconds && !(sm).minutes && !(sm).hours && !(sm.subframes))
+
+#include <control_protocol/smpte.h>
+
+namespace SMPTE {
+
+FPS Time::default_rate = MTC_30_FPS;
+
+
+/** Increment @a smpte by exactly one frame (keep subframes value).
+ * Realtime safe.
+ * @return true if seconds wrap.
+ */
+Wrap
+increment( Time& smpte )
+{
+       Wrap wrap = NONE;
+
+       if (smpte.negative) {
+               if (SMPTE_IS_AROUND_ZERO(smpte) && smpte.subframes) {
+                       // We have a zero transition involving only subframes
+                       smpte.subframes = 80 - smpte.subframes;
+                       smpte.negative = false;
+                       return SECONDS;
+               }
+    
+               smpte.negative = false;
+               wrap = decrement( smpte );
+               if (!SMPTE_IS_ZERO( smpte )) {
+                       smpte.negative = true;
+               }
+               return wrap;
+       }
+  
+       switch (smpte.rate) {
+       case MTC_24_FPS:
+               if (smpte.frames == 23) {
+                       smpte.frames = 0;
+                       wrap = SECONDS;
+               }
+               break;
+       case MTC_25_FPS:
+               if (smpte.frames == 24) {
+                       smpte.frames = 0;
+                       wrap = SECONDS;
+               }
+               break;
+       case MTC_30_FPS_DROP:
+               if (smpte.frames == 29) {
+                       if ( ((smpte.minutes + 1) % 10) && (smpte.seconds == 59) ) {
+                               smpte.frames = 2;
+                       }
+                       else {
+                               smpte.frames = 0;
+                       }
+                       wrap = SECONDS;
+               }
+               break;
+       case MTC_30_FPS:
+               if (smpte.frames == 29) {
+                       smpte.frames = 0;
+                       wrap = SECONDS;
+               }
+               break;
+       }
+  
+       if (wrap == SECONDS) {
+               if (smpte.seconds == 59) {
+                       smpte.seconds = 0;
+                       wrap = MINUTES;
+                       if (smpte.minutes == 59) {
+                               smpte.minutes = 0;
+                               wrap = HOURS;
+                               smpte.hours++;
+                       } else {
+                               smpte.minutes++;
+                       }
+               } else {
+                       smpte.seconds++;
+               }
+       } else {
+               smpte.frames++;
+       }
+  
+       return wrap;
+}
+
+
+/** Decrement @a smpte by exactly one frame (keep subframes value)
+ * Realtime safe.
+ * @return true if seconds wrap. */
+Wrap
+decrement( Time& smpte )
+{
+       Wrap wrap = NONE;
+  
+  
+       if (smpte.negative || SMPTE_IS_ZERO(smpte)) {
+               smpte.negative = false;
+               wrap = increment( smpte );
+               smpte.negative = true;
+               return wrap;
+       } else if (SMPTE_IS_AROUND_ZERO(smpte) && smpte.subframes) {
+               // We have a zero transition involving only subframes
+               smpte.subframes = 80 - smpte.subframes;
+               smpte.negative = true;
+               return SECONDS;
+       }
+  
+       switch (smpte.rate) {
+       case MTC_24_FPS:
+               if (smpte.frames == 0) {
+                       smpte.frames = 23;
+                       wrap = SECONDS;
+               }
+               break;
+       case MTC_25_FPS:
+               if (smpte.frames == 0) {
+                       smpte.frames = 24;
+                       wrap = SECONDS;
+               }
+               break;
+       case MTC_30_FPS_DROP:
+               if ((smpte.minutes % 10) && (smpte.seconds == 0)) {
+                       if (smpte.frames <= 2) {
+                               smpte.frames = 29;
+                               wrap = SECONDS;
+                       }
+               } else if (smpte.frames == 0) {
+                       smpte.frames = 29;
+                       wrap = SECONDS;
+               }
+               break;
+       case MTC_30_FPS:
+               if (smpte.frames == 0) {
+                       smpte.frames = 29;
+                       wrap = SECONDS;
+               }
+               break;
+       }
+  
+       if (wrap == SECONDS) {
+               if (smpte.seconds == 0) {
+                       smpte.seconds = 59;
+                       wrap = MINUTES;
+                       if (smpte.minutes == 0) {
+                               smpte.minutes = 59;
+                               wrap = HOURS;
+                               smpte.hours--;
+                       }
+                       else {
+                               smpte.minutes--;
+                       }
+               } else {
+                       smpte.seconds--;
+               }
+       } else {
+               smpte.frames--;
+       }
+  
+       if (SMPTE_IS_ZERO( smpte )) {
+               smpte.negative = false;
+       }
+  
+       return wrap;
+}
+
+
+/** Go to lowest absolute subframe value in this frame (set to 0 :-) ) */
+void
+frames_floor( Time& smpte )
+{
+       smpte.subframes = 0;
+       if (SMPTE_IS_ZERO(smpte)) {
+               smpte.negative = false;
+       }
+}
+
+
+/** Increment @a smpte by one subframe */
+Wrap
+increment_subframes( Time& smpte )
+{
+       Wrap wrap = NONE;
+  
+       if (smpte.negative) {
+               smpte.negative = false;
+               wrap = decrement_subframes( smpte );
+               if (!SMPTE_IS_ZERO(smpte)) {
+                       smpte.negative = true;
+               }
+               return wrap;
+       }
+  
+       smpte.subframes++;
+       if (smpte.subframes >= 80) {
+               smpte.subframes = 0;
+               increment( smpte );
+               return FRAMES;
+       }
+       return NONE;
+}
+
+
+/** Decrement @a smpte by one subframe */
+Wrap
+decrement_subframes( Time& smpte )
+{
+       Wrap wrap = NONE;
+  
+       if (smpte.negative) {
+               smpte.negative = false;
+               wrap = increment_subframes( smpte );
+               smpte.negative = true;
+               return wrap;
+       }
+  
+       if (smpte.subframes <= 0) {
+               smpte.subframes = 0;
+               if (SMPTE_IS_ZERO(smpte)) {
+                       smpte.negative = true;
+                       smpte.subframes = 1;
+                       return FRAMES;
+               } else {
+                       decrement( smpte );
+                       smpte.subframes = 79;
+                       return FRAMES;
+               }
+       } else {
+               smpte.subframes--;
+               if (SMPTE_IS_ZERO(smpte)) {
+                       smpte.negative = false;
+               }
+               return NONE;
+       }
+}
+
+
+/** Go to next whole second (frames == 0 or frames == 2) */
+Wrap
+increment_seconds( Time& smpte )
+{
+       Wrap wrap = NONE;
+  
+       // Clear subframes
+       frames_floor( smpte );
+  
+       if (smpte.negative) {
+               // Wrap second if on second boundary
+               wrap = increment(smpte);
+               // Go to lowest absolute frame value
+               seconds_floor( smpte );
+               if (SMPTE_IS_ZERO(smpte)) {
+                       smpte.negative = false;
+               }
+       } else {
+               // Go to highest possible frame in this second
+               switch (smpte.rate) {
+               case MTC_24_FPS:
+                       smpte.frames = 23;
+                       break;
+               case MTC_25_FPS:
+                       smpte.frames = 24;
+                       break;
+               case MTC_30_FPS_DROP:
+               case MTC_30_FPS:
+                       smpte.frames = 29;
+                       break;
+               }
+    
+               // Increment by one frame
+               wrap = increment( smpte );
+       }
+  
+       return wrap;
+}
+
+
+/** Go to lowest (absolute) frame value in this second
+ * Doesn't care about positive/negative */
+void
+seconds_floor( Time& smpte )
+{
+       // Clear subframes
+       frames_floor( smpte );
+  
+       // Go to lowest possible frame in this second
+       switch (smpte.rate) {
+       case MTC_24_FPS:
+       case MTC_25_FPS:
+       case MTC_30_FPS:
+               smpte.frames = 0;
+               break;
+       case MTC_30_FPS_DROP:
+               if ((smpte.minutes % 10) && (smpte.seconds == 0)) {
+                       smpte.frames = 2;
+               } else {
+                       smpte.frames = 0;
+               }
+               break;
+       }
+  
+       if (SMPTE_IS_ZERO(smpte)) {
+               smpte.negative = false;
+       }
+}
+
+
+/** Go to next whole minute (seconds == 0, frames == 0 or frames == 2) */
+Wrap
+increment_minutes( Time& smpte )
+{
+       Wrap wrap = NONE;
+  
+       // Clear subframes
+       frames_floor( smpte );
+  
+       if (smpte.negative) {
+               // Wrap if on minute boundary
+               wrap = increment_seconds( smpte );
+               // Go to lowest possible value in this minute
+               minutes_floor( smpte );
+       } else {
+               // Go to highest possible second
+               smpte.seconds = 59;
+               // Wrap minute by incrementing second
+               wrap = increment_seconds( smpte );
+       }
+  
+       return wrap;
+}
+
+
+/** Go to lowest absolute value in this minute */
+void
+minutes_floor( Time& smpte )
+{
+       // Go to lowest possible second
+       smpte.seconds = 0;
+       // Go to lowest possible frame
+       seconds_floor( smpte );
+
+       if (SMPTE_IS_ZERO(smpte)) {
+               smpte.negative = false;
+       }
+}
+
+
+/** Go to next whole hour (minute = 0, second = 0, frame = 0) */
+Wrap
+increment_hours( Time& smpte )
+{
+       Wrap wrap = NONE;
+  
+       // Clear subframes
+       frames_floor(smpte);
+  
+       if (smpte.negative) {
+               // Wrap if on hour boundary
+               wrap = increment_minutes( smpte );
+               // Go to lowest possible value in this hour
+               hours_floor( smpte );
+       } else {
+               smpte.minutes = 59;
+               wrap = increment_minutes( smpte );
+       }
+  
+       return wrap;
+}
+
+
+/** Go to lowest absolute value in this hour */
+void
+hours_floor( Time& smpte )
+{
+       smpte.minutes = 0;
+       smpte.seconds = 0;
+       smpte.frames = 0;
+       smpte.subframes = 0;
+  
+       if (SMPTE_IS_ZERO(smpte)) {
+               smpte.negative = false;
+       }
+}
+
+
+} // namespace SMPTE
index 77a4dca805dd83ea40e3ec31ee5e6732587bb4b2..70cbd181c83210b4520bcb08f85241a26fc1926a 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef ardour_generic_midi_control_protocol_h
 #define ardour_generic_midi_control_protocol_h
 
-#include "control_protocol.h"
+#include <control_protocol/control_protocol.h>
 
 namespace MIDI {
        class Port;
index 625ac65273f25204383ced4a37ab89b985773d54..c6c59c658992ec49e5f793074ed968ba184dddb6 100644 (file)
@@ -1,5 +1,4 @@
-#include "control_protocol.h"
-
+#include <control_protocol/control_protocol.h>
 #include "generic_midi_control_protocol.h"
 
 using namespace ARDOUR;
index 20f38dce08666b0835e087af6713ea6fdc993039..29a0fde043d62f5fd7e922f962186f16d878297f 100644 (file)
@@ -1,5 +1,4 @@
-#include "control_protocol.h"
-
+#include <control_protocol/control_protocol.h>
 #include "tranzport_control_protocol.h"
 
 using namespace ARDOUR;
index 4fad413d2418c895d4dec98ce5a531533f50c76c..ee8fa95bc262d51f904a47d4d62435feb5719ebd 100644 (file)
@@ -41,6 +41,7 @@
 using namespace ARDOUR;
 using namespace std;
 using namespace sigc;
+using namespace PBD;
 
 #include "i18n.h"
 
@@ -324,7 +325,7 @@ TranzportControlProtocol::show_transport_time ()
        if (where != last_where) {
 
                char buf[5];
-               SMPTE_Time smpte;
+               SMPTE::Time smpte;
 
                session->smpte_time (where, smpte);
                
@@ -395,10 +396,7 @@ TranzportControlProtocol::open_core (struct usb_device* dev)
        }
 
        if (usb_set_configuration (udev, 1) < 0) {
-               error << _("Tranzport: cannot configure USB interface") << endmsg;
-               usb_close (udev);
-               udev = 0;
-               return -1;
+               cerr << _("Tranzport: cannot configure USB interface") << endmsg;
        }
 
        return 0;
index 44045f683484df88a3bb867a9445a59b6d99e808..546cc2f2af3189ff5bbc85b59ee9a94fc79bc201 100644 (file)
@@ -11,7 +11,7 @@
 
 #include <ardour/types.h>
 
-#include "control_protocol.h"
+#include <control_protocol/control_protocol.h>
 
 class TranzportControlProtocol : public ARDOUR::ControlProtocol
 {
index b5410ad7a5caa637b9d307731f0680ef9dacc6e7..7fa556530b1e083a53a84211d33ed5ef484bf117 100644 (file)
@@ -13,5 +13,5 @@ for template in template_files:
 
 Default(template_build)
 
-env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour/templates'), template_build))
+env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2/templates'), template_build))
 env.Alias('tarball', env.Distribute (env['DISTTREE'], [ 'SConscript' ] + template_build))
diff --git a/vst/SConscript b/vst/SConscript
new file mode 100644 (file)
index 0000000..fead9ba
--- /dev/null
@@ -0,0 +1,54 @@
+# -*- python -*-
+
+import os
+import os.path
+import glob
+
+Import('env install_prefix final_prefix config_prefix libraries')
+
+ardour_vst = env.Copy()
+
+sources = Split ("""
+winmain.c
+#libs/fst/fst.o
+#libs/fst/fstinfofile.o
+#libs/fst/vstwin.o
+#libs/fst/vsti.o
+"""
+)
+
+ardour_vst.Append (CCFLAGS="-DVST_SUPPORT", CPPPATH="#libs/fst", LIBPATH='#gtk2_ardour')
+ardour_vst.Append (LINKFLAGS='-L/usr/X11R6/lib -lasound -lardourgtk -lX11 -lpthread') 
+ardour_vst["CC"] ="winegcc"
+ardour_vst["LINK"] ="wineg++ -mwindows"
+
+ardour_vst.Merge ([
+    libraries['ardour'],
+    libraries['ardour_cp'],
+    libraries['gtkmm2ext'],
+    libraries['midi++2'],
+    libraries['pbd3'],
+    libraries['gtkmm2'],
+    libraries['glib2'],
+    libraries['libgnomecanvas2'],
+    libraries['libgnomecanvasmm'],
+    libraries['sysmidi'],
+    libraries['sndfile'],
+    libraries['flac'],
+    libraries['lrdf'],
+    libraries['glibmm2'],
+    libraries['pangomm'],
+    libraries['atkmm'],
+    libraries['gdkmm2'],
+    libraries['sigc2'],
+    libraries['gtk2'],
+    libraries['xml'],
+    libraries['xslt'],
+    libraries['soundtouch'],
+    libraries['samplerate'],
+    libraries['jack']
+])
+
+wine_executable = ardour_vst.Program (target = 'ardour_vst', source = sources)
+
+Default(wine_executable)
diff --git a/vst/winmain.c b/vst/winmain.c
new file mode 100644 (file)
index 0000000..c2ad5fc
--- /dev/null
@@ -0,0 +1,17 @@
+#include <limits.h>
+#include <unistd.h>
+#include <stdio.h>
+
+extern int ardour_main(int argc, char* argv[]);
+
+int
+main (int argc, char* argv[]) 
+{
+    // call the user specified main function    
+    
+       int result = ardour_main(argc, argv);
+       printf ("main returned %d\n", result);
+       
+       return result;
+
+}