13
0
Commit Graph

13505 Commits

Author SHA1 Message Date
Johannes Mueller
d2c163e788 Make literals in libs/ardour/template_utils.cc translatable 2017-08-20 21:09:30 +02:00
Johannes Mueller
bd4db1e151 Remove the template description XMLNode before saving the template
... to avoid that the new template description is concatenated to the old one.
2017-08-20 21:09:30 +02:00
Johannes Mueller
419b1c1cfd Extract the route template descriptions
... and put them into the template info list.
2017-08-20 21:09:30 +02:00
Johannes Mueller
245154d06a Let user add a route template description on saving route templates 2017-08-20 21:09:30 +02:00
Johannes Mueller
ae51d5fd4e Let the user add a template description on saving session templates 2017-08-20 21:09:30 +02:00
Johannes Mueller
908369ab3e Save template description at toplevel rather than in <Metadata/> 2017-08-20 21:09:30 +02:00
c399954148 Don't use references for constant c-types
This fixes various Lua-scripts: There are no explicit bindings to
turn int64_t, uint64_t into a const reference.

Besides it doesn't make sense to use a reference for constant _t that can
be directly loaded in CPU register or on the stack.
2017-08-20 19:02:17 +02:00
fb745cc5a8 Lua may call C++ functions with throw. Catch them 2017-08-19 01:06:44 +02:00
be6abce398 Add Lua binding to un/assign VCAs 2017-08-18 22:00:24 +02:00
08c1300718 Remove old destructive API (non layered is a dynamic mode) 2/2 2017-08-18 21:12:45 +02:00
e0a83a758e Redesign Session+Route Template Meta Script API
Remove special-cased script types. Allow Action-Scripts to be re-used
for session-setup or route-templates.
2017-08-18 20:42:55 +02:00
e951e68780 Add luaRef is Boolean 2017-08-18 20:42:55 +02:00
3421c6e814 NO-OP: whitespace 2017-08-18 09:42:04 -04:00
f84bebbb30 strip <Actions>/ from displayed path when printing bindings to HTML 2017-08-18 09:42:04 -04:00
5ed68fd2f8 NO-OP: whitespace 2017-08-18 00:11:55 +02:00
38a029c069 Expose Lua bindings to create/delete VCAs 2017-08-18 00:11:55 +02:00
6c49d9555a Track Templates: initial lua backend support. 2017-08-17 13:31:45 -05:00
5f0279ab06 Catch some exceptions during session loading. 2017-08-17 19:28:14 +02:00
22055a07c0 Check major session file format version.
Don't allow to load sessions created with a newer version of Ardour
with an old one (no forward compatibility).
2017-08-17 18:32:49 +02:00
a4ee2d3c17 Expose enums used in RCConfig and other missing classes to Lua. 2017-08-17 01:13:39 +02:00
76036ae0f3 Fix unit-test data (XML attributes changed) 2017-08-17 01:13:36 +02:00
11aa1d60ae Add RCConfiguration Lua Bindings 2017-08-16 00:51:20 +02:00
9f87805d95 The Auditioner is not in the Session's RouteList
Remove various checks, add assert() for now (perhaps some old sessions?)
This fixes an off-by one issue when adding tracks (presentation
info order in add_routes_inner)
2017-08-16 00:51:20 +02:00
6ec133ebde Separate "add master bus" (and add Lua bindings)
This is in preparation for "advanced session setup" allow a SessionSetup
Lua script to create the master-bus.
2017-08-16 00:51:20 +02:00
1d8c7ef37a Clean up BusProfile:
* requested_physical_in/out was unused
 * input/output Autoconnect just overrides Preference/Config
   (can be done by a template script)
 * master_out_channels is kept for compatibility (allow to create
   new empty session)
2017-08-16 00:51:20 +02:00
47d86cf54d Change the template pulldown menu into a tree list. Populate the Description view when a template is selected. 2017-08-14 16:14:42 -05:00
0a0eec2adc Session Metadata: add a Description field.
* This is a multi-line text field.
* If the session is a template, we might show this in the New Session dialog.
2017-08-14 14:08:17 -05:00
8402537493 use a lock to set/get AutomationList automation state
It isn't 100% clear that we should use the list's data lock, but it seems quite likely
that this is the correct design, because of the interlock between data being present
and automation state
2017-08-12 14:40:21 -04:00
acd73a9bf8 yet another Windows build fix (LV2 preset 89475b2c9) 2017-08-11 17:33:44 +02:00
ee839bda3d Fix Windows builds (amend 89475b2c) 2017-08-11 17:19:45 +02:00
89475b2c95 Fix LV2 Preset path for window 2017-08-11 16:54:39 +02:00
62ce5465ca Prepare for templates w/description 2017-08-11 15:24:05 +02:00
e3edbcb806 Add a new script type for meta-templates: SessionSetup 2017-08-11 15:24:05 +02:00
6ad4379b4d OSC: fix issue #7444 send fader position/gain even when 0. 2017-08-10 08:50:46 -07:00
d2d660521e Save sample-rate for sessions created from templates 2017-08-10 02:26:19 +02:00
e983e08f1d remove old PBD::SystemExec bindings (Windows classkeys) 2017-08-10 02:26:14 +02:00
8eb3b9d34b Add a Lua SetSession signal/hook 2017-08-10 02:25:58 +02:00
0191a9c4c2 Centralize Lua sandboxing 2017-08-10 02:25:49 +02:00
bbc8c1354e Separate set_toggleaction_state () API
Prepare for a method consistent with access_action():
* separate group + action names
* no action string parsing overhead.
* no fatal, abort () call for invalid actions
2017-08-09 16:29:24 +02:00
e1a29c4e46 Fix windows builds (amend 0c4e0503) 2017-08-09 16:22:23 +02:00
0c4e0503b4 SystemExec Lua bindings (vfork, fire+forget) 2017-08-08 23:27:47 +02:00
26dc287c00 Fix non-buffered PA backend. Wait for backend to become active
This hopefully fixes an issue with port-registration (new session)
being skipped because PortAudioBackend::available() still false
until the first callback.
2017-08-07 23:23:39 +02:00
7235d9751b Add debug-msg for port-handle registration 2017-08-07 23:03:08 +02:00
fd6377a5af PortAudio: skip process callbacks until ports are established 2017-08-07 19:27:37 +02:00
518cf6045c Revert "Work around a Windows crash (for now)"
This reverts commit 4f2dc77f6f.
2017-08-07 19:26:06 +02:00
4f2dc77f6f Work around a Windows crash (for now)
The root-cause is likely PortAudio backend specific async
port-registration, re-establish ports after session creation and
after the first callback and it's apparently a race-condition:
crash is not 100% reproducible.


