Ben Loftis [Tue, 22 Oct 2019 19:39:38 +0000 (14:39 -0500)]
New implementation for single-fader mackie devices (reverts b96d8e)
Robin Gareus [Mon, 21 Oct 2019 17:31:25 +0000 (19:31 +0200)]
Virtual-keyboard: add option to transpose
Robin Gareus [Mon, 21 Oct 2019 14:06:29 +0000 (16:06 +0200)]
NO-OP: whitespace
Robin Gareus [Mon, 21 Oct 2019 13:52:16 +0000 (15:52 +0200)]
NO-OP: whitespace
Robin Gareus [Mon, 21 Oct 2019 13:27:42 +0000 (15:27 +0200)]
Virtual-keyboard: cont'd initial development:
* Reset default note range to 0..127 for step-entry and other users
* Allow to print label "C-<n>" on keyboard
* Fix 6 octave note range
* Save/load user settings in virtual-keyboard window
Robin Gareus [Mon, 21 Oct 2019 12:58:59 +0000 (14:58 +0200)]
Allow calling Dropdown::set_active from a signal handler
This breaks a potential recursion when set_active() is called
from activate_item(). See also
88fc22610
Robin Gareus [Mon, 21 Oct 2019 03:41:34 +0000 (05:41 +0200)]
Virtual-Keyboard significant overhaul:
* fix key-range off-by-one 0..127
* allow to shift octave
* allow to configure note range
* highlight grand-piano range and keyboard-shortcut range
* proper piano layout (black key offsets)
* add support for DVORAK keyboard layout
(still incomplete: settings are not yet saved/restored,
_piano_key_velocity should become a HSliderController, ...)
Ben Loftis [Mon, 21 Oct 2019 03:24:17 +0000 (22:24 -0500)]
Add support for single-fader MCU devices: XTouch One and RuCo. (needs testing)
Robin Gareus [Sun, 20 Oct 2019 19:22:38 +0000 (21:22 +0200)]
Virtual-Keyboard: Fix use of scrollwheel on dropdowns
Robin Gareus [Sun, 20 Oct 2019 19:21:57 +0000 (21:21 +0200)]
Add API to set select item from ArdourDropdown
This fixes an issue with scroll-wheel control which uses `get_active()`.
It work around an issue with gtkmm:
const MenuItem* get_active () const
void set_active (guint index)
and MenuList::activate_item() not emitting activate_item().
Robin Gareus [Sun, 20 Oct 2019 18:53:40 +0000 (20:53 +0200)]
Virtual-Keyboard: save/restore state
Robin Gareus [Sun, 20 Oct 2019 16:29:23 +0000 (18:29 +0200)]
Virtual-keyboard: add a pitch-bender
Robin Gareus [Sun, 20 Oct 2019 00:43:39 +0000 (02:43 +0200)]
Virtual-keyboard: add CCs, bank/patch selector
Robin Gareus [Sat, 19 Oct 2019 13:42:35 +0000 (15:42 +0200)]
Increase black key length
John Emmas [Sat, 19 Oct 2019 15:05:42 +0000 (16:05 +0100)]
Add/remove source(s) in our MSVC project (gtk2_ardour)
David Robillard [Fri, 18 Oct 2019 23:42:56 +0000 (01:42 +0200)]
Use conf.fatal for fatal configuration errors
David Robillard [Fri, 18 Oct 2019 23:37:30 +0000 (01:37 +0200)]
Fix Python3 incompatible syntax
David Robillard [Fri, 18 Oct 2019 23:33:51 +0000 (01:33 +0200)]
Fix typo
Robin Gareus [Sat, 19 Oct 2019 00:15:13 +0000 (02:15 +0200)]
Robin Gareus [Fri, 18 Oct 2019 21:40:40 +0000 (23:40 +0200)]
Special case "Virtual Keyboard" to be available as external input
Robin Gareus [Fri, 18 Oct 2019 21:40:23 +0000 (23:40 +0200)]
Allow to translate "Virtual Keyboard"
reserved_io_names[] already uses a translatable string for this.
Robin Gareus [Fri, 18 Oct 2019 15:26:25 +0000 (17:26 +0200)]
Cont'd work on Virtual-keyboard
* allow gtk_pianokeyboard to respond to y-axis click position
and include MIDI velocity with note-on signal
* add configuration settings to virual-keyboard
min/max velocity, keyboard-layout
* add a CC7 controller knob
Robin Gareus [Fri, 18 Oct 2019 13:22:33 +0000 (15:22 +0200)]
Remove redundant port-owner check
Ports owned by Ardour are already filtered out by
PortManager::get_known_midi_ports() ->
PortManager::fill_midi_port_info_locked()
This change is in preparation for allowing to expose Ardour's
"Virtual MIDI Keyboard" keyboard (which is owned by Ardour).
Robin Gareus [Fri, 18 Oct 2019 13:17:54 +0000 (15:17 +0200)]
Use AsyncMIDIPort API
Robin Gareus [Fri, 18 Oct 2019 13:16:43 +0000 (15:16 +0200)]
Expose virtual-keyboard port as async-port
Paul Davis [Fri, 18 Oct 2019 06:07:31 +0000 (00:07 -0600)]
fix two thinkos with startup sequence
1) audio/MIDI setup was being shown unnecessarily
2) could crash if entire startup sequence passed without any dialogs being necessary
Robin Gareus [Fri, 18 Oct 2019 01:50:52 +0000 (03:50 +0200)]
Super basic Virtual-Keyboard UI
Robin Gareus [Fri, 18 Oct 2019 01:42:41 +0000 (03:42 +0200)]
Add Virtual-Keyboard MIDI port
Robin Gareus [Fri, 18 Oct 2019 01:40:52 +0000 (03:40 +0200)]
NO-OP: indent, tabs/whitespace fixes
Robin Gareus [Thu, 17 Oct 2019 23:41:18 +0000 (01:41 +0200)]
Fix a rare EventList race-condition/crash
The GUI thread may modify fade-in/out while the butler-thread
reads audio.
e.g. select a Range and click delete.
---
Thread 0:: Dispatch queue: com.apple.main-thread
0 libsystem_pthread.dylib 0x00007fffd45924fc pthread_mutex_lock + 0
1 libglib-2.0.0.dylib 0x00000001085a9d2a g_mutex_lock + 26
2 libevoral.dylib 0x0000000107fd0a49 PBD::Signal0<void, PBD::OptionalLastValue<void> >::operator()() + 57
3 libevoral.dylib 0x0000000107fd486d Evoral::ControlList::clear() + 253
4 libardour.dylib 0x00000001072ef9a5 ARDOUR::AudioRegion::set_fade_out(ARDOUR::FadeShape, long long) + 309
5 libardour.dylib 0x00000001072f19ea ARDOUR::AudioRegion::recompute_at_end() + 122
6 libpbd.dylib 0x00000001082993ff PBD::Stateful::resume_property_changes() + 191
7 libardour.dylib 0x00000001076476af ARDOUR::Playlist::cut(long long, long long, bool) + 575
8 libardour.dylib 0x0000000107646b5b ARDOUR::Playlist::cut_copy(boost::shared_ptr<ARDOUR::Playlist> (ARDOUR::Playlist::*)(long long, long long, bool), std::__1::list<ARDOUR::AudioRange, std::__1::allocator<ARDOUR::AudioRange> >&, bool) + 187
9 libardour.dylib 0x0000000107647461 ARDOUR::Playlist::cut(std::__1::list<ARDOUR::AudioRange, std::__1::allocator<ARDOUR::AudioRange> >&, bool) + 33
10 Ardour.bin 0x00000001065f0fa0 RouteTimeAxisView::cut_copy_clear(Selection&, Editing::CutCopyOp) + 592
11 Ardour.bin 0x0000000106118a94 Editor::cut_copy_ranges(Editing::CutCopyOp) + 164
12 Ardour.bin 0x0000000106116053 Editor::cut_copy(Editing::CutCopyOp) + 1587
Thread 20 Crashed:
0 libardour.dylib 0x00000001072f4b19 ARDOUR::AudioRegion::body_range() const + 89
1 libardour.dylib 0x00000001072bd318 ARDOUR::AudioPlaylist::read(float*, float*, float*, long long, long long, unsigned int) + 1176
2 libardour.dylib 0x00000001072ac236 ARDOUR::AudioDiskstream::read(float*, float*, float*, long long&, long long, int, bool) + 854
3 libardour.dylib 0x00000001072abbb8 ARDOUR::AudioDiskstream::overwrite_existing_buffers() + 392
4 libardour.dylib 0x00000001077ef36a ARDOUR::Session::non_realtime_overwrite(int, bool&) + 186
5 libardour.dylib 0x00000001077ed7f0 ARDOUR::Session::butler_transport_work() + 1696
6 libardour.dylib 0x0000000107323425 ARDOUR::Butler::thread_work() + 149
7 libardour.dylib 0x000000010732334f ARDOUR::Butler::_thread_work(void*) + 95
Robin Gareus [Thu, 17 Oct 2019 23:37:56 +0000 (01:37 +0200)]
Add API to safely query timestamp of first/last control event
Direct calls to back()->when or front()->when are not safe
when the list is concurrently modified, or empty.
Robin Gareus [Tue, 15 Oct 2019 21:17:48 +0000 (23:17 +0200)]
Fix export w/o session-range (typo in
468731c14b9b)
Robin Gareus [Tue, 15 Oct 2019 20:47:57 +0000 (22:47 +0200)]
NO-OP: whitespace
Robin Gareus [Tue, 15 Oct 2019 20:45:28 +0000 (22:45 +0200)]
Fix crash for range-export and cleanup code
ExportTimespanSelectorMultiple has one extra column at the start:
"selected". There are a total of 6 columns (0..5).
However ExportTimespanSelectorSingle lacks that column.
Selection is not needed and there are only 5 columns.
This lead to a copy/paste off-by one issue for
set_sort_column() w/ range_view.get_column(5) == NULL
when exporting ranges with a single range
Robin Gareus [Tue, 15 Oct 2019 14:02:47 +0000 (16:02 +0200)]
Improve multi-channel instrument listing
Robin Gareus [Tue, 15 Oct 2019 13:30:33 +0000 (15:30 +0200)]
Remve unused header includes
Robin Gareus [Tue, 15 Oct 2019 13:29:18 +0000 (15:29 +0200)]
Use less-or-equal for configurable I/O chancount
Robin Gareus [Tue, 15 Oct 2019 13:24:50 +0000 (15:24 +0200)]
Fix typos in AU channel-count calc
Robin Gareus [Tue, 15 Oct 2019 12:52:40 +0000 (14:52 +0200)]
Show max # of output for re-configurable I/O plugins
Robin Gareus [Tue, 15 Oct 2019 12:47:11 +0000 (14:47 +0200)]
API to count max multi-channel plugin outputs
Robin Gareus [Tue, 15 Oct 2019 12:20:52 +0000 (14:20 +0200)]
Fix/amend previous commit
Robin Gareus [Tue, 15 Oct 2019 12:09:02 +0000 (14:09 +0200)]
Disambiguate instrument plugin names:
* use cached ambiguity information from backend
* combine extra info in single bracket
Robin Gareus [Tue, 15 Oct 2019 12:04:26 +0000 (14:04 +0200)]
Detect plugin-name ambiguities
Robin Gareus [Tue, 15 Oct 2019 10:22:08 +0000 (12:22 +0200)]
NO-OP: indent, comments and consistency
Robin Gareus [Sun, 13 Oct 2019 21:12:15 +0000 (23:12 +0200)]
Fix fan-out channel-assignment
Ben Loftis [Sun, 13 Oct 2019 18:26:44 +0000 (13:26 -0500)]
Show (# outs) in instrument-selector menu when the instrument is multi-out.
Robin Gareus [Sun, 13 Oct 2019 02:12:02 +0000 (04:12 +0200)]
Remove unused API declaration (removed in
789f08891b)
Robin Gareus [Sun, 13 Oct 2019 02:09:35 +0000 (04:09 +0200)]
Prototype categorized preset browser
Paul Davis [Sat, 12 Oct 2019 18:45:27 +0000 (12:45 -0600)]
remove Session::AudioMidiSetupRequired signal (no longer necessary)
Paul Davis [Sat, 12 Oct 2019 18:45:18 +0000 (12:45 -0600)]
remove Session::AudioMidiSetupRequired signal (no longer necessary)
Paul Davis [Sat, 12 Oct 2019 18:45:13 +0000 (12:45 -0600)]
remove Session::AudioMidiSetupRequired signal (no longer necessary)
Paul Davis [Sat, 12 Oct 2019 18:10:10 +0000 (12:10 -0600)]
reintroduce code that can automatically connect to JACK under the right conditions
Paul Davis [Fri, 11 Oct 2019 23:09:39 +0000 (17:09 -0600)]
interface range generated by internal_to_interface() may not span 0..1, so remove asserts
Paul Davis [Fri, 11 Oct 2019 23:03:50 +0000 (17:03 -0600)]
add missing case
Paul Davis [Fri, 11 Oct 2019 20:44:30 +0000 (14:44 -0600)]
do not accidentally re-create splash
Paul Davis [Fri, 11 Oct 2019 20:29:55 +0000 (14:29 -0600)]
enforce singleton nature of Splash a little more rigorously, and slightly rationalize it's use
Paul Davis [Fri, 11 Oct 2019 19:53:48 +0000 (13:53 -0600)]
call parent ::on_response()
Paul Davis [Fri, 11 Oct 2019 16:25:08 +0000 (10:25 -0600)]
remove responsibility for starting AudioEngine from Session
Ben Loftis [Thu, 10 Oct 2019 23:24:57 +0000 (18:24 -0500)]
Theme-ing: Use sensible names instead of color 1..N
Colors are assigned one of 6 major groups:
*Alert colors: Typically mute/solo/feedback/selections etc ... these should follow Ardour convention, only the saturation should change with themes.
*BG colors (empty spaces...)
*Contrast colors: Should contrast nicely against BG. Typically clocks, markers, panners and such.
*Black/White/Grays: you can expect these to work with "any" BG. Good for borders, separators, etc.
*Meter colors: Typically green->yellow->red or similar. Should follow Ardour conventions.
*Widget colors: slight variations of the BG color. This is where the creative choices are made.
NOTE to theme-ers: Widgets should choose one of the colors based on FUNCTION. If you want a red widget, choose "widget red", not "alert red" or "meter color9"
John Emmas [Fri, 11 Oct 2019 10:19:24 +0000 (11:19 +0100)]
Add/rename source(s) in our MSVC project (gtk2_ardour)
Paul Davis [Fri, 11 Oct 2019 03:47:17 +0000 (21:47 -0600)]
goto preferred over reentrancy
Paul Davis [Fri, 11 Oct 2019 03:37:50 +0000 (21:37 -0600)]
fix error in startup sequence when command line argument is given and pre-release dialog is shown
Paul Davis [Fri, 11 Oct 2019 03:24:52 +0000 (21:24 -0600)]
move pre-release dialog into StartupFSM (and enlarge font sizing)
Paul Davis [Fri, 11 Oct 2019 01:54:33 +0000 (19:54 -0600)]
center all(?) early-startup dialogs
Paul Davis [Thu, 10 Oct 2019 22:51:51 +0000 (16:51 -0600)]
fix up handling of audio/MIDI setup dialog and remove debug output
Paul Davis [Thu, 10 Oct 2019 22:51:28 +0000 (16:51 -0600)]
make error message very slightly more indicative of what might be happening when audioengine backend fails to start
Paul Davis [Thu, 10 Oct 2019 22:50:57 +0000 (16:50 -0600)]
make EngineDialog behavior more appropriate for use in both startup and non-startup conditions
Paul Davis [Thu, 10 Oct 2019 21:25:30 +0000 (15:25 -0600)]
changes to get startupFSM working (more) correctly
Paul Davis [Thu, 10 Oct 2019 21:25:13 +0000 (15:25 -0600)]
remove unused label and simplify return value/return path
Paul Davis [Thu, 10 Oct 2019 21:24:49 +0000 (15:24 -0600)]
NOOP: move brace
Paul Davis [Thu, 10 Oct 2019 21:24:20 +0000 (15:24 -0600)]
make ARDOUR_UI::load_session_from_startup_fsm() return a value, and use it
Paul Davis [Thu, 10 Oct 2019 21:23:23 +0000 (15:23 -0600)]
fix decl of method with const arg
Paul Davis [Thu, 10 Oct 2019 21:22:44 +0000 (15:22 -0600)]
add StartupFSM::end() (empty for now) and remove unused states
Paul Davis [Thu, 10 Oct 2019 21:21:20 +0000 (15:21 -0600)]
use const argument when calling ::build_session()
Paul Davis [Thu, 10 Oct 2019 20:35:03 +0000 (14:35 -0600)]
remove unused assignment
Paul Davis [Thu, 10 Oct 2019 20:34:46 +0000 (14:34 -0600)]
remove two unused variables
Paul Davis [Thu, 10 Oct 2019 20:34:20 +0000 (14:34 -0600)]
make BusProfile argument to new Session constructor be const (and in associated call tree)
Paul Davis [Thu, 10 Oct 2019 02:53:03 +0000 (20:53 -0600)]
NSM startup needs to call a different method due to API changes
Paul Davis [Thu, 10 Oct 2019 02:52:46 +0000 (20:52 -0600)]
move copying demo sessions into NewUserWizard
Paul Davis [Thu, 10 Oct 2019 02:52:26 +0000 (20:52 -0600)]
changes to ARDOUR_UI to reflect new startupFSM and non-modal SessionDialog handling
Paul Davis [Thu, 10 Oct 2019 02:51:14 +0000 (20:51 -0600)]
modify API of SessionDialog to reflect that it is never used with command line parameters anymore
Paul Davis [Thu, 10 Oct 2019 02:50:34 +0000 (20:50 -0600)]
add initial version of StartupFSM along with its owners/users
Paul Davis [Thu, 10 Oct 2019 02:32:46 +0000 (20:32 -0600)]
remove unnecessary template methods (replicated in libs/gtkmm2ext/doi.h
Paul Davis [Wed, 9 Oct 2019 03:48:11 +0000 (21:48 -0600)]
add SessionDialog::clear_name()
Paul Davis [Wed, 9 Oct 2019 03:40:14 +0000 (21:40 -0600)]
change SessionDialog::meta_master_bus_profile() to be a static method
Paul Davis [Wed, 9 Oct 2019 03:30:00 +0000 (21:30 -0600)]
engine dialog should emit response and handle it, not just call its own response dialog
Paul Davis [Wed, 9 Oct 2019 03:29:47 +0000 (21:29 -0600)]
rename ArdourStartup to NewUserWizard and rename source file(s)
Paul Davis [Tue, 8 Oct 2019 17:39:16 +0000 (11:39 -0600)]
provide ArdourStartup with a Gtk::Dialog-like signal_response()
It is not a Dialog (instead, an Assistant which IS-A Window), but
we want to be able to interact with it as if it is.
Also remove unused singleton and session info cruft
Robin Gareus [Thu, 10 Oct 2019 22:13:07 +0000 (00:13 +0200)]
Show preset-browser button if annoted presets are available
Robin Gareus [Thu, 10 Oct 2019 22:03:41 +0000 (00:03 +0200)]
Add a plugin-preset browser window
Previously preset-browser was only used instead of "generic control"
display if a plugin does not have any controls (but presets).
This allows for showing a dedicated window..
Robin Gareus [Thu, 10 Oct 2019 21:59:55 +0000 (23:59 +0200)]
Preset-Browser: highlight only unmodified presets
Robin Gareus [Thu, 10 Oct 2019 21:59:05 +0000 (23:59 +0200)]
NO-OP: whitespace
Robin Gareus [Thu, 10 Oct 2019 21:58:49 +0000 (23:58 +0200)]
Add "List/Browse" vector icon
Robin Gareus [Thu, 10 Oct 2019 20:31:19 +0000 (22:31 +0200)]
Add API to check for plugin-presets with description
Paul Davis [Tue, 8 Oct 2019 02:49:53 +0000 (20:49 -0600)]
add constructor
Paul Davis [Tue, 8 Oct 2019 02:49:35 +0000 (20:49 -0600)]
fix compiler warning about possible buffer size issue
Robin Gareus [Mon, 7 Oct 2019 13:19:36 +0000 (15:19 +0200)]
Stem-export: pre-select selected tracks/busses
Robin Gareus [Mon, 7 Oct 2019 03:11:58 +0000 (05:11 +0200)]
Fix a translation issue (default value session-archive dropdown)
Robin Gareus [Mon, 7 Oct 2019 03:11:33 +0000 (05:11 +0200)]
Special case horizontal faders (pan to right)
Robin Gareus [Mon, 7 Oct 2019 03:07:55 +0000 (05:07 +0200)]
Invert Pan-Azimuth (up means left)
It's a well established convention that pan y-axis automation,
or vertical uses (top) +1 for left.
This special cases rotary knobs (and horizontal sliders) to retain
a clockwise movement (or movement to the right) for panning to the
right.