diff --git a/README.md b/README.md index 045bfb73..91fb7f45 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,8 @@ Windows, and using a conventional source tarball. code. * Implemented automation for BBT/HMS toggling, FF/Rewind, Undo/Redo, Play-set Copy/Paste. - * Added HTML help files to data/share/doc/info. + * Added HTML help files to data/share/doc/info, other documentation + upgrades. * Version 0.99.8: * Issue #112: A new pattern now displays in the MIDI controller. * Issue #114: Adding display of shortcut keys to tool tips. diff --git a/data/linux/qseq66.ctrl b/data/linux/qseq66.ctrl index 067a27fe..dd88f4fa 100644 --- a/data/linux/qseq66.ctrl +++ b/data/linux/qseq66.ctrl @@ -165,7 +165,7 @@ keyboard-layout = qwerty 14 "PageUp" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # BPM Page Up 15 "PageDn" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # BPM Page Dn 16 "KP_." [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Set Set -17 "KP_*" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Loop Mode +17 "KP_*" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Record Style 18 "KP_-" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Quan Record 19 "KP_+" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Reset Sets 20 "|" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # One-shot @@ -177,7 +177,7 @@ keyboard-layout = qwerty 26 "F9" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Tap BPM 27 "Space" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Start 28 "Esc" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Stop -29 "KP_Ins" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Reserved 29 +29 "KP_Ins" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Loop L/R 30 "F8" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Toggle Mute 31 "F7" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Song Pos 32 "\" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Keep Queue @@ -197,10 +197,10 @@ keyboard-layout = qwerty 46 "0xfc" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Reserved 46 47 "0xfd" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Reserved 47 48 "0xfe" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Reserved 48 -49 "Sh_F1" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Record Overdub -50 "Sh_F2" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Record Overwrite -51 "Sh_F3" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Record Expand -52 "Sh_F4" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Record Oneshot +49 "Sh_F1" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Overdub +50 "Sh_F2" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Overwrite +51 "Sh_F3" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Expand +52 "Sh_F4" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Oneshot 53 "Sh_F5" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Grid Loop 54 "Sh_F6" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Grid Record 55 "Sh_F7" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Grid Copy @@ -214,13 +214,13 @@ keyboard-layout = qwerty 63 "0xe2" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Q None 64 "0xe3" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Q Full 65 "0xe4" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Q Tighten -66 "0xe5" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Q Random -67 "0xe6" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Q Jitter -68 "0xe7" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Reserved 68 +66 "0xe5" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Random +67 "0xe6" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Jitter +68 "0xe7" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Note-map 69 "0xe8" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # BBT/HMS 70 "0xe9" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # LR Loop -71 "0xea" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Undo Record -72 "0xeb" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Redo Record +71 "0xea" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Undo +72 "0xeb" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Redo 73 "0xec" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Transpose Song 74 "0xed" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Copy Set 75 "0xee" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Paste Set @@ -265,12 +265,6 @@ button-columns = 8 7 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] 8 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] 9 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] - a [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] - b [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] - c [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] - d [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] - e [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] - f [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] 10 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] 11 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] 12 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] @@ -281,12 +275,18 @@ button-columns = 8 17 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] 18 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] 19 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] -1a [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] -1b [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] -1c [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] -1d [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] -1e [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] -1f [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +20 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +21 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +22 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +23 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +24 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +25 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +26 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +27 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +28 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +29 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +30 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] +31 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] [mute-control-out] @@ -348,24 +348,24 @@ button-columns = 8 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Pause 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Play 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Toggle_mutes -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song_record -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Slot_shift +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song-record +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Slot-shift 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Free 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Queue 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # One-shot 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Replace -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Snap -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Snapshot +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song-mode 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Learn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # BPM_Up -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # BPM_Dn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # List_Up -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # List_Dn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song_Up -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song_Dn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Set_Up -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Set_Dn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Tap_BPM +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # BPM-Up +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # BPM-Dn +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # List-Up +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # List-Dn +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song-Up +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song-Dn +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Set-Up +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Set-Dn +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Tap-BPM 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Quit 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Visibility 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Alt_2 diff --git a/data/samples/nanomap.ctrl b/data/samples/nanomap.ctrl index 147f70b5..0eee68bf 100644 --- a/data/samples/nanomap.ctrl +++ b/data/samples/nanomap.ctrl @@ -193,7 +193,7 @@ keyboard-layout = qwerty 27 "Space" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Start 28 "Esc" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Stop 29 "KP_Ins" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Loop L/R -30 "F8" [ 0 0x90 2 1 127 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Toggle Mute +30 "F8" [ 0 0x90 2 1 127 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Toggle Mutes 31 "F7" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Song Pos 32 "\" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Keep Queue 33 "/" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Slot Shift @@ -212,10 +212,10 @@ keyboard-layout = qwerty 46 "0xfc" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Reserved 46 47 "0xfd" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Reserved 47 48 "0xfe" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Reserved 48 -49 "Sh_F1" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Record Overdub -50 "Sh_F2" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Record Overwrite -51 "Sh_F3" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Record Expand -52 "Sh_F4" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Record Oneshot +49 "Sh_F1" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Overdub +50 "Sh_F2" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Overwrite +51 "Sh_F3" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Expand +52 "Sh_F4" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Oneshot 53 "Sh_F5" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Grid Loop 54 "Sh_F6" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Grid Record 55 "Sh_F7" [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] [ 0 0x00 0 0 0 ] # Grid Copy @@ -361,26 +361,26 @@ button-columns = 8 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Panic 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Stop 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Pause -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Play -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Toggle_mutes -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song-record -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Slot-shift +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Playback +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Toggle Mutes +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song Record +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Slot Shift 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Free 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Queue 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # One-shot 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Replace 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Snapshot -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song-mode -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Learn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # BPM-Up -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # BPM-Dn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # List-Up -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # List-Dn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song-Up -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song-Dn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Set-Up -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Set-Dn -0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Tap-BPM +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Song Mode +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Group Learn +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # BPM Up +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # BPM Dn +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Play List Up +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Play List Dn +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Play Song Up +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Play Song Dn +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Set Up +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Set Dn +0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Tap BPM 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Quit 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Visibility 0 [ 0x00 0 0 ] [ 0x00 0 0 ] [ 0x00 0 0 ] # Alt_2 diff --git a/doc/latex/tex/configuration.tex b/doc/latex/tex/configuration.tex index ddab5b43..9ba58fb1 100644 --- a/doc/latex/tex/configuration.tex +++ b/doc/latex/tex/configuration.tex @@ -6,7 +6,7 @@ % \library Documents % \author Chris Ahlstrom % \date 2021-01-18 -% \update 2023-09-02 +% \update 2023-09-04 % \version $Revision$ % \license $XPC_GPL_LICENSE$ % @@ -2106,8 +2106,8 @@ \subsubsection{'ctrl' File / Automation Control} \paragraph{Automation / Mod Replace} \label{paragraph:configuration_midi_ctrl_modrep} - This control the "replace" flag. - Then, when the user manually clicks a pattern slot, + This entry controls the "replace" flag. + Once set, when the user manually clicks a pattern slot, that pattern is unmuted, and all the rest are muted. Thus, this MIDI control is kind a of "Solo" function. It works whether in "Live" or "Song" mode. @@ -2117,8 +2117,9 @@ \subsubsection{'ctrl' File / Automation Control} This control causes the playing statuses of all active (i.e. having data) patterns to be saved. When turned off, the - original playing status is restored. Thus, two MIDI events - need to be allocated to this functionality. + original playing status is restored. +% Thus, two MIDI events +% need to be allocated to this functionality. \paragraph{Automation / Mod Queue} \label{paragraph:configuration_midi_ctrl_modqueue} @@ -2149,9 +2150,14 @@ \subsubsection{'ctrl' File / Automation Control} on the \textsl{MPK Mini}, the corresponding sequence gets queued. Also included in the data directory are sample 'ctrl' files for other devices. -\paragraph{Automation / Mute Group} +\paragraph{Automation / Mute Group ("Group Mute")} \label{paragraph:configuration_midi_ctrl_modgmute} + To be documented. + +\paragraph{Automation / Group Learn} +\label{paragraph:configuration_midi_ctrl_modglean} + This MIDI control sets up a "group learn". This control sets two internal flags on : "mode-group" and "group-learn". The first flag indicates that we will be handling mute-groups. @@ -2168,6 +2174,151 @@ \subsubsection{'ctrl' File / Automation Control} except by selecting an illegal mute-group keystroke. Also see \sectionref{sec:mutes_master}. +\paragraph{Automation / Playing Set} +\label{paragraph:configuration_playing_set} + + To be documented. + +\paragraph{Automation / Playback} +\label{paragraph:configuration_playback} + + This automation entry defaults to a period. + It starts playback and stops (pauses) playback. + Note that this applies to the live grid. + For the pattern and song editor piano rolls, it is hardwired. + +\paragraph{Automation / Song Record} +\label{paragraph:configuration_song_record} + + Initiates a "recording" of the musician's muting and unmutings as triggers + in the song editor. + + There are still some wrinkles to work out with this, such as ignoring snap + values in order to get an exact recording of the triggers. + +\paragraph{Automation / Solo} +\label{paragraph:configuration_midi_ctrl_solo} + + Meant to "solo" a given track. + Needs testing and further work. + +\paragraph{Automation / Theu} +\label{paragraph:configuration_midi_ctrl_thru} + + Turns on the "MIDI Thru" function of the current pattern as displayed in a + pattern editor. More testing needed. + +\paragraph{Automation / BPM Page Up and Page Down} +\label{paragraph:configuration_midi_ctrl_bpmpageupdn} + + Similar to + \sectionref{paragraph:configuration_midi_ctrl_bpmupdn}, but in + larger steps. + These controls increment or decrement the beats-per-minute setting + in large steps, as if + the Page-Up or Page-Down were pressed in the BPM combox-box. + This increment is the + \index{bpm!page increment} + \index{usr!page increment} + "page increment" which defaults to 10, but can be modified by + changing the "bpm\_page\_increment" value in the 'usr' + configuration file. + +\paragraph{Automation / Set a Set} +\label{paragraph:configuration_midi_set_a_set} + + Changes to a set as given by the data parameter. + Needs more testing and further work. + +% \paragraph{Automation / Screen-Set Play} +% \label{paragraph:configuration_midi_ctrl_ssplay} + +% This MIDI control sets the playing screen-set. + +\paragraph{Automation / Loop Mode} +\label{paragraph:configuration_midi_loop_mode} + + Toggles using the "L/R" markers as the beginning and ending + of playback. + + See \sectionref{paragraph:configuration_bbthms_lr_loop}. + +\paragraph{Automation / Quan Record} +\label{paragraph:configuration_midi_quanrecord} + + Toggles quantization of the incoming note events while recording. + +\paragraph{Automation / Reset Sets} +\label{paragraph:configuration_midi_reset_sets} + + Resets the set counter to set 0. + +\paragraph{Automation / One-shot} +\label{paragraph:configuration_midi_one_shot} + + Toggles one-shot recording mode. + +\paragraph{Automation / FF, Rewind, and Top} +\label{paragraph:configuration_midi_ff_rewind_top} + + When activated, each command moves the playing tick value up or down + by one-half of a measure. + The "Top" command rewinds to the beginning immediately. + +\paragraph{Automation / Playlist Commands} +\label{paragraph:configuration_midi_playlist_commands} + + The "Play List" and "Play Song" automation commands allow one + to select a particular play-list or song, + or increment/decrement to the next/previous one. + +\paragraph{Automation / Tap BPM} +\label{paragraph:configuration_midi_tap_bpm} + + This command, when pressed repeatedly, sets the beats-per-minute + value to the interval between the taps. + +\paragraph{Automation / Start} +\label{paragraph:configuration_start} + + This automation entry defaults to a space. + It starts playback and stops playback with a rewind to the beginning. + Note that this applies to the live grid. + For the pattern and song editor piano rolls, it is hardwired. + +\paragraph{Automation / Stop} +\label{paragraph:configuration_stop} + + This automation entry defaults to an escape character. + It stops playback with a rewind to the beginning. + Note that this applies to the live grid. + For the pattern and song editor piano rolls, it is hardwired, + and this keystroke can be used to exit insert/paint mode. + +\paragraph{Automation / Toggle Mute} +\label{paragraph:configuration_toggle_mute} + + Reverses the armed statuses of the current set. + +\paragraph{Automation / Song Position} +\label{paragraph:configuration_song_position} + + This one needs work. We can't even remember what it means! + +\paragraph{Automation / Keep Queuue} +\label{paragraph:configuration_keep_queue} + + When given, this command turns on keep-queue mode. + +\paragraph{Automation / Slot Shift} +\label{paragraph:configuration_slot_shift} + + When given, this command allows for accessing patterns numbered + from 32 to 63. + When given again, this command allows for accessing patterns numbered + from 64 to 95. + Useful only when set sizes of 64 and 96 are configured. + \paragraph{Automation / Record Modes and Quantization} \label{paragraph:configuration_midi_record_quan} @@ -2211,22 +2362,50 @@ \subsubsection{'ctrl' File / Automation Control} \end{itemize} % For details, see \sectionref{paragraph:patterns_recording_modes}. - Also supported is changing the mode of recording: + Also supported is changing the mode of recording, that is, what happens + to notes while incoming during recording: \begin{itemize} \item \textbf{No Quan}. + Nothing is done to the incoming notes. \item \textbf{Quantize}. + Incoming notes are quantized to the nearst snap value for the + pattern. \item \textbf{Tighten}. + Incoming notes are tightened (partially quantized) + to the nearst snap value for the pattern. + \item \textbf{Randomize}. + The amplitude (velocity) of notes is randomized. + This is not done during recording, but can be applied later. + \item \textbf{Jitter}. + The timing of notes is randomized. + This is not done during recording, but can be applied later. + \item \textbf{Note-map}. + If active, the specified 'drums' file values are used to remap the + notes to new notes. This is useful, along with setting MIDI Thru, to + play on a pre-General-MIDI drum machine (e.g. Yamaha DD-11) and + hear it transmuted to GM while recording. Can also be applied after + the fact, if the pattern is marked as transposable. \end{itemize} % For details, see \sectionref{paragraph:patterns_recording_modes}. Also see \sectionref{subsec:pattern_editor_bottom} for more information on these recording modes. -\paragraph{Automation / Screen-Set Play} -\label{paragraph:configuration_midi_ctrl_ssplay} +\paragraph{Automation / BBT/HMS and LR Loop} +\label{paragraph:configuration_bbthms_lr_loop} -This MIDI control sets the playing screen-set. + These commands toggle the display of bars:beats:ticks versus + hours:minutes:seconds, and looping between the L/R markers. + + See \sectionref{paragraph:configuration_midi_loop_mode}. + +\paragraph{Automation / Undo and Redo} +\label{paragraph:configuration_undo_redo} + + These commands undo or redo actions such as deleting notes. + \textbf{Important}: + These commands will affect \textsl{all} open pattern editors! \subsubsection{Automation / More MIDI Control} \label{subsubsec:configuration_midi_ctrl_automationex} @@ -2234,6 +2413,19 @@ \subsubsection{Automation / More MIDI Control} Many additional control items were requested by users, to control additional features of the application. Too many to list here. See the 'ctrl' file samples for more information. + We will ultimately mention them all. + + Some important ones to touch on: + + \begin{itemize} + \item \textbf{Visibility}. + Toggles the visibility of the user-interface. + This can be useful in some circumstances. + In addition, the session manager, if in force, might + issue this command. + \item \textbf{Quit}. + Provides a way to exit \textsl{Seq66} via MIDI control. + \end{itemize} \subsubsection{'ctrl' File / MIDI Control Output} \label{subsubsec:configuration_ctrl_midi_control_out} diff --git a/doc/latex/tex/pattern_editor.tex b/doc/latex/tex/pattern_editor.tex index d8b0975d..f3998dce 100644 --- a/doc/latex/tex/pattern_editor.tex +++ b/doc/latex/tex/pattern_editor.tex @@ -52,8 +52,12 @@ \section{Pattern Editor} mouse button (the pointer changes to a pencil) and, \textsl{while holding it}, press the left mouse button. Or click in the pattern editor, press the + \index{keys!i} \index{keys!p} - \texttt{p} key to select the "pencil" or "paint" mode, then + \texttt{p} key to select the "pencil" or "paint" mode, + or + \texttt{i} key to select "insert" mode (a la vi), + then \index{mouse!left-click} left-click to add a note or \index{mouse!left-click-drag} diff --git a/doc/latex/tex/song_editor.tex b/doc/latex/tex/song_editor.tex index 85877c71..9293dc16 100644 --- a/doc/latex/tex/song_editor.tex +++ b/doc/latex/tex/song_editor.tex @@ -538,7 +538,7 @@ \subsubsection{Song Editor / Song Roll / Layout} Another way to turn on painting is to make sure that the performance editor piano roll has the keyboard focus by \textsl{left-clicking} in it, then press the - \texttt{p} key to enter the paint mode, and + \texttt{p} or \texttt{i} key to enter the paint/insert mode, and \texttt{x} (or \texttt{Esc} if not playing) to escape it. See \sectionref{subsubsec:song_editor_song_roll_keystrokes}. diff --git a/libseq66/include/ctrl/opcontrol.hpp b/libseq66/include/ctrl/opcontrol.hpp index 08c5daa6..0406a1b5 100644 --- a/libseq66/include/ctrl/opcontrol.hpp +++ b/libseq66/include/ctrl/opcontrol.hpp @@ -28,7 +28,7 @@ * \library seq66 application * \author Chris Ahlstrom * \date 2018-12-04 - * \updates 2021-12-07 + * \updates 2023-09-05 * \license GNU GPLv2 or above * * This module defines a number of constants relating to control of pattern @@ -208,6 +208,14 @@ class opcontrol }; // class automation +/* + * ---------------------------------------------------------------------- + * Free functions in the seq66 namespace + * ---------------------------------------------------------------------- + */ + +extern std::string auto_name (automation::slot s); + } // namespace seq66 #endif // SEQ66_OPCONTROL_HPP diff --git a/libseq66/include/midi/calculations.hpp b/libseq66/include/midi/calculations.hpp index aa7c6c5b..b33dab95 100644 --- a/libseq66/include/midi/calculations.hpp +++ b/libseq66/include/midi/calculations.hpp @@ -28,7 +28,7 @@ * \library seq66 application * \author Chris Ahlstrom * \date 2015-11-07 - * \updates 2023-08-25 + * \updates 2023-09-04 * \license GNU GPLv2 or above * * These items were moved from the globals.h module so that only the modules @@ -251,32 +251,7 @@ extern midibyte tempo_to_note_value (midibpm tempo); extern midibpm fix_tempo (midibpm bpm); extern unsigned short combine_bytes (midibyte b0, midibyte b1); extern midibpm note_value_to_tempo (midibyte note); - -/** - * Formalizes the rescaling of ticks base on changing the PPQN. For speed - * the parameters are all assumed to be valid. The PPQN values supported - * explicity range from 32 to 19200. The maximum tick value for 32-bit code - * is 2147483647. At the highest PPQN that's almost 28000 measures. 64-bit - * code maxes at over 9E18. - * - * \param tick - * The tick value to be rescaled. - * - * \param newppqn - * The new PPQN. - * - * \param oldppqn - * The original PPQN. Defaults to 192. - * - * \return - * Returns the new tick value. - */ - -inline midipulse -rescale_tick (midipulse tick, int newppqn, int oldppqn) -{ - return midipulse(double(tick) * newppqn / oldppqn + 0.5); -} +extern midipulse rescale_tick (midipulse tick, int newppqn, int oldppqn); /** * Converts tempo (e.g. 120 beats/minute) to microseconds. diff --git a/libseq66/src/ctrl/midicontrolout.cpp b/libseq66/src/ctrl/midicontrolout.cpp index 4270e360..ab396f74 100644 --- a/libseq66/src/ctrl/midicontrolout.cpp +++ b/libseq66/src/ctrl/midicontrolout.cpp @@ -25,7 +25,7 @@ * \library seq66 application * \author Igor Angst (with refactoring by C. Ahlstrom) * \date 2018-03-28 - * \updates 2023-04-10 + * \updates 2023-09-05 * \license GNU GPLv2 or above * * The class contained in this file encapsulates most of the functionality to @@ -67,6 +67,7 @@ #include /* std::setw() manipulator */ #include /* std::ostringstream class */ +#include "ctrl/opcontrol.hpp" /* seq66::automation & opcontrol */ #include "ctrl/midicontrolout.hpp" /* seq66::midicontrolout class */ #include "play/mutegroups.hpp" /* seq66::mutegroups::Size() */ @@ -179,6 +180,20 @@ operator ++ (midicontrolout::uiaction & e) return e; } +/** + * This function helps avoid long function calls like: + * + * std::string name = + * opcontrol::automation_slot_name(automation::slot::bpm_up); + * + * C/C++ talen-pasting cannot work here. + */ + +std::string +auto_name (automation::slot s) +{ + return opcontrol::automation_slot_name(s); +} /** * A "to_string" function for the seqaction enumeration. @@ -206,39 +221,104 @@ action_to_string (midicontrolout::uiaction a) { switch (a) { - case midicontrolout::uiaction::panic: return "Panic"; - case midicontrolout::uiaction::stop: return "Stop"; - case midicontrolout::uiaction::pause: return "Pause"; - case midicontrolout::uiaction::play: return "Play"; - case midicontrolout::uiaction::toggle_mutes: return "Toggle_mutes"; - case midicontrolout::uiaction::song_record: return "Song-record"; - case midicontrolout::uiaction::slot_shift: return "Slot-shift"; - case midicontrolout::uiaction::free: return "Free"; - case midicontrolout::uiaction::queue: return "Queue"; - case midicontrolout::uiaction::oneshot: return "One-shot"; - case midicontrolout::uiaction::replace: return "Replace"; - case midicontrolout::uiaction::snapshot: return "Snapshot"; - case midicontrolout::uiaction::song_mode: return "Song-mode"; - case midicontrolout::uiaction::learn: return "Learn"; - case midicontrolout::uiaction::bpm_up: return "BPM-Up"; - case midicontrolout::uiaction::bpm_dn: return "BPM-Dn"; - case midicontrolout::uiaction::list_up: return "List-Up"; - case midicontrolout::uiaction::list_dn: return "List-Dn"; - case midicontrolout::uiaction::song_up: return "Song-Up"; - case midicontrolout::uiaction::song_dn: return "Song-Dn"; - case midicontrolout::uiaction::set_up: return "Set-Up"; - case midicontrolout::uiaction::set_dn: return "Set-Dn"; - case midicontrolout::uiaction::tap_bpm: return "Tap-BPM"; - case midicontrolout::uiaction::quit: return "Quit"; - case midicontrolout::uiaction::visibility: return "Visibility"; - case midicontrolout::uiaction::alt_2: return "Alt_2"; - case midicontrolout::uiaction::alt_3: return "Alt_3"; - case midicontrolout::uiaction::alt_4: return "Alt_4"; - case midicontrolout::uiaction::alt_5: return "Alt_5"; - case midicontrolout::uiaction::alt_6: return "Alt_6"; - case midicontrolout::uiaction::alt_7: return "Alt_7"; - case midicontrolout::uiaction::alt_8: return "Alt_8"; - default: return "Unknown"; + case midicontrolout::uiaction::panic: + return auto_name(automation::slot::panic); // "Panic" + + case midicontrolout::uiaction::stop: + return auto_name(automation::slot::stop); // "Stop" + + case midicontrolout::uiaction::pause: + return "Pause"; + + case midicontrolout::uiaction::play: + return auto_name(automation::slot::playback); // "Play" + + case midicontrolout::uiaction::toggle_mutes: + return auto_name(automation::slot::toggle_mutes); // "Toggle-mutes + + case midicontrolout::uiaction::song_record: + return auto_name(automation::slot::song_record); // "Song-record" + + case midicontrolout::uiaction::slot_shift: + return auto_name(automation::slot::slot_shift); // "Slot-shift" + + case midicontrolout::uiaction::free: + return "Free"; + + case midicontrolout::uiaction::queue: + return auto_name(automation::slot::mod_queue); // "Queue" + + case midicontrolout::uiaction::oneshot: + return auto_name(automation::slot::mod_oneshot); // "One-shot" + + case midicontrolout::uiaction::replace: + return auto_name(automation::slot::mod_replace); // "Replace" + + case midicontrolout::uiaction::snapshot: + return auto_name(automation::slot::mod_snapshot); // "Snapshot" + + case midicontrolout::uiaction::song_mode: + return auto_name(automation::slot::song_mode); // "Song-mode" + + case midicontrolout::uiaction::learn: + return auto_name(automation::slot::mod_glearn); // "Learn" + + case midicontrolout::uiaction::bpm_up: + return auto_name(automation::slot::bpm_up); // "BPM-Up" + + case midicontrolout::uiaction::bpm_dn: + return auto_name(automation::slot::bpm_dn); // "BPM-Dn" + + case midicontrolout::uiaction::list_up: + return auto_name(automation::slot::playlist) + " Up"; + + case midicontrolout::uiaction::list_dn: + return auto_name(automation::slot::playlist) + " Dn"; + + case midicontrolout::uiaction::song_up: + return auto_name(automation::slot::playlist_song) + " Up"; + + case midicontrolout::uiaction::song_dn: + return auto_name(automation::slot::playlist_song) + " Dn"; + + case midicontrolout::uiaction::set_up: + return auto_name(automation::slot::ss_up); // "Set-Up" + + case midicontrolout::uiaction::set_dn: + return auto_name(automation::slot::ss_dn); // "Set-Dn" + + case midicontrolout::uiaction::tap_bpm: + return auto_name(automation::slot::tap_bpm); // "Tap-BPM" + + case midicontrolout::uiaction::quit: + return auto_name(automation::slot::quit); // "Quit" + + case midicontrolout::uiaction::visibility: + return auto_name(automation::slot::visibility); // "Visibility" + + case midicontrolout::uiaction::alt_2: + return "Alt_2"; + + case midicontrolout::uiaction::alt_3: + return "Alt_3"; + + case midicontrolout::uiaction::alt_4: + return "Alt_4"; + + case midicontrolout::uiaction::alt_5: + return "Alt_5"; + + case midicontrolout::uiaction::alt_6: + return "Alt_6"; + + case midicontrolout::uiaction::alt_7: + return "Alt_7"; + + case midicontrolout::uiaction::alt_8: + return "Alt_8"; + + default: + return "Unknown"; } } diff --git a/libseq66/src/ctrl/opcontrol.cpp b/libseq66/src/ctrl/opcontrol.cpp index 73fc96b6..31379185 100644 --- a/libseq66/src/ctrl/opcontrol.cpp +++ b/libseq66/src/ctrl/opcontrol.cpp @@ -199,7 +199,7 @@ opcontrol::automation_slot_name (slot s) "Start", // 27 start "Stop", // 28 stop ? "Loop L/R", // 29 loop_LR - "Toggle Mute", // 30 toggle_mutes * + "Toggle Mutes", // 30 toggle_mutes * "Song Pos", // 31 song_pointer /* @@ -216,7 +216,7 @@ opcontrol::automation_slot_name (slot s) "Toggle JACK", // 39 toggle_jack "Menu Mode", // 40 menu_mode "Follow JACK", // 41 follow_transport - "Panic!", // 42 panic * + "Panic", // 42 panic * "Visibility", // 43 visibility * "Save Session", // 44 save_session "Reserved 45", // 45 reserved_45 diff --git a/libseq66/src/midi/calculations.cpp b/libseq66/src/midi/calculations.cpp index a6966b99..7ef7cd64 100644 --- a/libseq66/src/midi/calculations.cpp +++ b/libseq66/src/midi/calculations.cpp @@ -25,7 +25,7 @@ * \library seq66 application * \author Chris Ahlstrom * \date 2015-11-07 - * \updates 2023-08-25 + * \updates 2023-09-04 * \license GNU GPLv2 or above * * This code was moved from the globals module so that other modules @@ -1297,6 +1297,32 @@ note_value_to_tempo (midibyte note) return slope; } +/** + * Formalizes the rescaling of ticks base on changing the PPQN. For speed + * the parameters are all assumed to be valid. The PPQN values supported + * explicity range from 32 to 19200. The maximum tick value for 32-bit code + * is 2147483647. At the highest PPQN that's almost 28000 measures. 64-bit + * code maxes at over 9E18. + * + * \param tick + * The tick value to be rescaled. + * + * \param newppqn + * The new PPQN. + * + * \param oldppqn + * The original PPQN. Defaults to 192. + * + * \return + * Returns the new tick value. + */ + +midipulse +rescale_tick (midipulse tick, int newppqn, int oldppqn) +{ + return midipulse(double(tick) * newppqn / oldppqn + 0.5); +} + /** * Calculates a wave function for use as an LFO (low-frequency oscillator) * for modifying data values in a sequence. We extracted this function from diff --git a/libseq66/src/play/performer.cpp b/libseq66/src/play/performer.cpp index b126f24e..1ec1e2ff 100644 --- a/libseq66/src/play/performer.cpp +++ b/libseq66/src/play/performer.cpp @@ -7751,21 +7751,6 @@ performer::automation_no_op return false; } -/** - * This function helps avoid long function calls like: - * - * std::string name = - * opcontrol::automation_slot_name(automation::slot::bpm_up); - * - * C/C++ talen-pasting cannot work here. - */ - -static std::string -auto_name (automation::slot s) -{ - return opcontrol::automation_slot_name(s); -} - /** * Implements BPM Up and BPM Down for MIDI control. There would be no need * for two BPM configuration lines for MIDI control, except that we need two diff --git a/seq_qt5/src/qperfroll.cpp b/seq_qt5/src/qperfroll.cpp index 46acdb93..eb27a7fd 100644 --- a/seq_qt5/src/qperfroll.cpp +++ b/seq_qt5/src/qperfroll.cpp @@ -667,6 +667,11 @@ qperfroll::keyPressEvent (QKeyEvent * event) handled = true; set_adding(false); } + else if (event->key() == Qt::Key_I) + { + handled = true; + set_adding(true); + } else if (event->key() == Qt::Key_P) { handled = true; diff --git a/seq_qt5/src/qseqeditframe64.cpp b/seq_qt5/src/qseqeditframe64.cpp index 1c8b7d8a..8b3fe7ae 100644 --- a/seq_qt5/src/qseqeditframe64.cpp +++ b/seq_qt5/src/qseqeditframe64.cpp @@ -735,11 +735,12 @@ qseqeditframe64::qseqeditframe64 this, SLOT(reset_grid_snap()) ); - set_snap(rescale_tick(sm_initial_snap, perf().ppqn(), usr().base_ppqn())); - set_note_length + midipulse scaledtick = rescale_tick ( - rescale_tick(sm_initial_note_length, perf().ppqn(), usr().base_ppqn()) + sm_initial_snap, perf().ppqn(), usr().base_ppqn() ); + set_snap(scaledtick); + set_note_length(scaledtick); qt_set_icon(note_length_xpm, ui->m_button_note); connect ( @@ -2954,7 +2955,7 @@ qseqeditframe64::reset_grid_snap () } /** - * Updates the note-length values and control based on the index. It is + * Updates the note-length values and control based on the index. It is * passed to the set_note_length() function for processing. * * \param index @@ -3034,11 +3035,12 @@ bool qseqeditframe64::change_ppqn (int ppqn) { int zoom = usr().zoom(); - set_snap(rescale_tick(sm_initial_snap, ppqn, usr().base_ppqn())); - set_note_length + midipulse scaledtick = rescale_tick ( - rescale_tick(sm_initial_note_length, ppqn, usr().base_ppqn()) + sm_initial_snap, ppqn, usr().base_ppqn() ); + set_snap(scaledtick); + set_note_length(scaledtick); if (usr().adapt_zoom()) zoom = zoom_power_of_2(ppqn); diff --git a/seq_qt5/src/qseqroll.cpp b/seq_qt5/src/qseqroll.cpp index 30984791..17d7f5da 100644 --- a/seq_qt5/src/qseqroll.cpp +++ b/seq_qt5/src/qseqroll.cpp @@ -25,7 +25,7 @@ * \library seq66 application * \author Chris Ahlstrom * \date 2018-01-01 - * \updates 2023-09-01 + * \updates 2023-09-04 * \license GNU GPLv2 or above * * Please see the additional notes for the Gtkmm-2.4 version of this panel, @@ -1613,6 +1613,12 @@ qseqroll::keyPressEvent (QKeyEvent * event) done = mark_modified(); break; + case Qt::Key_I: + + done = true; + set_adding(true); + break; + #if 0 /* * See Shift-N