#10 0x00007ffb156df18a in msvcrt!abort () from C:\Windows\System32\msvcrt.dll
#11 0x0000000012597832 in _wassert (_Message=_Message@entry=0x2eaf96f0 L"_port_handle",
    _File=0x2 <error: Cannot access memory at address 0x2>, _File@entry=0x346a1430 L"../libs/ardour/audio_port.cc",
    _Line=80) at ../../mingw-w64-crt/misc/wassert.c:54
#12 0x00000000125978e8 in _assert (_Message=0x1282f7e9 "_port_handle",
    _File=0x1282f7a0 "../libs/ardour/audio_port.cc", _Line=80) at ../../mingw-w64-crt/misc/wassert.c:30
#13 0x00000000120d1a51 in ARDOUR::AudioPort::get_audio_buffer (this=0x34a95a70, nframes=256)
    at ../libs/ardour/audio_port.cc:80
#14 0x00000000126724f9 in ARDOUR::AudioPort::get_buffer (this=<optimized out>, nframes=<optimized out>)
    at ../libs/ardour/ardour/audio_port.h:43
#15 0x0000000012435421 in ARDOUR::Session::ltc_tx_send_time_code_for_cycle (this=this@entry=0x37666310,
    start_frame=0, end_frame=end_frame@entry=256, target_speed=0, current_speed=0, nframes=nframes@entry=256)
    at ../libs/ardour/session_ltc.cc:180
#16 0x000000001245209f in ARDOUR::Session::no_roll (this=this@entry=0x37666310, nframes=256)
    at ../libs/ardour/session_process.cc:145
#17 0x0000000012453051 in ARDOUR::Session::fail_roll (this=this@entry=0x37666310, nframes=<optimized out>)
    at ../libs/ardour/session_process.cc:128
#18 0x0000000012459ebd in ARDOUR::Session::process_without_events (this=this@entry=0x37666310,
    nframes=nframes@entry=256) at ../libs/ardour/session_process.cc:897
#19 0x000000001245a462 in ARDOUR::Session::process_with_events (this=0x37666310, nframes=256)
    at ../libs/ardour/session_process.cc:425
#20 0x0000000012451bc5 in ARDOUR::Session::process (this=0x37666310, nframes=nframes@entry=256)
    at ../libs/ardour/session_process.cc:78
#21 0x00000000120e79fd in ARDOUR::AudioEngine::process_callback (this=0x23316e30, nframes=256)
    at ../libs/ardour/audioengine.cc:376
#22 0x00000000285390fe in ARDOUR::PortAudioBackend::blocking_process_main (this=this@entry=0x29e67750,
    interleaved_input_data=interleaved_input_data@entry=0x115e8790,
    interleaved_output_data=interleaved_output_data@entry=0x115e0050)
    at ../libs/backends/portaudio/portaudio_backend.cc:1962
#23 0x0000000028539b75 in ARDOUR::PortAudioBackend::process_callback (this=this@entry=0x29e67750, input=0x115e8790,
    output=0x115e0050, frame_count=<optimized out>, timeInfo=0x3d17fd70, statusFlags=statusFlags@entry=0)
    at ../libs/backends/portaudio/portaudio_backend.cc:775
#24 0x0000000028539c16 in ARDOUR::PortAudioBackend::portaudio_callback (input=<optimized out>,
    output=<optimized out>, frame_count=<optimized out>, time_info=<optimized out>, status_flags=0,
    user_data=0x29e67750) at ../libs/backends/portaudio/portaudio_backend.cc:721
