Commit Graph

31093 Commits

Author SHA1 Message Date
Robin Gareus e85ae7f9a6
Verbose cursor audio region peak display
https://discourse.ardour.org/t/is-it-possible-to-view-audio-levels-in-db-by-moving-cursor-over-a-waveform/105199
2020-12-30 13:42:42 +01:00
Robin Gareus 8a14a7a00b
Fix tracking-text offset
If position along a given axis is not tracked, then the
offset was applied repeatedly to the current position.
This caused the coordinate to run away.
2020-12-30 03:26:00 +01:00
Robin Gareus d741f01ad0
NO-OP: whitespace 2020-12-30 03:25:57 +01:00
Robin Gareus 3f60d12308
Handle async removal of sidechain input
Apparently a user managed to remove a SC input and then
use the input's context-menu before the UI had caught up.
(PluginPinWidget::plugin_reconfigured happens during idle)

---
Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000000

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0  [..] PluginPinWidget::sc_input_press(_GdkEventButton*, boost::weak_ptr<ARDOUR::Port>) + 1140
2020-12-29 16:08:46 +01:00
Robin Gareus 9ba8166ae8
Cache ffmpeg/transcoder paths
This significantly speeds up loading export formats that use ffmpeg.

A single call to ::transcoder_exe() took 300-400ms on Windows.
With multiple formats using an external transcoder, showing the
export dialog could take to 2-3 sec.
2020-12-22 22:23:43 +01:00
Robin Gareus ce07765347
video-export dialog, only show abort/progress when exporting 2020-12-22 19:35:12 +01:00
Robin Gareus 239c340527
Do not show blank waveforms in case height is < 1px
Instead draw some lines to indicate that "something" is there.
2020-12-22 13:27:46 +01:00
Robin Gareus 4b0f72e205
Do not bother to render waveforms < 2px high
Those are blank to begin with, nothing is drawn, yet they'd still be
cached.

This may happen during an initial exposure (see 1a49d7d42b),
or when deleting regions.
2020-12-22 05:54:55 +01:00
Robin Gareus 1a49d7d42b
Fix invisible multicahannel waveform at rec-stop
AudioRegionView() c'tor calls create_waves() early on
before the _height is set [1].

Now one following can happen:
 1. All peak-files are present. create_waves() directly calls
    create_one_wave() for each channel. They are initialized
    with zero height.
    But all channels are present so waves[] is populated and
    a later call to set_height() corrects this
 2. All peak-files are still missing. create_waves() schedules
    callbacks via PeaksReady -> peaks_ready_handler()
    Those callbacks arrive after set_height() was called and
    the waveforms are displayed correctly.

 3. Only some peak-files are present. This can happen at
    rec-stop when the region is created.
    create_waves() directly calls create_one_wave() for available
    peaks, and schedules peaks_ready_handler() for the remainder.
    The directly created waves have zero-height.
    Since not all waves are ready, they are stored in tmp_waves.
    waves[] remains unpopulated.

The set_height() call only ever changed the height of wave[], which
resulted in hidden waveforms, until a user manually changed the
height of the track.


[1] the height is set from
```
#1 AudioStreamView::create_region_view(boost::shared_ptr<ARDOUR::Region>, bool, bool)
#2 AudioStreamView::add_region_view_internal(boost::shared_ptr<ARDOUR::Region>, bool, bool)
#3 StreamView::add_region_view(boost::weak_ptr<ARDOUR::Region>)
 ...
## PBD::Signal1 Playlist::RegionAdded()
```
2020-12-22 03:37:17 +01:00
Robin Gareus e5e8b7a965
Close peakfile before emitting PeaksReady signal
The file has to be flushed to disk before it can be used.
This fixes an edge case only.

Since PeaksReady() is a cross-thread signal that calls
AudioRegionView::peaks_ready_handler in the GUI thread, the
function [almost] always completed, before the GUI was woken up
to schedule a WaveView render request (which uses the peak-file).
2020-12-22 03:02:54 +01:00
Robin Gareus b7f367ae26
Allow multi-threaded AudioSource reading
This is needed for threaded peak-file creation. The same
nested source may be accessed multiple times concurrently
(in addition to the butler thread reading it).

