├── settings.gradle ├── tools └── gen-docs │ ├── footer.html │ ├── gen-all.sh │ └── gen.sh ├── doc-source ├── Akai │ ├── APC40 MKII.odt │ ├── Advance Keyboards.md │ └── MPK mini mk3.md ├── Generic │ └── E-Drum.md ├── Devine │ ├── EZ-Creator Key.md │ ├── VersaKey 25.md │ ├── VersaKey 49.md │ ├── VersaKey 61.md │ ├── VersaKey 88.md │ ├── EZ-Creator Plus.md │ ├── EZ-Creator Pads.md │ └── EZ-Creator Fade.md ├── MIDIPLUS │ ├── Xmini Keyboards.md │ └── XPro Keyboards.md ├── Vault │ └── Apex.md └── Arturia │ └── MicroLab.md ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitattributes ├── src └── main │ ├── resources │ └── Documentation │ │ └── Controllers │ │ ├── iCon │ │ ├── P1-M.pdf │ │ ├── V1-M.pdf │ │ ├── P1-Nano.pdf │ │ ├── iCon QCon Pro X.pdf │ │ ├── iCon QCon Pro G2.pdf │ │ ├── Icon Platform M-plus.pdf │ │ └── mappings │ │ │ ├── Bitwig P1-M.zip │ │ │ ├── Bitwig V1-M.zip │ │ │ └── Bitwig P1-Nano.zip │ │ ├── Befaco │ │ └── VCMC.pdf │ │ ├── ESI │ │ └── ESI Xjam.pdf │ │ ├── Akai │ │ ├── AKAI APC64.pdf │ │ ├── APC40 MKII.pdf │ │ ├── APC Mini Mk2.pdf │ │ ├── APC Key25 Mk2.pdf │ │ ├── Akai MPK Mini Plus.pdf │ │ └── mpkminiplus │ │ │ ├── BitwigMpk.syx │ │ │ ├── Untitled.mmon │ │ │ ├── Bitwig.mpkminiplus │ │ │ └── BitwigR.mpkminiplus │ │ ├── PreSonus │ │ ├── ATOM.pdf │ │ └── FaderPort.pdf │ │ ├── SSL │ │ └── SSL UF8-UF1.pdf │ │ ├── Arturia │ │ ├── KeyLab25.png │ │ ├── KeyLab49.png │ │ ├── KeyLab61.png │ │ ├── KeyLab mkII.pdf │ │ ├── Arturia MiniLab 3.pdf │ │ ├── KeyLab Essential.pdf │ │ ├── Arturia KeyLab mk3.pdf │ │ ├── Arturia BeatStep Pro.pdf │ │ └── Arturia KeyLab Essential Mk3.pdf │ │ ├── Expressive-e │ │ └── Osmose.pdf │ │ ├── Novation │ │ ├── Launchpad X.pdf │ │ ├── LaunchKey Mk3.pdf │ │ ├── Launchkey Mk4.pdf │ │ ├── Launchkey Mini MK3.pdf │ │ ├── Launchkey Mini Mk4.pdf │ │ ├── Launchpad Mini MK3.pdf │ │ ├── Launchpad Pro Mk3.pdf │ │ ├── Novation SL MkIII.pdf │ │ └── Launch Control XL Mk3.pdf │ │ ├── ROLI │ │ └── Seaboard RISE.pdf │ │ ├── Reloop │ │ └── Reloop Keypad Pro.pdf │ │ ├── M-Audio │ │ ├── M-Audio Oxygen Pro 25.pdf │ │ ├── M-Audio Oxygen Pro Mini.pdf │ │ └── M-Audio Oxygen Pro 49-61-Hammer88.pdf │ │ ├── Roger Linn Design │ │ └── LinnStrument.pdf │ │ ├── Neuzeit Instruments │ │ └── Neuzeit Instruments Drop.pdf │ │ ├── Mackie │ │ └── Mackie Control │ │ │ └── Mackie Control Universal.pdf │ │ └── Native Instruments │ │ ├── Maschine MK3 Plus │ │ └── Maschine MK3 Plus.pdf │ │ ├── Kontrol S-Series │ │ └── Kontrol S-Series Mk3.pdf │ │ ├── Maschine Mikro Mk3 │ │ └── Maschine Mikro Mk3.pdf │ │ ├── Komplete Kontrol MK2 │ │ └── Komplete Kontrol MK2.pdf │ │ └── Komplete Kontrol A_M-Series │ │ └── Komplete Kontrol A_M-Series.pdf │ └── java │ └── com │ └── bitwig │ └── extensions │ ├── controllers │ ├── mcu │ │ ├── SectionType.java │ │ ├── display │ │ │ ├── DisplayPart.java │ │ │ ├── VuMode.java │ │ │ ├── DisplayRow.java │ │ │ └── ControllerDisplay.java │ │ ├── control │ │ │ ├── EncoderMode.java │ │ │ ├── RingDisplayType.java │ │ │ └── RingDisplay.java │ │ ├── value │ │ │ ├── Orientation.java │ │ │ ├── RangeChangedCallback.java │ │ │ ├── IntValueConverter.java │ │ │ ├── DoubleValueConverter.java │ │ │ ├── IncrementalValue.java │ │ │ ├── StringValueConverter.java │ │ │ ├── IntRange.java │ │ │ ├── IntValue.java │ │ │ ├── DoubleRangeValue.java │ │ │ ├── IEnumDisplayValue.java │ │ │ └── BasicIntValue.java │ │ ├── bindings │ │ │ ├── ResetableBinding.java │ │ │ ├── RingDisplayDisabledBinding.java │ │ │ ├── RingDisplayBinding.java │ │ │ └── FaderBinding.java │ │ ├── devices │ │ │ ├── CustomValueConverter.java │ │ │ ├── SpecialDevices.java │ │ │ ├── SslPlugins.java │ │ │ ├── ParameterSetting.java │ │ │ └── DeviceManager.java │ │ ├── config │ │ │ ├── ButtonAssignment.java │ │ │ └── EncoderBehavior.java │ │ ├── definitions │ │ │ ├── ManufacturerType.java │ │ │ ├── SubType.java │ │ │ ├── ssl │ │ │ │ ├── SslUf8Plus1ExtenderExtensionDefinition.java │ │ │ │ ├── SslUf8Plus2ExtenderExtensionDefinition.java │ │ │ │ └── SslUf8Plus3ExtenderExtensionDefinition.java │ │ │ ├── icon │ │ │ │ ├── IconV1mPlus1ExtenderExtensionDefinition.java │ │ │ │ ├── IconV1mPlus2ExtenderExtensionDefinition.java │ │ │ │ ├── IconV1mPlus3ExtenderExtensionDefinition.java │ │ │ │ ├── IconP1mPlus1ExtenderExtensionDefinition.java │ │ │ │ ├── IconP1mPlus2ExtenderExtensionDefinition.java │ │ │ │ ├── IconP1mPlus3ExtenderExtensionDefinition.java │ │ │ │ ├── IconP1NanoPlus1ExtenderExtensionDefinition.java │ │ │ │ ├── IconP1NanoPlus2ExtenderExtensionDefinition.java │ │ │ │ └── IconP1NanoPlus3ExtenderExtensionDefinition.java │ │ │ └── mackie │ │ │ │ └── MackieMcuPro1ExtenderExtensionDefinition.java │ │ └── layer │ │ │ └── ControlMode.java │ ├── mackie │ │ ├── display │ │ │ ├── DisplayPart.java │ │ │ ├── DisplaySource.java │ │ │ ├── VuMode.java │ │ │ ├── RingDisplayType.java │ │ │ └── RingDisplay.java │ │ ├── layer │ │ │ ├── DisplayLocation.java │ │ │ ├── EncoderMode.java │ │ │ └── MenuModeAction.java │ │ ├── section │ │ │ ├── NoteState.java │ │ │ ├── SectionType.java │ │ │ ├── InfoSource.java │ │ │ ├── ParamElement.java │ │ │ └── LayerStateHandler.java │ │ ├── definition │ │ │ ├── ManufacturerType.java │ │ │ ├── SubType.java │ │ │ ├── MackieMcuProXt1ExtensionDefinition.java │ │ │ ├── MackieMcuProXt2ExtensionDefinition.java │ │ │ ├── MackieMcuProXt3ExtensionDefinition.java │ │ │ ├── IconQconProG2X1ExtensionDefinition.java │ │ │ ├── IconQconProG2X2ExtensionDefinition.java │ │ │ ├── IconQconProG2X3ExtensionDefinition.java │ │ │ ├── IconQconProXXt1ExtensionDefinition.java │ │ │ ├── IconQconProXXt2ExtensionDefinition.java │ │ │ └── IconQconProXXt3ExtensionDefinition.java │ │ ├── ButtonViewState.java │ │ ├── value │ │ │ ├── RangeChangedCallback.java │ │ │ ├── IncrementalValue.java │ │ │ ├── IntValueConverter.java │ │ │ ├── DoubleValueConverter.java │ │ │ ├── StringValueConverter.java │ │ │ ├── IntRange.java │ │ │ ├── TrackStateChangedCallback.java │ │ │ ├── IntValue.java │ │ │ ├── DoubleRangeValue.java │ │ │ └── LayoutType.java │ │ ├── MixerMode.java │ │ ├── devices │ │ │ ├── CustomValueConverter.java │ │ │ ├── SpecialDevices.java │ │ │ └── ParameterSetting.java │ │ ├── Midi.java │ │ ├── OverrideNoteAssignment.java │ │ ├── bindings │ │ │ ├── ring │ │ │ │ ├── RingDisplayFixedBinding.java │ │ │ │ └── RingDisplayBinding.java │ │ │ └── FaderBinding.java │ │ ├── TrackType.java │ │ ├── DelayAction.java │ │ └── HoldCapture.java │ ├── akai │ │ ├── apc │ │ │ └── common │ │ │ │ ├── PanelLayout.java │ │ │ │ ├── led │ │ │ │ └── LedBehavior.java │ │ │ │ └── MidiProcessor.java │ │ ├── apcmk2 │ │ │ ├── ControlMode.java │ │ │ ├── layer │ │ │ │ └── TrackMode.java │ │ │ └── OrientationFollowType.java │ │ ├── apc64 │ │ │ └── control │ │ │ │ └── FaderBinding.java │ │ └── mpkminiplus │ │ │ └── RecordFocusMode.java │ ├── arturia │ │ ├── keylab │ │ │ ├── mk3 │ │ │ │ ├── display │ │ │ │ │ ├── IdItem.java │ │ │ │ │ ├── ButtonDisplayType.java │ │ │ │ │ ├── ScreenTarget.java │ │ │ │ │ └── SmallIcon.java │ │ │ │ ├── color │ │ │ │ │ └── BlinkState.java │ │ │ │ ├── controls │ │ │ │ │ └── RgbNoteButton.java │ │ │ │ └── CcAssignment.java │ │ │ ├── essentialMk3 │ │ │ │ ├── display │ │ │ │ │ └── LcdDisplayMode.java │ │ │ │ └── color │ │ │ │ │ └── BlinkState.java │ │ │ ├── mk2 │ │ │ │ └── DAWMode.java │ │ │ ├── essential │ │ │ │ ├── ArturiaKeylabEssential49ControllerExtensionDefinition.java │ │ │ │ ├── ArturiaKeylabEssential61ControllerExtensionDefinition.java │ │ │ │ └── ArturiaKeylabEssential88ControllerExtensionDefinition.java │ │ │ └── mk1 │ │ │ │ ├── ArturiaKeylab25ControllerExtensionDefinition.java │ │ │ │ ├── ArturiaKeylab49ControllerExtensionDefinition.java │ │ │ │ ├── ArturiaKeylab61ControllerExtensionDefinition.java │ │ │ │ └── ArturiaKeylab88ControllerExtensionDefinition.java │ │ ├── minilab3 │ │ │ ├── DisplayMode.java │ │ │ └── PadBank.java │ │ └── beatsteppro │ │ │ └── McuFaderBinding.java │ ├── novation │ │ ├── commonsmk3 │ │ │ ├── PanelLayout.java │ │ │ ├── CCSource.java │ │ │ ├── LightState.java │ │ │ ├── SpecialDevices.java │ │ │ ├── LpHwElements.java │ │ │ └── OrientationFollowType.java │ │ ├── launchkey_mk4 │ │ │ ├── ModeType.java │ │ │ ├── display │ │ │ │ ├── FixDisplayState.java │ │ │ │ ├── Arrangement.java │ │ │ │ └── ScreenTarget.java │ │ │ ├── control │ │ │ │ ├── ButtonMidiType.java │ │ │ │ └── ModeListener.java │ │ │ ├── values │ │ │ │ ├── NoteHandler.java │ │ │ │ ├── ControlValue.java │ │ │ │ ├── IObservableValue.java │ │ │ │ ├── SlotUtil.java │ │ │ │ └── IncrementDecelerator.java │ │ │ ├── bindings │ │ │ │ └── DisplayId.java │ │ │ ├── sequencer │ │ │ │ ├── ClipSeqMode.java │ │ │ │ ├── INoteStepSlot.java │ │ │ │ ├── SequencerSource.java │ │ │ │ └── IncBuffer.java │ │ │ ├── EncoderMode.java │ │ │ ├── CcAssignments.java │ │ │ └── definition │ │ │ │ └── AbstractLaunchkeyMk4ExtensionDefinition.java │ │ ├── launchcontrolxlmk3 │ │ │ ├── bindings │ │ │ │ ├── ColorValueSequence.java │ │ │ │ ├── DisableBinding.java │ │ │ │ ├── DisplayId.java │ │ │ │ └── FixedLightValueBinding.java │ │ │ ├── display │ │ │ │ ├── FixDisplayState.java │ │ │ │ ├── Arrangement.java │ │ │ │ └── ScreenTarget.java │ │ │ ├── layer │ │ │ │ ├── BaseMode.java │ │ │ │ └── IncrementDecelerator.java │ │ │ ├── CcConstValues.java │ │ │ └── control │ │ │ │ └── LaunchKnob.java │ │ ├── slmk3 │ │ │ ├── display │ │ │ │ ├── SequencerButtonSubMode.java │ │ │ │ ├── ButtonMode.java │ │ │ │ ├── ScreenConfigSource.java │ │ │ │ ├── ScreenLayout.java │ │ │ │ ├── KnobMode.java │ │ │ │ ├── ButtonSubPanel.java │ │ │ │ └── ShiftAction.java │ │ │ ├── value │ │ │ │ ├── NoteHandler.java │ │ │ │ ├── DoubleValueProxy.java │ │ │ │ ├── IObservableValue.java │ │ │ │ ├── ScaleInterface.java │ │ │ │ └── ClipFocus.java │ │ │ ├── layer │ │ │ │ └── GridMode.java │ │ │ ├── sequencer │ │ │ │ └── value │ │ │ │ │ ├── ControlValue.java │ │ │ │ │ ├── IncBuffer.java │ │ │ │ │ ├── BasicControlValue.java │ │ │ │ │ └── ObjectControlValue.java │ │ │ ├── seqcommons │ │ │ │ ├── ClipSeqMode.java │ │ │ │ ├── INoteStepSlot.java │ │ │ │ └── SequencerSource.java │ │ │ └── bindings │ │ │ │ └── IncrementHandler.java │ │ ├── launchpadpromk3 │ │ │ ├── layers │ │ │ │ └── TrackModeButtonMode.java │ │ │ └── ModeHandler.java │ │ ├── launchkey_mk3 │ │ │ ├── LightState.java │ │ │ ├── layer │ │ │ │ ├── ControlMode.java │ │ │ │ └── PadMode.java │ │ │ ├── DelayedTask.java │ │ │ └── control │ │ │ │ └── ModeType.java │ │ ├── launchpadmini3 │ │ │ ├── TrackMode.java │ │ │ ├── layers │ │ │ │ └── ControlMode.java │ │ │ └── LpMode.java │ │ ├── common │ │ │ └── SimpleLedColor.java │ │ ├── launchpad_pro │ │ │ └── Overlay.java │ │ └── looprecorder │ │ │ └── RecordingContext.java │ ├── maudio │ │ └── oxygenpro │ │ │ └── definition │ │ │ ├── BasicMode.java │ │ │ ├── OxygenPro49ExtensionDefinition.java │ │ │ └── OxygenPro61ExtensionDefinition.java │ ├── nativeinstruments │ │ ├── komplete │ │ │ ├── device │ │ │ │ ├── DeviceSelectionTab.java │ │ │ │ └── AbstractParameterControl.java │ │ │ ├── midi │ │ │ │ ├── DeviceMidiListener.java │ │ │ │ └── NhiaSysexCommand.java │ │ │ └── LayoutType.java │ │ ├── maschine │ │ │ ├── SysexCommandType.java │ │ │ ├── TrackState.java │ │ │ ├── display │ │ │ │ ├── NameContainer.java │ │ │ │ └── OnOffLightStateBinding.java │ │ │ ├── modes │ │ │ │ ├── JogWheelDestination.java │ │ │ │ └── NoteFocusHandler.java │ │ │ ├── RgbButton.java │ │ │ ├── DebugOutMs.java │ │ │ ├── FocusMode.java │ │ │ ├── LayoutType.java │ │ │ └── TouchHandler.java │ │ ├── maschinemikro │ │ │ └── layers │ │ │ │ ├── EncoderMode.java │ │ │ │ ├── MuteSoloMode.java │ │ │ │ ├── StripMode.java │ │ │ │ └── LedBehavior.java │ │ └── commons │ │ │ ├── ModifierState.java │ │ │ ├── ColorBrightness.java │ │ │ └── Colors.java │ ├── presonus │ │ └── faderport │ │ │ ├── ValueBarMode.java │ │ │ ├── DisplayMode.java │ │ │ ├── Layer.java │ │ │ ├── DisplayBinding.java │ │ │ ├── DisplayTarget.java │ │ │ ├── PresonusFaderPort8Definition.java │ │ │ └── PresonusFaderPort16Definition.java │ ├── reloop │ │ ├── display │ │ │ ├── ScreenMode.java │ │ │ └── StringUtil.java │ │ └── GlobalStates.java │ └── devine │ │ ├── VersaKey25.java │ │ ├── VersaKey49.java │ │ ├── VersaKey61.java │ │ ├── VersaKey88.java │ │ ├── EzCreatorKeyXL.java │ │ ├── EzCreatorCommon.java │ │ ├── VersaKey25Definition.java │ │ ├── VersaKey49Definition.java │ │ ├── VersaKey61Definition.java │ │ ├── VersaKey88Definition.java │ │ ├── EzCreatorKeyXLDefinition.java │ │ ├── EzCreatorKey.java │ │ └── EzCreatorKeyDefinition.java │ ├── framework │ ├── values │ │ ├── PanelLayout.java │ │ ├── IncrementalValue.java │ │ ├── MidiStatus.java │ │ ├── TrackType.java │ │ ├── Midi.java │ │ ├── LayoutType.java │ │ └── IncrementDecelerator.java │ ├── di │ │ ├── TrackerRegistration.java │ │ ├── ViewPositionListener.java │ │ ├── ViewTracker.java │ │ ├── DiException.java │ │ ├── Activate.java │ │ ├── Deactivate.java │ │ ├── PostConstruct.java │ │ ├── Component.java │ │ └── Inject.java │ ├── BindingWithSensitivity.java │ ├── LayerGroup.java │ ├── time │ │ ├── TimedEvent.java │ │ ├── AbstractTimedEvent.java │ │ └── TimedDelayEvent.java │ ├── BooleanObject.java │ ├── StringSupplierToPropertyBinding.java │ ├── BooleanSupplierToPropertyBinding.java │ ├── LightColorOutputBinding.java │ ├── HarwareActionBinding.java │ ├── InternalLightStateBinding.java │ └── RelativeHardwareControlBinding.java │ └── util │ ├── ValueUtils.java │ └── NoteInputUtils.java ├── .vscode ├── settings.json └── extensions.json ├── README.md ├── .editorconfig ├── .gitignore ├── .github └── workflows │ └── gradle.yml └── bitwig-extensions.iml /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'bitwig-extensions' 2 | -------------------------------------------------------------------------------- /tools/gen-docs/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /doc-source/Akai/APC40 MKII.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/doc-source/Akai/APC40 MKII.odt -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Handle line endings automatically for files detected as text 2 | # and leave all files detected as binary untouched. 3 | * text=auto 4 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/iCon/P1-M.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/iCon/P1-M.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/iCon/V1-M.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/iCon/V1-M.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Befaco/VCMC.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Befaco/VCMC.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/ESI/ESI Xjam.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/ESI/ESI Xjam.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/iCon/P1-Nano.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/iCon/P1-Nano.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Akai/AKAI APC64.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Akai/AKAI APC64.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Akai/APC40 MKII.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Akai/APC40 MKII.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/PreSonus/ATOM.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/PreSonus/ATOM.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/SSL/SSL UF8-UF1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/SSL/SSL UF8-UF1.pdf -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/SectionType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu; 2 | 3 | public enum SectionType { 4 | MAIN, 5 | XTENDER; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Akai/APC Mini Mk2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Akai/APC Mini Mk2.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Arturia/KeyLab25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Arturia/KeyLab25.png -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Arturia/KeyLab49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Arturia/KeyLab49.png -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Arturia/KeyLab61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Arturia/KeyLab61.png -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "java.configuration.updateBuildConfiguration": "automatic", 3 | "java.format.settings.url": "code-formatting.xml", 4 | "java.project.encoding": "warning" 5 | } -------------------------------------------------------------------------------- /doc-source/Generic/E-Drum.md: -------------------------------------------------------------------------------- 1 | # Generic E-Drum 2 | 3 | * A simple generic MIDI E-Drum controller extension which creates a MIDI note input 4 | * Supports generic transport control (via sysex) 5 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/values/PanelLayout.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.values; 2 | 3 | public enum PanelLayout { 4 | LAUNCHER, 5 | ARRANGER 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Akai/APC Key25 Mk2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Akai/APC Key25 Mk2.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Arturia/KeyLab mkII.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Arturia/KeyLab mkII.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Expressive-e/Osmose.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Expressive-e/Osmose.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Novation/Launchpad X.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Novation/Launchpad X.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/PreSonus/FaderPort.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/PreSonus/FaderPort.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/ROLI/Seaboard RISE.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/ROLI/Seaboard RISE.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/iCon/iCon QCon Pro X.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/iCon/iCon QCon Pro X.pdf -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/display/DisplayPart.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.display; 2 | 3 | public enum DisplayPart { 4 | UPPER, LOWER; 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/di/TrackerRegistration.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.di; 2 | 3 | public interface TrackerRegistration { 4 | void unregister(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Novation/LaunchKey Mk3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Novation/LaunchKey Mk3.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Novation/Launchkey Mk4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Novation/Launchkey Mk4.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/iCon/iCon QCon Pro G2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/iCon/iCon QCon Pro G2.pdf -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/layer/DisplayLocation.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.layer; 2 | 3 | public enum DisplayLocation { 4 | TOP, BOTTOM 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/section/NoteState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.section; 2 | 3 | public enum NoteState { 4 | PLAYING, BASENOTE, OFF; 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/section/SectionType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.section; 2 | 3 | public enum SectionType { 4 | MAIN, XTENDER; 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/display/DisplayPart.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.display; 2 | 3 | public enum DisplayPart { 4 | UPPER, 5 | LOWER; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Akai/Akai MPK Mini Plus.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Akai/Akai MPK Mini Plus.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Arturia/Arturia MiniLab 3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Arturia/Arturia MiniLab 3.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Arturia/KeyLab Essential.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Arturia/KeyLab Essential.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Reloop/Reloop Keypad Pro.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Reloop/Reloop Keypad Pro.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/iCon/Icon Platform M-plus.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/iCon/Icon Platform M-plus.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/iCon/mappings/Bitwig P1-M.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/iCon/mappings/Bitwig P1-M.zip -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/iCon/mappings/Bitwig V1-M.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/iCon/mappings/Bitwig V1-M.zip -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/layer/EncoderMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.layer; 2 | 3 | public enum EncoderMode { 4 | ACCELERATED, NONACCELERATED 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/control/EncoderMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.control; 2 | 3 | public enum EncoderMode { 4 | ACCELERATED, NONACCELERATED 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/Orientation.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | public enum Orientation { 4 | HORIZONTAL, 5 | VERTICAL 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Akai/mpkminiplus/BitwigMpk.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Akai/mpkminiplus/BitwigMpk.syx -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Akai/mpkminiplus/Untitled.mmon: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Akai/mpkminiplus/Untitled.mmon -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Arturia/Arturia KeyLab mk3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Arturia/Arturia KeyLab mk3.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Novation/Launchkey Mini MK3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Novation/Launchkey Mini MK3.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Novation/Launchkey Mini Mk4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Novation/Launchkey Mini Mk4.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Novation/Launchpad Mini MK3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Novation/Launchpad Mini MK3.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Novation/Launchpad Pro Mk3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Novation/Launchpad Pro Mk3.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Novation/Novation SL MkIII.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Novation/Novation SL MkIII.pdf -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/display/DisplaySource.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.display; 2 | 3 | public interface DisplaySource { 4 | boolean isActive(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/section/InfoSource.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.section; 2 | 3 | public enum InfoSource { 4 | NAV_HORIZONTAL, NAV_VERTICAL; 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/bindings/ResetableBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.bindings; 2 | 3 | public interface ResetableBinding { 4 | void reset(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Arturia/Arturia BeatStep Pro.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Arturia/Arturia BeatStep Pro.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/M-Audio/M-Audio Oxygen Pro 25.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/M-Audio/M-Audio Oxygen Pro 25.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Novation/Launch Control XL Mk3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Novation/Launch Control XL Mk3.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Roger Linn Design/LinnStrument.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Roger Linn Design/LinnStrument.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/iCon/mappings/Bitwig P1-Nano.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/iCon/mappings/Bitwig P1-Nano.zip -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/akai/apc/common/PanelLayout.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.akai.apc.common; 2 | 3 | public enum PanelLayout { 4 | VERTICAL, 5 | HORIZONTAL 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk3/display/IdItem.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk3.display; 2 | 3 | public interface IdItem { 4 | int getId(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/display/VuMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.display; 2 | 3 | public enum VuMode { 4 | LED, LED_LCD_VERTICAL, LED_LCD_HORIZONTAL 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Akai/mpkminiplus/Bitwig.mpkminiplus: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Akai/mpkminiplus/Bitwig.mpkminiplus -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Akai/mpkminiplus/BitwigR.mpkminiplus: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Akai/mpkminiplus/BitwigR.mpkminiplus -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/M-Audio/M-Audio Oxygen Pro Mini.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/M-Audio/M-Audio Oxygen Pro Mini.pdf -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/commonsmk3/PanelLayout.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.commonsmk3; 2 | 3 | public enum PanelLayout 4 | { 5 | VERTICAL, HORIZONTAL 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/BindingWithSensitivity.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework; 2 | 3 | public interface BindingWithSensitivity 4 | { 5 | void setGlobalSensitivity(double value); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/display/VuMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.display; 2 | 3 | public enum VuMode { 4 | LED, 5 | LED_LCD_VERTICAL, 6 | LED_LCD_HORIZONTAL 7 | } 8 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Arturia/Arturia KeyLab Essential Mk3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Arturia/Arturia KeyLab Essential Mk3.pdf -------------------------------------------------------------------------------- /doc-source/Devine/EZ-Creator Key.md: -------------------------------------------------------------------------------- 1 | # Devine EZ-Creator Key 2 | 3 | Keys are working as expected. 4 | 5 | The knob is controlling the first remote control of the selected device. 6 | 7 | The pitch up and down button do nothing. 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/maudio/oxygenpro/definition/BasicMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.maudio.oxygenpro.definition; 2 | 3 | public enum BasicMode { 4 | CLIP_LAUNCH, 5 | NOTES; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/ModeType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4; 2 | 3 | public enum ModeType { 4 | ENCODER, 5 | PAD, 6 | FADER 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/akai/apcmk2/ControlMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.akai.apcmk2; 2 | 3 | public enum ControlMode { 4 | VOLUME, // 5 | PAN, // 6 | SEND, // 7 | DEVICE 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/ManufacturerType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | public enum ManufacturerType { 4 | MACKIE, 5 | ICON, 6 | BEHRINGER 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/SubType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | public enum SubType { 4 | UNSPECIFIED, 5 | PRO_X, 6 | G2, 7 | M_PLUS 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/devices/CustomValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.devices; 2 | 3 | public interface CustomValueConverter { 4 | String convert(double value); 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/RangeChangedCallback.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | public interface RangeChangedCallback { 4 | void rangeChanged(int min, int max); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/values/IncrementalValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.values; 2 | 3 | public interface IncrementalValue { 4 | void increment(int inc); 5 | 6 | String displayedValue(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/M-Audio/M-Audio Oxygen Pro 49-61-Hammer88.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/M-Audio/M-Audio Oxygen Pro 49-61-Hammer88.pdf -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/ButtonViewState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie; 2 | 3 | public enum ButtonViewState { 4 | MIXER, GROUP_LAUNCH, GLOBAL_VIEW, NOTE_PLAY, STEP_SEQUENCER, CLIP 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/RangeChangedCallback.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | public interface RangeChangedCallback { 4 | void rangeChanged(int min, int max); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/config/ButtonAssignment.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.config; 2 | 3 | public interface ButtonAssignment { 4 | int getNoteNo(); 5 | 6 | int getChannel(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/bindings/ColorValueSequence.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.bindings; 2 | 3 | public class ColorValueSequence { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/di/ViewPositionListener.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.di; 2 | 3 | public interface ViewPositionListener { 4 | void handlePositionChanged(String source, int trackIndex); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Neuzeit Instruments/Neuzeit Instruments Drop.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Neuzeit Instruments/Neuzeit Instruments Drop.pdf -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/ManufacturerType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions; 2 | 3 | public enum ManufacturerType { 4 | MACKIE, 5 | ICON, 6 | BEHRINGER, 7 | SSL 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/IntValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | @FunctionalInterface 4 | public interface IntValueConverter { 5 | String convert(int value); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/display/FixDisplayState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.display; 2 | 3 | public enum FixDisplayState { 4 | TRACK, 5 | PARAM 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/display/SequencerButtonSubMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.display; 2 | 3 | public enum SequencerButtonSubMode { 4 | MODE_1, 5 | MODE_2 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Mackie/Mackie Control/Mackie Control Universal.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Mackie/Mackie Control/Mackie Control Universal.pdf -------------------------------------------------------------------------------- /doc-source/Akai/Advance Keyboards.md: -------------------------------------------------------------------------------- 1 | # AKAI Advance Keyboards 2 | 3 | * The 8 knobs are mapped to the selected device's remote controls 4 | * Pads, Keys, Mod-Wheel and Pitch-Bend are working 5 | * The transport controls, and the other buttons are not 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/IncrementalValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | public interface IncrementalValue { 4 | void increment(int inc); 5 | 6 | String displayedValue(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/IntValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | @FunctionalInterface 4 | public interface IntValueConverter { 5 | String convert(int value); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/DoubleValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | @FunctionalInterface 4 | public interface DoubleValueConverter { 5 | String convert(double v); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/IncrementalValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | public interface IncrementalValue { 4 | void increment(int inc); 5 | 6 | String displayedValue(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/value/NoteHandler.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.value; 2 | 3 | public interface NoteHandler { 4 | void handleNoteAction(int note, int velocity); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/section/ParamElement.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.section; 2 | 3 | public enum ParamElement { 4 | VOLUME, PAN, SENDMIXER, SEND_TRACK, INSTRUMENT, PLUGIN, EQ, NOTE_DEVICE; 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/DoubleValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | @FunctionalInterface 4 | public interface DoubleValueConverter { 5 | String convert(double v); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/display/FixDisplayState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.display; 2 | 3 | public enum FixDisplayState { 4 | TRACK, 5 | PARAM 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/control/ButtonMidiType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.control; 2 | 3 | public enum ButtonMidiType { 4 | PAD, 5 | PAD_DRUM, 6 | CC 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/akai/apcmk2/layer/TrackMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.akai.apcmk2.layer; 2 | 3 | public enum TrackMode { 4 | STOP, 5 | SOLO, 6 | MUTE, 7 | ARM, 8 | SELECT 9 | } 10 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Native Instruments/Maschine MK3 Plus/Maschine MK3 Plus.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Native Instruments/Maschine MK3 Plus/Maschine MK3 Plus.pdf -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/device/DeviceSelectionTab.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.komplete.device; 2 | 3 | public interface DeviceSelectionTab { 4 | String getLayerCode(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/SysexCommandType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine; 2 | 3 | public enum SysexCommandType { 4 | SHIFT_DOWN, SHIFT_UP, RETURN_FROM_HOST, UNKNOWN; 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/values/NoteHandler.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.values; 2 | 3 | public interface NoteHandler { 4 | void handleNoteAction(int note, int velocity); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Native Instruments/Kontrol S-Series/Kontrol S-Series Mk3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Native Instruments/Kontrol S-Series/Kontrol S-Series Mk3.pdf -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Native Instruments/Maschine Mikro Mk3/Maschine Mikro Mk3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Native Instruments/Maschine Mikro Mk3/Maschine Mikro Mk3.pdf -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/presonus/faderport/ValueBarMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.presonus.faderport; 2 | 3 | public enum ValueBarMode 4 | { 5 | Normal, 6 | Bipolar, 7 | Fill, 8 | Spread, 9 | Off 10 | } 11 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Native Instruments/Komplete Kontrol MK2/Komplete Kontrol MK2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Native Instruments/Komplete Kontrol MK2/Komplete Kontrol MK2.pdf -------------------------------------------------------------------------------- /tools/gen-docs/gen-all.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -e 4 | 5 | ROOT=$PWD 6 | 7 | cd doc-source 8 | 9 | find . -name '*.md' -type f | sed -e "s#\(.*\).md#$ROOT/tools/gen-docs/gen.sh \"\1.md\" \"$ROOT/src/main/resources/Documentation/Controllers/\1.html\"#" | sh 10 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "richardwillis.vscode-gradle-extension-pack", 4 | "vscjava.vscode-java-pack", 5 | "eamodio.gitlens", 6 | "yzhang.markdown-all-in-one" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/bindings/DisableBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.bindings; 2 | 3 | public interface DisableBinding { 4 | void setDisabled(boolean disabled); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/reloop/display/ScreenMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.reloop.display; 2 | 3 | public enum ScreenMode { 4 | HOME, 5 | DEVICE_PARAMETER, 6 | MIXER_PARAMETER, 7 | SCALE, 8 | DRUM 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschinemikro/layers/EncoderMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschinemikro.layers; 2 | 3 | public enum EncoderMode { 4 | NONE, 5 | VOLUME, 6 | SWING, 7 | TEMPO; 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/SubType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions; 2 | 3 | public enum SubType { 4 | UNSPECIFIED, 5 | PRO_X, 6 | G2, 7 | V1M, 8 | P1M, 9 | UF8, 10 | M_PLUS 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/midi/DeviceMidiListener.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.komplete.midi; 2 | 3 | public interface DeviceMidiListener { 4 | void handleDeviceSelect(int[] selectionPath); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/display/ButtonMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.display; 2 | 3 | public enum ButtonMode { 4 | TRACK, 5 | SHIFT, 6 | SEQUENCER, 7 | SEQUENCER2, 8 | OPTION 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/util/ValueUtils.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.util; 2 | 3 | public class ValueUtils 4 | { 5 | public static int doubleToUnsigned7(final double x) 6 | { 7 | return Math.max(0, Math.min((int)(x * 127.0), 127)); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/TrackState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine; 2 | 3 | public class TrackState { 4 | public boolean isPlaying; 5 | public boolean isRecording; 6 | public boolean isSelected; 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/layer/GridMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.layer; 2 | 3 | public enum GridMode { 4 | LAUNCH, 5 | SELECT, 6 | OPTION, 7 | OPTION_SHIFT, 8 | PAD, 9 | SEQUENCER 10 | } 11 | -------------------------------------------------------------------------------- /src/main/resources/Documentation/Controllers/Native Instruments/Komplete Kontrol A_M-Series/Komplete Kontrol A_M-Series.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bitwig/bitwig-extensions/HEAD/src/main/resources/Documentation/Controllers/Native Instruments/Komplete Kontrol A_M-Series/Komplete Kontrol A_M-Series.pdf -------------------------------------------------------------------------------- /doc-source/MIDIPLUS/Xmini Keyboards.md: -------------------------------------------------------------------------------- 1 | # MIDIPlus Xmini Keyboards 2 | 3 | * The four knobs controls the first four remote controls of the selected device 4 | * Keys, Pitch-Bend and Mod-Wheel are working 5 | * Transport buttons are working 6 | 7 | Make sure your controller has the latest firmware update. 8 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/display/NameContainer.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine.display; 2 | 3 | public interface NameContainer { 4 | String getValueString(int index, String[] values); 5 | 6 | void updateDetail(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschinemikro/layers/MuteSoloMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschinemikro.layers; 2 | 3 | public enum MuteSoloMode { 4 | NONE, 5 | MUTE, 6 | ARM, 7 | SOLO, 8 | SOLO_EXCLUSIVE; 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/StringValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | /** 4 | * Handles in converting a string into a different format. 5 | */ 6 | public interface StringValueConverter { 7 | String convert(String displayValue); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/modes/JogWheelDestination.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine.modes; 2 | 3 | public interface JogWheelDestination { 4 | void jogWheelAction(int increment); 5 | 6 | void jogWheelPush(boolean push); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschinemikro/layers/StripMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschinemikro.layers; 2 | 3 | public enum StripMode { 4 | NONE, 5 | MOD, 6 | NOTE, 7 | PITCH, 8 | PARAMETER, 9 | PRESSURE 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bitwig-extensions 2 | Bitwig Studio Controller Extensions 3 | 4 | A scripting guide and API reference resides in Bitwig Studio under Help > Documentation > Developer Resources. 5 | 6 | ## JAVA codestyle 7 | 8 | If you plan on contributing to this repository please import `code-formatting.xml` in your IDE. 9 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/StringValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | /** 4 | * Handles in converting a string into a different format. 5 | */ 6 | public interface StringValueConverter { 7 | String convert(String displayValue); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/IntRange.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | import java.util.function.IntConsumer; 4 | 5 | public interface IntRange { 6 | void addRangeListener(int range, IntConsumer callback); 7 | 8 | int getIntValue(); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/essentialMk3/display/LcdDisplayMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.essentialMk3.display; 2 | 3 | public enum LcdDisplayMode { 4 | NONE, 5 | VOLUME, 6 | PANNING, 7 | DEVICE1, 8 | DEVICE2, 9 | INIT 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/IntRange.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | import java.util.function.IntConsumer; 4 | 5 | public interface IntRange { 6 | void addRangeListener(int range, IntConsumer callback); 7 | 8 | int getIntValue(); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchpadpromk3/layers/TrackModeButtonMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchpadpromk3.layers; 2 | 3 | public enum TrackModeButtonMode { 4 | SELECT, 5 | MUTE, 6 | SOLO, 7 | ARM, 8 | STOP, 9 | FIXED_LENGTH 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/di/ViewTracker.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.di; 2 | 3 | public interface ViewTracker { 4 | void fireViewChanged(String source, int trackIndex); 5 | 6 | TrackerRegistration registerViewPositionListener(String origin, ViewPositionListener listener); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/control/ModeListener.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.control; 2 | 3 | import com.bitwig.extensions.controllers.novation.launchkey_mk4.ModeType; 4 | 5 | public interface ModeListener { 6 | void handleModeChange(ModeType type, int id); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/TrackStateChangedCallback.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | public interface TrackStateChangedCallback { 4 | void valueChanged(String name, boolean exists, boolean isGroup, boolean isExpanded, 5 | ChannelStateValueHandler handler); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/bindings/DisplayId.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.bindings; 2 | 3 | 4 | import com.bitwig.extensions.controllers.novation.launchkey_mk4.display.DisplayControl; 5 | 6 | public record DisplayId(int index, DisplayControl display) { 7 | // 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/commons/ModifierState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.commons; 2 | 3 | public enum ModifierState { 4 | NONE, 5 | DUPLICATE, 6 | SELECT, 7 | SOLO, 8 | MUTE, 9 | ERASE, 10 | SHIFT, 11 | ARM, 12 | STOP, 13 | VARIATION; 14 | } 15 | -------------------------------------------------------------------------------- /tools/gen-docs/gen.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -e 4 | 5 | ROOT=$(dirname "$0") 6 | 7 | IN_MD="$1" 8 | OUT_HTML="$2" 9 | 10 | mkdir -p $(dirname "$2") 11 | 12 | echo Converting "$IN_MD" to "$OUT_HTML" 13 | 14 | { 15 | cat $ROOT/header.html 16 | pandoc --verbose --from=gfm --to=html "$IN_MD" 17 | cat $ROOT/footer.html 18 | } >"$OUT_HTML" 19 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/MixerMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie; 2 | 3 | /** 4 | * Defines main Mixer Options 5 | * 6 | */ 7 | public enum MixerMode { 8 | /* Standard Mixer View */ 9 | MAIN, 10 | /* Mixer with FX tracks + main */ 11 | GLOBAL, 12 | /* Mixer focuses on drums */ 13 | DRUM; 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/bindings/DisplayId.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.bindings; 2 | 3 | 4 | import com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.display.DisplayControl; 5 | 6 | public record DisplayId(int index, DisplayControl display) { 7 | // 8 | } 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | # Unix-style newlines with a newline ending every file 5 | [*] 6 | end_of_line = lf 7 | insert_final_newline = true 8 | 9 | # Matches multiple files with brace expansion notation 10 | [**.java] 11 | charset = utf-8 12 | indent_style = space 13 | indent_size = 3 14 | trim_trailing_whitespace = true 15 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/display/ScreenConfigSource.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.display; 2 | 3 | import com.bitwig.extensions.controllers.novation.slmk3.MidiProcessor; 4 | 5 | public interface ScreenConfigSource { 6 | boolean isActive(); 7 | 8 | MidiProcessor getMidiProcessor(); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchpadpromk3/ModeHandler.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchpadpromk3; 2 | 3 | import com.bitwig.extensions.controllers.novation.launchpadpromk3.layers.ControlMode; 4 | 5 | public interface ModeHandler { 6 | void toFaderMode(final ControlMode controlMode, final ControlMode previousMode); 7 | } 8 | -------------------------------------------------------------------------------- /doc-source/MIDIPLUS/XPro Keyboards.md: -------------------------------------------------------------------------------- 1 | # MIDIPlus XPro Keyboards 2 | 3 | * The eight knobs controls the remote controls of the selected device 4 | * Pads are working and will be mapped to the first 8 pads of the Bitwig Studio drum machine 5 | * Keys, Pitch-Bend and Mod-Wheel are working 6 | * Transport buttons are working 7 | 8 | Make sure your controller has the latest firmware update. 9 | -------------------------------------------------------------------------------- /doc-source/Devine/VersaKey 25.md: -------------------------------------------------------------------------------- 1 | # Devine VersaKey 25 2 | 3 | ## Pads 4 | 5 | The pads are working and mapped to work well with the Bitwig Drum Machine. 6 | 7 | ## Keys 8 | 9 | The keys are working. 10 | 11 | ## Knobs 12 | 13 | They control the 1-4 remote controls of the selected device. 14 | 15 | ## Transport 16 | 17 | The transport controls are working as indicated on the buttons. 18 | -------------------------------------------------------------------------------- /doc-source/Devine/VersaKey 49.md: -------------------------------------------------------------------------------- 1 | # Devine VersaKey 49 2 | 3 | ## Pads 4 | 5 | The pads are working and mapped to work well with the Bitwig Drum Machine. 6 | 7 | ## Keys 8 | 9 | The keys are working. 10 | 11 | ## Knobs 12 | 13 | They control the 1-8 remote controls of the selected device. 14 | 15 | ## Transport 16 | 17 | The transport controls are working as indicated on the buttons. 18 | -------------------------------------------------------------------------------- /doc-source/Devine/VersaKey 61.md: -------------------------------------------------------------------------------- 1 | # Devine VersaKey 61 2 | 3 | ## Pads 4 | 5 | The pads are working and mapped to work well with the Bitwig Drum Machine. 6 | 7 | ## Keys 8 | 9 | The keys are working. 10 | 11 | ## Knobs 12 | 13 | They control the 1-8 remote controls of the selected device. 14 | 15 | ## Transport 16 | 17 | The transport controls are working as indicated on the buttons. 18 | -------------------------------------------------------------------------------- /doc-source/Devine/VersaKey 88.md: -------------------------------------------------------------------------------- 1 | # Devine VersaKey 88 2 | 3 | ## Pads 4 | 5 | The pads are working and mapped to work well with the Bitwig Drum Machine. 6 | 7 | ## Keys 8 | 9 | The keys are working. 10 | 11 | ## Knobs 12 | 13 | They control the 1-8 remote controls of the selected device. 14 | 15 | ## Transport 16 | 17 | The transport controls are working as indicated on the buttons. 18 | -------------------------------------------------------------------------------- /doc-source/Devine/EZ-Creator Plus.md: -------------------------------------------------------------------------------- 1 | # Devine EZ-Creator Plus 2 | 3 | ## Pads 4 | 5 | The pads are working and mapped to work well with the Bitwig Drum Machine. 6 | 7 | ## Keys 8 | 9 | The keys are working. 10 | 11 | ## Knobs 12 | 13 | They control the 1-4 remote controls of the selected device. 14 | 15 | ## Faders 16 | 17 | They control the 5-8 remote controls of the selected device. 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/display/DisplayRow.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.display; 2 | 3 | public enum DisplayRow { 4 | LABEL(0), 5 | VALUE(1); 6 | 7 | final int rowIndex; 8 | 9 | DisplayRow(int rowIndex) { 10 | this.rowIndex = rowIndex; 11 | } 12 | 13 | public int getRowIndex() { 14 | return rowIndex; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/values/ControlValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.values; 2 | 3 | import com.bitwig.extensions.framework.values.BasicStringValue; 4 | 5 | public interface ControlValue { 6 | BasicStringValue getDisplayValue(); 7 | 8 | void incrementBy(final int inc, boolean modifier); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/presonus/faderport/DisplayMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.presonus.faderport; 2 | 3 | public enum DisplayMode 4 | { 5 | Default, 6 | AlternativeDefault, 7 | SmallText, 8 | LargeText, 9 | LargeTextMetering, 10 | DefaultTextMetering, 11 | MixedText, 12 | AlternativeTextMetering, 13 | MixedTextMetering, 14 | Menu, 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/sequencer/value/ControlValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.sequencer.value; 2 | 3 | import com.bitwig.extension.controller.api.StringValue; 4 | 5 | public interface ControlValue { 6 | StringValue getDisplayValue(); 7 | 8 | void incrementBy(final int inc, boolean modifier); 9 | 10 | void update(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/commonsmk3/CCSource.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.commonsmk3; 2 | 3 | import com.bitwig.extension.controller.api.HardwareActionMatcher; 4 | import com.bitwig.extension.controller.api.MidiIn; 5 | 6 | public interface CCSource { 7 | int getCcValue(); 8 | 9 | HardwareActionMatcher createMatcher(final MidiIn midiIn, final int matchValue); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/display/ScreenLayout.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.display; 2 | 3 | public enum ScreenLayout { 4 | EMPTY(0), 5 | KNOB(1), 6 | BOX(2); 7 | private final int id; 8 | 9 | ScreenLayout(final int id) { 10 | this.id = id; 11 | } 12 | 13 | public int getId() { 14 | return id; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/devices/CustomValueConverter.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.devices; 2 | 3 | public interface CustomValueConverter { 4 | String convert(int value); 5 | 6 | default String convert(final DeviceParameter parameter) { 7 | final int intValue = (int) (parameter.parameter.value().get() * getIntRange()); 8 | return convert(intValue); 9 | }; 10 | 11 | int getIntRange(); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk3/LightState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk3; 2 | 3 | public enum LightState { 4 | NORMAL(0), 5 | FLASHING(1), 6 | PULSING(2); 7 | 8 | private final int channel; 9 | 10 | LightState(final int channel) { 11 | this.channel = channel; 12 | } 13 | 14 | public int getChannel() { 15 | return channel; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/commonsmk3/LightState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.commonsmk3; 2 | 3 | public enum LightState { 4 | NORMAL(0), 5 | FLASHING(1), 6 | PULSING(2); 7 | 8 | private final int channel; 9 | 10 | LightState(final int channel) { 11 | this.channel = channel; 12 | } 13 | 14 | public int getChannel() { 15 | return channel; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/layer/BaseMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.layer; 2 | 3 | public enum BaseMode { 4 | MIXER, 5 | DAW; 6 | 7 | public static BaseMode toMode(final int value) { 8 | return switch (value) { 9 | case 1 -> MIXER; 10 | case 2 -> DAW; 11 | default -> null; 12 | }; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/di/DiException.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.di; 2 | 3 | public class DiException extends RuntimeException { 4 | 5 | private static final long serialVersionUID = 1L; 6 | 7 | public DiException(final String string) { 8 | super(string); 9 | } 10 | 11 | public DiException(final String message, final Throwable cause) { 12 | super(message, cause); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/IntValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | import java.util.function.IntConsumer; 4 | 5 | public interface IntValue { 6 | int getMax(); 7 | 8 | int getMin(); 9 | 10 | void addIntValueObserver(IntConsumer callback); 11 | 12 | void addRangeObserver(RangeChangedCallback callback); 13 | 14 | int getIntValue(); 15 | 16 | String displayedValue(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/IntValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | import java.util.function.IntConsumer; 4 | 5 | public interface IntValue { 6 | int getMax(); 7 | 8 | int getMin(); 9 | 10 | void addIntValueObserver(IntConsumer callback); 11 | 12 | void addRangeObserver(RangeChangedCallback callback); 13 | 14 | int getIntValue(); 15 | 16 | String displayedValue(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/value/DoubleValueProxy.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.value; 2 | 3 | import com.bitwig.extension.callback.StringValueChangedCallback; 4 | 5 | public interface DoubleValueProxy { 6 | void set(double value); 7 | 8 | double get(); 9 | 10 | String getDisplayValue(); 11 | 12 | void addDisplayValueListener(StringValueChangedCallback listener); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/di/Activate.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.di; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.METHOD; 8 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 9 | 10 | @Retention(RUNTIME) 11 | @Target(METHOD) 12 | @Documented 13 | public @interface Activate { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/di/Deactivate.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.di; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.METHOD; 8 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 9 | 10 | @Retention(RUNTIME) 11 | @Target(METHOD) 12 | @Documented 13 | public @interface Deactivate { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/VersaKey25.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | 3 | import com.bitwig.extension.controller.api.ControllerHost; 4 | import com.bitwig.extension.controller.ControllerExtension; 5 | 6 | public class VersaKey25 extends VersaKeyCommonExtension 7 | { 8 | protected VersaKey25(final VersaKey25Definition definition, final ControllerHost host) 9 | { 10 | super(definition, host, 4); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/VersaKey49.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | 3 | import com.bitwig.extension.controller.api.ControllerHost; 4 | import com.bitwig.extension.controller.ControllerExtension; 5 | 6 | public class VersaKey49 extends VersaKeyCommonExtension 7 | { 8 | protected VersaKey49(final VersaKey49Definition definition, final ControllerHost host) 9 | { 10 | super(definition, host, 8); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/VersaKey61.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | 3 | import com.bitwig.extension.controller.api.ControllerHost; 4 | import com.bitwig.extension.controller.ControllerExtension; 5 | 6 | public class VersaKey61 extends VersaKeyCommonExtension 7 | { 8 | protected VersaKey61(final VersaKey61Definition definition, final ControllerHost host) 9 | { 10 | super(definition, host, 8); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/VersaKey88.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | 3 | import com.bitwig.extension.controller.api.ControllerHost; 4 | import com.bitwig.extension.controller.ControllerExtension; 5 | 6 | public class VersaKey88 extends VersaKeyCommonExtension 7 | { 8 | protected VersaKey88(final VersaKey88Definition definition, final ControllerHost host) 9 | { 10 | super(definition, host, 8); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/DoubleRangeValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | import java.util.function.DoubleConsumer; 4 | 5 | public interface DoubleRangeValue { 6 | double getMin(); 7 | 8 | double getMax(); 9 | 10 | void addDoubleValueObserver(DoubleConsumer callback); 11 | 12 | double getRawValue(); 13 | 14 | String displayedValue(); 15 | 16 | int scale(double v, int range); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/DoubleRangeValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | import java.util.function.DoubleConsumer; 4 | 5 | public interface DoubleRangeValue { 6 | double getMin(); 7 | 8 | double getMax(); 9 | 10 | void addDoubleValueObserver(DoubleConsumer callback); 11 | 12 | double getRawValue(); 13 | 14 | String displayedValue(); 15 | 16 | int scale(double v, int range); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/di/PostConstruct.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.di; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.METHOD; 8 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 9 | 10 | @Retention(RUNTIME) 11 | @Target({METHOD}) 12 | @Documented 13 | public @interface PostConstruct { 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/display/Arrangement.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.display; 2 | 3 | public enum Arrangement { 4 | TWO_LINES(1), 5 | THREE_LINES(2), 6 | LINE_8NAMES(3), 7 | PARAMETER(4); 8 | final int val; 9 | 10 | Arrangement(final int val) { 11 | this.val = val; 12 | } 13 | 14 | public int getVal() { 15 | return val; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/value/IObservableValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.value; 2 | 3 | import java.util.function.Consumer; 4 | 5 | public interface IObservableValue { 6 | void addValueObserver(final Consumer observer); 7 | 8 | void addDisplayObserver(Consumer observer); 9 | 10 | T get(); 11 | 12 | void set(final T value); 13 | 14 | String getDisplayString(); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/EzCreatorKeyXL.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | 3 | import com.bitwig.extension.controller.api.ControllerHost; 4 | import com.bitwig.extension.controller.ControllerExtension; 5 | 6 | public class EzCreatorKeyXL extends EzCreatorKeyCommonExtension 7 | { 8 | public EzCreatorKeyXL(final EzCreatorKeyXLDefinition definition, final ControllerHost host) 9 | { 10 | super(definition, host, 0x02); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/commons/ColorBrightness.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.commons; 2 | 3 | public enum ColorBrightness { 4 | DARKENED(0), // 5 | BRIGHT(2), // 6 | DIMMED(1), // 7 | SUPERBRIGHT(3); // 8 | 9 | private int adjust; 10 | 11 | ColorBrightness(final int adjust) { 12 | this.adjust = adjust; 13 | } 14 | 15 | public int getAdjust() { 16 | return adjust; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/RgbButton.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine; 2 | 3 | import com.bitwig.extension.controller.api.HardwareButton; 4 | import com.bitwig.extension.controller.api.MultiStateHardwareLight; 5 | 6 | public interface RgbButton { 7 | 8 | HardwareButton getHwButton(); 9 | 10 | MultiStateHardwareLight getLight(); 11 | 12 | int getMidiStatus(); 13 | 14 | int getMidiDataNr(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/commonsmk3/SpecialDevices.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.commonsmk3; 2 | 3 | import java.util.UUID; 4 | 5 | public enum SpecialDevices { 6 | DRUM("8ea97e45-0255-40fd-bc7e-94419741e9d1"); 7 | 8 | private final UUID uuid; 9 | 10 | SpecialDevices(final String uuid) { 11 | this.uuid = UUID.fromString(uuid); 12 | } 13 | 14 | public UUID getUuid() { 15 | return uuid; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/display/Arrangement.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.display; 2 | 3 | public enum Arrangement { 4 | TWO_LINES(1), 5 | THREE_LINES(2), 6 | LINE_8NAMES(3), 7 | PARAMETER(4); 8 | final int val; 9 | 10 | Arrangement(final int val) { 11 | this.val = val; 12 | } 13 | 14 | public int getVal() { 15 | return val; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/DebugOutMs.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine; 2 | 3 | import com.bitwig.extension.controller.api.ControllerHost; 4 | 5 | public class DebugOutMs { 6 | 7 | public static ControllerHost host; 8 | 9 | public static void println(final String format, final Object... args) { 10 | if (host != null) { 11 | host.println(String.format(format, args)); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/seqcommons/ClipSeqMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.seqcommons; 2 | 3 | public enum ClipSeqMode { 4 | KEYS("Poly/Key"), 5 | DRUM("Mono/Drum"); 6 | 7 | private final String displayName; 8 | 9 | ClipSeqMode(final String displayName) { 10 | this.displayName = displayName; 11 | } 12 | 13 | public String getDisplayName() { 14 | return displayName; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/value/ScaleInterface.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.value; 2 | 3 | public interface ScaleInterface { 4 | 5 | String getName(); 6 | 7 | String getShortName(); 8 | 9 | int[] getIntervals(); 10 | 11 | int toOffset(int padIndex); 12 | 13 | int toOffsetOct(final int padIndex); 14 | 15 | int getNextNote(final int startNote, final int baseNote, final int amount); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/LayerGroup.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework; 2 | 3 | public class LayerGroup 4 | { 5 | public LayerGroup(final Layer...layers) 6 | { 7 | super(); 8 | mLayers = layers; 9 | 10 | for (final Layer layer : layers) 11 | { 12 | layer.setLayerGroup(this); 13 | } 14 | } 15 | 16 | public Layer[] getLayers() 17 | { 18 | return mLayers; 19 | } 20 | 21 | private final Layer[] mLayers; 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/values/IObservableValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.values; 2 | 3 | import java.util.function.Consumer; 4 | 5 | public interface IObservableValue { 6 | void addValueObserver(final Consumer observer); 7 | 8 | void addDisplayObserver(Consumer observer); 9 | 10 | T get(); 11 | 12 | void set(final T value); 13 | 14 | String getDisplayString(); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/value/ClipFocus.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.value; 2 | 3 | public enum ClipFocus { 4 | LAUNCHER("Launcher"), 5 | ARRANGER("Arranger"); 6 | 7 | private final String displayName; 8 | 9 | ClipFocus(final String displayName) { 10 | this.displayName = displayName; 11 | } 12 | 13 | public String getDisplayName() { 14 | return displayName; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/modes/NoteFocusHandler.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine.modes; 2 | 3 | import com.bitwig.extension.controller.api.DrumPad; 4 | 5 | public interface NoteFocusHandler { 6 | public void notifyDrumPadSelected(DrumPad pad, int padOffset, int note); 7 | 8 | public void notifyNoteSelected(int note); 9 | 10 | public void notifyPadColorChanged(DrumPad pad, int index, float r, float g, float b); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/essentialMk3/color/BlinkState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.essentialMk3.color; 2 | 3 | public enum BlinkState { 4 | BLINK1((byte) 0), 5 | BLINK2((byte) 1), 6 | BLINK3((byte) 2), 7 | PULSING((byte) 3), 8 | NONE((byte) 32); 9 | private final byte code; 10 | 11 | BlinkState(final byte code) { 12 | this.code = code; 13 | } 14 | 15 | public byte getCode() { 16 | return code; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/sequencer/ClipSeqMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.sequencer; 2 | 3 | public enum ClipSeqMode { 4 | KEYS("Poly/Key"), 5 | DRUM("Mono/Drum"); 6 | 7 | private final String displayName; 8 | 9 | ClipSeqMode(final String displayName) { 10 | this.displayName = displayName; 11 | } 12 | 13 | public String getDisplayName() { 14 | return displayName; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchpadmini3/TrackMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchpadmini3; 2 | 3 | public enum TrackMode { 4 | NONE(1), 5 | STOP(7), 6 | SOLO(15), 7 | MUTE(11), 8 | ARM(7), 9 | CONTROL(27); 10 | private final int colorIndex; 11 | 12 | TrackMode(final int colorIndex) { 13 | this.colorIndex = colorIndex; 14 | } 15 | 16 | public int getColorIndex() { 17 | return colorIndex; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /doc-source/Devine/EZ-Creator Pads.md: -------------------------------------------------------------------------------- 1 | # Define EZ-Creator Pads 2 | 3 | ## Pads 4 | 5 | The pads are working and mapped in order to play well with the first 12 pads of Bitwig Studio's drum machine. 6 | 7 | ## Transport 8 | 9 | The transport buttons are working as expected. 10 | 11 | ## Fader 12 | 13 | The fader controls the first remote control of the selected device. 14 | 15 | ## Bank button 16 | 17 | This button does nothing. 18 | 19 | ## 2 Buttons next to the Bank leds 20 | 21 | They select the previous or next track. 22 | -------------------------------------------------------------------------------- /doc-source/Vault/Apex.md: -------------------------------------------------------------------------------- 1 | # Vault Apex 25, 49 and 61 2 | 3 | ## Transport 4 | 5 | Transport buttons are working. 6 | 7 | ## Keys 8 | 9 | There is a dedicated input "Apex Keys" with the key events, mod-wheel and pitch bend. 10 | 11 | ## Pads 12 | 13 | There is a dedicated input "Apex Pads" with the pad events. 14 | 15 | ## Knobs 16 | 17 | The knobs are mapped to the remote controls of the selected device. 18 | 19 | ## Faders 20 | 21 | The faders control the track volume. The last fader controls the master track volume. 22 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk3/color/BlinkState.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk3.color; 2 | 3 | public enum BlinkState { 4 | BLINK1((byte) 0), 5 | BLINK2((byte) 1), 6 | BLINK3((byte) 2), 7 | PULSING((byte) 3), 8 | NONE((byte) 32); 9 | private final byte code; 10 | 11 | BlinkState(final byte code) { 12 | this.code = code; 13 | } 14 | 15 | public byte getCode() { 16 | return code; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/di/Component.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.di; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.TYPE; 8 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 9 | 10 | @Documented 11 | @Retention(RUNTIME) 12 | @Target(TYPE) 13 | public @interface Component { 14 | String name() default ""; 15 | 16 | int priority() default 1; 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/di/Inject.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.di; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.FIELD; 8 | import static java.lang.annotation.ElementType.METHOD; 9 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 10 | 11 | @Retention(RUNTIME) 12 | @Target({FIELD, METHOD}) 13 | @Documented 14 | public @interface Inject { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk2/DAWMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk2; 2 | 3 | public enum DAWMode 4 | { 5 | MCU(0x0), 6 | HUI(0x41), 7 | Live(0x02), 8 | Logic(0x03), 9 | PT(0x44), 10 | Cubase(0x05), 11 | StudioOne(0x06), 12 | Reaper(0x08), 13 | MMC(0x0A); 14 | 15 | DAWMode(final int ID) 16 | { 17 | mID = ID; 18 | } 19 | 20 | public int getID() 21 | { 22 | return mID; 23 | } 24 | 25 | private final int mID; 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/EzCreatorCommon.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | 3 | public class EzCreatorCommon 4 | { 5 | public static final byte[] INIT_SYSEX = new byte[] { 6 | (byte)0xF0, 0x7E, 0x7F, 0x60, 0x01, 0x00, 0x7E, 0x01, 0x01, (byte)0xF7 7 | }; 8 | 9 | public static final byte[] DEINIT_SYSEX = new byte[] { 10 | (byte)0xF0, 0x7E, 0x7F, 0x60, 0x01, 0x00, 0x7E, 0x01, 0x00, (byte)0xF7 11 | }; 12 | 13 | public static final int REQUIRED_API_VERSION = 11; 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/time/TimedEvent.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.time; 2 | 3 | /** 4 | * An Event that can be processed at later time. The stop watch starts at creation of the event. 5 | * The event needs to be queued and the queue repeatedly invokes the process method. 6 | * Once the given time has passed, the event is executed and will be removed from the queue. 7 | */ 8 | public interface TimedEvent { 9 | boolean isCompleted(); 10 | 11 | void cancel(); 12 | 13 | void process(); 14 | } 15 | -------------------------------------------------------------------------------- /doc-source/Arturia/MicroLab.md: -------------------------------------------------------------------------------- 1 | # Arturia MicroLab 2 | 3 | ## About this controller 4 | 5 | This is a portable keyboard made by Arturia. 6 | It has some additional integration with Analog Labs. 7 | 8 | See https://www.arturia.com 9 | 10 | ## Preset navigation with Analog Lab 11 | 12 | Start by loading Arturia Analog Lab VST3 or VST2 instrument plugin. 13 | 14 | *Shift + Oct-/+*: loads previous/next preset 15 | 16 | *Shift + Pitchstrip*: browse filter and categories, tap to (de)activate 17 | 18 | *Shift + Modstrip*: browse presets, tap to select 19 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/presonus/faderport/Layer.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.presonus.faderport; 2 | 3 | import com.bitwig.extensions.framework.Layers; 4 | 5 | class Layer extends com.bitwig.extensions.framework.Layer 6 | { 7 | public Layer(final Layers layers, final String name) 8 | { 9 | super(layers, name); 10 | } 11 | 12 | public void bind(final Display display, final DisplayTarget displayTarget) 13 | { 14 | addBinding(new DisplayBinding(display, displayTarget)); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/values/MidiStatus.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.values; 2 | 3 | public enum MidiStatus { 4 | 5 | NOTE_OFF(0x80), 6 | NOTE_ON(0x90), 7 | CC(0xB0); 8 | 9 | private final int value; 10 | 11 | MidiStatus(final int value) { 12 | this.value = value; 13 | } 14 | 15 | public int getStatus(final int channel) { 16 | return this.value | channel; 17 | } 18 | 19 | public int getValue() { 20 | return value; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 14 | hs_err_pid* 15 | 16 | bitwig-extensions.iml 17 | 18 | /target/ 19 | /build/ 20 | /.idea 21 | /.classpath 22 | /.project 23 | /${bitwig.extension.directory}/ 24 | /${bitwig.extension.directory}/Bitwig.bwextension 25 | /.gradle/ 26 | /out 27 | /bin/ 28 | /.settings/ 29 | .DS_Store 30 | .idea/codeStyles 31 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/devices/SpecialDevices.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.devices; 2 | 3 | import java.util.UUID; 4 | 5 | public enum SpecialDevices { 6 | EQ_PLUS("e4815188-ba6f-4d14-bcfc-2dcb8f778ccb"), // 7 | ARPEGGIATOR("4d407a2b-c91b-4e4c-9a89-c53c19fe6251"), // 8 | DRUM("8ea97e45-0255-40fd-bc7e-94419741e9d1"); 9 | 10 | private UUID uuid; 11 | 12 | private SpecialDevices(final String uuid) { 13 | this.uuid = UUID.fromString(uuid); 14 | } 15 | 16 | public UUID getUuid() { 17 | return uuid; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/MackieMcuProXt1ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class MackieMcuProXt1ExtensionDefinition extends MackieMcuProExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("fa145533-5f45-4e19-81ad-1de77ffa2daa"); 7 | 8 | public MackieMcuProXt1ExtensionDefinition() { 9 | super(1); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/MackieMcuProXt2ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class MackieMcuProXt2ExtensionDefinition extends MackieMcuProExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("fa145533-5f45-4e19-81ad-1de77ffa2df1"); 7 | 8 | public MackieMcuProXt2ExtensionDefinition() { 9 | super(2); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/MackieMcuProXt3ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class MackieMcuProXt3ExtensionDefinition extends MackieMcuProExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("fa145533-5f45-4e19-81ad-1de77ffa2dcc"); 7 | 8 | public MackieMcuProXt3ExtensionDefinition() { 9 | super(3); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/maudio/oxygenpro/definition/OxygenPro49ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.maudio.oxygenpro.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class OxygenPro49ExtensionDefinition extends OxygenProExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("1bb00489-4322-45c7-9b07-48d21393a579"); 7 | 8 | @Override 9 | public UUID getId() { 10 | return DRIVER_ID; 11 | } 12 | 13 | @Override 14 | protected String getKeys() { 15 | return "49"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/maudio/oxygenpro/definition/OxygenPro61ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.maudio.oxygenpro.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class OxygenPro61ExtensionDefinition extends OxygenProExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("b75a10e5-3f23-4b17-9f32-23c0ff99e0bc"); 7 | 8 | @Override 9 | public UUID getId() { 10 | return DRIVER_ID; 11 | } 12 | 13 | @Override 14 | protected String getKeys() { 15 | return "61"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/devices/SpecialDevices.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.devices; 2 | 3 | import java.util.UUID; 4 | 5 | public enum SpecialDevices { 6 | EQ_PLUS("e4815188-ba6f-4d14-bcfc-2dcb8f778ccb"), // 7 | ARPEGGIATOR("4d407a2b-c91b-4e4c-9a89-c53c19fe6251"), // 8 | DRUM("8ea97e45-0255-40fd-bc7e-94419741e9d1"); 9 | 10 | private UUID uuid; 11 | 12 | SpecialDevices(final String uuid) { 13 | this.uuid = UUID.fromString(uuid); 14 | } 15 | 16 | public UUID getUuid() { 17 | return uuid; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/seqcommons/INoteStepSlot.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.seqcommons; 2 | 3 | import java.util.Collection; 4 | 5 | import com.bitwig.extension.controller.api.NoteStep; 6 | 7 | public interface INoteStepSlot { 8 | void updateNote(NoteStep step); 9 | 10 | void clear(); 11 | 12 | boolean hasNotes(); 13 | 14 | boolean hasSustainNotes(); 15 | 16 | Collection steps(); 17 | 18 | NoteStepSlot copy(); 19 | 20 | boolean containsNote(int key); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk3/layer/ControlMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk3.layer; 2 | 3 | import com.bitwig.extensions.controllers.novation.launchkey_mk3.control.ModeType; 4 | 5 | public enum ControlMode implements ModeType { 6 | DEVICE(2), 7 | VOLUME(1), 8 | SEND_A(4), 9 | SEND_B(5), 10 | PAN(3); 11 | 12 | private final int id; 13 | 14 | ControlMode(final int id) { 15 | this.id = id; 16 | } 17 | 18 | @Override 19 | public int getId() { 20 | return id; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/display/ScreenTarget.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.display; 2 | 3 | public enum ScreenTarget { 4 | STATIONARY(0x20), 5 | GLOBAL(0x21), 6 | DAW(0x22), 7 | DAW_DRUM(0x23), 8 | MIXER(0x24), 9 | PLUGIN(0x25), 10 | SENDS(0x26), 11 | TRANSPORT(0x27), 12 | VOLUME(0x28); 13 | final byte id; 14 | 15 | ScreenTarget(final int id) { 16 | this.id = (byte) id; 17 | } 18 | 19 | public byte getId() { 20 | return id; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/ssl/SslUf8Plus1ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.ssl; 2 | 3 | import java.util.UUID; 4 | 5 | public class SslUf8Plus1ExtenderExtensionDefinition extends SslUf8ExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("31c41848-541d-4119-8553-0c5690ea10e8"); 7 | 8 | public SslUf8Plus1ExtenderExtensionDefinition() { 9 | super(1, 0); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/ssl/SslUf8Plus2ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.ssl; 2 | 3 | import java.util.UUID; 4 | 5 | public class SslUf8Plus2ExtenderExtensionDefinition extends SslUf8ExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("984c4516-1b71-48ee-9ea3-f004662a904c"); 7 | 8 | public SslUf8Plus2ExtenderExtensionDefinition() { 9 | super(2, 0); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/ssl/SslUf8Plus3ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.ssl; 2 | 3 | import java.util.UUID; 4 | 5 | public class SslUf8Plus3ExtenderExtensionDefinition extends SslUf8ExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("de4471bd-2eb7-4991-b74a-307b3d5d2338"); 7 | 8 | public SslUf8Plus3ExtenderExtensionDefinition() { 9 | super(3, 0); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/IconQconProG2X1ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconQconProG2X1ExtensionDefinition extends IconQconProG2ExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("d32bead3-83e4-4dc2-90f8-eb3a1a847bf0"); 7 | 8 | public IconQconProG2X1ExtensionDefinition() { 9 | super(1); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return IconQconProG2X1ExtensionDefinition.DRIVER_ID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/IconQconProG2X2ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconQconProG2X2ExtensionDefinition extends IconQconProG2ExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("d32bead3-83e4-4dc2-90f8-eb3a1a847bf1"); 7 | 8 | public IconQconProG2X2ExtensionDefinition() { 9 | super(2); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return IconQconProG2X2ExtensionDefinition.DRIVER_ID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/IconQconProG2X3ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconQconProG2X3ExtensionDefinition extends IconQconProG2ExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("807d0bf1-9560-494f-a3a7-a24cf25db51c"); 7 | 8 | public IconQconProG2X3ExtensionDefinition() { 9 | super(3); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return IconQconProG2X3ExtensionDefinition.DRIVER_ID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/IconQconProXXt1ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconQconProXXt1ExtensionDefinition extends IconQconProXExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("d32bead3-83e4-4dc2-90f8-eb3a1a847b5e"); 7 | 8 | public IconQconProXXt1ExtensionDefinition() { 9 | super(1); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return IconQconProXXt1ExtensionDefinition.DRIVER_ID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/IconQconProXXt2ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconQconProXXt2ExtensionDefinition extends IconQconProXExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("d32bead3-83e4-4dc2-90f8-eb3a1a847b5f"); 7 | 8 | public IconQconProXXt2ExtensionDefinition() { 9 | super(2); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return IconQconProXXt2ExtensionDefinition.DRIVER_ID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/definition/IconQconProXXt3ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.definition; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconQconProXXt3ExtensionDefinition extends IconQconProXExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("d32bead3-83e4-4dc2-90f8-eb3a1a847b60"); 7 | 8 | public IconQconProXXt3ExtensionDefinition() { 9 | super(3); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return IconQconProXXt3ExtensionDefinition.DRIVER_ID; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/IEnumDisplayValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | import com.bitwig.extensions.framework.values.BasicStringValue; 4 | import com.bitwig.extensions.framework.values.IntValueObject; 5 | 6 | public interface IEnumDisplayValue { 7 | BasicStringValue getDisplayValue(); 8 | 9 | IntValueObject getRingValue(); 10 | 11 | void increment(int inc); 12 | 13 | void setIndex(int index); 14 | 15 | String getEnumValue(); 16 | 17 | void reset(); 18 | 19 | void stepRoundRobin(); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/display/ScreenTarget.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.display; 2 | 3 | public enum ScreenTarget { 4 | STATIONARY(0x20), 5 | GLOBAL(0x21), 6 | DAW(0x22), 7 | DAW_DRUM(0x23), 8 | MIXER(0x24), 9 | PLUGIN(0x25), 10 | SENDS(0x26), 11 | TRANSPORT(0x27), 12 | VOLUME(0x28); 13 | final byte id; 14 | 15 | ScreenTarget(final int id) { 16 | this.id = (byte) id; 17 | } 18 | 19 | public byte getId() { 20 | return id; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/sequencer/INoteStepSlot.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.sequencer; 2 | 3 | import java.util.Collection; 4 | 5 | import com.bitwig.extension.controller.api.NoteStep; 6 | 7 | public interface INoteStepSlot { 8 | void updateNote(NoteStep step); 9 | 10 | void clear(); 11 | 12 | boolean hasNotes(); 13 | 14 | boolean hasSustainNotes(); 15 | 16 | Collection steps(); 17 | 18 | NoteStepSlot copy(); 19 | 20 | boolean containsNote(int key); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/reloop/GlobalStates.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.reloop; 2 | 3 | import com.bitwig.extensions.framework.values.BooleanValueObject; 4 | 5 | public class GlobalStates { 6 | 7 | private final BooleanValueObject shiftState = new BooleanValueObject(); 8 | 9 | private final BooleanValueObject ccState = new BooleanValueObject(); 10 | 11 | public BooleanValueObject getShiftState() { 12 | return shiftState; 13 | } 14 | 15 | public BooleanValueObject getCcState() { 16 | return ccState; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/EncoderMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4; 2 | 3 | public enum EncoderMode { 4 | PLUGIN, 5 | MIXER, 6 | SENDS, 7 | TRANSPORT, 8 | CUSTOM; 9 | 10 | EncoderMode() { 11 | } 12 | 13 | public static EncoderMode toMode(final int id) { 14 | return switch (id) { 15 | case 1 -> MIXER; 16 | case 2 -> PLUGIN; 17 | case 5 -> TRANSPORT; 18 | case 4 -> SENDS; 19 | default -> CUSTOM; 20 | }; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/icon/IconV1mPlus1ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.icon; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconV1mPlus1ExtenderExtensionDefinition extends IconV1mExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("db102763-745b-476a-a6ee-f099c3ad1d5e"); 7 | 8 | public IconV1mPlus1ExtenderExtensionDefinition() { 9 | super(1); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/icon/IconV1mPlus2ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.icon; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconV1mPlus2ExtenderExtensionDefinition extends IconV1mExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("ffc8800a-2801-45e0-80cb-928684d83cc9"); 7 | 8 | public IconV1mPlus2ExtenderExtensionDefinition() { 9 | super(2); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/icon/IconV1mPlus3ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.icon; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconV1mPlus3ExtenderExtensionDefinition extends IconV1mExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("defe335e-5828-4c9c-a2f7-8824308c9d7a"); 7 | 8 | public IconV1mPlus3ExtenderExtensionDefinition() { 9 | super(3); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/section/LayerStateHandler.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.section; 2 | 3 | import com.bitwig.extensions.controllers.mackie.configurations.LayerConfiguration; 4 | import com.bitwig.extensions.controllers.mackie.display.DisplayLayer; 5 | import com.bitwig.extensions.framework.Layer; 6 | 7 | public interface LayerStateHandler { 8 | Layer getButtonLayer(); 9 | 10 | LayerConfiguration getCurrentConfig(); 11 | 12 | DisplayLayer getActiveDisplayLayer(); 13 | 14 | DisplayLayer getBottomDisplayLayer(); 15 | 16 | boolean hasBottomDisplay(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/mackie/MackieMcuPro1ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.mackie; 2 | 3 | import java.util.UUID; 4 | 5 | public class MackieMcuPro1ExtenderExtensionDefinition extends MackieMcuProExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("42133b66-3870-4e4c-a833-f3b1dd7389f4"); 7 | 8 | public MackieMcuPro1ExtenderExtensionDefinition() { 9 | super(1); 10 | } 11 | 12 | @Override 13 | public UUID getId() { 14 | return DRIVER_ID; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/commonsmk3/LpHwElements.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.commonsmk3; 2 | 3 | import java.util.List; 4 | 5 | import com.bitwig.extensions.controllers.novation.commonsmk3.DrumButton; 6 | import com.bitwig.extensions.controllers.novation.commonsmk3.GridButton; 7 | import com.bitwig.extensions.controllers.novation.commonsmk3.LabeledButton; 8 | 9 | public interface LpHwElements { 10 | GridButton getGridButton(int row, int col); 11 | 12 | List getDrumGridButtons(); 13 | 14 | List getSceneLaunchButtons(); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/bindings/RingDisplayDisabledBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.bindings; 2 | 3 | import com.bitwig.extensions.controllers.mcu.control.RingDisplay; 4 | import com.bitwig.extensions.controllers.mcu.control.RingDisplayType; 5 | 6 | public class RingDisplayDisabledBinding extends RingDisplayBinding { 7 | 8 | public RingDisplayDisabledBinding(final RingDisplay target, final RingDisplayType type) { 9 | super(target, type, type); 10 | } 11 | 12 | @Override 13 | protected int calcValue() { 14 | return 0; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/common/SimpleLedColor.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.common; 2 | 3 | public enum SimpleLedColor 4 | { 5 | RedLow(13), Red(15), 6 | AmberLow(29), Amber(63), 7 | Yellow(62), YellowLow(45), 8 | GreenLow(28), Green(60), 9 | 10 | RedFlash(11), AmberFlash(59), YellowFlash(58), GreenFlash(56), 11 | 12 | Off(12); 13 | 14 | public int value() 15 | { 16 | return mColorValue; 17 | } 18 | 19 | private final int mColorValue; 20 | 21 | SimpleLedColor(int colorValue) 22 | { 23 | mColorValue = colorValue; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchpadmini3/layers/ControlMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchpadmini3.layers; 2 | 3 | public enum ControlMode { 4 | NONE, 5 | VOLUME, 6 | PAN, 7 | SENDS, 8 | SENDS_A(SENDS), 9 | SENDS_B(SENDS), 10 | DEVICE; 11 | 12 | private final ControlMode refMode; 13 | 14 | ControlMode() { 15 | refMode = this; 16 | } 17 | 18 | ControlMode(final ControlMode refMode) { 19 | this.refMode = refMode; 20 | } 21 | 22 | public ControlMode getRefMode() { 23 | return refMode; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /.github/workflows/gradle.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Gradle 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle 3 | 4 | name: Java CI with Gradle 5 | 6 | on: [push, pull_request, workflow_dispatch] 7 | 8 | jobs: 9 | build: 10 | 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: actions/checkout@v3 15 | - name: Set up JDK 21 16 | uses: actions/setup-java@v4 17 | with: 18 | java-version: '21' 19 | distribution: 'microsoft' 20 | - name: Build with Gradle 21 | run: ./gradlew check 22 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/CcConstValues.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3; 2 | 3 | public enum CcConstValues { 4 | PAGE_UP(0x6A), 5 | PAGE_DOWN(0x6B), 6 | TRACK_LEFT(0x67), 7 | TRACK_RIGHT(0x66), 8 | DAW_SPEC(0x68), 9 | SOLO_ARM_MODE(0x41), 10 | MUTE_SELECT_MODE(0x42), 11 | PLAY(0x74), 12 | RECORD(0x76); 13 | 14 | private final int ccNr; 15 | 16 | CcConstValues(final int ccNr) { 17 | this.ccNr = ccNr; 18 | } 19 | 20 | public int getCcNr() { 21 | return ccNr; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/sequencer/SequencerSource.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.sequencer; 2 | 3 | import com.bitwig.extension.controller.api.BeatTimeFormatter; 4 | import com.bitwig.extensions.controllers.novation.launchkey_mk4.values.IntValue; 5 | import com.bitwig.extensions.controllers.novation.launchkey_mk4.values.ValueSet; 6 | 7 | public interface SequencerSource { 8 | boolean isActive(); 9 | 10 | ValueSet getGridResolution(); 11 | 12 | BeatTimeFormatter getBeatTimeFormatter(); 13 | 14 | IntValue getMonoKeyNoteFocus(); 15 | } 16 | -------------------------------------------------------------------------------- /doc-source/Devine/EZ-Creator Fade.md: -------------------------------------------------------------------------------- 1 | # Device EZ-Creator Fade 2 | 3 | ## Transport 4 | 5 | The transport buttons are working. 6 | 7 | ## Channel controls 8 | 9 | Each column contains a knob which controls the track's pan. 10 | Then comes a vertical fader which controls the track's volume. 11 | And finally a button which toggles the track's mute. 12 | 13 | The first 8 columns control the 8 tracks of the track bank. You can move the track bank by using the two buttons on the right of the four leds on the bottom. 14 | 15 | The last column control the master track. 16 | 17 | ## AB Crossfade 18 | 19 | The horizontal crossfade controls the AB crossfade. 20 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/minilab3/DisplayMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.minilab3; 2 | 3 | enum DisplayMode { 4 | TRACK("CHANNEL RACK"), 5 | PARAM, 6 | PARAM_PAGE, 7 | SCENE, 8 | BROWSER("BROWSER"), 9 | BROWSER_INFO, 10 | LOOP_VALUE, 11 | STATE_INFO, 12 | INIT, 13 | TEMPO; 14 | 15 | private final String text; 16 | 17 | DisplayMode() { 18 | text = name(); 19 | } 20 | 21 | DisplayMode(final String text) { 22 | this.text = text; 23 | } 24 | 25 | public String getText() { 26 | return text; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/seqcommons/SequencerSource.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.seqcommons; 2 | 3 | import com.bitwig.extension.controller.api.BeatTimeFormatter; 4 | import com.bitwig.extensions.controllers.novation.slmk3.value.IntValue; 5 | import com.bitwig.extensions.controllers.novation.slmk3.value.ValueSet; 6 | 7 | public interface SequencerSource { 8 | boolean isActive(); 9 | 10 | ValueSet getGridResolution(); 11 | 12 | int getHeldIndex(); 13 | 14 | BeatTimeFormatter getBeatTimeFormatter(); 15 | 16 | IntValue getMonoKeyNoteFocus(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/layer/ControlMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.layer; 2 | 3 | public enum ControlMode { 4 | VOLUME(true), 5 | PAN(true), 6 | SENDS(true), 7 | TRACK, 8 | STD_PLUGIN, 9 | EQ, 10 | DEVICE, 11 | TRACK_REMOTES, 12 | PROJECT_REMOTES, 13 | MENU; 14 | 15 | private final boolean isMixer; 16 | 17 | ControlMode() { 18 | this(false); 19 | } 20 | 21 | ControlMode(final boolean isMixer) { 22 | this.isMixer = isMixer; 23 | } 24 | 25 | public boolean isMixer() { 26 | return isMixer; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk3/layer/PadMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk3.layer; 2 | 3 | import com.bitwig.extensions.controllers.novation.launchkey_mk3.control.ModeType; 4 | 5 | public enum PadMode implements ModeType { 6 | SESSION(2), 7 | DRUM(1), 8 | SCALE_CHORD(3), 9 | USER_CHORD(4), 10 | CUSTOM1(5), 11 | CUSTOM2(6), 12 | CUSTOM3(7), 13 | CUSTOM4(8); 14 | 15 | private final int id; 16 | 17 | PadMode(final int id) { 18 | this.id = id; 19 | } 20 | 21 | @Override 22 | public int getId() { 23 | return id; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/time/AbstractTimedEvent.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.time; 2 | 3 | public abstract class AbstractTimedEvent implements TimedEvent { 4 | protected final long startTime; 5 | protected boolean completed; 6 | protected final long delayTime; 7 | 8 | public AbstractTimedEvent(final long delayTime) { 9 | startTime = System.currentTimeMillis(); 10 | completed = false; 11 | this.delayTime = delayTime; 12 | } 13 | 14 | public void cancel() { 15 | completed = true; 16 | } 17 | 18 | public boolean isCompleted() { 19 | return completed; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/display/RingDisplayType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.display; 2 | 3 | public enum RingDisplayType { 4 | PAN_FILL(17, 10), // 5 | FILL_LR(33, 10), // 6 | SINGLE(1, 10), // 7 | CENTER_FILL(49, 10), // 8 | FILL_LR_0(32, 11); // 9 | private final int offset; 10 | private final int range; 11 | 12 | RingDisplayType(final int offset, final int range) { 13 | this.offset = offset; 14 | this.range = range; 15 | } 16 | 17 | public int getOffset() { 18 | return offset; 19 | } 20 | 21 | public int getRange() { 22 | return range; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/presonus/faderport/DisplayBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.presonus.faderport; 2 | 3 | import com.bitwig.extensions.framework.Binding; 4 | 5 | class DisplayBinding extends Binding 6 | { 7 | public DisplayBinding(final Display source, final DisplayTarget target) 8 | { 9 | super(source, target); 10 | } 11 | 12 | @Override 13 | protected void deactivate() 14 | { 15 | getSource().setDisplayTarget(null); 16 | } 17 | 18 | @Override 19 | protected void activate() 20 | { 21 | getSource().setDisplayTarget(getTarget()); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchpad_pro/Overlay.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchpad_pro; 2 | 3 | abstract class Overlay extends Mode 4 | { 5 | Overlay(final LaunchpadProControllerExtension driver, final String name) 6 | { 7 | super(driver, name); 8 | } 9 | 10 | @Override 11 | final protected String getModeDescription() 12 | { 13 | return null; 14 | } 15 | 16 | @Override 17 | void updateKeyTranslationTable(final Integer[] table) 18 | { 19 | /* Don't send notes on the bottom overlay */ 20 | for (int x = 0; x < 8; ++x) 21 | table[11 + x] = -1; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/control/RingDisplayType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.control; 2 | 3 | public enum RingDisplayType { 4 | PAN_FILL(17, 10), // 5 | FILL_LR(33, 10), // 6 | SINGLE(1, 10), // 7 | CENTER_FILL(49, 10), // 8 | FILL_LR_0(32, 11); // 9 | private final int offset; 10 | private final int range; 11 | 12 | RingDisplayType(final int offset, final int range) { 13 | this.offset = offset; 14 | this.range = range; 15 | } 16 | 17 | public int getOffset() { 18 | return offset; 19 | } 20 | 21 | public int getRange() { 22 | return range; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchpadmini3/LpMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchpadmini3; 2 | 3 | public enum LpMode { 4 | SESSION(0, 0x14), KEYS(0x5, 0), DRUMS(0x4, 0), CUSTOM(0x6, 0), MIXER(0x17, 0x3E), OVERVIEW(0x18, 0x26); 5 | 6 | private final int buttonColor; 7 | final int modeId; 8 | 9 | LpMode(final int modeId, final int buttonColor) { 10 | this.modeId = modeId; 11 | this.buttonColor = buttonColor; 12 | } 13 | 14 | public int getModeId() { 15 | return modeId; 16 | } 17 | 18 | public int getButtonColor() { 19 | return buttonColor; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/time/TimedDelayEvent.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.time; 2 | 3 | public class TimedDelayEvent extends AbstractTimedEvent { 4 | private final Runnable timedAction; 5 | 6 | public TimedDelayEvent(final Runnable timedAction, final long delayTime) { 7 | super(delayTime); 8 | this.timedAction = timedAction; 9 | } 10 | 11 | public void process() { 12 | if (completed) { 13 | return; 14 | } 15 | final long passedTime = System.currentTimeMillis() - startTime; 16 | if (passedTime >= delayTime) { 17 | timedAction.run(); 18 | completed = true; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/display/KnobMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.display; 2 | 3 | public enum KnobMode { 4 | DEVICE, 5 | TRACK, 6 | PROJECT, 7 | PAN, 8 | OPTION, 9 | SEND, 10 | DRUM_VOLUME(true), 11 | DRUM_PAN(true), 12 | DRUM_SENDS(true), 13 | SEQUENCER, 14 | OPTION_SHIFT; 15 | 16 | final boolean drumMode; 17 | 18 | KnobMode() { 19 | this(false); 20 | } 21 | 22 | KnobMode(final boolean isDrumMode) { 23 | this.drumMode = isDrumMode; 24 | } 25 | 26 | public boolean isDrumMode() { 27 | return drumMode; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk3/DelayedTask.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk3; 2 | 3 | public class DelayedTask { 4 | 5 | private final int delayTime; 6 | private final Runnable action; 7 | private final long startTime; 8 | 9 | public DelayedTask(final int delayTime, final Runnable action) { 10 | this.delayTime = delayTime; 11 | this.action = action; 12 | startTime = System.currentTimeMillis(); 13 | } 14 | 15 | public boolean expired() { 16 | return System.currentTimeMillis() - startTime > delayTime; 17 | } 18 | 19 | public void execute() { 20 | action.run(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk3/display/ButtonDisplayType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk3.display; 2 | 3 | public enum ButtonDisplayType { 4 | OFF(0), 5 | SIMPLE(1), 6 | TOGGLE_OFF(2), 7 | TOGGLE_ON(3), 8 | TAB_FOLDED(4), 9 | TAB_FOLDED_DIS(5), 10 | TAB_UNFOLDED(6), 11 | TAB_UNFOLDED_DIS(7), 12 | ICON_TAB_FOLDED(8), 13 | ICON_TAB_UNFOLDED(9), 14 | SIMPLE_ICON(10), 15 | TOGGLE_ICON(11); 16 | 17 | private final int id; 18 | 19 | ButtonDisplayType(final int id) { 20 | this.id = id; 21 | } 22 | 23 | public int getId() { 24 | return id; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/akai/apc/common/led/LedBehavior.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.akai.apc.common.led; 2 | 3 | public enum LedBehavior { 4 | LIGHT_10(0), 5 | LIGHT_25(1), 6 | LIGHT_50(2), 7 | LIGHT_60(3), 8 | LIGHT_75(4), 9 | LIGHT_90(5), 10 | FULL(6), 11 | PULSE_16(7), 12 | PULSE_8(8), 13 | PULSE_4(9), 14 | PULSE_2(10), 15 | BLINK_24(11), 16 | BLINK_16(12), 17 | BLINK_8(13), 18 | BLINK_4(14), 19 | BLINK_2(15); 20 | final int code; 21 | 22 | LedBehavior(int code) { 23 | this.code = code; 24 | } 25 | 26 | public int getCode() { 27 | return code; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/devices/SslPlugins.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.devices; 2 | 3 | public enum SslPlugins { 4 | 5 | S4K_B("56535453344B4273736C20346B206200"), 6 | S4K_E("56535453344B4573736C20346B206500"), 7 | METER("5653544D54524273736C206D65746572"), 8 | BUS_COMPRESSOR("5653544E42433273736C206E61746976"), 9 | CHANNEL_STRIP("5653544E43533273736C206E61746976"), 10 | LINK_360("5653543336304C73736C20333630206C"); 11 | 12 | private final String id; 13 | 14 | SslPlugins(final String id) { 15 | this.id = id; 16 | } 17 | 18 | public String getId() { 19 | return id; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/LayoutType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.komplete; 2 | 3 | public enum LayoutType { 4 | LAUNCHER("MIX"), // 5 | ARRANGER("ARRANGE"); 6 | 7 | private final String name; 8 | 9 | LayoutType(final String name) { 10 | this.name = name; 11 | } 12 | 13 | public static LayoutType toType(final String layoutName) { 14 | for (final LayoutType layoutType : LayoutType.values()) { 15 | if (layoutType.name.equals(layoutName)) { 16 | return layoutType; 17 | } 18 | } 19 | return LAUNCHER; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/config/EncoderBehavior.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.config; 2 | 3 | public enum EncoderBehavior { 4 | ACCEL, // Signed bit 5 | STEP, // 1 and 127 ; 6 | STEP_1_65(1, 65); 7 | private final int upValue; 8 | private final int downValue; 9 | 10 | EncoderBehavior() { 11 | this(1, -1); 12 | } 13 | 14 | EncoderBehavior(final int upValue, final int downValue) { 15 | this.upValue = upValue; 16 | this.downValue = downValue; 17 | } 18 | 19 | public int getDownValue() { 20 | return downValue; 21 | } 22 | 23 | public int getUpValue() { 24 | return upValue; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschinemikro/layers/LedBehavior.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschinemikro.layers; 2 | 3 | public enum LedBehavior { 4 | LIGHT_10(0), 5 | LIGHT_25(1), 6 | LIGHT_50(2), 7 | LIGHT_60(3), 8 | LIGHT_75(4), 9 | LIGHT_90(5), 10 | FULL(6), 11 | PULSE_16(7), 12 | PULSE_8(8), 13 | PULSE_4(9), 14 | PULSE_2(10), 15 | BLINK_24(11), 16 | BLINK_16(12), 17 | BLINK_8(13), 18 | BLINK_4(14), 19 | BLINK_2(15); 20 | final int code; 21 | 22 | LedBehavior(final int code) { 23 | this.code = code; 24 | } 25 | 26 | public int getCode() { 27 | return code; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/presonus/faderport/DisplayTarget.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.presonus.faderport; 2 | 3 | public interface DisplayTarget 4 | { 5 | int getBarValue(); 6 | 7 | default String getText(final int line) 8 | { 9 | return ""; 10 | } 11 | 12 | default int getTextAlignment(final int line) 13 | { 14 | return 0; 15 | } 16 | 17 | default boolean isTextInverted(final int line) 18 | { 19 | return false; 20 | } 21 | 22 | default ValueBarMode getValueBarMode() 23 | { 24 | return ValueBarMode.Normal; 25 | } 26 | 27 | default DisplayMode getMode() 28 | { 29 | return DisplayMode.Default; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/FocusMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine; 2 | 3 | /** 4 | * Preset Modes enumerator. 5 | */ 6 | public enum FocusMode { 7 | LAUNCHER("Launcher"), ARRANGER("Arranger"); 8 | private String descriptor; 9 | 10 | private FocusMode(final String descriptor) { 11 | this.descriptor = descriptor; 12 | } 13 | 14 | public static FocusMode toMode(final String s) { 15 | for (final FocusMode mode : FocusMode.values()) { 16 | if (mode.getDescriptor().equals(s)) { 17 | return mode; 18 | } 19 | } 20 | return ARRANGER; 21 | } 22 | 23 | public String getDescriptor() { 24 | return descriptor; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/icon/IconP1mPlus1ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.icon; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconP1mPlus1ExtenderExtensionDefinition extends IconP1mExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("f7166b22-b3de-4c8f-8173-06e0995f102e"); 7 | 8 | public IconP1mPlus1ExtenderExtensionDefinition() { 9 | this(1); 10 | } 11 | 12 | public IconP1mPlus1ExtenderExtensionDefinition(final int nrOfExtenders) { 13 | super(nrOfExtenders); 14 | } 15 | 16 | @Override 17 | public UUID getId() { 18 | return DRIVER_ID; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/icon/IconP1mPlus2ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.icon; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconP1mPlus2ExtenderExtensionDefinition extends IconP1mExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("aa9bdf05-be3f-45f1-b9d2-4ec2016c2851"); 7 | 8 | public IconP1mPlus2ExtenderExtensionDefinition() { 9 | this(2); 10 | } 11 | 12 | public IconP1mPlus2ExtenderExtensionDefinition(final int nrOfExtenders) { 13 | super(nrOfExtenders); 14 | } 15 | 16 | @Override 17 | public UUID getId() { 18 | return DRIVER_ID; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/icon/IconP1mPlus3ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.icon; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconP1mPlus3ExtenderExtensionDefinition extends IconP1mExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("358db9a4-b7e7-43f4-8a3d-76590c3a28e3"); 7 | 8 | public IconP1mPlus3ExtenderExtensionDefinition() { 9 | this(3); 10 | } 11 | 12 | public IconP1mPlus3ExtenderExtensionDefinition(final int nrOfExtenders) { 13 | super(nrOfExtenders); 14 | } 15 | 16 | @Override 17 | public UUID getId() { 18 | return DRIVER_ID; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/values/SlotUtil.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.values; 2 | 3 | import com.bitwig.extension.controller.api.ClipLauncherSlot; 4 | 5 | public class SlotUtil { 6 | 7 | public static void prepareSlot(final ClipLauncherSlot cs) { 8 | cs.exists().markInterested(); 9 | cs.hasContent().markInterested(); 10 | cs.isPlaybackQueued().markInterested(); 11 | cs.isPlaying().markInterested(); 12 | cs.isRecording().markInterested(); 13 | cs.isRecordingQueued().markInterested(); 14 | cs.isSelected().markInterested(); 15 | cs.isStopQueued().markInterested(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/util/NoteInputUtils.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.util; 2 | 3 | public class NoteInputUtils 4 | { 5 | public static Integer[] NO_NOTES; 6 | public static Integer[] ALL_NOTES; 7 | public static Integer[] NORMAL_VELOCITY; 8 | public static Integer[] FULL_VELOCITY; 9 | 10 | static 11 | { 12 | NO_NOTES = new Integer[128]; 13 | ALL_NOTES = new Integer[128]; 14 | NORMAL_VELOCITY = new Integer[128]; 15 | FULL_VELOCITY = new Integer[128]; 16 | 17 | for(int i=0; i<128; i++) 18 | { 19 | NO_NOTES[i] = -1; 20 | ALL_NOTES[i] = i; 21 | NORMAL_VELOCITY[i] = i; 22 | FULL_VELOCITY[i] = i > 0 ? 127 : 0; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/Midi.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie; 2 | 3 | public class Midi { 4 | public static final int NOTE_OFF = 128; 5 | public static final int NOTE_ON = 144; 6 | public static final int POLY_AT = 160; 7 | public static final int CC = 176; 8 | public static final int PROG_CHANGE = 192; 9 | public static final int CHANNEL_AT = 0xD0; 10 | public static final int PITCH_BEND = 224; 11 | public static final int SYS_EX_START = 0xF0; 12 | public static final int SYS_EX_END = 0XF7; 13 | public static final int SNYC_CLOCK = 248; 14 | public static final int SNYC_START = 250; 15 | public static final int SNYC_STOP = 252; 16 | public static final int SNYC_CONTINUE = 251; 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/BooleanObject.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework; 2 | 3 | import java.util.function.BooleanSupplier; 4 | 5 | public class BooleanObject implements BooleanSupplier 6 | { 7 | public BooleanObject(final boolean value) 8 | { 9 | super(); 10 | 11 | mValue = value; 12 | } 13 | 14 | public BooleanObject() 15 | { 16 | this(false); 17 | } 18 | 19 | @Override 20 | public boolean getAsBoolean() 21 | { 22 | return mValue; 23 | } 24 | 25 | public void setValue(final boolean value) 26 | { 27 | mValue = value; 28 | } 29 | 30 | public void toggle() 31 | { 32 | mValue = !mValue; 33 | } 34 | 35 | private boolean mValue; 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/icon/IconP1NanoPlus1ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.icon; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconP1NanoPlus1ExtenderExtensionDefinition extends IconP1NanoExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("3fb9dd44-f934-41e4-b5c2-83842d1cf526"); 7 | 8 | public IconP1NanoPlus1ExtenderExtensionDefinition() { 9 | this(1); 10 | } 11 | 12 | public IconP1NanoPlus1ExtenderExtensionDefinition(final int nrOfExtenders) { 13 | super(nrOfExtenders); 14 | } 15 | 16 | @Override 17 | public UUID getId() { 18 | return DRIVER_ID; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/icon/IconP1NanoPlus2ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.icon; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconP1NanoPlus2ExtenderExtensionDefinition extends IconP1NanoExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("6208f5aa-017c-4d60-8635-1d1c4a04478a"); 7 | 8 | public IconP1NanoPlus2ExtenderExtensionDefinition() { 9 | this(2); 10 | } 11 | 12 | public IconP1NanoPlus2ExtenderExtensionDefinition(final int nrOfExtenders) { 13 | super(nrOfExtenders); 14 | } 15 | 16 | @Override 17 | public UUID getId() { 18 | return DRIVER_ID; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/definitions/icon/IconP1NanoPlus3ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.definitions.icon; 2 | 3 | import java.util.UUID; 4 | 5 | public class IconP1NanoPlus3ExtenderExtensionDefinition extends IconP1NanoExtensionDefinition { 6 | private static final UUID DRIVER_ID = UUID.fromString("a0b39436-f6b6-4662-b535-85de86626ad4"); 7 | 8 | public IconP1NanoPlus3ExtenderExtensionDefinition() { 9 | this(3); 10 | } 11 | 12 | public IconP1NanoPlus3ExtenderExtensionDefinition(final int nrOfExtenders) { 13 | super(nrOfExtenders); 14 | } 15 | 16 | @Override 17 | public UUID getId() { 18 | return DRIVER_ID; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/akai/apc/common/MidiProcessor.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.akai.apc.common; 2 | 3 | import com.bitwig.extension.controller.api.MidiIn; 4 | import com.bitwig.extension.controller.api.NoteInput; 5 | import com.bitwig.extensions.framework.time.TimedEvent; 6 | 7 | import java.util.function.IntConsumer; 8 | 9 | public interface MidiProcessor { 10 | 11 | NoteInput createNoteInput(String name, String... mask); 12 | 13 | void sendMidi(final int status, final int val1, final int val2); 14 | 15 | void start(); 16 | 17 | void queueEvent(TimedEvent currentTimer); 18 | 19 | void setModeChangeListener(final IntConsumer modeChangeListener); 20 | 21 | MidiIn getMidiIn(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/CcAssignments.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4; 2 | 3 | public enum CcAssignments { 4 | TRACK_LEFT(0x67), 5 | TRACK_RIGHT(0x66), 6 | NAV_UP(0x6A), 7 | NAV_DOWN(0x6B), 8 | SCENE_LAUNCH(0x68), 9 | LAUNCH_MODE(0x69), 10 | PARAM_UP(0x33), 11 | PARAM_DOWN(0x34), 12 | TRACK_MODE(0x2D), 13 | METRO(0x4C), 14 | CAPTURE(0x4A), 15 | UNDO(0x4D), 16 | QUANTIZE(0x4B), 17 | PLAY(0x73), 18 | STOP(0x74), 19 | LOOP(0x76), 20 | REC(0x75); 21 | final int ccNr; 22 | 23 | CcAssignments(final int ccNr) { 24 | this.ccNr = ccNr; 25 | } 26 | 27 | public int getCcNr() { 28 | return ccNr; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/StringSupplierToPropertyBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework; 2 | 3 | import java.util.function.Supplier; 4 | 5 | import com.bitwig.extension.controller.api.StringHardwareProperty; 6 | 7 | class StringSupplierToPropertyBinding extends Binding, StringHardwareProperty> 8 | { 9 | public StringSupplierToPropertyBinding(final Supplier source, final StringHardwareProperty target) 10 | { 11 | super(target, source, target); 12 | } 13 | 14 | @Override 15 | protected void deactivate() 16 | { 17 | getTarget().setValueSupplier(null); 18 | } 19 | 20 | @Override 21 | protected void activate() 22 | { 23 | getTarget().setValueSupplier(getSource()); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/display/ButtonSubPanel.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.display; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.bitwig.extensions.controllers.novation.slmk3.display.panel.SelectionSubPanel; 7 | 8 | public class ButtonSubPanel { 9 | private final List panels = new ArrayList<>(); 10 | 11 | public ButtonSubPanel(final ButtonMode buttonMode, final ScreenHandler handler) { 12 | for (int i = 0; i < 8; i++) { 13 | panels.add(new SelectionSubPanel(i, buttonMode, handler)); 14 | } 15 | } 16 | 17 | public SelectionSubPanel get(final int index) { 18 | return panels.get(index); 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/values/TrackType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.values; 2 | 3 | public enum TrackType { 4 | 5 | EFFECT, 6 | INSTRUMENT, 7 | AUDIO, 8 | MASTER, 9 | GROUP, 10 | NONE; 11 | 12 | TrackType() { 13 | } 14 | 15 | public static TrackType toType(final String value) { 16 | return switch (value) { 17 | case "Effect" -> EFFECT; 18 | case "Audio" -> AUDIO; 19 | case "Instrument" -> INSTRUMENT; 20 | case "Master" -> MASTER; 21 | case "Group" -> GROUP; 22 | default -> NONE; 23 | }; 24 | } 25 | 26 | public boolean canBeArmed() { 27 | return this == INSTRUMENT || this == AUDIO; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/value/LayoutType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.value; 2 | 3 | public enum LayoutType { 4 | LAUNCHER("MIX"), // 5 | ARRANGER("ARRANGE"); 6 | 7 | private String name; 8 | 9 | private LayoutType(final String name) { 10 | this.name = name; 11 | } 12 | 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | public static LayoutType toType(final String layoutName) { 18 | for (final LayoutType layoutType : LayoutType.values()) { 19 | if (layoutType.name.equals(layoutName)) { 20 | return layoutType; 21 | } 22 | } 23 | return LAUNCHER; 24 | } 25 | 26 | public LayoutType other() { 27 | if (this == LAUNCHER) { 28 | return ARRANGER; 29 | } 30 | return LAUNCHER; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/BooleanSupplierToPropertyBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework; 2 | 3 | import java.util.function.BooleanSupplier; 4 | 5 | import com.bitwig.extension.controller.api.BooleanHardwareProperty; 6 | 7 | class BooleanSupplierToPropertyBinding extends Binding 8 | { 9 | public BooleanSupplierToPropertyBinding(final BooleanSupplier source, final BooleanHardwareProperty target) 10 | { 11 | super(target, source, target); 12 | } 13 | 14 | @Override 15 | protected void deactivate() 16 | { 17 | getTarget().setValueSupplier(null); 18 | } 19 | 20 | @Override 21 | protected void activate() 22 | { 23 | getTarget().setValueSupplier(getSource()); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/OverrideNoteAssignment.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie; 2 | 3 | public class OverrideNoteAssignment implements NoteAssignment { 4 | 5 | private final int noteNr; 6 | 7 | public OverrideNoteAssignment(final int noteNr) { 8 | super(); 9 | this.noteNr = noteNr; 10 | } 11 | 12 | @Override 13 | public int getNoteNo() { 14 | return noteNr; 15 | } 16 | 17 | @Override 18 | public int getType() { 19 | return Midi.NOTE_ON; 20 | } 21 | 22 | @Override 23 | public int getChannel() { 24 | return 0; 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | return "OverrideNoteAssignment{" + 30 | "noteNr=" + noteNr + 31 | '}'; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/looprecorder/RecordingContext.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.looprecorder; 2 | 3 | public class RecordingContext 4 | { 5 | int mRecStartBeats = 0; 6 | int mRecLengthBars = 2; 7 | int mRecLengthBeats = mRecLengthBars * 4; 8 | int mRecStopBeats = mRecStartBeats + mRecLengthBeats; 9 | boolean mIsRecording = false; 10 | boolean mContinueRecording = true; 11 | int mRecordingSceneIndex = 0; 12 | 13 | public void setRecordLengthInBars(int length) 14 | { 15 | mRecLengthBars = length; 16 | mRecLengthBeats = length * 4; 17 | } 18 | 19 | public void setRecording() 20 | { 21 | mIsRecording = true; 22 | mContinueRecording = true; 23 | mRecordingSceneIndex = 0; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/sequencer/value/IncBuffer.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.sequencer.value; 2 | 3 | public class IncBuffer { 4 | int currentOffset = 0; 5 | private final int buffer; 6 | 7 | public IncBuffer(final int buffer) { 8 | this.buffer = buffer; 9 | } 10 | 11 | public int inc(final int incValue) { 12 | if (currentOffset > 0 && incValue < 0 || currentOffset < 0 && incValue > 0) { 13 | currentOffset = 0; 14 | return 0; 15 | } 16 | currentOffset = currentOffset + incValue; 17 | if (Math.abs(currentOffset) >= buffer) { 18 | currentOffset = 0; 19 | return incValue; 20 | } 21 | return 0; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/sequencer/IncBuffer.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.sequencer; 2 | 3 | public class IncBuffer { 4 | int currentOffset = 0; 5 | private final int buffer; 6 | 7 | public IncBuffer(final int buffer) { 8 | this.buffer = buffer; 9 | } 10 | 11 | public int inc(final int incValue) { 12 | if (currentOffset > 0 && incValue < 0 || currentOffset < 0 && incValue > 0) { 13 | currentOffset = 0; 14 | return 0; 15 | } 16 | currentOffset = currentOffset + incValue; 17 | if (Math.abs(currentOffset) >= buffer) { 18 | currentOffset = 0; 19 | return incValue; 20 | } 21 | return 0; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/LightColorOutputBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework; 2 | 3 | import java.util.function.Supplier; 4 | 5 | import com.bitwig.extension.api.Color; 6 | import com.bitwig.extension.controller.api.MultiStateHardwareLight; 7 | 8 | class LightColorOutputBinding extends Binding, MultiStateHardwareLight> 9 | { 10 | 11 | protected LightColorOutputBinding(final Supplier source, final MultiStateHardwareLight target) 12 | { 13 | super(target, source, target); 14 | } 15 | 16 | @Override 17 | protected void deactivate() 18 | { 19 | getTarget().setColorSupplier(null); 20 | } 21 | 22 | @Override 23 | protected void activate() 24 | { 25 | getTarget().setColorSupplier(getSource()); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/layer/MenuModeAction.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.layer; 2 | 3 | import com.bitwig.extensions.controllers.mackie.configurations.LayerConfiguration; 4 | 5 | public class MenuModeAction { 6 | private LayerConfiguration storedConfiguration = null; 7 | private long downTime; 8 | 9 | public void enter(final LayerConfiguration previous, final String buttonName) { 10 | if (storedConfiguration == null) { 11 | storedConfiguration = previous; 12 | } 13 | downTime = System.currentTimeMillis(); 14 | } 15 | 16 | public LayerConfiguration getStoredConfiguration() { 17 | return storedConfiguration; 18 | } 19 | 20 | public boolean exit() { 21 | final long diff = System.currentTimeMillis() - downTime; 22 | return diff > 2000; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/LayoutType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine; 2 | 3 | public enum LayoutType { 4 | LAUNCHER("MIX"), // 5 | ARRANGER("ARRANGE"); 6 | 7 | private String name; 8 | 9 | private LayoutType(final String name) { 10 | this.name = name; 11 | } 12 | 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | public static LayoutType toType(final String layoutName) { 18 | for (final LayoutType layoutType : LayoutType.values()) { 19 | if (layoutType.name.equals(layoutName)) { 20 | return layoutType; 21 | } 22 | } 23 | return LAUNCHER; 24 | } 25 | 26 | public LayoutType other() { 27 | if (this == LAUNCHER) { 28 | return ARRANGER; 29 | } 30 | return LAUNCHER; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/minilab3/PadBank.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.minilab3; 2 | 3 | public enum PadBank { 4 | BANK_A(0, 0x30, 0x34), 5 | BANK_B(1, 0x40, 0x44), 6 | TRANSPORT(-1, 0x50, 0x54); 7 | 8 | private final int commandId; 9 | private final int firstPadId; 10 | private final int index; 11 | 12 | PadBank(final int index, final int commandId, final int firstPadId) { 13 | this.index = index; 14 | this.commandId = commandId; 15 | this.firstPadId = firstPadId; 16 | } 17 | 18 | public int getCommandId() { 19 | return commandId; 20 | } 21 | 22 | public int getIndex() { 23 | return index; 24 | } 25 | 26 | public int getFirstPadId() { 27 | return firstPadId; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/bindings/ring/RingDisplayFixedBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.bindings.ring; 2 | 3 | import com.bitwig.extensions.controllers.mackie.display.RingDisplay; 4 | import com.bitwig.extensions.controllers.mackie.display.RingDisplayType; 5 | 6 | public class RingDisplayFixedBinding extends RingDisplayBinding { 7 | 8 | public RingDisplayFixedBinding(final Integer source, final RingDisplay target, final RingDisplayType type) { 9 | super(target, source, type); 10 | } 11 | 12 | @Override 13 | protected void activate() { 14 | getTarget().sendValue(type.getOffset() + getSource(), false); 15 | } 16 | 17 | @Override 18 | protected int calcValue() { 19 | return type.getOffset() + getSource(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /doc-source/Akai/MPK mini mk3.md: -------------------------------------------------------------------------------- 1 | # AKAI MPK mini MK3 2 | 3 | ## Overview 4 | 5 | This controller extension adds support for the MPK mini MK3: 6 | - Keys provide note input (also with a dedicated note input port) 7 | - Pads provide note input (also with a dedicated note input port) 8 | - Knobs are mapped to the selected device's remote controls, with the targeted control name shown on the screen 9 | 10 | ## Device Setup 11 | 12 | There is no configuration required on the device; Bitwig Studio will send a custom "program" to it. 13 | 14 | - Do not use "PROG SELECT"; it will interfere with Bitwig Studio's connection. 15 | - To synchronize the MPK's arpeggiator and note repeat: go into Bitwig's Synchronization settings (Dashboard > Settings > Synchronization), and enabling sending MIDI "Clock," "Start/Stop," and "SPP" to the MPK mini MK3. 16 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/akai/apcmk2/OrientationFollowType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.akai.apcmk2; 2 | 3 | import java.util.Arrays; 4 | 5 | public enum OrientationFollowType { 6 | AUTOMATIC("Automatic"), // 7 | FIXED_VERTICAL("Mix Panel Layout"), // 8 | FIXED_HORIZONTAL("Arrange Panel Layout"); 9 | 10 | private final String label; 11 | 12 | OrientationFollowType(String label) { 13 | this.label = label; 14 | } 15 | 16 | public String getLabel() { 17 | return label; 18 | } 19 | 20 | public static OrientationFollowType toType(String value) { 21 | return Arrays.stream(OrientationFollowType.values()) 22 | .filter(type -> type.label.equals(value)) 23 | .findFirst() 24 | .orElse(OrientationFollowType.FIXED_VERTICAL); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/values/Midi.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.values; 2 | 3 | public class Midi { 4 | public static final int NOTE_OFF = 128; //0x80 5 | public static final int NOTE_ON = 144; // 0x90 6 | public static final int POLY_AT = 160; // 0xA0 7 | public static final int CC = 176; // 0xB0 8 | public static final int PROG_CHANGE = 192; // 0xC0 9 | public static final int CHANNEL_AT = 208; // 0xD0 10 | public static final int PITCH_BEND = 224; //0xE0 11 | public static final int SYS_EX_START = 0xF0; 12 | public static final int SYS_EX_END = 0XF7; 13 | public static final int SNYC_CLOCK = 248; 14 | public static final int SNYC_START = 250; 15 | public static final int SNYC_STOP = 252; 16 | public static final int SNYC_CONTINUE = 251; 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/devices/ParameterSetting.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.devices; 2 | 3 | import com.bitwig.extensions.controllers.mackie.display.RingDisplayType; 4 | 5 | public class ParameterSetting { 6 | private final String pname; 7 | private final double sensitivity; 8 | private final RingDisplayType ringType; 9 | 10 | public ParameterSetting(final String pname, final double sensitivity, final RingDisplayType ringType) { 11 | super(); 12 | this.pname = pname; 13 | this.sensitivity = sensitivity; 14 | this.ringType = ringType; 15 | } 16 | 17 | public String getPname() { 18 | return pname; 19 | } 20 | 21 | public double getSensitivity() { 22 | return sensitivity; 23 | } 24 | 25 | public RingDisplayType getRingType() { 26 | return ringType; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/HarwareActionBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework; 2 | 3 | import com.bitwig.extension.controller.api.HardwareAction; 4 | import com.bitwig.extension.controller.api.HardwareActionBindable; 5 | import com.bitwig.extension.controller.api.HardwareActionBinding; 6 | 7 | class HarwareActionBinding extends 8 | HardwareBinding 9 | { 10 | public HarwareActionBinding(final Object actionOwner, final HardwareAction source, final HardwareActionBindable target) 11 | { 12 | super(actionOwner, source, target); 13 | } 14 | 15 | @Override 16 | protected HardwareActionBinding addHardwareBinding() 17 | { 18 | return getSource().addBinding(getTarget()); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/display/OnOffLightStateBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine.display; 2 | 3 | import java.util.function.BooleanSupplier; 4 | 5 | import com.bitwig.extension.controller.api.OnOffHardwareLight; 6 | import com.bitwig.extensions.framework.Binding; 7 | 8 | public class OnOffLightStateBinding extends Binding { 9 | 10 | public OnOffLightStateBinding(final BooleanSupplier source, final OnOffHardwareLight target) { 11 | super(target, source, target); 12 | } 13 | 14 | @Override 15 | protected void deactivate() { 16 | getTarget().isOn().setValueSupplier(null); 17 | } 18 | 19 | @Override 20 | protected void activate() { 21 | getTarget().isOn().setValueSupplier(getSource()); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/maschine/TouchHandler.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.maschine; 2 | 3 | public class TouchHandler { 4 | 5 | private final boolean touchArray[] = new boolean[8]; 6 | private int touchCount = 0; 7 | 8 | public void notifyTouched(final int index, final boolean v) { 9 | if (v) { 10 | touchCount++; 11 | } else if (touchCount > 0) { 12 | touchCount--; 13 | } 14 | this.touchArray[index] = v; 15 | } 16 | 17 | public boolean isTouched() { 18 | return touchCount > 0; 19 | } 20 | 21 | public boolean isTouched(final int index) { 22 | if (index >= 0 && index < touchArray.length) { 23 | return this.touchArray[index]; 24 | } 25 | return false; 26 | } 27 | 28 | public boolean[] getTouchArray() { 29 | return touchArray; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/commonsmk3/OrientationFollowType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.commonsmk3; 2 | 3 | import java.util.Arrays; 4 | 5 | public enum OrientationFollowType { 6 | AUTOMATIC("Automatic"), // 7 | FIXED_VERTICAL("Mix Panel Layout"), // 8 | FIXED_HORIZONTAL("Arrange Panel Layout"); 9 | 10 | private final String label; 11 | 12 | OrientationFollowType(String label) { 13 | this.label = label; 14 | } 15 | 16 | public String getLabel() { 17 | return label; 18 | } 19 | 20 | public static OrientationFollowType toType(String value) { 21 | return Arrays.stream(OrientationFollowType.values()) 22 | .filter(type -> type.label.equals(value)) 23 | .findFirst() 24 | .orElse(OrientationFollowType.FIXED_VERTICAL); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/VersaKey25Definition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | import java.util.UUID; 3 | 4 | import com.bitwig.extension.api.PlatformType; 5 | import com.bitwig.extension.controller.AutoDetectionMidiPortNamesList; 6 | import com.bitwig.extension.controller.ControllerExtensionDefinition; 7 | import com.bitwig.extension.controller.api.ControllerHost; 8 | 9 | public class VersaKey25Definition extends VersaKeyCommonDefinition 10 | { 11 | private static final UUID DRIVER_ID = UUID.fromString("3ff25b55-3169-4e71-812f-9d6d701cee98"); 12 | 13 | public VersaKey25Definition() 14 | { 15 | super(DRIVER_ID, "VersaKey 25"); 16 | } 17 | 18 | @Override 19 | public VersaKey25 createInstance(final ControllerHost host) 20 | { 21 | return new VersaKey25(this, host); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/VersaKey49Definition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | import java.util.UUID; 3 | 4 | import com.bitwig.extension.api.PlatformType; 5 | import com.bitwig.extension.controller.AutoDetectionMidiPortNamesList; 6 | import com.bitwig.extension.controller.ControllerExtensionDefinition; 7 | import com.bitwig.extension.controller.api.ControllerHost; 8 | 9 | public class VersaKey49Definition extends VersaKeyCommonDefinition 10 | { 11 | private static final UUID DRIVER_ID = UUID.fromString("5c39f30a-7f9d-4d4b-aeaa-2e9e32230828"); 12 | 13 | public VersaKey49Definition() 14 | { 15 | super(DRIVER_ID, "VersaKey 49"); 16 | } 17 | 18 | @Override 19 | public VersaKey49 createInstance(final ControllerHost host) 20 | { 21 | return new VersaKey49(this, host); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/VersaKey61Definition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | import java.util.UUID; 3 | 4 | import com.bitwig.extension.api.PlatformType; 5 | import com.bitwig.extension.controller.AutoDetectionMidiPortNamesList; 6 | import com.bitwig.extension.controller.ControllerExtensionDefinition; 7 | import com.bitwig.extension.controller.api.ControllerHost; 8 | 9 | public class VersaKey61Definition extends VersaKeyCommonDefinition 10 | { 11 | private static final UUID DRIVER_ID = UUID.fromString("af8fa1e2-477b-4246-bdd1-d5869e36e4ad"); 12 | 13 | public VersaKey61Definition() 14 | { 15 | super(DRIVER_ID, "VersaKey 61"); 16 | } 17 | 18 | @Override 19 | public VersaKey61 createInstance(final ControllerHost host) 20 | { 21 | return new VersaKey61(this, host); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/VersaKey88Definition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | import java.util.UUID; 3 | 4 | import com.bitwig.extension.api.PlatformType; 5 | import com.bitwig.extension.controller.AutoDetectionMidiPortNamesList; 6 | import com.bitwig.extension.controller.ControllerExtensionDefinition; 7 | import com.bitwig.extension.controller.api.ControllerHost; 8 | 9 | public class VersaKey88Definition extends VersaKeyCommonDefinition 10 | { 11 | private static final UUID DRIVER_ID = UUID.fromString("e6e502da-7572-4ff8-aec8-98ebc34d88ea"); 12 | 13 | public VersaKey88Definition() 14 | { 15 | super(DRIVER_ID, "VersaKey 88"); 16 | } 17 | 18 | @Override 19 | public VersaKey88 createInstance(final ControllerHost host) 20 | { 21 | return new VersaKey88(this, host); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/midi/NhiaSysexCommand.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.komplete.midi; 2 | 3 | /** 4 | * @author Eric 5 | */ 6 | public abstract class NhiaSysexCommand { 7 | public static final byte SYSEX_START = (byte) 0xF0; 8 | public static final byte SYSEX_END = (byte) 0xF7; 9 | 10 | public final static byte OFF = 0; 11 | public final static byte ON = 1; 12 | 13 | static final byte[] BASE_FORMAT = { 14 | SYSEX_START, // 15 | 0, 0x21, 0x09, // Manufacturer ID 16 | 0x0, 0x0, // Device ID 17 | 0x44, 0x43, // Protocol ID 18 | 0x01, 0x00, // Protocol Version 19 | 0x40, // Track Available 20 | 0x00, // Track value 21 | 0x00, // Track number 22 | SYSEX_END 23 | }; // END 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/reloop/display/StringUtil.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.reloop.display; 2 | 3 | public class StringUtil { 4 | private static final char[] SPECIALS = { 5 | 'ä', 'ü', 'ö', 'Ä', 'Ü', 'Ö', 'ß', 'é', 'è', 'ê', 'â', 'á', 'à', // 6 | 'û', 'ú', 'ù', 'ô', 'ó', 'ò' 7 | }; 8 | private static final char[] REPLACE = { 9 | 'a', 'u', 'o', 'A', 'U', 'O', 'S', 'e', 'e', 'e', 'a', 'a', 'a', // 10 | 'u', 'u', 'u', 'o', 'o', 'o' 11 | }; 12 | 13 | public static int toValue(final char c) { 14 | if (c >= 0 && c < 128) { 15 | return c; 16 | } 17 | for (int i = 0; i < SPECIALS.length; i++) { 18 | if (c == SPECIALS[i]) { 19 | return REPLACE[i]; 20 | } 21 | } 22 | return 32; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/TrackType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie; 2 | 3 | /** 4 | * The track types as recognized by KK. 5 | */ 6 | public enum TrackType { 7 | NONE(0, ""), // 8 | UNSPECIFIED(1, "Unspec"), // 9 | INSTRUMENT(2, "Instrument"), // 10 | AUDIO(3, "Audio"), // 11 | GROUP(4, "Group"), // 12 | RETURN_BUS(5, "Effect"), // 13 | MASTER(6, "Master"); // 14 | 15 | private int id; 16 | private String type; 17 | 18 | private TrackType(final int id, final String type) { 19 | this.id = id; 20 | this.type = type; 21 | } 22 | 23 | public int getId() { 24 | return id; 25 | } 26 | 27 | public static TrackType toType(final String type) { 28 | for (final TrackType trackType : TrackType.values()) { 29 | if (trackType.type.equals(type)) { 30 | return trackType; 31 | } 32 | } 33 | return UNSPECIFIED; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/commons/Colors.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.commons; 2 | 3 | public enum Colors { 4 | OFF(0), // 5 | RED(1), // 6 | ORANGE(2), // 7 | LIGHT_ORANGE(3), // 8 | WARM_YELLOW(4), // 9 | YELLOW(5), // 10 | LIME(6), // 11 | GREEN(7), // 12 | MINT(8), // 13 | CYAN(9), // 14 | TURQUIOSE(10), 15 | BLUE(11), // 16 | PLUM(12), // 17 | VIOLET(13), // 18 | PURPLE(14), // 19 | MAGENTA(15), // 20 | FUCHSIA(16), // 21 | WHITE(17); 22 | 23 | private int index; 24 | 25 | Colors(final int index) { 26 | this.index = index; 27 | } 28 | 29 | public int getIndexValue(final ColorBrightness brightness) { 30 | if (index == 0) { 31 | return 0; 32 | } 33 | return index * 4 + brightness.getAdjust(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/DelayAction.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie; 2 | 3 | public class DelayAction { 4 | private final Runnable execution; 5 | private final int duration; 6 | private final String actionId; 7 | private final long time; 8 | 9 | public DelayAction(final int duration, final String actionId, final Runnable execution) { 10 | super(); 11 | this.duration = duration; 12 | this.actionId = actionId; 13 | this.execution = execution; 14 | this.time = System.currentTimeMillis(); 15 | } 16 | 17 | public boolean isReady() { 18 | return System.currentTimeMillis() - this.time > duration; 19 | } 20 | 21 | public String getActionId() { 22 | return actionId; 23 | } 24 | 25 | public void run() { 26 | this.execution.run(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/presonus/faderport/PresonusFaderPort8Definition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.presonus.faderport; 2 | 3 | import java.util.UUID; 4 | 5 | import com.bitwig.extension.controller.api.ControllerHost; 6 | 7 | public class PresonusFaderPort8Definition extends PresonusFaderPortDefinition 8 | { 9 | private final static UUID ID = UUID.fromString("122775f6-6726-4a28-8dcc-f358c175f749"); 10 | 11 | @Override 12 | public UUID getId() 13 | { 14 | return ID; 15 | } 16 | 17 | @Override 18 | int channelCount() 19 | { 20 | return 8; 21 | } 22 | 23 | @Override 24 | String sysexDeviceID() 25 | { 26 | return "02"; 27 | } 28 | 29 | @Override 30 | public PresonusFaderPort8 createInstance(final ControllerHost host) 31 | { 32 | return new PresonusFaderPort8(this, host); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/EzCreatorKeyXLDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | import java.util.UUID; 3 | 4 | import com.bitwig.extension.api.PlatformType; 5 | import com.bitwig.extension.controller.AutoDetectionMidiPortNamesList; 6 | import com.bitwig.extension.controller.ControllerExtensionDefinition; 7 | import com.bitwig.extension.controller.api.ControllerHost; 8 | 9 | 10 | public class EzCreatorKeyXLDefinition extends EzCreatorKeyCommonDefinition 11 | { 12 | private static final UUID EXTENSION_UUID = UUID.fromString("9043a14c-4530-49c2-8e32-e7c006aa0d5f"); 13 | 14 | public EzCreatorKeyXLDefinition() 15 | { 16 | super(EXTENSION_UUID, "EZ-Creator Key XL"); 17 | } 18 | 19 | @Override 20 | public EzCreatorKeyXL createInstance(final ControllerHost host) 21 | { 22 | return new EzCreatorKeyXL(this, host); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/presonus/faderport/PresonusFaderPort16Definition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.presonus.faderport; 2 | 3 | import java.util.UUID; 4 | 5 | import com.bitwig.extension.controller.api.ControllerHost; 6 | 7 | public class PresonusFaderPort16Definition extends PresonusFaderPortDefinition 8 | { 9 | private final static UUID ID = UUID.fromString("5610a656-af63-42ab-b2ea-bcdf87a61b53"); 10 | 11 | @Override 12 | public UUID getId() 13 | { 14 | return ID; 15 | } 16 | 17 | @Override 18 | int channelCount() 19 | { 20 | return 16; 21 | } 22 | 23 | @Override 24 | String sysexDeviceID() 25 | { 26 | return "16"; 27 | } 28 | 29 | @Override 30 | public PresonusFaderPort16 createInstance(final ControllerHost host) 31 | { 32 | return new PresonusFaderPort16(this, host); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/sequencer/value/BasicControlValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.sequencer.value; 2 | 3 | import com.bitwig.extension.controller.api.SettableStringValue; 4 | import com.bitwig.extension.controller.api.StringValue; 5 | 6 | public abstract class BasicControlValue implements ControlValue { 7 | 8 | protected final SettableStringValue displayValue; 9 | protected final IncBuffer incBuffer; 10 | 11 | protected BasicControlValue(final SettableStringValue displayValue, final int incBuffer) { 12 | this.displayValue = displayValue; 13 | this.incBuffer = new IncBuffer(incBuffer); 14 | } 15 | 16 | @Override 17 | public StringValue getDisplayValue() { 18 | return displayValue; 19 | } 20 | 21 | @Override 22 | public void update() { 23 | 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/display/ShiftAction.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.display; 2 | 3 | public enum ShiftAction { 4 | CLICK("Metronome"), 5 | FILL("", "Fill"), 6 | CL_OVERDUB("Launcher", "Overdub"), 7 | CL_AUTO("Launcher", "Automat."), 8 | AR_AUTO("Arranger", "Automat."), 9 | AUTO_OVERRIDE("Restore", "Automat."), 10 | UNDO("Undo"), 11 | REDO("Redo"); 12 | private final String row2; 13 | private final String row1; 14 | 15 | ShiftAction(final String name) { 16 | this("", name); 17 | } 18 | 19 | ShiftAction(final String row1, final String row2) { 20 | this.row1 = row1; 21 | this.row2 = row2; 22 | } 23 | 24 | public String getRow2() { 25 | return row2; 26 | } 27 | 28 | public String getRow1() { 29 | return row1; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/InternalLightStateBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework; 2 | 3 | import java.util.function.Supplier; 4 | 5 | import com.bitwig.extension.controller.api.InternalHardwareLightState; 6 | import com.bitwig.extension.controller.api.MultiStateHardwareLight; 7 | 8 | public class InternalLightStateBinding extends Binding, MultiStateHardwareLight> 9 | { 10 | protected InternalLightStateBinding( 11 | final Supplier source, final MultiStateHardwareLight target) 12 | { 13 | super(target, source, target); 14 | } 15 | 16 | @Override 17 | protected void deactivate() 18 | { 19 | getTarget().state().setValueSupplier(null); 20 | } 21 | 22 | @Override 23 | protected void activate() 24 | { 25 | getTarget().state().setValueSupplier(getSource()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/EzCreatorKey.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | 3 | import com.bitwig.extension.controller.ControllerExtension; 4 | import com.bitwig.extension.controller.api.ControllerHost; 5 | import com.bitwig.extension.controller.api.CursorRemoteControlsPage; 6 | import com.bitwig.extension.controller.api.CursorTrack; 7 | import com.bitwig.extension.controller.api.HardwareControlType; 8 | import com.bitwig.extension.controller.api.MidiIn; 9 | import com.bitwig.extension.controller.api.MidiOut; 10 | import com.bitwig.extension.controller.api.PinnableCursorDevice; 11 | import com.bitwig.extension.controller.api.RemoteControl; 12 | 13 | public class EzCreatorKey extends EzCreatorKeyCommonExtension 14 | { 15 | public EzCreatorKey(final EzCreatorKeyDefinition definition, final ControllerHost host) 16 | { 17 | super(definition, host, 0x03); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/bindings/RingDisplayBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.bindings; 2 | 3 | import com.bitwig.extensions.controllers.mcu.control.RingDisplay; 4 | import com.bitwig.extensions.controllers.mcu.control.RingDisplayType; 5 | import com.bitwig.extensions.framework.Binding; 6 | 7 | public abstract class RingDisplayBinding extends Binding { 8 | protected final RingDisplayType type; 9 | 10 | public RingDisplayBinding(final RingDisplay target, final T source, final RingDisplayType type) { 11 | super(target, source, target); 12 | this.type = type; 13 | } 14 | 15 | @Override 16 | protected void deactivate() { 17 | } 18 | 19 | @Override 20 | protected void activate() { 21 | getTarget().sendValue(calcValue(), false); 22 | } 23 | 24 | protected abstract int calcValue(); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/devices/ParameterSetting.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.devices; 2 | 3 | 4 | import com.bitwig.extensions.controllers.mcu.control.RingDisplayType; 5 | 6 | public class ParameterSetting { 7 | private final String parameterName; 8 | private final double sensitivity; 9 | private final RingDisplayType ringType; 10 | 11 | public ParameterSetting(final String name, final double sensitivity, final RingDisplayType ringType) { 12 | this.parameterName = name; 13 | this.sensitivity = sensitivity; 14 | this.ringType = ringType; 15 | } 16 | 17 | public String getParameterName() { 18 | return parameterName; 19 | } 20 | 21 | public double getSensitivity() { 22 | return sensitivity; 23 | } 24 | 25 | public RingDisplayType getRingType() { 26 | return ringType; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/value/BasicIntValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.value; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.function.IntConsumer; 6 | 7 | public class BasicIntValue { 8 | private int value; 9 | private final List listeners = new ArrayList<>(); 10 | 11 | public void set(final int value) { 12 | if (value != this.value) { 13 | this.value = value; 14 | this.listeners.forEach(listener -> listener.accept(this.value)); 15 | } 16 | } 17 | 18 | public void addListener(final IntConsumer listener) { 19 | this.listeners.add(listener); 20 | } 21 | 22 | public void setImmediately(final int value) { 23 | this.value = value; 24 | } 25 | 26 | public int get() { 27 | return value; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk3/control/ModeType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk3.control; 2 | 3 | import com.bitwig.extensions.controllers.novation.launchkey_mk3.LaunchkeyMk3Extension; 4 | import com.bitwig.extensions.framework.Layer; 5 | 6 | import java.util.function.Consumer; 7 | 8 | public interface ModeType { 9 | int getId(); 10 | 11 | static void bindButton(final T[] elements, final LaunchkeyMk3Extension driver, final String id, 12 | final int modeButtonCc, final Layer layer, 13 | final Consumer handleChange) { 14 | for (final T type : elements) { 15 | final ModeButton button = new ModeButton(id, driver, modeButtonCc, type); 16 | button.bind(layer, handleChange); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/bindings/ring/RingDisplayBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.bindings.ring; 2 | 3 | import com.bitwig.extensions.controllers.mackie.display.RingDisplay; 4 | import com.bitwig.extensions.controllers.mackie.display.RingDisplayType; 5 | import com.bitwig.extensions.framework.Binding; 6 | 7 | public abstract class RingDisplayBinding extends Binding { 8 | protected final RingDisplayType type; 9 | 10 | public RingDisplayBinding(final RingDisplay target, final T source, final RingDisplayType type) { 11 | super(target, source, target); 12 | this.type = type; 13 | } 14 | 15 | @Override 16 | protected void deactivate() { 17 | } 18 | 19 | @Override 20 | protected void activate() { 21 | getTarget().sendValue(calcValue(), false); 22 | } 23 | 24 | protected abstract int calcValue(); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/display/ControllerDisplay.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.display; 2 | 3 | import com.bitwig.extensions.framework.values.BooleanValueObject; 4 | 5 | import java.util.List; 6 | 7 | public interface ControllerDisplay { 8 | 9 | void showText(DisplayPart part, int row, int cell, String text); 10 | 11 | void showText(DisplayPart part, int row, List text); 12 | 13 | void showText(DisplayPart part, int row, String text); 14 | 15 | void refresh(); 16 | 17 | boolean hasLower(); 18 | 19 | BooleanValueObject getSlidersTouched(); 20 | 21 | void sendVuUpdate(final int index, final int value); 22 | 23 | void sendMasterVuUpdateL(final int value); 24 | 25 | void sendMasterVuUpdateR(final int value); 26 | 27 | void blockUpdate(DisplayPart part, int row); 28 | 29 | void enableUpdate(DisplayPart part, int row); 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk3/controls/RgbNoteButton.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk3.controls; 2 | 3 | import com.bitwig.extension.controller.api.HardwareSurface; 4 | import com.bitwig.extension.controller.api.MidiIn; 5 | import com.bitwig.extensions.controllers.arturia.keylab.mk3.MidiProcessor; 6 | 7 | public class RgbNoteButton extends RgbButton { 8 | 9 | public RgbNoteButton(final String name, final int noteNr, final int ledId, final HardwareSurface surface, 10 | final MidiProcessor midiProcessor) { 11 | super(name, noteNr, ledId, surface, midiProcessor); 12 | final MidiIn midiIn = midiProcessor.getMidiIn(); 13 | hwButton.pressedAction().setActionMatcher(midiIn.createNoteOnActionMatcher(9, noteNr)); 14 | hwButton.releasedAction().setActionMatcher(midiIn.createNoteOffActionMatcher(9, noteNr)); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/values/LayoutType.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.values; 2 | 3 | public enum LayoutType { 4 | LAUNCHER("MIX"), // 5 | ARRANGER("ARRANGE"), 6 | EDIT("EDIT"); 7 | 8 | private final String name; 9 | 10 | LayoutType(final String name) { 11 | this.name = name; 12 | } 13 | 14 | public String getName() { 15 | return name; 16 | } 17 | 18 | public static LayoutType toType(final String layoutName) { 19 | for (final LayoutType layoutType : LayoutType.values()) { 20 | if (layoutType.name.equals(layoutName)) { 21 | return layoutType; 22 | } 23 | } 24 | return LAUNCHER; 25 | } 26 | 27 | public LayoutType other() { 28 | if (this == LAUNCHER) { 29 | return ARRANGER; 30 | } 31 | return LAUNCHER; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/akai/apc64/control/FaderBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.akai.apc64.control; 2 | 3 | import com.bitwig.extension.controller.api.Parameter; 4 | import com.bitwig.extensions.framework.Binding; 5 | 6 | public class FaderBinding extends Binding { 7 | 8 | private double lastValue = 0.0; 9 | 10 | public FaderBinding(final Parameter source, final FaderResponse target) { 11 | super(target, source, target); 12 | source.value().addValueObserver(this::valueChange); 13 | } 14 | 15 | private void valueChange(final double value) { 16 | lastValue = value; 17 | if (isActive()) { 18 | getTarget().sendValue(value); 19 | } 20 | } 21 | 22 | @Override 23 | protected void deactivate() { 24 | } 25 | 26 | @Override 27 | protected void activate() { 28 | getTarget().sendValue(lastValue); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/RelativeHardwareControlBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework; 2 | 3 | import com.bitwig.extension.controller.api.RelativeHardwarControlBindable; 4 | import com.bitwig.extension.controller.api.RelativeHardwareControl; 5 | 6 | public class RelativeHardwareControlBinding extends 7 | AbstractRelativeHardwareControlBinding 8 | { 9 | public RelativeHardwareControlBinding( 10 | final RelativeHardwareControl source, 11 | final RelativeHardwarControlBindable target) 12 | { 13 | super(source, target); 14 | } 15 | 16 | @Override 17 | protected com.bitwig.extension.controller.api.RelativeHardwareControlBinding addHardwareBinding( 18 | double sensitivity) 19 | { 20 | return getTarget().addBindingWithSensitivity(getSource(), sensitivity); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/essential/ArturiaKeylabEssential49ControllerExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.essential; 2 | 3 | import java.util.UUID; 4 | 5 | public class ArturiaKeylabEssential49ControllerExtensionDefinition extends ArturiaKeylabEssentialControllerExtensionDefinition 6 | { 7 | private final static UUID ID = UUID.fromString("e143e7ff-60f3-42c2-baed-4315ecf05f66"); 8 | 9 | @Override 10 | public int getNumberOfKeys() 11 | { 12 | return 49; 13 | } 14 | 15 | @Override 16 | public UUID getId() 17 | { 18 | return ID; 19 | } 20 | 21 | public static ArturiaKeylabEssential49ControllerExtensionDefinition getInstance() 22 | { 23 | return mInstance; 24 | } 25 | 26 | private static ArturiaKeylabEssential49ControllerExtensionDefinition 27 | mInstance = new ArturiaKeylabEssential49ControllerExtensionDefinition(); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/essential/ArturiaKeylabEssential61ControllerExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.essential; 2 | 3 | import java.util.UUID; 4 | 5 | public class ArturiaKeylabEssential61ControllerExtensionDefinition extends ArturiaKeylabEssentialControllerExtensionDefinition 6 | { 7 | private final static UUID ID = UUID.fromString("6ff7f378-6844-4d2a-8f99-fb823b8ba9c0"); 8 | 9 | @Override 10 | public int getNumberOfKeys() 11 | { 12 | return 61; 13 | } 14 | 15 | @Override 16 | public UUID getId() 17 | { 18 | return ID; 19 | } 20 | 21 | public static ArturiaKeylabEssential61ControllerExtensionDefinition getInstance() 22 | { 23 | return mInstance; 24 | } 25 | 26 | private static ArturiaKeylabEssential61ControllerExtensionDefinition 27 | mInstance = new ArturiaKeylabEssential61ControllerExtensionDefinition(); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/essential/ArturiaKeylabEssential88ControllerExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.essential; 2 | 3 | import java.util.UUID; 4 | 5 | public class ArturiaKeylabEssential88ControllerExtensionDefinition extends ArturiaKeylabEssentialControllerExtensionDefinition 6 | { 7 | private final static UUID ID = UUID.fromString("7ff7f378-6844-4d2a-8f99-fb823b8ba9c0"); 8 | 9 | @Override 10 | public int getNumberOfKeys() 11 | { 12 | return 88; 13 | } 14 | 15 | @Override 16 | public UUID getId() 17 | { 18 | return ID; 19 | } 20 | 21 | public static ArturiaKeylabEssential88ControllerExtensionDefinition getInstance() 22 | { 23 | return mInstance; 24 | } 25 | 26 | private static ArturiaKeylabEssential88ControllerExtensionDefinition 27 | mInstance = new ArturiaKeylabEssential88ControllerExtensionDefinition(); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/devine/EzCreatorKeyDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.devine; 2 | 3 | import java.util.UUID; 4 | 5 | import com.bitwig.extension.api.PlatformType; 6 | import com.bitwig.extension.controller.AutoDetectionMidiPortNamesList; 7 | import com.bitwig.extension.controller.ControllerExtension; 8 | import com.bitwig.extension.controller.ControllerExtensionDefinition; 9 | import com.bitwig.extension.controller.api.ControllerHost; 10 | 11 | public class EzCreatorKeyDefinition extends EzCreatorKeyCommonDefinition 12 | { 13 | private static final UUID EXTENSION_UUID = UUID.fromString("0f5fb728-6c41-489f-a98a-5b7ed019550f"); 14 | 15 | public EzCreatorKeyDefinition() 16 | { 17 | super(EXTENSION_UUID, "EZ-Creator Key"); 18 | } 19 | 20 | @Override 21 | public EzCreatorKey createInstance(final ControllerHost host) 22 | { 23 | return new EzCreatorKey(this, host); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/bindings/IncrementHandler.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.bindings; 2 | 3 | import java.util.function.IntConsumer; 4 | 5 | import com.bitwig.extensions.controllers.novation.slmk3.sequencer.value.IncBuffer; 6 | 7 | public class IncrementHandler implements IntConsumer { 8 | private final IncBuffer incBuffer; 9 | private final IntConsumer incReceiver; 10 | 11 | public IncrementHandler(final IntConsumer receiver, final int incBuffer) { 12 | this.incBuffer = incBuffer == 0 ? null : new IncBuffer(incBuffer); 13 | this.incReceiver = receiver; 14 | } 15 | 16 | 17 | @Override 18 | public void accept(final int value) { 19 | final int increment = incBuffer == null ? value : incBuffer.inc(value); 20 | if (increment == 0) { 21 | return; 22 | } 23 | incReceiver.accept(value); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/bindings/FixedLightValueBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.bindings; 2 | 3 | import com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.control.LaunchLight; 4 | import com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.display.RgbColor; 5 | import com.bitwig.extensions.framework.Binding; 6 | 7 | public class FixedLightValueBinding extends Binding { 8 | 9 | private final RgbColor color; 10 | 11 | public FixedLightValueBinding(final LaunchLight target, final RgbColor color) { 12 | super(color, color, target); 13 | this.color = color; 14 | } 15 | 16 | @Override 17 | protected void deactivate() { 18 | 19 | } 20 | 21 | @Override 22 | protected void activate() { 23 | getTarget().sendRgbColor(color); 24 | } 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/framework/values/IncrementDecelerator.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.framework.values; 2 | 3 | import java.util.function.IntConsumer; 4 | 5 | public class IncrementDecelerator implements IntConsumer { 6 | private final IntConsumer incrementer; 7 | private final int minTime; 8 | private long lastEventTimeMs = -1; 9 | private int lastValue; 10 | 11 | 12 | public IncrementDecelerator(final IntConsumer incrementer, final int minTime) { 13 | this.incrementer = incrementer; 14 | this.minTime = minTime; 15 | } 16 | 17 | @Override 18 | public void accept(final int value) { 19 | final long time = System.currentTimeMillis(); 20 | final long diff = time - lastEventTimeMs; 21 | if (lastValue != value || diff >= this.minTime) { 22 | this.incrementer.accept(value); 23 | lastEventTimeMs = time; 24 | } 25 | lastValue = value; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk1/ArturiaKeylab25ControllerExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk1; 2 | 3 | import java.util.UUID; 4 | 5 | public class ArturiaKeylab25ControllerExtensionDefinition extends ArturiaKeylabControllerExtensionDefinition 6 | { 7 | private final static UUID ID = UUID.fromString("faa89c00-020a-11e4-9191-0800200c9a66"); 8 | 9 | @Override 10 | public int getNumberOfKeys() 11 | { 12 | return 25; 13 | } 14 | 15 | @Override 16 | public boolean hasDrumPads() 17 | { 18 | return false; 19 | } 20 | 21 | @Override 22 | public UUID getId() 23 | { 24 | return ID; 25 | } 26 | 27 | public static ArturiaKeylab25ControllerExtensionDefinition getInstance() 28 | { 29 | return mInstance; 30 | } 31 | 32 | private static ArturiaKeylab25ControllerExtensionDefinition mInstance = new ArturiaKeylab25ControllerExtensionDefinition(); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk1/ArturiaKeylab49ControllerExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk1; 2 | 3 | import java.util.UUID; 4 | 5 | public class ArturiaKeylab49ControllerExtensionDefinition extends ArturiaKeylabControllerExtensionDefinition 6 | { 7 | private final static UUID ID = UUID.fromString("360d96b0-0210-11e4-9191-0800200c9a66"); 8 | 9 | @Override 10 | public int getNumberOfKeys() 11 | { 12 | return 49; 13 | } 14 | 15 | @Override 16 | public boolean hasDrumPads() 17 | { 18 | return true; 19 | } 20 | 21 | @Override 22 | public UUID getId() 23 | { 24 | return ID; 25 | } 26 | 27 | public static ArturiaKeylab49ControllerExtensionDefinition getInstance() 28 | { 29 | return mInstance; 30 | } 31 | 32 | private static ArturiaKeylab49ControllerExtensionDefinition mInstance = new ArturiaKeylab49ControllerExtensionDefinition(); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk1/ArturiaKeylab61ControllerExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk1; 2 | 3 | import java.util.UUID; 4 | 5 | public class ArturiaKeylab61ControllerExtensionDefinition extends ArturiaKeylabControllerExtensionDefinition 6 | { 7 | private final static UUID ID = UUID.fromString("2d1a0610-0210-11e4-9191-0800200c9a66"); 8 | 9 | @Override 10 | public int getNumberOfKeys() 11 | { 12 | return 61; 13 | } 14 | 15 | @Override 16 | public boolean hasDrumPads() 17 | { 18 | return true; 19 | } 20 | 21 | @Override 22 | public UUID getId() 23 | { 24 | return ID; 25 | } 26 | 27 | public static ArturiaKeylab61ControllerExtensionDefinition getInstance() 28 | { 29 | return mInstance; 30 | } 31 | 32 | private static ArturiaKeylab61ControllerExtensionDefinition mInstance = new ArturiaKeylab61ControllerExtensionDefinition(); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk1/ArturiaKeylab88ControllerExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk1; 2 | 3 | import java.util.UUID; 4 | 5 | public class ArturiaKeylab88ControllerExtensionDefinition extends ArturiaKeylabControllerExtensionDefinition 6 | { 7 | private final static UUID ID = UUID.fromString("633d85ce-d7f8-4f1e-b9aa-54cce2b01e0d"); 8 | 9 | @Override 10 | public int getNumberOfKeys() 11 | { 12 | return 88; 13 | } 14 | 15 | @Override 16 | public boolean hasDrumPads() 17 | { 18 | return true; 19 | } 20 | 21 | @Override 22 | public UUID getId() 23 | { 24 | return ID; 25 | } 26 | 27 | public static ArturiaKeylab88ControllerExtensionDefinition getInstance() 28 | { 29 | return mInstance; 30 | } 31 | 32 | private static ArturiaKeylab88ControllerExtensionDefinition mInstance = new ArturiaKeylab88ControllerExtensionDefinition(); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk3/CcAssignment.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk3; 2 | 3 | public enum CcAssignment { 4 | SAVE(0x29, 0xf), // 5 | QUANTIZE(0x2A, 0xE), // 6 | UNDO(0x2B, 0xD), // 7 | REDO(0x2C, 0xC), // 8 | STOP(0x14, 0x7), // 9 | PLAY(0x15, 0x6), // 10 | RECORD(0x16, 0x5), // 11 | TAP(0x17, 0x4), // 12 | LOOP(0x18, 0x8), // 13 | REWIND(0x19, 0x9), // 14 | FAST_FWD(0x1A, 0xA), // 15 | METRO(0x1B, 0xB), // 16 | BACK(0x28, 0x1D),// 17 | ; 18 | 19 | // ENCODER 0x74 => 0x75 Turn 20 | private final int ccNr; 21 | private final byte ledId; 22 | 23 | CcAssignment(final int ccNr, final int ledId) { 24 | this.ccNr = ccNr; 25 | this.ledId = (byte) ledId; 26 | } 27 | 28 | public int getCcNr() { 29 | return ccNr; 30 | } 31 | 32 | public byte getLedId() { 33 | return ledId; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk3/display/ScreenTarget.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk3.display; 2 | 3 | public enum ScreenTarget implements IdItem { 4 | SCREEN_1_LINE(0xA), 5 | SCREEN_1_LINE_INVERTED(0xB), 6 | SCREEN_2_LINES(0xC), 7 | SCREEN_2_LINES_INVERTED(0xD), 8 | SCREEN_2_LINES_BIG(0xE), 9 | TOP_ICON_1_LINE(0xF), 10 | TOP_ICON_2_LINES(0x10), 11 | POP_SCREEN_ICON_2_LINES(0x1B), 12 | POP_SCREEN_1_LINE(0x17), 13 | POP_SCREEN_2_LINES(0x18), 14 | POP_SCREEN_3_LINES(0x19), 15 | POP_SCREEN_1_LINE_LEFT_ICON(0x1A), 16 | POP_SCREEN_2_LINE_LEFT_ICON(0x1B), 17 | POP_UP_KNOB(0x1C), 18 | POP_UP_FADER(0x1E), 19 | POP_UP_TOP_ICON_2LINES(0x1F); 20 | 21 | private final int targetId; 22 | 23 | ScreenTarget(final int targetId) { 24 | this.targetId = targetId; 25 | } 26 | 27 | public int getId() { 28 | return targetId; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/beatsteppro/McuFaderBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.beatsteppro; 2 | 3 | import com.bitwig.extension.controller.api.Parameter; 4 | import com.bitwig.extensions.framework.Binding; 5 | 6 | public class McuFaderBinding extends Binding { 7 | 8 | private double lastValue = 0.0; 9 | 10 | public McuFaderBinding(final Parameter source, final McuFaderResponse target) { 11 | super(target, source, target); 12 | source.value().addValueObserver(this::valueChange); 13 | } 14 | 15 | private void valueChange(final double value) { 16 | lastValue = value; 17 | if (isActive()) { 18 | getTarget().sendValue(value); 19 | } 20 | } 21 | 22 | @Override 23 | protected void deactivate() { 24 | } 25 | 26 | @Override 27 | protected void activate() { 28 | getTarget().sendValue(lastValue); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/arturia/keylab/mk3/display/SmallIcon.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.arturia.keylab.mk3.display; 2 | 3 | public enum SmallIcon implements IdItem { 4 | BLUE_HAND(0), 5 | BROWSING_ARROW_DEFAULT(1), 6 | BROWSING_ARROW_DOWN(2), 7 | BROWSING_ARROW_LEFT(3), 8 | BROWSING_ARROW_RIGHT(4), 9 | BUTTON_ARMED_AUDIO_DEFAULT(5), 10 | BUTTON_ARMED_MIDI_DEFAULT(6), 11 | BUTTON_CUBASE_MONITOR_DEFAULT(7), 12 | SETTINGS(8), 13 | TOOL(9), 14 | MUTE(10), 15 | ARROW_DOWN(11), 16 | ARROW_RIGHT(12), 17 | SOLO(13), 18 | STOP(14), 19 | CHECK_BIG(15), 20 | DELETE(16), 21 | HEART_DEFAULT(17), 22 | HEART_LIKED(18), 23 | MIXER(19), 24 | SEARCH_DEFAULT(20), 25 | SEARCH_ON(21), 26 | ; 27 | 28 | private final int id; 29 | 30 | SmallIcon(final int id) { 31 | this.id = id; 32 | } 33 | 34 | public int getId() { 35 | return id; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/HoldCapture.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie; 2 | 3 | import com.bitwig.extensions.controllers.mackie.configurations.LayerConfiguration; 4 | 5 | public class HoldCapture { 6 | private LayerConfiguration storedConfiguration; 7 | private long downTime; 8 | private String holdButtonName; 9 | 10 | public void enter(final LayerConfiguration previous, final String buttonName) { 11 | if (holdButtonName != null) { 12 | return; 13 | } 14 | storedConfiguration = previous; 15 | downTime = System.currentTimeMillis(); 16 | holdButtonName = buttonName; 17 | } 18 | 19 | public LayerConfiguration endHold() { 20 | final LayerConfiguration config = storedConfiguration; 21 | storedConfiguration = null; 22 | return config; 23 | } 24 | 25 | public boolean exit() { 26 | holdButtonName = null; 27 | return System.currentTimeMillis() - downTime < 1200; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/bindings/FaderBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.bindings; 2 | 3 | import com.bitwig.extension.controller.api.Parameter; 4 | import com.bitwig.extensions.controllers.mcu.control.FaderResponse; 5 | import com.bitwig.extensions.framework.Binding; 6 | 7 | public class FaderBinding extends Binding { 8 | 9 | private double lastValue = 0.0; 10 | 11 | public FaderBinding(final Parameter source, final FaderResponse target) { 12 | super(target, source, target); 13 | source.value().addValueObserver(this::valueChange); 14 | } 15 | 16 | private void valueChange(final double value) { 17 | lastValue = value; 18 | if (isActive()) { 19 | getTarget().sendValue(value); 20 | } 21 | } 22 | 23 | @Override 24 | protected void deactivate() { 25 | } 26 | 27 | @Override 28 | protected void activate() { 29 | getTarget().sendValue(lastValue); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/device/AbstractParameterControl.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.nativeinstruments.komplete.device; 2 | 3 | import com.bitwig.extensions.framework.Layer; 4 | 5 | public abstract class AbstractParameterControl { 6 | private boolean active; 7 | protected final Layer layer; 8 | 9 | public AbstractParameterControl(final Layer layer) { 10 | this.layer = layer; 11 | } 12 | 13 | public void setActive(final boolean active) { 14 | this.active = active; 15 | layer.setIsActive(active); 16 | } 17 | 18 | public boolean isActive() { 19 | return active; 20 | } 21 | 22 | public abstract void navigateLeft(); 23 | 24 | public abstract void navigateRight(); 25 | 26 | public abstract void setFineTune(final boolean fineTune); 27 | 28 | public abstract boolean canScrollRight(); 29 | 30 | public abstract boolean canScrollLeft(); 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/bindings/FaderBinding.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.bindings; 2 | 3 | import com.bitwig.extension.controller.api.Parameter; 4 | import com.bitwig.extensions.controllers.mackie.display.FaderResponse; 5 | import com.bitwig.extensions.framework.Binding; 6 | 7 | public class FaderBinding extends Binding { 8 | 9 | private double lastValue = 0.0; 10 | 11 | public FaderBinding(final Parameter source, final FaderResponse target) { 12 | super(target, source, target); 13 | source.value().addValueObserver(this::valueChange); 14 | } 15 | 16 | private void valueChange(final double value) { 17 | lastValue = value; 18 | if (isActive()) { 19 | getTarget().sendValue(value); 20 | } 21 | } 22 | 23 | @Override 24 | protected void deactivate() { 25 | } 26 | 27 | @Override 28 | protected void activate() { 29 | getTarget().sendValue(lastValue); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/control/LaunchKnob.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.control; 2 | 3 | import com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.LaunchControlMidiProcessor; 4 | 5 | public abstract class LaunchKnob { 6 | 7 | protected final int index; 8 | protected final int ccNr; 9 | 10 | protected final LaunchControlMidiProcessor midiProcessor; 11 | protected final LaunchLight light; 12 | 13 | public LaunchKnob(final int index, final int ccNr, final LaunchControlMidiProcessor midiProcessor, 14 | final LaunchLight light) { 15 | this.index = index; 16 | this.ccNr = ccNr; 17 | this.midiProcessor = midiProcessor; 18 | this.light = light; 19 | } 20 | 21 | public int getTargetId() { 22 | return 0xD + index; 23 | } 24 | 25 | public LaunchLight getLight() { 26 | return light; 27 | } 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/slmk3/sequencer/value/ObjectControlValue.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.slmk3.sequencer.value; 2 | 3 | import com.bitwig.extensions.framework.values.BasicStringValue; 4 | import com.bitwig.extensions.framework.values.ValueObject; 5 | 6 | public class ObjectControlValue extends BasicControlValue { 7 | private final ValueObject value; 8 | 9 | 10 | public ObjectControlValue(final ValueObject value, final int incBuffer) { 11 | super(new BasicStringValue(value.displayedValue()), incBuffer); 12 | this.value = value; 13 | this.value.addValueObserver((newValue -> this.displayValue.set(value.displayedValue()))); 14 | } 15 | 16 | @Override 17 | public void incrementBy(final int inc, final boolean modifier) { 18 | final int increment = incBuffer.inc(inc); 19 | if (increment == 0) { 20 | return; 21 | } 22 | this.value.increment(inc); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /bitwig-extensions.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mackie/display/RingDisplay.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mackie.display; 2 | 3 | import com.bitwig.extension.controller.api.MidiOut; 4 | import com.bitwig.extensions.controllers.mackie.Midi; 5 | 6 | public class RingDisplay { 7 | private final MidiOut midi; 8 | private final int index; 9 | private int lastValue = -1; 10 | 11 | public RingDisplay(final MidiOut midi, final int index) { 12 | this.index = index; 13 | this.midi = midi; 14 | } 15 | 16 | public int getIndex() { 17 | return index; 18 | } 19 | 20 | public void sendValue(final int value, final boolean showDot) { 21 | final int newValue = value | (showDot ? 0x40 : 0x00); 22 | if (newValue != lastValue) { 23 | midi.sendMidi(Midi.CC, 0x30 | index, newValue); 24 | lastValue = value; 25 | } 26 | } 27 | 28 | public void refresh() { 29 | midi.sendMidi(Midi.CC, 0x30 | index, lastValue); 30 | } 31 | 32 | public void clear() { 33 | midi.sendMidi(Midi.CC, 0x30 | index, 0); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/definition/AbstractLaunchkeyMk4ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.definition; 2 | 3 | import com.bitwig.extension.controller.ControllerExtensionDefinition; 4 | 5 | public abstract class AbstractLaunchkeyMk4ExtensionDefinition extends ControllerExtensionDefinition { 6 | 7 | @Override 8 | public String getAuthor() { 9 | return "Bitwig"; 10 | } 11 | 12 | @Override 13 | public String getVersion() { 14 | return "1.1"; 15 | } 16 | 17 | @Override 18 | public String getHardwareVendor() { 19 | return "Novation"; 20 | } 21 | 22 | @Override 23 | public int getRequiredAPIVersion() { 24 | return 18; 25 | } 26 | 27 | @Override 28 | public int getNumMidiInPorts() { 29 | return 2; 30 | } 31 | 32 | @Override 33 | public int getNumMidiOutPorts() { 34 | return 2; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchkey_mk4/values/IncrementDecelerator.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchkey_mk4.values; 2 | 3 | import java.util.function.IntConsumer; 4 | 5 | public class IncrementDecelerator implements IntConsumer { 6 | private final IntConsumer incrementer; 7 | private final int minTime; 8 | private long lastEventTimeMs = -1; 9 | private int lastValue; 10 | 11 | 12 | public IncrementDecelerator(final IntConsumer incrementer, final int minTime) { 13 | this.incrementer = incrementer; 14 | this.minTime = minTime; 15 | } 16 | 17 | @Override 18 | public void accept(final int value) { 19 | final long time = System.currentTimeMillis(); 20 | final long diff = time - lastEventTimeMs; 21 | if (lastValue != value || diff > this.minTime) { 22 | this.incrementer.accept(value); 23 | lastEventTimeMs = time; 24 | } 25 | lastValue = value; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/akai/mpkminiplus/RecordFocusMode.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.akai.mpkminiplus; 2 | 3 | import java.util.Arrays; 4 | 5 | enum RecordFocusMode { 6 | LAUNCHER("Launcher"), 7 | ARRANGER("Arranger"); 8 | //CLIP_LAUNCHER("Clip Record/Launch"); 9 | 10 | private final String descriptor; 11 | 12 | RecordFocusMode(final String descriptor) { 13 | this.descriptor = descriptor; 14 | } 15 | 16 | public static RecordFocusMode toMode(final String s) { 17 | for (final RecordFocusMode mode : RecordFocusMode.values()) { 18 | if (mode.descriptor.equals(s)) { 19 | return mode; 20 | } 21 | } 22 | return ARRANGER; 23 | } 24 | 25 | public static String[] toSelector() { 26 | return Arrays.stream(RecordFocusMode.values()) // 27 | .map(RecordFocusMode::getDescriptor) // 28 | .toArray(String[]::new); 29 | } 30 | 31 | public String getDescriptor() { 32 | return descriptor; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/novation/launchcontrolxlmk3/layer/IncrementDecelerator.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.novation.launchcontrolxlmk3.layer; 2 | 3 | import java.util.function.IntConsumer; 4 | 5 | public class IncrementDecelerator implements IntConsumer { 6 | private final IntConsumer incrementer; 7 | private final int minTime; 8 | private long lastEventTimeMs = -1; 9 | private int lastValue; 10 | 11 | 12 | public IncrementDecelerator(final IntConsumer incrementer, final int minTime) { 13 | this.incrementer = incrementer; 14 | this.minTime = minTime; 15 | } 16 | 17 | @Override 18 | public void accept(final int value) { 19 | final long time = System.currentTimeMillis(); 20 | final long diff = time - lastEventTimeMs; 21 | if (lastValue != value || diff >= this.minTime) { 22 | this.incrementer.accept(value); 23 | lastEventTimeMs = time; 24 | } 25 | lastValue = value; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/control/RingDisplay.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.control; 2 | 3 | import com.bitwig.extensions.controllers.mcu.MidiProcessor; 4 | import com.bitwig.extensions.framework.values.Midi; 5 | 6 | public class RingDisplay { 7 | private final MidiProcessor midi; 8 | private final int index; 9 | private int lastValue = -1; 10 | 11 | public RingDisplay(final MidiProcessor midi, final int index) { 12 | this.index = index; 13 | this.midi = midi; 14 | } 15 | 16 | public int getIndex() { 17 | return index; 18 | } 19 | 20 | public void sendValue(final int value, final boolean showDot) { 21 | final int newValue = value | (showDot ? 0x40 : 0x00); 22 | if (newValue != lastValue) { 23 | midi.sendMidi(Midi.CC, 0x30 | index, newValue); 24 | lastValue = value; 25 | } 26 | } 27 | 28 | public void refresh() { 29 | midi.sendMidi(Midi.CC, 0x30 | index, lastValue); 30 | } 31 | 32 | public void clear() { 33 | midi.sendMidi(Midi.CC, 0x30 | index, 0); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/bitwig/extensions/controllers/mcu/devices/DeviceManager.java: -------------------------------------------------------------------------------- 1 | package com.bitwig.extensions.controllers.mcu.devices; 2 | 3 | import com.bitwig.extension.controller.api.Parameter; 4 | 5 | public interface DeviceManager { 6 | 7 | //void initiateBrowsing(final BrowserConfiguration browser, Type type); 8 | 9 | //void addBrowsing(final BrowserConfiguration browser, boolean after); 10 | 11 | //void setInfoLayer(DisplayLayer infoLayer); 12 | 13 | //void enableInfo(InfoSource type); 14 | 15 | void disableInfo(); 16 | 17 | //InfoSource getInfoSource(); 18 | 19 | Parameter getParameter(int index); 20 | 21 | //ParameterPage getParameterPage(int index); 22 | 23 | void navigateDeviceParameters(final int direction); 24 | 25 | //void handleResetInvoked(final int index, final ModifierValueObject modifier); 26 | 27 | DeviceTypeFollower getDeviceFollower(); 28 | 29 | boolean isSpecificDevicePresent(); 30 | 31 | int getPageCount(); 32 | 33 | } 34 | --------------------------------------------------------------------------------