#25 0x00000000632c528f in NonAdaptingProcess () from C:\Program Files\Mixbus32C-4\bin\libportaudio-2.dll
#26 0x00000000632c73b2 in PaUtil_EndBufferProcessing () from C:\Program Files\Mixbus32C-4\bin\libportaudio-2.dll
#27 0x00000000632d129c in ProcessingThreadProc () from C:\Program Files\Mixbus32C-4\bin\libportaudio-2.dll
2017-08-07 17:39:28 +02:00
ffcb0af8bc Fix Windows builds (amend 7009ff03) 2017-08-07 13:58:56 +02:00
7e3a286627 fix a -Wattributes 2017-08-07 13:58:05 +02:00
4994bc4fb1 Explicitly initialize parent in the copy constructor 2017-08-07 13:57:49 +02:00
29cc1f06b6 space matters 2017-08-07 05:07:19 +02:00
e3690cf653 Add Lua Bindings to clone/copy regions 2017-08-07 03:08:36 +02:00
771a4a4e0c Add Lua bindings for RegionMap and region list 2017-08-07 02:40:52 +02:00
fff9a3cc7f Allow FaderPort to select VCAs 2017-08-06 22:18:01 +02:00
d18a43422c Emit SelectionChange when VCA is removed
chicken/egg:
Stripable d'tor which calls remove_stripable_by_id() will only be called
when the Stripable is destroyed. But as long as the GUI selection holds a
shared-ptr reference to the Stripable, it won't be destroyed.
2017-08-06 22:17:05 +02:00
2f1405db5a Broadcast info according to EBU tech-specs 2017-08-06 17:56:59 +02:00
515bd5ad4d Remove some debug output 2017-08-06 14:48:18 +02:00
f25824ed28 "Selected" is a PresentationInfo Property.
This fixes MIDI Input follows MIDI track selection (and maybe other
issues) and hopefully breaks nothing else (most places subscribe to
both Stripable::PropertyChanged and PresentationInfo::PropertyChanged).
2017-08-05 21:12:52 +02:00
fde07d4f4f amend bc46a7e2e9; fix blind coding typos 2017-08-05 16:17:31 +02:00
8c61c7f14a amend f4c76f89d3a; fix blind coding typos 2017-08-05 16:06:15 +02:00
bc46a7e2e9 PortAudio backend RT-safe MIDI buffer allocation 2017-08-05 15:36:36 +02:00
f4c76f89d3 Coreaudio backend RT-safe MIDI buffer allocation 2017-08-05 15:36:36 +02:00
59a63a08f9 ALSA backend RT-safe MIDI buffer allocation 2017-08-05 15:36:36 +02:00
2b7c585dba Update backend API: read-only MIDI input buffers 2017-08-05 15:36:36 +02:00
f21a66797a Revert 542d021f, fix number of DSP threads
The main process-callback does not participate in DSP computation
2017-08-05 03:02:17 +02:00
2d60a69c2d Consolidate ctrl surface code 2017-08-05 01:28:11 +02:00
8374e23014 Add API to set thread-priority (for ctrl-surfaces) 2017-08-05 01:28:11 +02:00
c125cd2647 Reduce DSP thread priority (main-i/o > midi i/o > computation) 2017-08-05 01:28:11 +02:00
cec84d242d NO-OP: whitespace 2017-08-04 16:26:37 +02:00
1ed9564ffd Graph profiling: allow to override max DSP thread count & calc avg. 2017-08-04 16:26:26 +02:00
38c5e9de6d CoreAudio: Set MachThread RT Priority 2017-08-04 06:25:23 +02:00
4ec72b5c76 DummyBackend: allow changing SPP 2017-08-04 03:53:51 +02:00
9036f89311 Fix typo in Lua Vamp API 2017-08-04 01:27:46 +02:00
34936f3654 Allow calling IO::silence for yet unregistered ports (Click) 2017-08-03 23:54:26 +02:00
6b5d374352 Some more assert() debugging 2017-08-03 23:46:05 +02:00
1937c74191 Ignore cycle-start/end for unregistered ports
Should fix a race during Session::destroy(), Port::PortDrop
which unregisters ports with the backend, but the actual port instance
will still exist.

The engine does no longer have a session-pointer and only calls
CycleStart(); CycleEnd() to clear port-buffers. Trying to clear
and already unregistered Port will crash.
2017-08-03 19:25:14 +02:00
8b380a423a improve 1a288ddd, destroy IO after disconnecting from signals.
This does not completely fix the race-condition. The GUI
(e.g. connection-manager) may still hold a shared-ptr reference.
2017-08-03 19:25:14 +02:00
d0c934a9de Fix crash when cleaning up w/o destroying session
- Control-protocols may transmit data during cleanup
 (e.g. reset surface), and need the Audio-engine to do so.
- destroying the ControlProtocolManager w/o the Session calling
 ::drop_protocols(), lead to a double free.
2017-08-03 19:25:14 +02:00
81f12f602b OSC: Fix to make sure buses created with Ardour 4.7 sessions show up 2017-08-03 09:09:02 -07:00
4e1772425d prevent duplicate playlist-names when re-naming #7438 2017-08-03 02:04:57 +02:00
d1558dcab5 OSC: Add command to select Master 2017-08-02 10:43:13 -07:00
1a288ddd95 Fix some more crashes at session-close
PortDrop unregisters backend ports, the backend will return a NULL
buffer-pointer, but the I/O object still exists (Metronome, LTC)

AudioBuffer::_data == 0