This fixes Bitrunner's "filum2020" session randomly showing garbage
waveforms.
2020-12-21 21:55:55 +01:00
Robin Gareus e4249b97ff
Add code to debug waveform peak-data 2020-12-21 21:37:45 +01:00
Robin Gareus ee1e7ad00e
Clear waveform cache when rebuilding peak-files 2020-12-21 21:13:13 +01:00
Robin Gareus b8e336b973
Add API to clear waveform cache 2020-12-21 21:12:53 +01:00
Robin Gareus acbccc1feb
macOS: explicitly ask for mic/input permissions 2020-12-20 23:49:05 +01:00
Robin Gareus 38c31998c5
Fix macOS Lua wrapper script env 2020-12-19 23:34:07 +01:00
Robin Gareus 4f62726193
Set BigSur version compatibility 2020-12-18 14:51:07 +01:00
Robin Gareus 1737dc1869
Revert "Fix typo in OSC gain feedback message"
This was not a typo after all, but a way to show the gain in the
name-display, as per manual:
> In the case where Gainmode is set to position, the track name
> will show the dB value while values are changing.

This reverts commit 3290d66a43.
2020-12-17 17:30:24 +01:00
Robin Gareus 241105b477
Revert "Add debug output for NSM"
This reverts commit ba9e310d4d.
2020-12-17 16:15:33 +01:00
Robin Gareus 3290d66a43
Fix typo in OSC gain feedback message 2020-12-17 00:58:28 +01:00
Robin Gareus bbc54873ae
VST3: GUI d'tor re-order
We have to call close_view(), which calls IPlugView::removed()
before destroying the parent widget.

Previously ~VST3PluginUI() was called after the derived class
destroyed the owned private `_gui_widget`, `_ns_view` or x11 parent.

On windows that may lead to the hwnd of the window becoming invalid
before the call to ::removed().
2020-12-14 19:29:53 +01:00
Robin Gareus 0d4ab880a8
macOS/ARM: add -arm64 suffix to DMG 2020-12-14 01:54:14 +01:00
Robin Gareus f4d5d57673
Fix URI to download x42-plugins appple/arm 2020-12-13 22:15:07 +01:00
Robin Gareus f8920d15ad
Bundle macOS/ARM video-tools etc 2020-12-13 21:54:51 +01:00
Robin Gareus d8ee0fbf33
Tweak fluidsynth performance on ARM CPUs 2020-12-12 22:03:05 +01:00
Robin Gareus cc8f32a66a
OSXI packaging support 2020-12-12 22:02:26 +01:00
Robin Gareus 35c9b08154
Prepare for Apple/ARM cross-compile on Intel macOS 2020-12-12 04:47:21 +01:00
Robin Gareus 5e76d63c06
Resolve some Xcode12 C++11, sigc++ issues 2020-12-12 04:46:22 +01:00
Robin Gareus 1db219b3d8
Fix compilation with mingw/gcc-8 2020-12-10 20:21:29 +01:00
Robin Gareus 4ef6ba0039
VST3: allow filename mismatch inside the bundle
This amends 5950df2b74. The VST3 SDK does not recursively search
directories that are bundles IFF the file inside the bundle's
architecture folder matches the bundle's name.

In case there's a file with a different name resides inside the
bundle it is treated as standalone, unbundled plugin.

Since Ardour, PBD::Searchpath always does a recursive search, the
bundled plugins need to be weeded after the fact.

This now follows the VST3 SDK by not just checking the arch name,
but also Contents and bundle.vst3 parent dirnames.
2020-12-09 17:36:14 +01:00
Robin Gareus fc4b2441dd
VST2: relax MIDI port detection
Apparently the official spec suggests singular for canDo
"receiveVstMidiEvent", "sendVstMidiEvent" requests.
However with "receiveVstEvents", "sendVstEvents" the plural form
is used. confusion ensued.


