Commit Graph

46 Commits

Author SHA1 Message Date
Robin Gareus a27f1e8cf9
Vkbd: fix stuck notes when playing fast
The virtual keyboard sends all events with the same timestamp.
When playing fast (mouse-sweep) note-on and note-off will have
the same timestamp.

Since dbd8089fb8, a393f75694 concurrent MIDI are sorted with note-off
first. This correctly handles events when played from the timeline:
 note-on .. note-off|note-on ... note-off

But in case of a MIDI keyboard a note-off event must be send after
the note-on.
2022-04-20 21:45:12 +02:00
Mads Kiilerich 7f649efd42
gtkmm: use set_can_focus() instead of deprecated Gtk::Widget::set_flags(CAN_FOCUS) 2022-04-08 21:11:06 +02:00
Paul Davis ca22ba77e1 Constification: make Stateful::get_state() const, with all other required const-ness added (GUI) 2022-04-06 21:56:59 -06:00
Olivier Humbert 704048940e
Fix typographical errors 2020-09-15 20:32:52 +02:00
Robin Gareus fcfaa0ac49
Fix a potential endless recursion from c2b25b453e
ArdourDropdown::set_active() -> StateChanged -> .. -> set_active()
2020-04-22 16:20:54 +02:00
Robin Gareus 1eb98316a3
Rename KeyboardLayout to PianoKeyBindings
This is to prevent polluting the global namespace with a
symbol name that is likely to cause conflicts.
2020-04-07 18:40:04 +02:00
Robin Gareus d4d57c844f
Styleguide #12 avoid get_ for accessors 2020-04-07 18:30:34 +02:00
Nil Geisweiller 104d37e5a2
Move keyboard layout in its own class 2020-04-07 18:26:45 +02:00
Nil Geisweiller 4001ed7515 Initialize keyboard layout based on user preference
Otherwise the Simple QWERTY layout is loaded in the Virtual MIDI Keyboard
regardless of what is set in

