Merge with 2.0-ongoing R3082.

Superficial generification of export stuff.


git-svn-id: svn://localhost/ardour2/branches/3.0@3088 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2008-02-19 22:10:27 +00:00
parent 4cbd7f0eab
commit a2a6cc0404
31 changed files with 657 additions and 367 deletions

View File

@ -7,7 +7,7 @@
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
(gtk_accel_path "<Actions>/Transport/record-roll" "<%TERTIARY%>space")
(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
(gtk_accel_path "<Actions>/Editor/align-regions-end-relative" "<%PRIMARY%>less")
@ -43,17 +43,18 @@
;; note that ctrl-w is special and consumed by the keyboard snooper
(gtk_accel_path "<Actions>/Editor/audition-at-mouse" "w")
(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
(gtk_accel_path "<Actions>/Common/goto-editor" "<%WINDOW%>e")
; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r")
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%>r")
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
@ -62,28 +63,28 @@
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%WINDOW%>o")
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%SECONDARY%>o")
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
;; MITTELZEILE
(gtk_accel_path "<Actions>/Editor/trim-front" "a")
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
(gtk_accel_path "<Actions>/Editor/trim-back" "s")
(gtk_accel_path "<Actions>/Editor/trim-back" "d")
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%SECONDARY%>d")
(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
(gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%WINDOW%>k")
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%WINDOW%>l")
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
(gtk_accel_path "<Actions>/Transport/Loop" "l")
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
@ -97,14 +98,14 @@
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
(gtk_accel_path "<Actions>/Editor/crop" "c")
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%WINDOW%>c")
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
(gtk_accel_path "<Actions>/Common/goto-mixer" "<%WINDOW%>m")
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "m")
(gtk_accel_path "<Actions>/Common/goto-mixer" "<%SECONDARY%>m")
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m")
;; arrow keys, navigation etc.

View File

@ -80,7 +80,8 @@ ActionManager::init ()
ui_manager->add_ui_from_file (ui_file.to_string());
loaded = true;
} catch (Glib::MarkupError& err) {
error << _("badly formatted UI definition file") << endmsg;
error << string_compose (_("badly formatted UI definition file: %1"), err.what()) << endmsg;
cerr << string_compose (_("badly formatted UI definition file: %1"), err.what()) << endl;
} catch (...) {
error << _("Ardour menu definition file not found") << endmsg;
}

View File

@ -1,12 +1,11 @@
<ui>
<menubar name='Main' action='MainMenu'>
<menu name='Session' action='Session'>
<menuitem action='New'/>
<menuitem action='Open'/>
<menuitem action='Recent'/>
<menuitem action='Close'/>
<menuitem action='Quit'/>
<separator/>
<menuitem action='Save'/>
<menuitem action='Snapshot'/>
@ -18,6 +17,7 @@
<menuitem action='addExistingAudioFiles'/>
<separator/>
<menuitem action='ExportSession'/>
<menuitem action='export-region'/>
</menu>
<separator/>
@ -28,43 +28,78 @@
<menuitem action='ToggleOptionsEditor'/>
<menuitem action='About'/>
</menu>
<menu name='Transport' action='Transport'>
<menuitem action='ToggleRoll'/>
<menuitem action='play-from-edit-point-and-return'/>
<menuitem action='play-edit-range'/>
<menu action="PlayMenu">
<menuitem action='play-selected-regions'/>
<menuitem action='play-edit-range'/>
<menuitem action='play-from-edit-point-and-return'/>
<menuitem action='Loop'/>
</menu>
<menuitem action='record-roll'/>
<menuitem action='Record'/>
<menuitem action='ToggleRollForgetCapture'/>
<menuitem action='Loop'/>
<menuitem action='loop-region'/>
<menuitem action='set-playhead'/>
<menuitem action='remove-last-capture'/>
<menu action="SetLoopMenu">
<menuitem action='set-loop-from-edit-range'/>
<menuitem action='set-loop-from-region'/>
</menu>
<menu action="SetPunchMenu">
<menuitem action='set-punch-from-edit-range'/>
<menuitem action='set-punch-from-region'/>
</menu>
<menuitem action='Forward'/>
<menuitem action='Rewind'/>
<menuitem action='GotoZero'/>
<menuitem action='GotoStart'/>
<menuitem action='GotoEnd'/>
<separator/>
<menuitem action='tab-to-transient-forwards'/>
<menuitem action='tab-to-transient-backwards'/>
<menuitem action='nudge-playhead-forward'/>
<menuitem action='nudge-playhead-backward'/>
<separator/>
<menuitem action='Record'/>
<separator/>
<menuitem action='TransitionToRoll'/>
<menuitem action='TransitionToReverse'/>
<separator/>
<menuitem action='jump-forward-to-mark'/>
<menuitem action='jump-backward-to-mark'/>
<menuitem action='add-location-from-playhead'/>
<separator/>
<menuitem action='playhead-to-next-region-boundary'/>
<menuitem action='playhead-to-previous-region-boundary'/>
<menuitem action='playhead-to-next-region-sync'/>
<menuitem action='playhead-to-previous-region-sync'/>
<menuitem action='center-playhead'/>
<separator/>
<menuitem action='center-playhead'/>
<menuitem action='set-playhead'/>
<menuitem action='playhead-to-edit'/>
<menuitem action='focus-on-clock'/>
<menuitem action='nudge-playhead-forward'/>
<menuitem action='nudge-playhead-backward'/>
<menu action="MovePlayHeadMenu">
<menuitem action='tab-to-transient-forwards'/>
<menuitem action='tab-to-transient-backwards'/>
<separator/>
<menuitem action='playhead-forward-to-grid'/>
<menuitem action='playhead-backward-to-grid'/>
<separator/>
<menuitem action='playhead-to-next-region-boundary'/>
<menuitem action='playhead-to-previous-region-boundary'/>
<menuitem action='playhead-to-next-region-sync'/>
<menuitem action='playhead-to-previous-region-sync'/>
<separator/>
<menuitem action='jump-forward-to-mark'/>
<menuitem action='jump-backward-to-mark'/>
</menu>
<menu action="MoveActiveMarkMenu">
<menuitem action='selected-marker-to-next-region-boundary'/>
<menuitem action='selected-marker-to-previous-region-boundary'/>
<menuitem action='edit-cursor-to-next-region-sync'/>
<menuitem action='edit-cursor-to-previous-region-sync'/>
<separator/>
<menuitem action='edit-to-playhead'/>
<menuitem action='set-edit-point'/>
</menu>
<menu action="MarkerMenu">
<menuitem action='add-location-from-playhead'/>
<separator/>
<menuitem action='goto-mark-1'/>
<menuitem action='goto-mark-2'/>
<menuitem action='goto-mark-3'/>
<menuitem action='goto-mark-4'/>
<menuitem action='goto-mark-5'/>
<menuitem action='goto-mark-6'/>
<menuitem action='goto-mark-7'/>
<menuitem action='goto-mark-8'/>
<menuitem action='goto-mark-9'/>
</menu>
<separator/>
<menuitem action='TogglePunchIn'/>
<menuitem action='TogglePunchOut'/>
@ -74,182 +109,191 @@
<menuitem action='ToggleClick'/>
<menuitem action='toggle-follow-playhead'/>
<separator/>
<menuitem action='set-loop-from-edit-range'/>
<menuitem action='set-loop-from-region'/>
<menuitem action='set-punch-from-edit-range'/>
<menuitem action='set-punch-from-region'/>
<menu action='LocateToMarker'>
<menuitem action='goto-mark-1'/>
<menuitem action='goto-mark-2'/>
<menuitem action='goto-mark-3'/>
<menuitem action='goto-mark-4'/>
<menuitem action='goto-mark-5'/>
<menuitem action='goto-mark-6'/>
<menuitem action='goto-mark-7'/>
<menuitem action='goto-mark-8'/>
<menuitem action='goto-mark-9'/>
</menu>
</menu>
<menu name='Edit' action='Edit'>
<menu action='Edit'>
<menuitem action='undo'/>
<menuitem action='redo'/>
<menuitem action='editor-cut'/>
<menuitem action='editor-delete'/>
<menuitem action='editor-copy'/>
<menuitem action='editor-paste'/>
<menuitem action='set-edit-point'/>
<menuitem action='editor-separate'/>
<separator/>
<menuitem action='remove-last-capture'/>
<menuitem action='editor-delete'/>
<menuitem action='split-region'/>
<menu action="SeparateMenu">
<menuitem action='editor-separate'/>
<menuitem action='separate-from-loop'/>
<menuitem action='separate-from-punch'/>
</menu>
<separator/>
<menuitem action='select-all'/>
<menuitem action='deselect-all'/>
<menuitem action='invert-selection'/>
<menuitem action='select-all-after-edit-cursor'/>
<menuitem action='select-all-before-edit-cursor'/>
<menuitem action='select-all-between-cursors'/>
<menuitem action='select-all-within-cursors'/>
<menuitem action='select-all-in-punch-range'/>
<menuitem action='select-all-in-loop-range'/>
<separator/>
<menuitem action='select-next-route'/>
<menuitem action='select-prev-route'/>
<separator/>
<menu action='EditCursorMovementOptions'>
<menuitem action='selected-marker-to-next-region-boundary'/>
<menuitem action='selected-marker-to-previous-region-boundary'/>
<menuitem action='edit-cursor-to-next-region-sync'/>
<menuitem action='edit-cursor-to-previous-region-sync'/>
<menuitem action='center-edit-cursor'/>
<menuitem action='edit-to-playhead'/>
</menu>
<menu name='KeyMouse Actions' action='KeyMouse Actions'>
<menuitem action='play-selected-regions'/>
<menuitem action='brush-at-mouse'/>
<menuitem action='mute-unmute-region'/>
<separator/>
<menuitem action='set-mouse-mode-object'/>
<menuitem action='set-mouse-mode-range'/>
<menuitem action='set-mouse-mode-gain'/>
<menuitem action='set-mouse-mode-zoom'/>
<menuitem action='set-mouse-mode-timefx'/>
<separator/>
<menuitem action='cycle-edit-point'/>
<menuitem action='cycle-edit-point-with-marker'/>
<menuitem action='toggle-edit-mode'/>
<separator/>
<menuitem action='boost-region-gain'/>
<menuitem action='cut-region-gain'/>
</menu>
</menu>
<menu name='Regions' action='Regions'>
<menuitem action='crop'/>
<menuitem action='duplicate-region'/>
<menuitem action='insert-region'/>
<menuitem action='normalize-region'/>
<menuitem action='split-region-at-transients'/>
<separator/>
<menuitem action="nudge-forward"/>
<menuitem action="nudge-backward"/>
<menuitem action='split-region'/>
<menuitem action='set-region-sync-position'/>
<separator/>
<menuitem action='duplicate-region'/>
<menuitem action='multi-duplicate-region'/>
<menuitem action='region-fill-track'/>
<menu action="AlignMenu">
<menuitem action='align-regions-start'/>
<menuitem action='align-regions-start-relative'/>
<menuitem action='align-regions-end'/>
<menuitem action='align-regions-end-relative'/>
<menuitem action='align-regions-sync'/>
<menuitem action='align-regions-sync-relative'/>
<separator/>
</menu>
<menu action="NudgeRegionMenu">
<menuitem action="nudge-forward"/>
<menuitem action="nudge-backward"/>
</menu>
<menu action="TrimMenu">
<menuitem action='trim-front'/>
<menuitem action='trim-back'/>
<menuitem action='crop'/>
<menuitem action='trim-region-to-loop'/>
<menuitem action='trim-region-to-punch'/>
</menu>
<menu action="FadeMenu">
<menuitem action='set-fade-in-length'/>
<menuitem action='toggle-fade-in-active'/>
<menuitem action='set-fade-out-length'/>
<menuitem action='toggle-fade-out-active'/>
<separator/>
<menuitem action='trim-front'/>
<menuitem action='trim-back'/>
<menuitem action='trim-region-to-loop'/>
<menuitem action='trim-region-to-punch'/>
<separator/>
<menuitem action='pitch-shift-region'/>
<menuitem action='set-tempo-from-region'/>
<menuitem action='set-tempo-from-edit-range'/>
</menu>
</menu>
<menu action="SelectMenu">
<menuitem action='select-all'/>
<menuitem action='deselect-all'/>
<menuitem action='invert-selection'/>
<menuitem action='select-all-after-edit-cursor'/>
<menuitem action='select-all-before-edit-cursor'/>
<menuitem action='select-all-between-cursors'/>
<menuitem action='select-all-within-cursors'/>
<menuitem action='select-all-in-punch-range'/>
<menuitem action='select-all-in-loop-range'/>
</menu>
</menu>
<menu name='Regions' action='Regions'>
<menuitem action='insert-region'/>
<menuitem action='rename-region'/>
<menuitem action='auto-rename-region'/>
<menuitem action='raise-region'/>
<menuitem action='lower-region'/>
<menuitem action='naturalize-region'/>
<menuitem action='lock-region'/>
<menuitem action='set-region-sync-position'/>
<menuitem action='remove-region-sync'/>
<menuitem action='mute-unmute-region'/>
<separator/>
<menuitem action='monoize-region'/>
<menuitem action='normalize-region'/>
<menuitem action='split-region-at-transients'/>
<separator/>
<menu action="RegionGainMenu">
<menuitem action='boost-region-gain'/>
<menuitem action='cut-region-gain'/>
</menu>
<menuitem action='pitch-shift-region'/>
<menuitem action='reverse-region'/>
</menu>
<menu name='View' action = 'View'>
<menuitem action='ToggleMaximalEditor'/>
<separator/>
<menu name='ZoomFocus' action='ZoomFocus'>
<menuitem action='zoom-focus-playhead'/>
<menuitem action='zoom-focus-edit'/>
<menuitem action='zoom-focus-mouse'/>
</menu>
<menu name='SnapMode' action='SnapMode'>
<menuitem action='snap-off'/>
<menuitem action='snap-normal'/>
<menuitem action='snap-magnetic'/>
<separator/>
<menuitem action='cycle-snap-mode'/>
</menu>
<menu name='SnapTo' action='SnapTo'>
<menuitem action='snap-to-cd-frame'/>
<menuitem action='snap-to-smpte-frame'/>
<menuitem action='snap-to-smpte-seconds'/>
<menuitem action='snap-to-smpte-minutes'/>
<menuitem action='snap-to-seconds'/>
<menuitem action='snap-to-minutes'/>
<menuitem action='snap-to-thirtyseconds'/>
<menuitem action='snap-to-asixteenthbeat'/>
<menuitem action='snap-to-eighths'/>
<menuitem action='snap-to-quarters'/>
<menuitem action='snap-to-thirds'/>
<menuitem action='snap-to-beat'/>
<menuitem action='snap-to-bar'/>
<menuitem action='snap-to-mark'/>
<menuitem action='snap-to-region-start'/>
<menuitem action='snap-to-region-end'/>
<menuitem action='snap-to-region-sync'/>
<menuitem action='snap-to-region-boundary'/>
<menuitem action='cycle-snap-choice'/>
</menu>
<separator/>
<menuitem action='temporal-zoom-in'/>
<menuitem action='temporal-zoom-out'/>
<menuitem action='zoom-to-session'/>
<menuitem action='zoom-to-region'/>
<menuitem action='toggle-zoom'/>
<menuitem action='scroll-tracks-down'/>
<menuitem action='scroll-tracks-up'/>
<menuitem action='scroll-tracks-down'/>
<menuitem action='step-tracks-up'/>
<menuitem action='step-tracks-down'/>
<separator/>
<menuitem action='scroll-forward'/>
<menuitem action='scroll-backward'/>
<separator/>
<menuitem action='scroll-playhead-forward'/>
<menuitem action='scroll-playhead-backward'/>
<separator/>
<menuitem action='show-editor-mixer'/>
<menuitem action='SyncEditorAndMixerTrackOrder'/>
<menuitem action='ToggleMeasureVisibility'/>
<menuitem action='ToggleLogoVisibility'/>
<menu action="PrimaryClockMenu">
<menuitem action="primary-clock-bbt"/>
<menuitem action="primary-clock-minsec"/>
<menuitem action="primary-clock-samples"/>
<menuitem action="primary-clock-off"/>
</menu>
<menu action="SecondaryClockMenu">
<menuitem action="secondary-clock-bbt"/>
<menuitem action="secondary-clock-minsec"/>
<menuitem action="secondary-clock-samples"/>
<menuitem action="secondary-clock-off"/>
</menu>
<menu action="RulerMenu">
<menuitem action="toggle-bbt-ruler"/>
<menuitem action="toggle-minsec-ruler"/>
<menuitem action="toggle-samples-ruler"/>
<separator/>
<menuitem action="toggle-meter-ruler"/>
<menuitem action="toggle-tempo-ruler"/>
<menuitem action="toggle-range-ruler"/>
<menuitem action="toggle-cd-marker-ruler"/>
<menuitem action="toggle-loop-punch-ruler"/>
</menu>
<menu action="ZoomMenu">
<menuitem action='temporal-zoom-in'/>
<menuitem action='temporal-zoom-out'/>
<menuitem action='zoom-to-session'/>
<menuitem action='zoom-to-region'/>
<menuitem action='toggle-zoom'/>
</menu>
<menu action="ScrollMenu">
<menuitem action='scroll-tracks-down'/>
<menuitem action='scroll-tracks-up'/>
<menuitem action='scroll-forward'/>
<menuitem action='scroll-backward'/>
</menu>
<separator/>
<menuitem action='goto-editor'/>
<menuitem action='goto-mixer'/>
<menuitem action='ToggleLocations'/>
<menuitem action='ToggleKeyEditor'/>
<menuitem action='ToggleThemeManager'/>
<menuitem action='ToggleBigClock'/>
<menuitem action='toggle-rhythm-ferret'/>
<menu action="Windows">
<menuitem action='goto-editor'/>
<menuitem action='goto-mixer'/>
<menuitem action='ToggleLocations'/>
<menuitem action='ToggleKeyEditor'/>
<menuitem action='ToggleThemeManager'/>
<menuitem action='ToggleBigClock'/>
<menuitem action='toggle-rhythm-ferret'/>
</menu>
</menu>
<menu name='Options' action='Options'>
<menu action='Monitoring'>
<menuitem action='UseSoftwareMonitoring'/>
<menuitem action='UseExternalMonitoring'/>
</menu>
<menuitem action='LatchedSolo'/>
<menuitem action='link-region-and-track-selection'/>
</menu>
<menu action="TempoMenu">
<menuitem action='set-tempo-from-region'/>
<menuitem action='set-tempo-from-edit-range'/>
</menu>
<menu action="LatchMenu">
<menuitem action='LatchedSolo'/>
</menu>
<menu action="Link">
<menuitem action='link-region-and-track-selection'/>
</menu>
<menu action='ZoomFocusMenu'>
<menuitem action='zoom-focus-playhead'/>
<menuitem action='zoom-focus-edit'/>
<menuitem action='zoom-focus-mouse'/>
</menu>
<menu action="EditPointMenu">
<menuitem action='edit-point-playhead'/>
<menuitem action='edit-point-mouse'/>
<menuitem action='edit-point-marker'/>
</menu>
<menu action='KeyMouseActions'>
<menuitem action='select-next-route'/>
<menuitem action='select-prev-route'/>
<menuitem action='focus-on-clock'/>
<menuitem action='GotoZero'/>
<menuitem action='GotoStart'/>
<menuitem action='GotoEnd'/>
<menuitem action='set-mouse-mode-object'/>
<menuitem action='set-mouse-mode-range'/>
<menuitem action='set-mouse-mode-gain'/>
<menuitem action='set-mouse-mode-zoom'/>
<menuitem action='set-mouse-mode-timefx'/>
<menuitem action='cycle-edit-point'/>
<menuitem action='cycle-edit-point-with-marker'/>
<menuitem action='toggle-edit-mode'/>
<menuitem action='snap-off'/>
<menuitem action='snap-normal'/>
<menuitem action='snap-magnetic'/>
<menuitem action='cycle-snap-mode'/>
<menuitem action='cycle-snap-choice'/>
</menu>
</menu>
</menubar>
<popup name='redirectmenu'>

View File

@ -123,7 +123,7 @@
</menu>
<menuitem action='set-tempo-from-region'/>
<menuitem action='set-tempo-from-edit-range'/>
<menu name='KeyMouse Actions' action='KeyMouse Actions'>
<menu action='KeyMouseActions'>
<menuitem action='play-selected-regions'/>
<menuitem action='brush-at-mouse'/>
<menuitem action='set-edit-point'/>

View File

@ -92,7 +92,7 @@ ARDOUR_UI::install_actions ()
ActionManager::register_action (main_actions, X_("Options"), _("Options"));
ActionManager::register_action (main_actions, X_("TransportOptions"), _("Options"));
ActionManager::register_action (main_actions, X_("Help"), _("Help"));
ActionManager::register_action (main_actions, X_("KeyMouse Actions"), _("KeyMouse Actions"));
ActionManager::register_action (main_actions, X_("KeyMouseActions"), _("Misc. Shortcuts"));
ActionManager::register_action (main_actions, X_("AudioFileFormat"), _("Audio File Format"));
ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("Header"));
ActionManager::register_action (main_actions, X_("AudioFileFormatData"), _("Data"));
@ -310,6 +310,24 @@ ARDOUR_UI::install_actions ()
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("primary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::BBT));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("primary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::MinSec));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("primary-clock-samples"), _("Samples"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Frames));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("primary-clock-off"), _("Off"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Off));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("secondary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::BBT));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("secondary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::MinSec));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("secondary-clock-samples"), _("Samples"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Frames));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("secondary-clock-off"), _("Off"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Off));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch In"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);