might fix:
https://discourse.ardour.org/t/no-midi-input-for-plugin-which-support-it-littlealterboy-vst/105126
2020-12-08 17:07:50 +01:00
Robin Gareus 062aeb0262
Bail out if export cannot be started 2020-12-08 01:10:00 +01:00
Robin Gareus f8b5424d9f
Fix deadlock during export
When using the export-tool, the very first callback may already be
freewheeling. In this case the first call to the butler also happens
directly from the freewheel process-callback and initial session events
are handled there. Setting PostTransportAdjustPlaybackBuffering
took the process-lock, which caused a deadlock:


Glib::Threads::Mutex::Lock::Lock(Glib::Threads::Mutex&) at /usr/include/glibmm-2.4/glibmm/threads.h:687
ARDOUR::Session::butler_transport_work() at ../libs/ardour/session_transport.cc:1157
ARDOUR::Session::process_export_fw(unsigned int) at ../libs/ardour/session_export.cc:303
ARDOUR::AudioEngine::process_callback(unsigned int) at ../libs/ardour/audioengine.cc:486
ARDOUR::DummyAudioBackend::main_process_thread() at ../libs/backends/dummy/dummy_audiobackend.cc:951
2020-12-08 01:09:57 +01:00
Robin Gareus 2a011e19cb
Update AxisView API: name_label is owned by the axis 2020-12-08 00:07:51 +01:00
Robin Gareus 13e6fdb6b3
Ensure ringbuffers are never copy-constructed 2020-12-07 02:54:51 +01:00
Robin Gareus bc9b94dfab
Fix -Wcatch-value in unit-tests 2020-12-06 22:06:59 +01:00
Robin Gareus e750cab915
LuaDSP use vectorized peak-finding 2020-12-06 22:06:55 +01:00
Robin Gareus 8cbb318223
Yet another fix for VST3 default path 2020-12-05 00:11:04 +01:00
Robin Gareus 34769a9062
NO-OP: whitespace 2020-12-03 22:10:26 +01:00
Robin Gareus 60901d26b7
ALSA: improve debug output 2020-12-03 21:29:21 +01:00
Robin Gareus b79520d316
VST3: Use a proxy for connecting and passing messages #8481
This separates channels in each direction component <> controller,
preventing recursions.
2020-12-03 02:48:20 +01:00
Tyler Stank 0cfee47867
Disable vertical autoscroll for UI elements where it doesn't make sense
Fixes issue 6396 as well as a few other instances where autoscroll could be annoying
2020-12-02 23:10:13 +01:00
Robin Gareus a974a3135e
Prevent duplicate search paths
This fixes an issue with VST3 plugins being listed up multiple times
if a user also explicitly adds standard built-in search paths.
2020-12-02 21:34:52 +01:00
Robin Gareus 5fad7e03b2
Fix setting app icon file on recent macOS 2020-12-02 01:56:04 +01:00
Robin Gareus 9cb9e58b31
Fix min OSX deplyoment target
mmacosx-version-min also needs to be set during linking, otherwise
the Finder will not allow to launch the application on older systems
  "The application requires os X 10.XX or later"
(with XX being the build-host's OS version), even though
Ardour can be started from a terminal on target due to correct
c/cxxflags.
2020-12-02 01:04:25 +01:00
Robin Gareus ee1434f47d
Fix macOS High Sierra build-target naming 2020-12-02 00:59:55 +01:00
David Robillard 7e9d4f9e73 Fix C function prototypes
This fixes Wstrict-prototypes warnings.
2020-12-01 12:08:09 +01:00
David Robillard 0404876d7b Fix reliance on deprecated implicit assignment operators
Either both, or neither, a copy constructor and assignment operator should be
defined.  This fixes Wdeprecated-copy warnings.
2020-12-01 12:03:38 +01:00
David Robillard 91f15300b8 Remove support for deprecated LV2 event extension 2020-12-01 11:40:35 +01:00
David Robillard 80a22953b0 Remove support for the long-deprecated LV2 uri-map extension
This has been supplanted by the urid extension.
2020-12-01 11:40:35 +01:00