Preferences->MIDI->Virtual Keyboard->Virtual Keyboard Layout
2020-03-28 20:36:39 +02:00
Robin Gareus b942eecc9c
Vkeybd: force release notes on panic
If key(s) are still being pressed, a key-repeat will re-trigger
the most recently pressed note (depending on keyboard settings).
2019-12-26 12:17:20 +01:00
Robin Gareus 24b46d1f75
Vkeybd: improve velocity dropdown usability
Limit velocity dropdown to a subset of most used values, but
allow to select any value using mouse-wheel
2019-12-25 13:15:32 +01:00
Robin Gareus bc776eac97
Vkeybd: use ArdourWidgets for all GUI elements
Remove Gtk widgets and improve look&feel consistency.
2019-12-24 18:15:09 +01:00
Robin Gareus ecdbd1df92
Vkeybd: numeric only spinboxes for octave and velocity
based on a patch by Alex Mitchell
2019-12-19 23:02:19 +01:00
Robin Gareus d0668721d5
Vkeybd simplification
* remove Y-axis dependent velocity (difference between
  black/white keys made this not very usable
* remove Bank/Patch selector (there are already three other
  Bank/Patch UIs
* move keyboard-layout selection into Preferences > MIDI
2019-12-19 18:57:40 +01:00
Robin Gareus 01291f3e0f
Vkeybd: re-layout, prepare config & patch pane removal 2019-12-19 18:45:49 +01:00
Robin Gareus 89ca6e151a
Vkeybd: add a mod-wheel 2019-12-19 18:45:49 +01:00
Robin Gareus 9c6d9324bd
VKeybd: exponential pitch-wheel/bend interpolation 2019-12-17 16:47:46 +01:00
Robin Gareus 9ddc4fcce9
Vkeybd: fix octave up/down direction, speed up pitch-bend 2019-12-16 15:42:42 +01:00
Robin Gareus 322e6e08c4
Vkeybd: grab all key-events and use timer instead of key-repeat
This fixes an issue with arrow-keys (up/down, left/right). Those
were previously only handled when the Virtual Keyboard window itself
had focus.

Also key-repeat for pitch-bend is now ignored and a dedicated timer
is used to queue events. This fixes an issue with the first repeat
taking longer than successive ones, and makes this feature independent
of any desktop user settings.
2019-12-16 15:02:39 +01:00
Robin Gareus 2add730263
Vkeybd: Experiment with key-repeat for pitch-bend 2019-12-16 02:30:42 +01:00
Robin Gareus e1c0f99ef2
VKeybd: add Up/Down as alternative Pitch-bend shortcuts 2019-12-15 17:30:25 +01:00
Robin Gareus f969d4fc31
Vkeybd: Add tooltip to pitchbend control 2019-12-15 14:06:00 +01:00
Robin Gareus a31fde491a
VKeybd: Pitchebend sprung mode and keyboard-shortcuts
This unconditionally returns the pitch-bend wheel when used
by mouse-drag/drop.  Mouse-wheel retains the "wheel" mode.

<F1>-<F4> key-bindings have been added to jump to discrete values
2019-12-15 14:06:00 +01:00
Robin Gareus cc9f941488
VKeybd: shrink height when hiding config pane 2019-12-13 16:04:34 +01:00
Robin Gareus 5324587a80
Vkeybd: default to single-row QWERTY binding 2019-12-12 23:59:38 +01:00
Robin Gareus db08810164
Virtual-keyboard: "Tab" to sustain (still undocumented) 2019-11-02 23:56:40 +01:00
Robin Gareus b68a7fdf96
Make virtual-keyboard messages translatable -- #7834 2019-11-02 02:44:27 +01:00
Robin Gareus b53431a089
Virtual-keyboard: consolidate options
Remove use options for annotations, force them "always on",
and request space to draw them.

Add option to pick single-line octave bindings
2019-10-27 00:06:14 +02:00
Robin Gareus 35788fbaaa
Virtual-keyboard: prefer dropdown for channel & transpose
This addresses issue with text-entry and input focus
2019-10-25 23:53:23 +02:00
Robin Gareus 7bb67d0402
Virtual-keyboard: fix text-entry in config widgets 2019-10-25 21:54:16 +02:00
Robin Gareus 12d4d6daa7
Virtual-keyboard: never-ending details
- Fix key-bindings (first propagate to piano, ignore global bindings)
- Allow to switch octaves with left/right arrow key
- Tweak font-sizes used for annotations
2019-10-25 21:24:25 +02:00
Robin Gareus c0c1fd8b60
Rename PianoKeyboard class, avoid ambiguities
A C++ class "PianoKeyboard" in the global namespace may cause
issues with some plugins that export and use an identically
named symbol.
2019-10-25 21:24:25 +02:00
Robin Gareus 7672b1cb43
NO-OP: whitespace 2019-10-25 21:24:25 +02:00
Robin Gareus 3f2f517291
Rough-in gtk-pianokeyboard C -> C++ 2019-10-24 19:59:22 +02:00
Robin Gareus aaae93cae3
Return key-focus to piano-keyboard 2019-10-24 05:13:56 +02:00
Robin Gareus f3e6f60242
Virtual-keyboard: add option to transpose 2019-10-21 19:31:25 +02:00
Robin Gareus 226cac95e7
NO-OP: whitespace 2019-10-21 16:08:28 +02:00
Robin Gareus 3daf16dc3a
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
2019-10-21 16:07:12 +02:00
Robin Gareus b523583bb4
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, ...)
2019-10-21 05:42:05 +02:00
Robin Gareus 92173ca118
Virtual-Keyboard: Fix use of scrollwheel on dropdowns 2019-10-20 21:22:38 +02:00
Robin Gareus 20daca9290
Virtual-Keyboard: save/restore state 2019-10-20 20:53:40 +02:00
Robin Gareus 9c00d6216a
Virtual-keyboard: add a pitch-bender 2019-10-20 18:29:23 +02:00
Robin Gareus e63c2133e5
Virtual-keyboard: add CCs, bank/patch selector 2019-10-20 02:44:16 +02:00
Robin Gareus 19e4f47b4b
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
2019-10-18 22:56:46 +02:00
Robin Gareus f0d2327af0
Use AsyncMIDIPort API 2019-10-18 22:56:46 +02:00
Robin Gareus ebb89ba805
Super basic Virtual-Keyboard UI 2019-10-18 03:50:52 +02:00