#0  msvcrt!memset () from C:\Windows\System32\msvcrt.dll
#1  ARDOUR::AudioBuffer::silence (this=0x2c410710, len=256, offset=0) at ../libs/ardour/audio_buffer.cc:88
#2  ARDOUR::AudioPort::cycle_end (this=0x34918730, nframes=256) at ../libs/ardour/audio_port.cc:66
#3  ARDOUR::PortManager::cycle_end (this=this@entry=0x23342770, nframes=nframes@entry=256)
[process callback w/o session]
2017-08-01 23:27:34 +02:00
9694986a85 Fix LTC encoder removal
Fixed a crash if an x-run or graph-reorder happens after the LTC encoder
has been destroyed (possible at session-close or after disabling
the encoder).  This also fixes duplicate callbacks in case the
encoder was re-enabled times in an active session.
2017-08-01 17:48:42 +02:00
ab02284fc2 OSC: expand plugin_descriptor to split into smaller OSC messages (issue #0007433) 2017-08-01 07:23:27 -07:00
e4925a90cb OSC: add param to plugin_list response which indicates plugin enable state (OnkelDead) 2017-08-01 07:04:59 -07:00
Johannes Mueller
6663a26755 Signal wish to show inline display in gui by lv2:optionalFeature
... in .ttl file rather than by extension_data() in code. That's more in the
spirit of LV2.
2017-07-31 21:31:23 +02:00
Johannes Mueller
e75db87bf6 Tweaking the a-comp inline display a bit. Make it more skinny. 2017-07-31 21:31:23 +02:00
Johannes Mueller
2716ce41e0 Indicate whether to show plugin's inline display in GUI
This is currently done by an extension data similarly to
LV2_INLINEDISPLAY__interface.
2017-07-31 21:31:23 +02:00
Johannes Mueller
59775df9be Simplified inline display if the channel strip is not wide enough
If the width of the display area is below 200 px, we switch from the graph
display to displaying only two bars, one for output level and one for gain
reduction. In the bar mode we also visualize threshold and ratio.
2017-07-31 21:31:22 +02:00
Johannes Mueller
24cbb1b153 Honor attack and release parameters in a-comp's inline graph 2017-07-31 21:31:22 +02:00
Johannes Mueller
ccab32654b Indicate gain reduction in a-comp 2017-07-31 21:31:22 +02:00
e65ff3fb4a Show range -60 .. +10 dBFS in acomp's inline display 2017-07-31 21:31:22 +02:00
Johannes Mueller
85106d81a0 Set makeup to 0.f when bypassed also in stereo version 2017-07-31 21:31:22 +02:00
Johannes Mueller
29df879edd Adjust the indication of the treshold value by the makup gain.
When lifting the compressor curve by the makeup gain value the actual
treshold (the level when the curve kinks in) is also lifted. Therefore we need
to adjust the dashed line indicating the threshold as well as the level when
the color gradient to show compression kicks in.
2017-07-31 21:31:22 +02:00
Johannes Mueller
dff4153024 Also the stereo version needs to set need_expose 2017-07-31 21:31:22 +02:00
Johannes Mueller
f68754b19d Show a-comp's makeup grain in inline rendering 2017-07-31 21:31:22 +02:00
660096b037 Fix typo 2017-07-31 19:54:23 +02:00
f51fab35b1 OSC: Make stripname refresh in automation play mode as well. 2017-07-31 07:55:09 -07:00
e94771a58f OSC: fix VCAs try to connect to controls it does not have. 2017-07-30 18:35:38 -07:00
008c3db9cd Some session cleanup fixes (delete slave, take lock for lua) 2017-07-31 01:48:28 +02:00
edcfa23e14 Binding Proxy: Drop references as requested. 2017-07-30 02:42:55 +02:00
6f80a5ba0f Turn AutomationCtrl into a SessionHandleRef
This fixes a crash with GUI elements which are only deleted during GUI
Idle and hold a Reference to a Controllable,
The session is already destroyed at that point:

ARDOUR::CoreSelection::remove_control_by_id(PBD::ID const&)
ARDOUR::AutomationControl::~AutomationControl()
ARDOUR::SlavableAutomationControl::~SlavableAutomationControl()
ARDOUR::MonitorControl::~MonitorControl()
boost::detail::sp_counted_base::destroy()
boost::detail::sp_counted_impl_p<AudioGrapher::Interleaver<float>::Input>::dispose()
boost::detail::sp_counted_base::release()
boost::detail::shared_count::~shared_count()
boost::shared_ptr<PBD::Controllable>::~shared_ptr()
boost::shared_ptr<PBD::Connection>::~shared_ptr()
ArdourWidgets::BindingProxy::~BindingProxy()
ArdourWidgets::ArdourButton::~ArdourButton()
VCAMasterStrip::~VCAMasterStrip()
int idle_delete<VCAMasterStrip>(VCAMasterStrip*)
2017-07-30 02:42:55 +02:00
ea48c56061 NO-OP: name-change (_list and _lock are also used in other places)
Derived classes need to explicitly specify namespace and class
to avoid ambiguities (even for private members)
2017-07-30 02:42:55 +02:00
80ecac672f Modify our MSVC project to add libltc as a dependency of 'dummy_backend' (which now needs to link to it) 2017-07-29 10:46:53 +01:00
7f03c9a664 Fix an ambiguous call to 'floor()'
MSVC complains, so let's specify which override we want.
2017-07-29 10:44:00 +01:00
b5e0b5b09f PortManager::unregister_port() must be called with process lock
This fixes "Failed to register <surface> port" when re-loading a session.
2017-07-28 20:15:15 +02:00
964b88e651 Delete CoreSelection at session close 2017-07-28 20:11:55 +02:00
7b7cc9ea6d Add a LTC generator to the dummy backend 2017-07-28 17:47:36 +02:00
d67056562b Fix write-pass re-start while in an active write-pass 2017-07-27 17:50:52 +02:00
3899c06fae Start a new write-pass when writing automation and locating while rolling 2017-07-27 01:40:13 +02:00
28c29ab22d Fix initial sync to LTC with small buffersizes
Ardour follow_slave() does nothing (not even seek) if the slave is not
locked.

The LTC-slave assumes it's locked if LTC is stable for 5 continuous
process-calls.

If the difference of Ardour's transport-position to the LTC-timecode
is large (> 2sec), the slave reset itself (assuming drift, seek don't vari-
speed).

A LTC-slave does reset does reset the locked counter.

Hence: If initially Ardour's transport differs > 2 sec and the buffersize
is small (many process-callbacks), the slave kept resetting itself
never informing Ardour that it locked to the external TC, and Ardour
never issued a seek.
2017-07-26 22:58:16 +02:00
b804109e8e update libltc 2017-07-26 22:58:12 +02:00
2fa34614d0 Remove unnecessary tests for touch-state 2017-07-25 20:16:04 +02:00
bde3edf1c8 Make start_touch() truly idempotent
Also don't allow outsiders to call Controllable::set_touching()
2017-07-25 20:15:12 +02:00
681ab52330 fix e838e7f359 2017-07-24 22:26:04 +02:00
e838e7f359 Fix Mixbus "well known" send-names and enable ctrls 2017-07-24 21:54:31 +02:00
a41198305e Update WritePass logic + AutomationList Undo
Fixes various issues when changing AutomationState while rolling.
2017-07-24 21:00:12 +02:00
8c260a647a update japanese translation (Hiroki Inagaki) 2017-07-24 14:59:11 -04:00
b694ee9e53 OSC: only use gain change signals if value changes 2017-07-24 10:21:31 -07:00
3ab4a1d147 OSC: add use groups to GUI 2017-07-24 10:21:31 -07:00
f3e0fcbb7e OSC: port mode by default should be manual 2017-07-24 10:21:31 -07:00
f1632fcfd2 OSC: make sure initialization is complete before we allow periodic to run 2017-07-23 20:08:02 -07:00
07e869fda8 OSC: simplify route observer 2017-07-23 20:08:02 -07:00
b29b46d371 Fix saving automation record undo
Calling AutomationList::before() clears the state.
2017-07-24 02:59:09 +02:00
30f85faa49 Update amp.cc to use gain_t for maths (no more double)
Also tweak threshold for LPF, assume gain-differences < 10-e5 as
no-change
2017-07-24 01:59:24 +02:00
fde0e293a3 Remove unused "mark" parameter from stop_touch() API 2017-07-24 01:59:18 +02:00
2006701f73 Fix ctrl-list guard-points and concurrency issues
* lock list when editing (prevent concurrent modification of insert
  iterator
* don't add a guard-point if an event is already present between the
  target and guard-point-position
* remove existing automation-events (old guard points) when
  touching automation w/o change
* don't unset "new write pass" when not rolling
  (fixes issues when not rolling but locating with write-enabled)
2017-07-24 01:59:08 +02:00
183351f333 Add touch-events signal emission to ArdourKnob 2017-07-23 19:40:20 +02:00
1508838bde OSC: add /use_group 1/0 command 2017-07-22 12:12:41 -07:00
b42dbe9e4e Sanitize printing of a-eq gain parameters 2017-07-22 17:41:35 +02:00
c21345fc93 NO-OP: whitespace 2017-07-22 15:41:08 +02:00
24829c93b8 AutomationWatch: single DropReferences connection per AC 2017-07-22 15:40:27 +02:00
48ec6dd5c4 NO-OP: whitespace 2017-07-22 15:17:09 +02:00
fba2c2467d Fix Route mute automation touch (owned control) 2017-07-22 15:16:54 +02:00
24e92c1861 NO-OP: consistent [internal] API name for Automatables 2017-07-22 04:45:48 +02:00
f756dc69f4 NO-OP: Consistent API name 2017-07-22 04:25:07 +02:00
038c391d55 More non-rt calls to VCA - fixes VCA automation writing
This calls for a unified API to invoke
Automatable methods  ::transport_located() and ::transport_stopped()
on Stripables,  rather than indirectly calling it via
Route::non_realtime_locate(), Route::nonrealtime_handle_transport_stopped()
2017-07-21 23:07:51 +02:00
243cd35a36 Fix VCA Automation: end write pass 2017-07-21 21:48:20 +02:00
nick_m
886f4e6bc8 TempoMap legacy session loading fixes
Ensure we set the last tempo end note types per minute.
Clarify that we only set the end ntpm if unset.
2017-07-22 02:15:20 +10:00
nick_m
e4e3c10a90 Fis stray break statement when checking for a legacy tempo map
This could result in legacy sessions not being identified correctly and
loading with end tempi of -1.0.
2017-07-22 02:15:20 +10:00
nick_m
2925fd52e5 Rework tempo marker editing menu functions
Setting a tempo to 'Continue' via right click puts it in a permanent state
of continuing the previous section's end tempo (basically what
'Lock Continue' should have been). This can be disabled (unlocked) by
selecting 'Don't Continue'.

Remove the previous temporary 'Continue' function.

Reorganise menu to separate position lock style from more commonly
used functions.
2017-07-22 02:15:20 +10:00
nick_m
1c51435fa3 Calculate clamped tempo stretch ratios using the correct (musical) domain 2017-07-22 02:15:20 +10:00
nick_m
90547112e2 TempoMap : Remove old solve_map debugging code 2017-07-22 02:15:20 +10:00
nick_m
bb71a31b0c Move some duplicated replace/add tempo section code
Resets the previous tempo section's end ntpm to match the start
of a new section whenever a section is added to the map.
2017-07-22 02:15:20 +10:00
nick_m
1399ef391d Remove redundant beat arg from TempoMap::add_meter
BBT time should be enough to determine the beat.
2017-07-22 02:15:20 +10:00
nick_m
c03da364ad Fix incorrect double-snap when moving audio-locked tempi 2017-07-22 02:15:20 +10:00
nick_m
b0a306f9d0 Check for identical meter positions in old sessions by beat rather than pulse 2017-07-22 02:15:20 +10:00
8af27a7a2e OSC make all group dispositions the same 2017-07-21 08:22:02 -07:00
Johannes Mueller
0109042e7b Increase range of a-comp#stereo release time
Like for the mono version in f52443e17e
2017-07-21 16:11:17 +02:00
d977cc3238 Non-layered MIDI recording
This does not merge MIDI data, but trims MIDI regions at rec-stop like
non-layered audio-recording does.
2017-07-21 00:39:22 +02:00
Johannes Mueller
67bec5b5be Set the name of the route in a route template to the template name 2017-07-20 20:09:53 +02:00
adc2c756e6 Allow adding tracks w/o running backend 2017-07-20 16:45:24 +02:00
9992ea10b3 Allow listening to channels being exported (w/ realtime export)
It would be nice to change get_audio_buffer() to not set
AudioBuffer::_written to false (all but one other user of this API also
only get read-only data), but that requires chaning the rationale of the
underlying ::set_data() API.
2017-07-19 22:15:22 +02:00
951404475c MSVC changes needed to implement the new 'waveview' library 2017-07-19 08:20:18 +01:00
bf150f049f MSVC changes needed to implement the new 'widgets' library 2017-07-19 08:16:30 +01:00
b1c73b11fc FP8: use separate bank offsets per MixMode 2017-07-19 03:04:58 +02:00
7893cac718 Fix well-known send API for mixbusses. 2017-07-19 02:11:10 +02:00
601604972c FP8: Fix Mixbus solo-state and indicate implicit solo (blink) 2017-07-19 01:52:14 +02:00
9a0a2a29b5 Fix NSGLView invalidation 2017-07-18 21:34:03 +02:00
Léo Andrès
81eb619dc2 Fix french translation mistake 2017-07-18 18:59:50 +02:00
5f485f964e Fix OSX builds in the wake of the source-tree layout changes 2017-07-18 18:29:22 +02:00
8c6d78c188 add required stdint.h 2017-07-17 18:15:42 -04:00
ac37c9b7b8 PluginInsert::silence is used after all (fix 07aeb12d3) 2017-07-17 23:52:45 +02:00
4922d9f941 FP8: save/restore "two line text" option 2017-07-17 22:59:12 +02:00
521e4f676b Remove unused clearlooks-older 2017-07-17 21:06:04 +02:00
beb73edf55 Purify libcanvas, remove libardour dependency
A canvas is just a canvas. Move WaveView into its own library.
2017-07-17 21:06:04 +02:00
601c317d70 Clean up library inheritance (colors.h, utils.h)
make libwidget independent of libcanvas.
Confine basics to pbd and gtkmm2ext.
2017-07-17 21:06:04 +02:00
eb1e423b75 Remove <gtkmm.h> include from header files. 2017-07-17 21:06:04 +02:00
f9e5e4360e Move more Gtkmm2ext widgets into libwidget 2017-07-17 21:06:04 +02:00
b5e9451bc7 Remove unused sources & includes 2017-07-17 21:06:04 +02:00
f6e182b937 Move Gtkmm2ext widgets into libwidget 2017-07-17 21:06:04 +02:00
5c92613698 Separate Ardour UI widgets into dedicated library 2017-07-17 21:06:04 +02:00
e0b4767d2e Fix loading bundles #7426 2017-07-16 21:44:00 +02:00
157d4b2c57 Data less than or equal to zero should be considered "off" 2017-07-16 21:01:08 +02:00
5b9822ab98 Fix merging boolean automation + mute disconnect. 2017-07-16 21:01:03 +02:00
07aeb12d3a Some notes for later. 2017-07-16 17:09:22 +02:00
69ecb0db70 Remove unused API and a never used execution-branch 2017-07-16 16:54:32 +02:00
dee990103a Consistent Automation evaluation:
Rule #89: The *owner* of each automation-control is responsible to
evaluate automation of automated automation-controls (and emit Changed()
signals to notify the GUI and slaved controls).

This can happen during run(), when the Processor evaluates automation
(eg. PluginInsert does that), but needs to regardless, every cycle.
Emit Changed signal for GainControl

This follow the same concept as PluginInsert: The Changed signal
is called on demand when evaluating automation.
2017-07-16 16:53:39 +02:00
06ca52d5a5 Add API to run automation only (emit Changed signal).
Note: MuteControl already implemented this,
This removes the special case of boolean_automation_run().

Likewise this removes special-cases for actually_set_value() during
automation playback.
2017-07-16 16:52:12 +02:00
906cf85982 Rename private method
The same name (automation_run) is used in different context (mute) for
only processing automation.
2017-07-16 16:49:30 +02:00
542d021fbc Fix total number of process threads 2017-07-13 17:16:31 +02:00
Johannes Mueller
eb79ae7d41 Don't try to chop of the file name extension from a template dir
Template files reside in
.config/ardour5/templates/$(template_name)/$(template_name).template

We run through .config/ardour5/templates/ and find there the names of the
directories the .template-files are located in. These directory names don't
have a .template extension. So we shouldn't try to chop the non existing
extension of, because then we only modify template names with a '.' in them.
2017-07-12 16:15:03 +02:00
Jelle van der Waa
b1cf27bed4 Fix duplicate ‘const’ declaration specifier 2017-07-12 12:09:59 +02:00
fd8053da9e Don't use VST ->user points, prefer host-reserved ptr
Apparently "user" is for plugins (not hosts) to use.
2017-07-08 18:13:42 +02:00
82278af424 Add API to expand/flatten AC groups 2017-07-08 15:35:30 +02:00
60df2a342c Don't drop processor references with process-lock
_processors = new_list; may drop the last shared-ptr reference.
This may deadlock in ~IO() for I/O processors or plugins with sidechain
inputs. It's been mostly a non-issues since the GUI usually holds a last
shared-ptr reference for a processor to be deleted, but that is
not always the case.
2017-07-07 23:05:59 +02:00
deba170d6c Consistent ControlList freezing -- fixes #7419
AudioRegion::set_fade_in() freezes the original ControlList, then
assigns a new one and thaws that.
Frozen state needs to be retained during assignment.

Related: The overloaded assignment operator in AutomationList
performed duplicate signal emission and didn't freeze the list.
2017-07-07 02:35:00 +02:00
b732aa2ca1 fix void return with value (amend d5d297c4) 2017-07-06 18:01:49 +02:00
d5d297c407 Fix FP8 shutdown sequence (amend d421e56fc) 2017-07-06 16:55:02 +02:00
73ad5c97f2 Consistently set parameter steps.
And it's actually mostly moot. interface_to_internal maps
any range to 0..1.
The GUI could just hardcode min/max 0, 1 and steps 1/30, 1/300.
Except for controls that have explicit range-steps & ctrl surfaces.
2017-07-06 16:32:27 +02:00
2a809dcf70 OSC: add delta controls to master, monitor and select as well 2017-07-05 08:08:57 -07:00
cd30a29691 Fix session-event queue (multiple writer, single reader)
The reading is done in rt-process thread, but multiple UIs (surfaces,
GUI) can produce events to be queued.
2017-07-04 20:44:33 +02:00
c4578db595 Compatibility with old out-of-range automation-lane data
Ardour may have ignored log-scale for parameters 0..N and allowed
writing '0'. Force those values into the valid range on session load.
Also mark the list as "needs sorting" which removes potential duplicates.
2017-07-04 20:12:51 +02:00
135ffdcf6b Work-around for plugins with log-scale parameter 0..SR/2 2017-07-04 20:09:11 +02:00
5292a8f4ae Allow DnDVbox to sort the selection, using original order
In preparation for Processors to be copy/pasted in the same order
as they appear on the strip -- not order in which they are selected.
2017-07-04 18:08:35 +02:00
b11c64ea5b OSC: GUI tweaking 2017-07-03 13:22:56 -07:00
b87bec3200 FP8: "Link" mode works with AutomationControl only. 2017-07-03 19:56:16 +02:00
d76885e9ef Revert "Prefer Stereo-Balance Panner for stereo tracks"
This reverts commit e9ee454ced.

This needs more work to preserve non-customized panners in existing
sessions. "user-panner" is only set if a user explicitly selects a
panner.
2017-07-03 16:21:35 +02:00
ddf55c0d88 PBD::init() failing is fatal in main(), don't silently exit. 2017-07-03 14:45:41 +02:00
e9ee454ced Prefer Stereo-Balance Panner for stereo tracks 2017-07-03 02:24:53 +02:00
ebc8e352bf FP8: toggle editor/mixer (now that "link" button is used)
..and some TODO notes.
2017-07-03 01:42:36 +02:00
3a42383975 Add binding-proxy to ClickBox 2017-07-02 22:48:39 +02:00
b942c76df9 FP8: properly control enum+integer parameters. 2017-07-02 21:05:42 +02:00
7ed775a716 Add API to step though parameter enumerations 2017-07-02 21:04:22 +02:00
0310f89971 FP8: Implement "Control-Link" 2017-07-02 18:19:13 +02:00
c4fcb12d12 Add control-focus notifications from bindable widgets. 2017-07-02 18:19:13 +02:00
6f986173f3 Controllable focus notification API
This allows to inform control-surfaces about the current GUI
control-element. "Link" control-surface interaction to GUI focus.
2017-07-02 18:19:13 +02:00
ec76d7ce03 OSC: GUI indicate invalid port and set to old port on defocus if not valid 2017-07-02 08:28:34 -07:00
34c0e3f1c8 FP8: plugin GUI display options 2017-07-02 02:06:48 +02:00
15b6b29112 Prepare x-thread signals plugin-GUI visibility 2017-07-02 01:58:16 +02:00
d1d6e696aa FP8: fix 2-line text 2017-07-02 01:57:21 +02:00
b2f3523ab6 Remove old libardour API for plugin UIs 2017-07-01 23:42:28 +02:00
c42db10044 OSC: issue 7176 patch applied. shows plugin descriptors. 2017-07-01 13:13:04 -07:00
2219021389 OSC: add feedback for solo isolate and solo safe to strips (issue 7161) 2017-07-01 11:49:08 -07:00
8bc25fb971 OSC: add strip type flag for master and monitor to strip list 2017-07-01 11:14:55 -07:00
f413b83cb9 Fix thinko in dd3f922788 2017-07-01 18:31:55 +02:00
58beb02024 FP8: Use Mixer-Order 2017-07-01 17:11:55 +02:00
a967a942d2 OSC: include all of select in feedback[13] 2017-06-30 20:47:42 -07:00
296c9ae03e OSC: try to prevent race when clearing devices 2017-06-30 20:13:18 -07:00
41bc5bc116 OSC: test param type in a way that works when optimized too. 2017-06-30 19:05:30 -07:00
d421e56fc0 FP8: Clear input port on close. Fixes crash when switching snapshots
The midi_input_handler for the AsyncMIDIPort is connected to the
main event-loop. Events may still be delivered after the surface was
destroyed.

That by itself is not harmful, unless a given message produces a reply:
The _output_port is already gone, FaderPort8::tx_midi crashes.
2017-07-01 02:55:47 +02:00
Johannes Mueller
f7452c2a3a Addressing #7371: don't trigger session->undo() from non-GUI-thread
When triggering Session::undo() or Session::redo() from a
non-GUI-thread (e.g. from a surface protocol) Ardour crashes if setting a
CairoWidget dirty due to a ENSURE_GUI_THREAD assertion. (see #7371)

By triggering undo by BasicUI::access_action() rather than by Session::undo()
we ensure that the GUI thread will finally call Session::undo().

So more like a workaround ... but better than crashing :)
2017-07-01 01:04:44 +02:00
1cbc91788f Don't invert azimuth & elevation display value 2017-06-30 20:01:53 +02:00
1682368052 NO-OP: whitespace 2017-06-30 19:56:40 +02:00
17bcb67af5 Remove cruft (ParameterDescriptor sets this) 2017-06-30 19:56:01 +02:00
389d2cab36 FP8: Scribble-strip display preferences 2017-06-30 19:55:03 +02:00
cd728fdd73 FP8: Allow to select Plugin Presets 2017-06-30 19:13:55 +02:00
1fe1d17ef8 FP8: don't allow to toggle Channelstrip bypass/enable 2017-06-30 02:31:36 +02:00
773c31afc0 FaderPort8 updates
* use 2 lines for Plugin Parameter Names
* Expose Plugin Bypass/Enable per plugin
 - Shift + Select in Plugin Select Mode
 - Bypass Button in Plugin Parameter Edit Mode
2017-06-30 01:59:12 +02:00
dd3f922788 Tweak LV2 float parameter printing 2017-06-30 01:56:49 +02:00
496ac30c41 Accommodate newly introduced source(s) in our MSVC project (gtkmm2ext) 2017-06-29 10:11:05 +01:00
33d30fdf57 Accommodate newly introduced source(s) in our MSVC project (cairocanvas) 2017-06-29 10:10:26 +01:00
fae592e8f4 Remove ambiguity ('CheckMenuItem' conflicts with an item already existing in MSVC) 2017-06-29 10:08:32 +01:00
d4928e0765 Fix multi-channel delaylines #7409 part 2/2 2017-06-29 04:40:54 +02:00
8e4eb42833 Fix send mono to stereo (or N to M; M > N) sends #7409 part 1/2 2017-06-29 04:40:00 +02:00
972e01f9c7 Add a convenience MenuHelper c'tor
This is pretty much Gtkmm's
  * CheckMenuElem::CheckMenuElem
  * MenuElem::MenuElem
except MenuItems are created with bool mnemonic = false;
2017-06-29 00:22:34 +02:00
d3510b5606 fix OSX builds (llmath compat) 2017-06-28 03:03:05 +02:00
1f5013b4a8 Distinguish error-messages.
The vast majority of errors reported by users as
  "Cannot configure audio/midi engine with session parameters"
have nothing to do with engine-parameters.
2017-06-27 20:28:45 +02:00
1dd4aab0b4 Update fluidsynth
Fix potential crashes in case fluid-synth runs into an OOM error,
and address a const-cast compiler warning.

Switch to track github repo (instead of sf.net git)
2017-06-27 20:12:46 +02:00
007f3cdbba Add convenience fn to compute a file's sha1sum 2017-06-26 19:39:40 +02:00
a1cd4f8dfe Fix friend declaration in WaveView code for non-c++11 builds 2017-06-26 17:04:18 +10:00
6e91ee071c Reimplementation of large parts of the WaveView class
The drawing itself should be unchanged but much of the rest of the
implementation has changed. The WaveViewThreads and WaveViewDrawingThread
classes were added and allow multiple drawing threads.

The Item::prepare_for_render interface is implemented by WaveView to enable
queuing draw requests for the drawing threads to process as soon as the state
change occurs during Editor::visual_changer, which often means the images will
be finished by the time they are needed in WaveView::render. This can
significantly reduce total render time and also flickering caused by images not
being ready for display.

If the drawing thread/s cannot finish the request by the time it is required in
WaveView::render then cancel it and draw the WaveViewImage in the GUI thread if
it is likely it can be completed in the current render pass/frame.  This change
also helps reduce the flickering caused by images not being ready with threaded
rendering, but with several drawing threads, drawing in the GUI thread may not
often occur (unless explicitly requested).

Allow unfinished images to be returned from the cache in
WaveView::prepare_for_render so that new draw requests aren't queued for
duplicate images. This reduces the amount of drawing for instance in
compositions where there are many instances of the same sample/waveform
displayed on the canvas as only a single image should be drawn.

Use a random width within a certain range for
WaveView::optimal_image_width_samples so that image drawing is less likely to
occur at the same time (which will cause a spike in render/draw time and
increase the chance of flickering waveforms).

Move implementations of the private WaveView classes into wave_view_private.h
and wave_view_private.cc source files.

Incorporate a fix for limiting the waveview image size to the cairo image size
limit.

Should hopefully Resolve: #6478
2017-06-26 08:40:47 +10:00
4ddf97f5a2 Add Canvas::get_microseconds_since_render_start() method
Initial use is for the WaveView class to determine whether on not to draw the
waveform in the GUI thread.
2017-06-26 08:40:47 +10:00
ab13e87ec2 Add Canvas::get_last_render_start_timestamp method 2017-06-26 08:40:47 +10:00
8538ba35fe Only call Gtk::Widget::queue_draw_area in canvas when item and visible area intersect
Refactor GtkCanvas::request_redraw to use Rect::intersection
2017-06-26 08:40:47 +10:00
c4e31fc322 Add an optional ArdourCanvas::Item::prepare_for_render interface
Called when an item has requested a redraw and intersects with visible
canvas area.

Also add Canvas::prepare_for_render that will call Item::prepare_for_render for
items visible on the canvas.
2017-06-26 08:40:47 +10:00
dac25b8db9 Add PreRender signal to the canvas
Emitted by the canvas immediately before rendering.
2017-06-26 08:40:47 +10:00
9618b6dcbb Whitespace fixes in canvas.h 2017-06-26 08:40:47 +10:00
de99d7c528 Allow saving state w/o backend
Connections are remembered by ARDOUR::Port to re-establish at load.
2017-06-25 22:03:42 +02:00
e511985ad9 Report Dummy as not available if not running
This fixes an issue with port-connections being polled from the backend
even when it's not running.
2017-06-25 20:53:47 +02:00
cc7ff53e1f Create a deep-copy of MIDI sources when saving snapshots 2017-06-25 01:57:19 +02:00