View File

@ -809,8 +809,8 @@ AudioRegionView::create_waves ()
ChanCount nchans = atv.get_diskstream()->n_channels();
cerr << "creating waves for " << _region->name() << " with wfd = " << wait_for_data
<< " and channels = " << nchans.n_audio() << endl;
// cerr << "creating waves for " << _region->name() << " with wfd = " << wait_for_data
// << " and channels = " << nchans.n_audio() << endl;
/* in tmp_waves, set up null pointers for each channel so the vector is allocated */
for (uint32_t n = 0; n < nchans.n_audio(); ++n) {
@ -825,21 +825,21 @@ AudioRegionView::create_waves ()
wave_caches.push_back (WaveView::create_cache ());
cerr << "\tchannel " << n << endl;
// cerr << "\tchannel " << n << endl;
if (wait_for_data) {
if (audio_region()->audio_source(n)->peaks_ready (bind (mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) {
cerr << "\tData is ready\n";
// cerr << "\tData is ready\n";
cerr << "\tData is ready\n";
create_one_wave (n, true);
} else {
cerr << "\tdata is not ready\n";
// cerr << "\tdata is not ready\n";
// we'll get a PeaksReady signal from the source in the future
// and will call create_one_wave(n) then.
}
} else {
cerr << "\tdon't delay, display today!\n";
// cerr << "\tdon't delay, display today!\n";
create_one_wave (n, true);
}

View File

@ -153,7 +153,7 @@ static const gchar *_zoom_focus_strings[] = {
N_("Center"),
N_("Playhead"),
N_("Mouse"),
N_("Edit Point"),
N_("Active Mark"),
0
};
@ -1288,12 +1288,23 @@ Editor::connect_to_session (Session *t)
no_route_list_redisplay = false;
redisplay_route_list ();
}
switch (snap_type) {
case SnapToRegionStart:
case SnapToRegionEnd:
case SnapToRegionSync:
case SnapToRegionBoundary:
build_region_boundary_cache ();
break;
default:
break;
}
/* register for undo history */
session->register_with_memento_command_factory(_id, this);
start_updating ();
start_updating ();
}
void
@ -2163,19 +2174,17 @@ Editor::add_bus_context_items (Menu_Helpers::MenuList& edit_items)
edit_items.push_back (MenuElem (_("Nudge"), *nudge_menu));
}
/* CURSOR SETTING AND MARKS AND STUFF */
void
Editor::set_snap_to (SnapType st)
{
unsigned int snap_ind = (unsigned int)st;
unsigned int snap_ind = (unsigned int)st;
snap_type = st;
if ( snap_ind > snap_type_strings.size() - 1 ) {
snap_ind = 0;
snap_type = (SnapType)snap_ind;
}
if (snap_ind > snap_type_strings.size() - 1) {
snap_ind = 0;
snap_type = (SnapType)snap_ind;
}
string str = snap_type_strings[snap_ind];
if (str != snap_type_selector.get_active_text()) {
@ -2190,9 +2199,17 @@ Editor::set_snap_to (SnapType st)
case SnapToAEighthBeat:
case SnapToAQuarterBeat:
case SnapToAThirdBeat:
compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + (nframes_t)(canvas_width * frames_per_unit));
update_tempo_based_rulers ();
compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + (nframes_t)(canvas_width * frames_per_unit));
update_tempo_based_rulers ();
break;
case SnapToRegionStart:
case SnapToRegionEnd:
case SnapToRegionSync:
case SnapToRegionBoundary:
build_region_boundary_cache ();
break;
default:
/* relax */
break;
@ -2229,28 +2246,25 @@ Editor::set_edit_point_preference (EditPoint ep)
return;
}
if (Profile->get_sae()) {
switch (zoom_focus) {
case ZoomFocusMouse:
case ZoomFocusPlayhead:
case ZoomFocusEdit:
switch (_edit_point) {
case EditAtMouse:
set_zoom_focus (ZoomFocusMouse);
break;
case EditAtPlayhead:
set_zoom_focus (ZoomFocusPlayhead);
break;
case EditAtSelectedMarker:
set_zoom_focus (ZoomFocusEdit);
break;
}
switch (zoom_focus) {
case ZoomFocusMouse:
case ZoomFocusPlayhead:
case ZoomFocusEdit:
switch (_edit_point) {
case EditAtMouse:
set_zoom_focus (ZoomFocusMouse);
break;
default:
case EditAtPlayhead:
set_zoom_focus (ZoomFocusPlayhead);
break;
case EditAtSelectedMarker:
set_zoom_focus (ZoomFocusEdit);
break;
}
}
break;
default:
break;
}
instant_save ();
}
@ -2527,13 +2541,19 @@ Editor::trackview_by_y_position (double y)
void
Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
{
Location* before = 0;
Location* after = 0;
if (!session || snap_mode == SnapOff) {
return;
}
snap_to_internal (start, direction, for_mark);
}
void
Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark)
{
Location* before = 0;
Location* after = 0;
const nframes64_t one_second = session->frame_rate();
const nframes64_t one_minute = session->frame_rate() * 60;
const nframes64_t one_smpte_second = (nframes64_t)(rint(session->smpte_frames_per_second()) * session->frames_per_smpte_frame());
@ -2542,7 +2562,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
switch (snap_type) {
case SnapToCDFrame:
if (direction) {
if (((direction == 0) && (start % (one_second/75) > (one_second/75) / 2)) || (direction > 0)) {
start = (nframes_t) ceil ((double) start / (one_second / 75)) * (one_second / 75);
} else {
start = (nframes_t) floor ((double) start / (one_second / 75)) * (one_second / 75);
@ -2550,7 +2570,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
break;
case SnapToSMPTEFrame:
if (fmod((double)start, (double)session->frames_per_smpte_frame()) > (session->frames_per_smpte_frame() / 2)) {
if (((direction == 0) && (fmod((double)start, (double)session->frames_per_smpte_frame()) > (session->frames_per_smpte_frame() / 2))) || (direction > 0)) {
start = (nframes_t) (ceil ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
} else {
start = (nframes_t) (floor ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
@ -2564,7 +2584,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
} else {
start -= session->smpte_offset ();
}
if (start % one_smpte_second > one_smpte_second / 2) {
if (((direction == 0) && (start % one_smpte_second > one_smpte_second / 2)) || direction > 0) {
start = (nframes_t) ceil ((double) start / one_smpte_second) * one_smpte_second;
} else {
start = (nframes_t) floor ((double) start / one_smpte_second) * one_smpte_second;
@ -2585,7 +2605,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
} else {
start -= session->smpte_offset ();
}
if (start % one_smpte_minute > one_smpte_minute / 2) {
if (((direction == 0) && (start % one_smpte_minute > one_smpte_minute / 2)) || direction > 0) {
start = (nframes_t) ceil ((double) start / one_smpte_minute) * one_smpte_minute;
} else {
start = (nframes_t) floor ((double) start / one_smpte_minute) * one_smpte_minute;
@ -2599,7 +2619,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
break;
case SnapToSeconds:
if (start % one_second > one_second / 2) {
if (((direction == 0) && (start % one_second > one_second / 2)) || (direction > 0)) {
start = (nframes_t) ceil ((double) start / one_second) * one_second;
} else {
start = (nframes_t) floor ((double) start / one_second) * one_second;
@ -2607,7 +2627,7 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
break;
case SnapToMinutes:
if (start % one_minute > one_minute / 2) {
if (((direction == 0) && (start % one_minute > one_minute / 2)) || (direction > 0)) {
start = (nframes_t) ceil ((double) start / one_minute) * one_minute;
} else {
start = (nframes_t) floor ((double) start / one_minute) * one_minute;
@ -2696,11 +2716,19 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark)
}
if (i != region_boundary_cache.end()) {
/* lower bound doesn't quite to the right thing for our purposes */
if (direction < 0 && i != region_boundary_cache.begin()) {
--i;
}
start = *i;
} else {
start = region_boundary_cache.back();
}
}
}
break;
}
@ -3596,7 +3624,7 @@ Editor::zoom_focus_selection_done ()
focus_type = ZoomFocusPlayhead;
} else if (choice == _("Edit")) {
focus_type = ZoomFocusEdit;
} else if (choice == _("Edit Point")) {
} else if (choice == _("Active Mark")) {
focus_type = ZoomFocusEdit;
} else {
focus_type = ZoomFocusMouse;
@ -4375,9 +4403,9 @@ Editor::idle_visual_changer ()
if (p & VisualChange::ZoomLevel) {
set_frames_per_unit (pending_visual_change.frames_per_unit);
compute_fixed_ruler_scale ();
compute_current_bbt_points(pending_visual_change.time_origin, pending_visual_change.time_origin + (nframes_t)(canvas_width * pending_visual_change.frames_per_unit));
compute_bbt_ruler_scale (pending_visual_change.time_origin, pending_visual_change.time_origin + (nframes_t)(canvas_width * pending_visual_change.frames_per_unit));
compute_fixed_ruler_scale ();
compute_current_bbt_points(pending_visual_change.time_origin, pending_visual_change.time_origin + (nframes_t)(canvas_width * pending_visual_change.frames_per_unit));
compute_bbt_ruler_scale (pending_visual_change.time_origin, pending_visual_change.time_origin + (nframes_t)(canvas_width * pending_visual_change.frames_per_unit));
update_tempo_based_rulers ();
}
if (p & VisualChange::TimeOrigin) {

View File

@ -189,6 +189,8 @@ class Editor : public PublicEditor
void new_region_from_selection ();
void separate_regions_between (const TimeSelection&);
void separate_region_from_selection ();
void separate_region_from_punch ();
void separate_region_from_loop ();
void separate_regions_using_location (ARDOUR::Location&);
void toggle_playback (bool with_abort);
void transition_to_rolling (bool forward);
@ -1188,6 +1190,8 @@ class Editor : public PublicEditor
void center_edit_point ();
void edit_cursor_backward ();
void edit_cursor_forward ();
void playhead_forward_to_grid ();
void playhead_backward_to_grid ();
void playhead_backward ();
void playhead_forward ();
void scroll_playhead (bool forward);
@ -2196,6 +2200,8 @@ public:
void select_next_route ();
void select_prev_route ();
void snap_to_internal (nframes64_t& first, int32_t direction = 0, bool for_mark = false);
RhythmFerret* rhythm_ferret;
};

View File

@ -44,26 +44,49 @@ Editor::register_actions ()
/* non-operative menu items for menu bar */
ActionManager::register_action (editor_actions, X_("Edit"), _("Edit"));
ActionManager::register_action (editor_actions, X_("Select"), _("Select"));
ActionManager::register_action (editor_actions, X_("EditSelectRegionOptions"), _("Select Regions"));
ActionManager::register_action (editor_actions, X_("EditSelectRangeOptions"), _("Select Range Operations"));
ActionManager::register_action (editor_actions, X_("EditCursorMovementOptions"), _("Move Selected Marker"));
ActionManager::register_action (editor_actions, X_("RegionEditOps"), _("Region operations"));
ActionManager::register_action (editor_actions, X_("Tools"), _("Tools"));
ActionManager::register_action (editor_actions, X_("View"), _("View"));
ActionManager::register_action (editor_actions, X_("ZoomFocus"), _("Zoom Focus"));
ActionManager::register_action (editor_actions, X_("MeterHold"), _("Meter hold"));
ActionManager::register_action (editor_actions, X_("MeterFalloff"), _("Meter falloff"));
ActionManager::register_action (editor_actions, X_("Solo"), _("Solo"));
ActionManager::register_action (editor_actions, X_("Crossfades"), _("Crossfades"));
ActionManager::register_action (editor_actions, X_("Monitoring"), _("Monitoring"));
ActionManager::register_action (editor_actions, X_("AlignMenu"), _("Align"));
ActionManager::register_action (editor_actions, X_("Autoconnect"), _("Autoconnect"));
ActionManager::register_action (editor_actions, X_("Crossfades"), _("Crossfades"));
ActionManager::register_action (editor_actions, X_("Edit"), _("Edit"));
ActionManager::register_action (editor_actions, X_("EditCursorMovementOptions"), _("Move Selected Marker"));
ActionManager::register_action (editor_actions, X_("EditSelectRangeOptions"), _("Select Range Operations"));
ActionManager::register_action (editor_actions, X_("EditSelectRegionOptions"), _("Select Regions"));
ActionManager::register_action (editor_actions, X_("EditPointMenu"), _("Edit Point"));
ActionManager::register_action (editor_actions, X_("FadeMenu"), _("Fade"));
ActionManager::register_action (editor_actions, X_("LatchMenu"), _("Latch"));
ActionManager::register_action (editor_actions, X_("Layering"), _("Layering"));
ActionManager::register_action (editor_actions, X_("Timecode"), _("Timecode fps"));
ActionManager::register_action (editor_actions, X_("Pullup"), _("Pullup / Pulldown"));
ActionManager::register_action (editor_actions, X_("Subframes"), _("Subframes"));
ActionManager::register_action (editor_actions, X_("Link"), _("Link"));
ActionManager::register_action (editor_actions, X_("LocateToMarker"), _("Locate To Markers"));
ActionManager::register_action (editor_actions, X_("MarkerMenu"), _("Markers"));
ActionManager::register_action (editor_actions, X_("MeterFalloff"), _("Meter falloff"));
ActionManager::register_action (editor_actions, X_("MeterHold"), _("Meter hold"));
ActionManager::register_action (editor_actions, X_("Monitoring"), _("Monitoring"));
ActionManager::register_action (editor_actions, X_("MoveActiveMarkMenu"), _("Active Mark"));
ActionManager::register_action (editor_actions, X_("MovePlayHeadMenu"), _("Playhead"));
ActionManager::register_action (editor_actions, X_("NudgeRegionMenu"), _("Nudge"));
ActionManager::register_action (editor_actions, X_("PlayMenu"), _("Play"));
ActionManager::register_action (editor_actions, X_("PrimaryClockMenu"), _("Primary Clock"));
ActionManager::register_action (editor_actions, X_("Pullup"), _("Pullup / Pulldown"));
ActionManager::register_action (editor_actions, X_("RegionEditOps"), _("Region operations"));
ActionManager::register_action (editor_actions, X_("RegionGainMenu"), _("Gain"));
ActionManager::register_action (editor_actions, X_("RulerMenu"), _("Rulers"));
ActionManager::register_action (editor_actions, X_("ScrollMenu"), _("Scroll"));
ActionManager::register_action (editor_actions, X_("SecondaryClockMenu"), _("Secondary Clock"));
ActionManager::register_action (editor_actions, X_("Select"), _("Select"));
ActionManager::register_action (editor_actions, X_("SelectMenu"), _("Select"));
ActionManager::register_action (editor_actions, X_("SeparateMenu"), _("Separate"));
ActionManager::register_action (editor_actions, X_("SetLoopMenu"), _("Loop"));
ActionManager::register_action (editor_actions, X_("SetPunchMenu"), _("Punch"));
ActionManager::register_action (editor_actions, X_("Solo"), _("Solo"));
ActionManager::register_action (editor_actions, X_("Subframes"), _("Subframes"));
ActionManager::register_action (editor_actions, X_("TempoMenu"), _("Tempo"));
ActionManager::register_action (editor_actions, X_("Timecode"), _("Timecode fps"));
ActionManager::register_action (editor_actions, X_("Tools"), _("Tools"));
ActionManager::register_action (editor_actions, X_("TrimMenu"), _("Trim"));
ActionManager::register_action (editor_actions, X_("View"), _("View"));
ActionManager::register_action (editor_actions, X_("ZoomFocus"), _("Zoom"));
ActionManager::register_action (editor_actions, X_("ZoomMenu"), _("Zoom"));
ActionManager::register_action (editor_actions, X_("ZoomFocusMenu"), _("Zoom Focus"));
/* add named actions for the editor */
@ -210,6 +233,10 @@ Editor::register_actions ()
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "nudge-playhead-backward", _("Nudge Playhead Backward"), bind (mem_fun(*this, &Editor::nudge_backward), false, true));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "playhead-forward-to-grid", _("Forward To Grid"), mem_fun(*this, &Editor::playhead_forward_to_grid));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "playhead-backward-to-grid", _("Backward To Grid"), mem_fun(*this, &Editor::playhead_backward_to_grid));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "temporal-zoom-out", _("Zoom Out"), bind (mem_fun(*this, &Editor::temporal_zoom_step), true));
@ -255,31 +282,39 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "trim-front", _("Trim start at edit point"), mem_fun(*this, &Editor::trim_region_front));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-back", _("Trim end at edit point"), mem_fun(*this, &Editor::trim_region_back));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-from-start", _("Start to edit point"), mem_fun(*this, &Editor::trim_region_from_edit_point));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-to-end", _("Edit point to end"), mem_fun(*this, &Editor::trim_region_to_edit_point));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-region-to-loop", _("Trim To Loop"), mem_fun(*this, &Editor::trim_region_to_loop));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "trim-region-to-punch", _("Trim To Punch"), mem_fun(*this, &Editor::trim_region_to_punch));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-loop-from-edit-range", _("Set Loop From Edit Range"), bind (mem_fun(*this, &Editor::set_loop_from_edit_range), false));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-loop-from-region", _("Set Loop From Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), false));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "loop-region", _("Loop Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), true));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), mem_fun(*this, &Editor::set_punch_from_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "pitch-shift-region", _("Transpose"), mem_fun(*this, &Editor::pitch_shift_regions));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-fade-in-length", _("Set Fade In Length"), bind (mem_fun(*this, &Editor::set_fade_length), true));
ActionManager::session_sensitive_actions.push_back (act);
@ -292,17 +327,23 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "align-regions-start", _("Align Regions Start"), bind (mem_fun(*this, &Editor::align), ARDOUR::Start));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-start-relative", _("Align Regions Start Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::Start));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-end", _("Align Regions End"), bind (mem_fun(*this, &Editor::align), ARDOUR::End));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-end-relative", _("Align Regions End Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::End));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-sync", _("Align Regions Sync"), bind (mem_fun(*this, &Editor::align), ARDOUR::SyncPoint));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "align-regions-sync-relative", _("Align Regions Sync Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::SyncPoint));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "play-from-edit-point", _("Play From Edit Point"), mem_fun(*this, &Editor::play_from_edit_point));
ActionManager::session_sensitive_actions.push_back (act);
@ -312,19 +353,81 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "play-edit-range", _("Play Edit Range"), mem_fun(*this, &Editor::play_edit_range));
act = ActionManager::register_action (editor_actions, "play-selected-regions", _("Play Selected Region(s)"), mem_fun(*this, &Editor::play_selected_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "brush-at-mouse", _("Brush at Mouse"), mem_fun(*this, &Editor::kbd_brush));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "mute-unmute-region", _("Mute/Unmute Region"), mem_fun(*this, &Editor::kbd_mute_unmute_region));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-playhead", _("Set Playhead"), mem_fun(*this, &Editor::set_playhead_cursor));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-edit-point", _("Set Edit Point"), mem_fun(*this, &Editor::set_edit_point));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "duplicate-region", _("Duplicate Region"), bind (mem_fun(*this, &Editor::duplicate_dialog), false));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "multi-duplicate-region", _("Multi-Duplicate Region"), bind (mem_fun(*this, &Editor::duplicate_dialog), true));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "duplicate-range", _("Duplicate Range"), bind (mem_fun(*this, &Editor::duplicate_dialog), false));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "insert-region", _("Insert Region"), mem_fun(*this, &Editor::keyboard_insert_region_list_selection));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "normalize-region", _("Normalize Region"), mem_fun(*this, &Editor::normalize_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "rename-region", _("Rename"), mem_fun(*this, &Editor::rename_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "auto-rename-region", _("Auto-Rename"), mem_fun(*this, &Editor::rename_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "boost-region-gain", _("Boost Region Gain"), bind (mem_fun(*this, &Editor::adjust_region_scale_amplitude), true));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "cut-region-gain", _("Cut Region Gain"), bind (mem_fun(*this, &Editor::adjust_region_scale_amplitude), false));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "split-region", _("Split Region"), mem_fun(*this, &Editor::split));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-region-sync-position", _("Set Region Sync Position"), mem_fun(*this, &Editor::set_region_sync_from_edit_point));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "remove-region-sync", _("Remove Region Sync"), mem_fun(*this, &Editor::remove_region_sync));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "raise-region", _("Raise Region"), mem_fun(*this, &Editor::raise_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "lower-region", _("Lower Region"), mem_fun(*this, &Editor::lower_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "export-region", _("Export Region"), mem_fun(*this, &Editor::export_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (editor_actions, "lock-region", _("Lock Region"), mem_fun(*this, &Editor::toggle_region_lock));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (editor_actions, "glue-region", _("Glue Region To Bars&Beats"), bind (mem_fun (*this, &Editor::set_region_lock_style), Region::MusicTime));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "naturalize-region", _("Move To Original Position"), mem_fun (*this, &Editor::naturalize));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "reverse-region", _("Reverse"), mem_fun (*this, &Editor::reverse_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "monoize-region", _("Make mono regions"), (mem_fun(*this, &Editor::split_multichannel_region)));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "region-fill-track", _("Fill Track"), (mem_fun(*this, &Editor::region_fill_track)));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "mute-unmute-region", _("Mute/Unmute Region"), mem_fun(*this, &Editor::kbd_mute_unmute_region));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
undo_action = act = ActionManager::register_action (editor_actions, "undo", _("Undo"), bind (mem_fun(*this, &Editor::undo), 1U));
ActionManager::session_sensitive_actions.push_back (act);
@ -338,8 +441,16 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "editor-separate", _("Separate"), mem_fun(*this, &Editor::separate_region_from_selection));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "separate-from-punch", _("Separate Using Punch Range"), mem_fun(*this, &Editor::separate_region_from_punch));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "separate-from-loop", _("Separate Using Loop Range"), mem_fun(*this, &Editor::separate_region_from_loop));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "editor-crop", _("Crop"), mem_fun(*this, &Editor::crop_region_to_selection));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "editor-cut", _("Cut"), mem_fun(*this, &Editor::cut));
ActionManager::session_sensitive_actions.push_back (act);
/* Note: for now, editor-delete does the exact same thing as editor-cut */
@ -349,24 +460,7 @@ Editor::register_actions ()
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "editor-paste", _("Paste"), mem_fun(*this, &Editor::keyboard_paste));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "duplicate-region", _("Duplicate Region"), bind (mem_fun(*this, &Editor::duplicate_dialog), false));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "multi-duplicate-region", _("Multi-Duplicate Region"), bind (mem_fun(*this, &Editor::duplicate_dialog), true));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "duplicate-range", _("Duplicate Range"), bind (mem_fun(*this, &Editor::duplicate_dialog), false));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "insert-region", _("Insert Region"), mem_fun(*this, &Editor::keyboard_insert_region_list_selection));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "reverse-region", _("Reverse Region"), mem_fun(*this, &Editor::reverse_region));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "normalize-region", _("Normalize Region"), mem_fun(*this, &Editor::normalize_region));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "boost-region-gain", _("Boost Region Gain"), bind (mem_fun(*this, &Editor::adjust_region_scale_amplitude), true));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "cut-region-gain", _("Cut Region Gain"), bind (mem_fun(*this, &Editor::adjust_region_scale_amplitude), false));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "quantize-region", _("Quantize Region"), mem_fun(*this, &Editor::quantize_region));
ActionManager::session_sensitive_actions.push_back (act);
@ -377,6 +471,7 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "split-region-at-transients", _("Split Regions At Percussion Onsets"), mem_fun(*this, &Editor::split_region_at_transients));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "toggle-rhythm-ferret", _("Rhythm Ferret"), mem_fun(*this, &Editor::show_rhythm_ferret));
ActionManager::session_sensitive_actions.push_back (act);
@ -441,6 +536,10 @@ Editor::register_actions ()
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-mouse"), _("Mouse"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-selected-marker"), _("Marker"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
ActionManager::register_action (editor_actions, "edit-point-marker", _("Marker"), bind (mem_fun (*this, &Editor::set_edit_point_preference), EditAtSelectedMarker));
ActionManager::register_action (editor_actions, "edit-point-playhead", _("Playhead"), bind (mem_fun (*this, &Editor::set_edit_point_preference), EditAtPlayhead));
ActionManager::register_action (editor_actions, "edit-point-mouse", _("Mouse"), bind (mem_fun (*this, &Editor::set_edit_point_preference), EditAtMouse));
ActionManager::register_action (editor_actions, "cycle-edit-point", _("Change edit point"), bind (mem_fun (*this, &Editor::cycle_edit_point), false));
ActionManager::register_action (editor_actions, "cycle-edit-point-with-marker", _("Change edit point (w/Marker)"), bind (mem_fun (*this, &Editor::cycle_edit_point), true));
@ -482,6 +581,20 @@ Editor::register_actions ()
ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-sync"), _("Snap to region sync"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionSync)));
ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-boundary"), _("Snap to region boundary"), (bind (mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionBoundary)));
/* RULERS */
Glib::RefPtr<ActionGroup> ruler_actions = ActionGroup::create (X_("Rulers"));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-tempo-ruler"), _("Tempo"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_tempo));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-meter-ruler"), _("Meter"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_meter));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-range-ruler"), _("Ranges"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_range_marker));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-marker-ruler"), _("Markers"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_marker));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-cd-marker-ruler"), _("CD Markers"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_cd_marker));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-loop-punch-ruler"), _("Loop/Punch"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_time_transport_marker));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-bbt-ruler"), _("Bars & Beats"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_frames));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-samples-ruler"), _("Samples"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_bbt));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-timecode-ruler"), _("Timecode"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_smpte));
ActionManager::register_toggle_action (ruler_actions, X_("toggle-minsec-ruler"), _("Timecode"), bind (mem_fun(*this, &Editor::ruler_toggled), (int)ruler_metric_minsec));
/* REGION LIST */
Glib::RefPtr<ActionGroup> rl_actions = ActionGroup::create (X_("RegionList"));
@ -583,6 +696,7 @@ Editor::register_actions ()
&Editor::subframes_per_frame_chosen), 100));
ActionManager::add_action_group (rl_actions);
ActionManager::add_action_group (ruler_actions);
ActionManager::add_action_group (zoom_actions);
ActionManager::add_action_group (mouse_mode_actions);
ActionManager::add_action_group (snap_actions);

View File

@ -2820,6 +2820,24 @@ Editor::separate_region_from_selection ()
}
}
void
Editor::separate_region_from_punch ()
{
Location* loc = session->locations()->auto_punch_location();
if (loc) {
separate_regions_using_location (*loc);
}
}
void
Editor::separate_region_from_loop ()
{
Location* loc = session->locations()->auto_loop_location();
if (loc) {
separate_regions_using_location (*loc);
}
}
void
Editor::separate_regions_using_location (Location& loc)
{
@ -5487,3 +5505,29 @@ Editor::tab_to_transient (bool forward)
}
}
}
void
Editor::playhead_forward_to_grid ()
{
if (!session) return;
nframes64_t pos = playhead_cursor->current_frame;
if (pos < max_frames) {
pos++;
snap_to_internal (pos, 1, false);
session->request_locate (pos);
}
}
void
Editor::playhead_backward_to_grid ()
{
if (!session) return;
nframes64_t pos = playhead_cursor->current_frame;
if (pos > 1) {
pos--;
snap_to_internal (pos, -1, false);
session->request_locate (pos);
}
}

View File

@ -795,6 +795,27 @@ Editor::region_selection_changed ()
(*i)->set_selected_regionviews (selection->regions);
}
bool have_selected_regions = !selection->regions.empty();
for (vector<Glib::RefPtr<Action> >::iterator x = ActionManager::region_selection_sensitive_actions.begin();
x != ActionManager::region_selection_sensitive_actions.end(); ++x) {
string accel_path = (*x)->get_accel_path ();
AccelKey key;
/* if there is an accelerator, it should always be sensitive
to allow for keyboard ops on entered regions.
*/
bool known = ActionManager::lookup_entry (accel_path, key);
if (known && ((key.get_key() != GDK_VoidSymbol) && (key.get_key() != 0))) {
(*x)->set_sensitive (true);
} else {
(*x)->set_sensitive (have_selected_regions);
}
}
zoomed_to_region = false;
}

View File

@ -975,7 +975,7 @@ ExportDialog::do_export ()
progress_connection = Glib::signal_timeout().connect (mem_fun(*this, &ExportDialog::progress_timeout), 100);
cancel_label.set_text (_("Stop Export"));
export_audio_data();
export_data();
progress_connection.disconnect ();
end_dialog ();

View File

@ -48,7 +48,7 @@ class ExportDialog : public ArdourDialog
virtual Gtk::FileChooserAction browse_action() const { return Gtk::FILE_CHOOSER_ACTION_SAVE; }
protected:
ARDOUR::AudioExportSpecification spec;
ARDOUR::ExportSpecification spec;
Gtk::Frame file_frame;
struct ExportModelColumns : public Gtk::TreeModel::ColumnRecord
@ -77,7 +77,7 @@ class ExportDialog : public ArdourDialog
// Gets called from within do_export. Is responsible for exporting the
// audio data. spec has already been filled with user input before calling
// this method. The dialog will be closed after this function exited.
virtual void export_audio_data() = 0;
virtual void export_data() = 0;
virtual bool wants_dir() { return false; }

View File

@ -54,7 +54,7 @@ ExportRangeMarkersDialog::browse_action () const
}
void
ExportRangeMarkersDialog::export_audio_data ()
ExportRangeMarkersDialog::export_data ()
{
getSession().locations()->apply(*this, &ExportRangeMarkersDialog::process_range_markers_export);
}
@ -83,7 +83,7 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList&
getSession().request_locate(spec.start_frame, false);
if (getSession().start_audio_export(spec)){
if (getSession().start_export(spec)){
// if export fails
return;
}

View File

@ -35,7 +35,7 @@ class ExportRangeMarkersDialog : public ExportDialog
protected:
virtual bool is_filepath_valid(string &filepath);
void export_audio_data();
void export_data();
bool wants_dir() { return true; }

View File

@ -28,14 +28,14 @@
#include "i18n.h"
ExportRegionDialog::ExportRegionDialog (PublicEditor& editor, boost::shared_ptr<ARDOUR::Region> region)
ExportRegionDialog::ExportRegionDialog (PublicEditor& editor, boost::shared_ptr<ARDOUR::Region> reg)
: ExportDialog(editor)
, region(reg)
{
set_title (_("ardour: export region"));
file_frame.set_label (_("Export to File")),
assert(region);
audio_region = boost::dynamic_pointer_cast<ARDOUR::AudioRegion>(region);
assert(audio_region);
set_title (_("Ardour: Export Region"));
file_frame.set_label (_("Export to File")),
do_not_allow_track_and_master_selection();
do_not_allow_channel_count_selection();
@ -43,7 +43,7 @@ ExportRegionDialog::ExportRegionDialog (PublicEditor& editor, boost::shared_ptr<
void
ExportRegionDialog::export_audio_data()
ExportRegionDialog::export_data()
{
pthread_t thr;
pthread_create_and_store ("region export", &thr, 0, ExportRegionDialog::_export_region_thread, this);
@ -71,5 +71,6 @@ ExportRegionDialog::_export_region_thread (void *arg)
void
ExportRegionDialog::export_region ()
{
audio_region->exportme (getSession(), spec);
region->exportme (getSession(), spec);
}

View File

@ -33,10 +33,10 @@ class ExportRegionDialog : public ExportDialog
void export_region ();
protected:
void export_audio_data();
void export_data();
private:
boost::shared_ptr<ARDOUR::AudioRegion> audio_region;
boost::shared_ptr<ARDOUR::Region> region;
};

View File

@ -30,9 +30,9 @@ ExportSessionDialog::ExportSessionDialog (PublicEditor& editor)
}
void
ExportSessionDialog::export_audio_data ()
ExportSessionDialog::export_data ()
{
if (getSession().start_audio_export (spec)) {
if (getSession().start_export (spec)) {
return;
}

View File

@ -30,7 +30,7 @@ class ExportSessionDialog : public ExportDialog
void set_range (nframes_t start, nframes_t end);
protected:
void export_audio_data();
void export_data();
};

View File

@ -38,7 +38,7 @@
namespace ARDOUR {
class Session;
class AudioExportSpecification;
class ExportSpecification;
class Region;
class Playlist;
class RouteGroup;

View File

@ -125,7 +125,7 @@ class AudioRegion : public Region
/* export */
int exportme (ARDOUR::Session&, ARDOUR::AudioExportSpecification&);
int exportme (ARDOUR::Session&, ARDOUR::ExportSpecification&);
/* xfade/fade interactions */

View File

@ -42,12 +42,12 @@ namespace ARDOUR
class Port;
typedef pair<Port *, uint32_t> PortChannelPair;
typedef map<uint32_t, vector<PortChannelPair> > AudioExportPortMap;
typedef map<uint32_t, vector<PortChannelPair> > ExportPortMap;
struct AudioExportSpecification : public SF_INFO, public sigc::trackable {
struct ExportSpecification : public SF_INFO, public sigc::trackable {
AudioExportSpecification();
~AudioExportSpecification ();
ExportSpecification();
~ExportSpecification ();
void init ();
void clear ();
@ -62,36 +62,36 @@ namespace ARDOUR
string path;
nframes_t sample_rate;
int src_quality;
SNDFILE* out;
int src_quality;
SNDFILE* out;
uint32_t channels;
AudioExportPortMap port_map;
ExportPortMap port_map;
nframes_t start_frame;
nframes_t end_frame;
GDitherType dither_type;
bool do_freewheel;
GDitherType dither_type;
bool do_freewheel;
/* used exclusively during export */
nframes_t frame_rate;
GDither dither;
float* dataF;
float* dataF2;
float* leftoverF;
GDither dither;
float* dataF;
float* dataF2;
float* leftoverF;
nframes_t leftover_frames;
nframes_t max_leftover_frames;
void* output_data;
void* output_data;
nframes_t out_samples_max;
uint32_t sample_bytes;
uint32_t data_width;
uint32_t sample_bytes;
uint32_t data_width;
nframes_t total_frames;
SF_INFO sfinfo;
SRC_DATA src_data;
SRC_STATE* src_state;
SF_INFO sfinfo;
SRC_DATA src_data;
SRC_STATE* src_state;
nframes_t pos;
sigc::connection freewheel_connection;
sigc::connection freewheel_connection;
/* shared between UI thread and audio thread */
@ -99,9 +99,9 @@ namespace ARDOUR
volatile bool stop; /* UI sets this */
volatile bool running; /* audio thread sets to false when export is done */
int status;
int status;
};
} // namespace ARDOUR
#endif /* __ardour_export_h__ */

View File

@ -84,6 +84,8 @@ class MidiRegion : public Region
boost::shared_ptr<const AutomationControl> control(Parameter id) const
{ return midi_source()->model()->control(id); }
int exportme (ARDOUR::Session&, ARDOUR::ExportSpecification&);
private:
friend class RegionFactory;

View File

@ -37,6 +37,7 @@ namespace ARDOUR {
class Playlist;
class Filter;
class ExportSpecification;
enum RegionEditState {
EditChangesNothing = 0,
@ -222,6 +223,8 @@ class Region : public Automatable, public boost::enable_shared_from_this<Region>
virtual bool is_dependent() const { return false; }
virtual bool depends_on (boost::shared_ptr<Region> other) const { return false; }
virtual int exportme (ARDOUR::Session&, ARDOUR::ExportSpecification&) = 0;
virtual int get_transients (AnalysisFeatureList&, bool force_new = false) {
// no transients, but its OK
return 0;

View File

@ -109,7 +109,7 @@ class SMFSource;
class SessionDirectory;
struct AudioExportSpecification;
struct ExportSpecification;
struct RouteGroup;
using std::vector;
@ -606,8 +606,8 @@ class Session : public PBD::StatefulDestructible
SlaveSource post_export_slave;
nframes_t post_export_position;
int start_audio_export (ARDOUR::AudioExportSpecification&);
int stop_audio_export (ARDOUR::AudioExportSpecification&);
int start_export (ARDOUR::ExportSpecification&);
int stop_export (ARDOUR::ExportSpecification&);
void finalize_audio_export ();
void add_source (boost::shared_ptr<Source>);
@ -1037,7 +1037,7 @@ class Session : public PBD::StatefulDestructible
void process_without_events (nframes_t);
void process_with_events (nframes_t);
void process_audition (nframes_t);
int process_export (nframes_t, ARDOUR::AudioExportSpecification*);
int process_export (nframes_t, ARDOUR::ExportSpecification*);
/* slave tracking */
@ -1062,7 +1062,7 @@ class Session : public PBD::StatefulDestructible
void set_slave_source (SlaveSource);
bool _exporting;
int prepare_to_export (ARDOUR::AudioExportSpecification&);
int prepare_to_export (ARDOUR::ExportSpecification&);
void prepare_diskstreams ();
void commit_diskstreams (nframes_t, bool& session_requires_butler);

View File

@ -119,7 +119,7 @@ AudioAnalyser::analyse (const string& path, Readable* src, uint32_t channel)
/* zero fill buffer if necessary */
if (to_read != bufsize) {
memset (data + to_read, 0, (bufsize - to_read));
memset (data + to_read, 0, (bufsize - to_read) * sizeof (Sample));
}
features = plugin->process (bufs, RealTime::fromSeconds ((double) pos / sample_rate));
@ -128,7 +128,7 @@ AudioAnalyser::analyse (const string& path, Readable* src, uint32_t channel)
goto out;
}
pos += stepsize;
pos += min (stepsize, to_read);
if (pos >= len) {
done = true;

View File

@ -1022,7 +1022,7 @@ AudioRegion::read_raw_internal (Sample* buf, nframes_t pos, nframes_t cnt) const
int
AudioRegion::exportme (Session& session, AudioExportSpecification& spec)
AudioRegion::exportme (Session& session, ARDOUR::ExportSpecification& spec)
{
const nframes_t blocksize = 4096;
nframes_t to_read;

View File

@ -310,6 +310,12 @@ MidiRegion::separate_by_channel (Session& session, vector<MidiRegion*>& v) const
return -1;
}
int
MidiRegion::exportme (ARDOUR::Session&, ARDOUR::ExportSpecification&)
{
return -1;
}
boost::shared_ptr<MidiSource>
MidiRegion::midi_source (uint32_t n) const
{

View File

@ -57,7 +57,7 @@ using namespace ARDOUR;
using namespace PBD;
static int
convert_spec_to_info (AudioExportSpecification& spec, SF_INFO& sfinfo)
convert_spec_to_info (ExportSpecification& spec, SF_INFO& sfinfo)
{
if (spec.path.length() == 0) {
error << _("Export: no output file specified") << endmsg;
@ -76,18 +76,18 @@ convert_spec_to_info (AudioExportSpecification& spec, SF_INFO& sfinfo)
return 0;
}
AudioExportSpecification::AudioExportSpecification ()
ExportSpecification::ExportSpecification ()
{
init ();
}
AudioExportSpecification::~AudioExportSpecification ()
ExportSpecification::~ExportSpecification ()
{
clear ();
}
void
AudioExportSpecification::init ()
ExportSpecification::init ()
{
src_state = 0;
pos = 0;
@ -113,7 +113,7 @@ AudioExportSpecification::init ()
}
void
AudioExportSpecification::clear ()
ExportSpecification::clear ()
{
if (out) {
sf_close (out);
@ -153,7 +153,7 @@ AudioExportSpecification::clear ()
}
int
AudioExportSpecification::prepare (nframes_t blocksize, nframes_t frate)
ExportSpecification::prepare (nframes_t blocksize, nframes_t frate)
{
char errbuf[256];
GDitherSize dither_size;
@ -161,7 +161,7 @@ AudioExportSpecification::prepare (nframes_t blocksize, nframes_t frate)
frame_rate = frate;
if (channels == 0) {
error << _("illegal frame range in export specification") << endmsg;
error << _("illegal channel count in export specification") << endmsg;
return -1;
}
@ -258,7 +258,7 @@ AudioExportSpecification::prepare (nframes_t blocksize, nframes_t frate)
}
int
AudioExportSpecification::process (nframes_t nframes)
ExportSpecification::process (nframes_t nframes)
{
float* float_buffer = 0;
uint32_t chn;
@ -426,7 +426,7 @@ AudioExportSpecification::process (nframes_t nframes)
}
int
Session::start_audio_export (AudioExportSpecification& spec)
Session::start_export (ExportSpecification& spec)
{
if (!_engine.connected()) {
return -1;
@ -448,7 +448,7 @@ Session::start_audio_export (AudioExportSpecification& spec)
}
int
Session::stop_audio_export (AudioExportSpecification& spec)
Session::stop_export (ExportSpecification& spec)
{
/* don't stop freewheeling but do stop paying attention to it for now */
@ -459,7 +459,7 @@ Session::stop_audio_export (AudioExportSpecification& spec)
}
int
Session::prepare_to_export (AudioExportSpecification& spec)
Session::prepare_to_export (ExportSpecification& spec)
{
int ret = -1;
@ -521,7 +521,7 @@ Session::prepare_to_export (AudioExportSpecification& spec)
}
int
Session::process_export (nframes_t nframes, AudioExportSpecification* spec)
Session::process_export (nframes_t nframes, ExportSpecification* spec)
{
uint32_t chn;
uint32_t x;
@ -551,7 +551,7 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec)
if (!spec->running || spec->stop || (this_nframes = min ((spec->end_frame - spec->pos), nframes)) == 0) {
process_without_events (nframes);
return stop_audio_export (*spec);
return stop_export (*spec);
}
/* make sure we've caught up with disk i/o, since
@ -574,7 +574,7 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec)
for (chn = 0; chn < spec->channels; ++chn) {
AudioExportPortMap::iterator mi = spec->port_map.find (chn);
ExportPortMap::iterator mi = spec->port_map.find (chn);
if (mi == spec->port_map.end()) {
/* no ports exported to this channel */
@ -588,17 +588,18 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec)
/* OK, this port's output is supposed to appear on this channel
*/
AudioPort* const port = dynamic_cast<AudioPort*>((*t).first);
if (port == 0) {
cerr << "FIXME: Non-audio export" << endl;
continue;
}
Sample* port_buffer = port->get_audio_buffer().data();
AudioPort* const aport = dynamic_cast<AudioPort*>((*t).first);
MidiPort* const mport = dynamic_cast<MidiPort*>((*t).first);
if (aport != 0) {
Sample* port_buffer = aport->get_audio_buffer().data();
/* now interleave the data from the channel into the float buffer */
for (x = 0; x < nframes; ++x) {
spec->dataF[chn+(x*spec->channels)] += (float) port_buffer[x];
/* now interleave the data from the channel into the float buffer */
for (x = 0; x < nframes; ++x) {
spec->dataF[chn+(x*spec->channels)] += (float) port_buffer[x];
}
} else if (mport != 0) {
cerr << "EXPORT MIDI PORT" << endl;
}
}
}

View File

@ -1141,16 +1141,16 @@ TempoMap::round_to_type (nframes_t frame, int dir, BBTPointType type)
case Bar:
if (dir < 0) {
/* relax */
} else if (dir > 0) {
if (bbt.beats > 0) {
bbt.bars++;
} else if (metric.frame() < frame) {
bbt.bars++;
}
} else {
if (bbt.beats > metric.meter().beats_per_bar()/2) {
bbt.bars++;
}
}
bbt.beats = 1;
bbt.ticks = 0;
@ -1162,6 +1162,8 @@ TempoMap::round_to_type (nframes_t frame, int dir, BBTPointType type)
} else if (dir > 0) {
if (bbt.ticks > 0) {
bbt.beats++;
} else if (metric.frame() < frame) {
bbt.beats++;
}
} else {
if (bbt.ticks >= (Meter::ticks_per_beat/2)) {
@ -1177,11 +1179,9 @@ TempoMap::round_to_type (nframes_t frame, int dir, BBTPointType type)
}
/*
cerr << "for " << frame << " round to " << bbt << " using "
<< metric.start()
<< endl;
*/
cerr << "for " << frame << " round to " << bbt << " using "
<< metric.start()
<< endl;
return metric.frame() + count_frames_between (metric.start(), bbt);
}

View File

@ -54,7 +54,7 @@ TransientDetector::use_features (Plugin::FeatureSet& features, ostream* out)
if (out) {
(*out) << (*f).timestamp.toString() << endl;
}
current_results->push_back (RealTime::realTime2Frame ((*f).timestamp, (nframes_t) floor(sample_rate)));
}
}