├── debug-linux.sh ├── DrivenByMoss-Manual.pdf ├── maven-local-repository ├── purejavahidapi │ └── purejavahidapi │ │ ├── maven-metadata.xml.md5 │ │ ├── maven-metadata.xml.sha1 │ │ ├── 0.0.23 │ │ ├── purejavahidapi-0.0.23.jar.md5 │ │ ├── purejavahidapi-0.0.23.pom.md5 │ │ ├── purejavahidapi-0.0.23-javadoc.jar.md5 │ │ ├── purejavahidapi-0.0.23-sources.jar.md5 │ │ ├── purejavahidapi-0.0.23.jar.sha1 │ │ ├── purejavahidapi-0.0.23.pom.sha1 │ │ ├── purejavahidapi-0.0.23-javadoc.jar.sha1 │ │ ├── purejavahidapi-0.0.23-sources.jar.sha1 │ │ ├── purejavahidapi-0.0.23.jar │ │ ├── purejavahidapi-0.0.23-javadoc.jar │ │ └── purejavahidapi-0.0.23-sources.jar │ │ └── maven-metadata.xml └── de │ └── mossgrabers │ └── nativefilechooser │ ├── maven-metadata.xml.md5 │ ├── maven-metadata.xml.sha1 │ ├── 1.3.3 │ ├── nativefilechooser-1.3.3.jar.md5 │ ├── nativefilechooser-1.3.3.pom.md5 │ ├── nativefilechooser-1.3.3.jar.sha1 │ ├── nativefilechooser-1.3.3.pom.sha1 │ └── nativefilechooser-1.3.3.jar │ └── maven-metadata.xml ├── release-windows.cmd ├── resources ├── XJam │ └── DrivenByMoss.xjam ├── Faderfox │ └── EC4_DrivenByMoss_Setup.syx ├── 99-userusbdevices.rules └── GenericFlexi │ └── Example.programs ├── checkdependencies.cmd ├── release-macos.sh ├── src └── main │ ├── resources │ ├── Documentation │ │ └── DrivenByMoss-Manual.pdf │ └── images │ │ ├── channel │ │ └── record_arm.svg │ │ ├── user.svg │ │ └── track │ │ ├── instrument_track.svg │ │ ├── audio_track.svg │ │ ├── hybrid_track.svg │ │ └── multi_layer.svg │ └── java │ └── de │ └── mossgrabers │ ├── framework │ ├── daw │ │ ├── data │ │ │ ├── IDrumPad.java │ │ │ ├── IDrumDevice.java │ │ │ ├── bank │ │ │ │ ├── ISendBank.java │ │ │ │ ├── ISceneBank.java │ │ │ │ ├── IDeviceBank.java │ │ │ │ ├── ILayerBank.java │ │ │ │ ├── IMarkerBank.java │ │ │ │ ├── ISlotBank.java │ │ │ │ ├── IParameterPageBank.java │ │ │ │ ├── IParameterBank.java │ │ │ │ └── IDrumPadBank.java │ │ │ ├── IBrowserColumnItem.java │ │ │ ├── ILayer.java │ │ │ ├── ICursorTrack.java │ │ │ ├── IDeviceMetadata.java │ │ │ ├── IMasterTrack.java │ │ │ ├── EqualizerBandType.java │ │ │ ├── empty │ │ │ │ ├── EmptyParameter.java │ │ │ │ ├── EmptyItem.java │ │ │ │ ├── EmptyMarker.java │ │ │ │ └── EmptySend.java │ │ │ ├── IPinnable.java │ │ │ ├── IParameterList.java │ │ │ ├── IDevice.java │ │ │ ├── IMarker.java │ │ │ ├── ISend.java │ │ │ ├── ICursorLayer.java │ │ │ ├── IScene.java │ │ │ └── ICursorDevice.java │ │ ├── clip │ │ │ ├── StepState.java │ │ │ └── ISessionAlternative.java │ │ ├── midi │ │ │ ├── MidiSysExCallback.java │ │ │ ├── MidiShortCallback.java │ │ │ └── AbstractNoteInput.java │ │ ├── IMemoryBlock.java │ │ ├── constants │ │ │ ├── DeviceID.java │ │ │ └── TransportConstants.java │ │ ├── GrooveParameterID.java │ │ └── IGroove.java │ ├── configuration │ │ ├── IActionSetting.java │ │ ├── IEnumSetting.java │ │ ├── IStringSetting.java │ │ ├── IDoubleSetting.java │ │ ├── IBooleanSetting.java │ │ ├── IIntegerSetting.java │ │ ├── ISignalSetting.java │ │ ├── ISetting.java │ │ ├── IColorSetting.java │ │ └── IValueSetting.java │ ├── featuregroup │ │ ├── IExpressionView.java │ │ ├── IScrollableView.java │ │ ├── ModeManager.java │ │ ├── FeatureGroupChangeListener.java │ │ └── IFeatureGroup.java │ ├── controller │ │ ├── hardware │ │ │ ├── IHwFader.java │ │ │ ├── IHwAbsoluteKnob.java │ │ │ ├── IHwGraphicsDisplay.java │ │ │ ├── BindType.java │ │ │ ├── IHwLight.java │ │ │ ├── IHwTextDisplay.java │ │ │ ├── ButtonEventHandler.java │ │ │ ├── IHwPianoKeyboard.java │ │ │ ├── BindException.java │ │ │ ├── IHwControl.java │ │ │ ├── AbstractHwInputControl.java │ │ │ └── AbstractHwControl.java │ │ ├── display │ │ │ ├── Format.java │ │ │ └── IDisplay.java │ │ ├── valuechanger │ │ │ ├── ISensitivityCallback.java │ │ │ ├── RelativeEncoding.java │ │ │ └── OffsetBinaryRelativeValueChanger.java │ │ ├── grid │ │ │ ├── IVirtualFaderCallback.java │ │ │ ├── LightGuideImpl.java │ │ │ └── IVirtualFader.java │ │ ├── color │ │ │ └── ColorIndexException.java │ │ └── DummyControlSurface.java │ ├── parameter │ │ └── IFocusedParameter.java │ ├── graphics │ │ ├── Align.java │ │ ├── IRenderer.java │ │ ├── IImage.java │ │ ├── DefaultBounds.java │ │ ├── canvas │ │ │ ├── component │ │ │ │ └── IComponent.java │ │ │ └── utils │ │ │ │ └── SendData.java │ │ ├── IEncoder.java │ │ ├── IBounds.java │ │ └── IBitmap.java │ ├── utils │ │ ├── TimerCallback.java │ │ ├── ButtonEvent.java │ │ ├── TestCallback.java │ │ ├── IntConsumerSupplier.java │ │ ├── LatestTaskException.java │ │ ├── ContinuousInfo.java │ │ └── ConsoleLogger.java │ ├── mode │ │ ├── INoteEditorMode.java │ │ ├── track │ │ │ ├── TrackSelectMode.java │ │ │ ├── TrackMuteMode.java │ │ │ ├── TrackSoloMode.java │ │ │ ├── TrackRecArmMode.java │ │ │ └── TrackStopClipMode.java │ │ └── layer │ │ │ ├── LayerMuteMode.java │ │ │ └── LayerSoloMode.java │ ├── command │ │ ├── trigger │ │ │ └── Direction.java │ │ ├── core │ │ │ ├── ContinuousCommand.java │ │ │ ├── PitchbendCommand.java │ │ │ ├── TriggerCommand.java │ │ │ ├── AftertouchCommand.java │ │ │ ├── NopCommand.java │ │ │ ├── AbstractPitchbendCommand.java │ │ │ └── AbstractAftertouchCommand.java │ │ └── continuous │ │ │ └── CrossfaderCommand.java │ ├── observer │ │ ├── IBankPageObserver.java │ │ ├── ISettingObserver.java │ │ ├── IParametersAdjustObserver.java │ │ ├── IValueObserver.java │ │ ├── IParameterValueObserver.java │ │ ├── IItemSelectionObserver.java │ │ ├── IIndexedValueObserver.java │ │ ├── IObserverManagement.java │ │ └── INoteObserver.java │ ├── view │ │ ├── ColorSelectMode.java │ │ └── TransposeView.java │ ├── osc │ │ ├── IOpenSoundControlCallback.java │ │ ├── IOpenSoundControlMessage.java │ │ ├── IOpenSoundControlServer.java │ │ ├── IOpenSoundControlClient.java │ │ └── IOpenSoundControlConfiguration.java │ ├── usb │ │ ├── IUsbCallback.java │ │ ├── IHidCallback.java │ │ ├── IUsbEndpoint.java │ │ └── IUsbDevice.java │ ├── parameterprovider │ │ ├── special │ │ │ └── NullParameterProvider.java │ │ ├── track │ │ │ └── CrossfadeParameterProvider.java │ │ └── device │ │ │ ├── PanLayerOrDrumPadParameterProvider.java │ │ │ └── VolumeLayerOrDrumPadParameterProvider.java │ └── scale │ │ └── MPEStatus.java │ ├── controller │ ├── ableton │ │ └── push │ │ │ ├── PushVersion.java │ │ │ └── view │ │ │ └── RaindropsView.java │ ├── oxi │ │ └── one │ │ │ ├── mode │ │ │ ├── IOxiModeDisplay.java │ │ │ └── IOxiModeReset.java │ │ │ └── view │ │ │ └── OxiOneRaindropsView.java │ ├── intuitiveinstruments │ │ └── exquis │ │ │ ├── mode │ │ │ └── IExquisMode.java │ │ │ └── controller │ │ │ └── ISysexCallback.java │ ├── novation │ │ ├── launchcontrol │ │ │ └── mode │ │ │ │ └── IXLMode.java │ │ ├── launchpad │ │ │ └── command │ │ │ │ └── trigger │ │ │ │ ├── TrackCommand.java │ │ │ │ ├── PanCommand.java │ │ │ │ ├── VolumeCommand.java │ │ │ │ └── TrackSelectCommand.java │ │ └── sl │ │ │ └── command │ │ │ └── continuous │ │ │ └── TapTempoInitMkICommand.java │ ├── arturia │ │ └── beatstep │ │ │ ├── view │ │ │ └── BeatstepView.java │ │ │ └── BeatstepControllerDefinition.java │ ├── mackie │ │ ├── hui │ │ │ ├── mode │ │ │ │ └── HUIMode.java │ │ │ └── command │ │ │ │ └── trigger │ │ │ │ ├── AssignableCommand.java │ │ │ │ └── ZoomCommand.java │ │ └── mcu │ │ │ └── controller │ │ │ └── MCUDeviceType.java │ ├── osc │ │ ├── exception │ │ │ ├── MissingCommandException.java │ │ │ ├── UnknownCommandException.java │ │ │ └── IllegalParameterException.java │ │ ├── OSCControllerDefinition.java │ │ └── OSCControlSurface.java │ ├── ni │ │ ├── maschine │ │ │ ├── jam │ │ │ │ ├── view │ │ │ │ │ └── IViewNavigation.java │ │ │ │ └── mode │ │ │ │ │ └── IMaschineJamMode.java │ │ │ ├── mk3 │ │ │ │ ├── view │ │ │ │ │ └── IExecuteFunction.java │ │ │ │ └── MaschineMikroMk3ControllerDefinition.java │ │ │ └── core │ │ │ │ └── view │ │ │ │ └── IMaschineView.java │ │ └── kontrol │ │ │ ├── mkii │ │ │ ├── NIHIASysExCallback.java │ │ │ └── controller │ │ │ │ ├── KontrolProtocol.java │ │ │ │ └── IKontrolProtocolDeviceDescriptor.java │ │ │ └── mki │ │ │ ├── mode │ │ │ └── IKontrol1Mode.java │ │ │ └── controller │ │ │ └── UIChangeCallback.java │ ├── akai │ │ ├── acvs │ │ │ └── controller │ │ │ │ └── ITextMessageHandler.java │ │ ├── fire │ │ │ ├── view │ │ │ │ └── IFireView.java │ │ │ ├── controller │ │ │ │ └── FireScales.java │ │ │ └── command │ │ │ │ └── trigger │ │ │ │ ├── FireBrowserCommand.java │ │ │ │ └── AbstractFireViewMultiSelectCommand.java │ │ ├── apcmini │ │ │ ├── view │ │ │ │ └── APCminiView.java │ │ │ └── controller │ │ │ │ └── APCminiScales.java │ │ └── apc │ │ │ ├── mode │ │ │ ├── PanMode.java │ │ │ └── SendMode.java │ │ │ └── command │ │ │ └── trigger │ │ │ └── APCBrowserCommand.java │ ├── gamepad │ │ ├── GamepadControllerDefinition.java │ │ └── controller │ │ │ └── IGamepadCallback.java │ ├── utilities │ │ ├── autocolor │ │ │ └── AutoColorDefinition.java │ │ └── midimonitor │ │ │ └── MidiMonitorDefinition.java │ ├── generic │ │ ├── GenericFlexiControllerDefinition.java │ │ └── flexihandler │ │ │ └── utils │ │ │ └── FlexiHandlerException.java │ └── yaeltex │ │ └── turn │ │ └── YaeltexTurnControllerDefinition.java │ └── bitwig │ ├── controller │ ├── mackie │ │ ├── mcu │ │ │ ├── MCUController0ExtenderExtensionDefinition.java │ │ │ ├── MCUController1ExtenderExtensionDefinition.java │ │ │ ├── MCUController2ExtenderExtensionDefinition.java │ │ │ └── MCUController3ExtenderExtensionDefinition.java │ │ └── hui │ │ │ ├── HUIController0ExtenderExtensionDefinition.java │ │ │ ├── HUIController1ExtenderExtensionDefinition.java │ │ │ └── HUIController2ExtenderExtensionDefinition.java │ └── ni │ │ └── kontrol │ │ └── mki │ │ ├── Kontrol1S25ExtensionDefinition.java │ │ ├── Kontrol1S49ExtensionDefinition.java │ │ ├── Kontrol1S61ExtensionDefinition.java │ │ └── Kontrol1S88ExtensionDefinition.java │ └── framework │ ├── daw │ ├── MemoryBlockImpl.java │ ├── data │ │ ├── FocusedParameterImpl.java │ │ ├── Util.java │ │ └── MetronomeVolumeParameterImpl.java │ └── DeviceMetadataImpl.java │ ├── graphics │ └── ImageImpl.java │ ├── configuration │ └── SignalSettingImpl.java │ └── osc │ └── OpenSoundControlServerImpl.java ├── .gitignore ├── release-linux.sh ├── InstallHIDLibrary.cmd └── README.md /debug-linux.sh: -------------------------------------------------------------------------------- 1 | export BITWIG_DEBUG_PORT=5005 2 | /opt/bitwig-studio/bitwig-studio 3 | -------------------------------------------------------------------------------- /DrivenByMoss-Manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-moss/DrivenByMoss/HEAD/DrivenByMoss-Manual.pdf -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/maven-metadata.xml.md5: -------------------------------------------------------------------------------- 1 | 51fefc3954e82987e341ba807c7d6a84 -------------------------------------------------------------------------------- /maven-local-repository/de/mossgrabers/nativefilechooser/maven-metadata.xml.md5: -------------------------------------------------------------------------------- 1 | 9dc1754e8fa5f5f2a0d3e7773bde118e -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/maven-metadata.xml.sha1: -------------------------------------------------------------------------------- 1 | b23a4e7600ad45a7724b54e23716217ef8c4b08c -------------------------------------------------------------------------------- /maven-local-repository/de/mossgrabers/nativefilechooser/maven-metadata.xml.sha1: -------------------------------------------------------------------------------- 1 | 8a9b0ff1536699b81df51f6825b691dd0ccb4c27 -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23.jar.md5: -------------------------------------------------------------------------------- 1 | c1b802c2b08002445545e54f9900eb51 -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23.pom.md5: -------------------------------------------------------------------------------- 1 | 3024581baad70bb5fc665573ed47b709 -------------------------------------------------------------------------------- /release-windows.cmd: -------------------------------------------------------------------------------- 1 | set JAVA_HOME=%JAVA_HOME21% 2 | mvn clean install package -Dbitwig.extension.directory=target 3 | -------------------------------------------------------------------------------- /resources/XJam/DrivenByMoss.xjam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-moss/DrivenByMoss/HEAD/resources/XJam/DrivenByMoss.xjam -------------------------------------------------------------------------------- /checkdependencies.cmd: -------------------------------------------------------------------------------- 1 | set JAVA_HOME=%JAVA_HOME21% 2 | mvn versions:display-plugin-updates versions:display-dependency-updates -------------------------------------------------------------------------------- /maven-local-repository/de/mossgrabers/nativefilechooser/1.3.3/nativefilechooser-1.3.3.jar.md5: -------------------------------------------------------------------------------- 1 | 4c5cbd4bc1f21130b77b9d5f1a3a1c83 -------------------------------------------------------------------------------- /maven-local-repository/de/mossgrabers/nativefilechooser/1.3.3/nativefilechooser-1.3.3.pom.md5: -------------------------------------------------------------------------------- 1 | 9e01817893c558dde644774ce073416b -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23-javadoc.jar.md5: -------------------------------------------------------------------------------- 1 | c816c6a78d66039bb44b08190681a991 -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23-sources.jar.md5: -------------------------------------------------------------------------------- 1 | bcc1dc6e65ced70ea7216232321d8c5e -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23.jar.sha1: -------------------------------------------------------------------------------- 1 | 798f6db5de605784c7ff34da920d141b0e64abb8 -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23.pom.sha1: -------------------------------------------------------------------------------- 1 | 32930a16fd89d76beb335fbff2e2a8efc39e6931 -------------------------------------------------------------------------------- /maven-local-repository/de/mossgrabers/nativefilechooser/1.3.3/nativefilechooser-1.3.3.jar.sha1: -------------------------------------------------------------------------------- 1 | e0da8c84ea5deee15f158bd4960c16936b47578e -------------------------------------------------------------------------------- /maven-local-repository/de/mossgrabers/nativefilechooser/1.3.3/nativefilechooser-1.3.3.pom.sha1: -------------------------------------------------------------------------------- 1 | 2c70de30f2a1e89ec6a0239eaa415daac651f5b7 -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23-javadoc.jar.sha1: -------------------------------------------------------------------------------- 1 | aec64b8b0e57921019f9cf96bc8a4fa518a89f65 -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23-sources.jar.sha1: -------------------------------------------------------------------------------- 1 | 5e4b0d7bba6ddb50611928b9c0faf2f817d4cfc2 -------------------------------------------------------------------------------- /resources/Faderfox/EC4_DrivenByMoss_Setup.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-moss/DrivenByMoss/HEAD/resources/Faderfox/EC4_DrivenByMoss_Setup.syx -------------------------------------------------------------------------------- /release-macos.sh: -------------------------------------------------------------------------------- 1 | export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home 2 | mvn clean install package -Dbitwig.extension.directory=target -------------------------------------------------------------------------------- /src/main/resources/Documentation/DrivenByMoss-Manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-moss/DrivenByMoss/HEAD/src/main/resources/Documentation/DrivenByMoss-Manual.pdf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /${bitwig.extension.directory} 2 | /target 3 | .DS_Store 4 | last-build.bin 5 | fileHashes.lock 6 | /.settings/ 7 | /.classpath 8 | /.project 9 | /.idea 10 | *.iml 11 | /bin/ 12 | -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-moss/DrivenByMoss/HEAD/maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23.jar -------------------------------------------------------------------------------- /maven-local-repository/de/mossgrabers/nativefilechooser/1.3.3/nativefilechooser-1.3.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-moss/DrivenByMoss/HEAD/maven-local-repository/de/mossgrabers/nativefilechooser/1.3.3/nativefilechooser-1.3.3.jar -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-moss/DrivenByMoss/HEAD/maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23-javadoc.jar -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/git-moss/DrivenByMoss/HEAD/maven-local-repository/purejavahidapi/purejavahidapi/0.0.23/purejavahidapi-0.0.23-sources.jar -------------------------------------------------------------------------------- /release-linux.sh: -------------------------------------------------------------------------------- 1 | JAVA_HOME_USER=/home/$USER/java/jdk-21.0.4+7 2 | JAVA_HOME_DEBIAN=/usr/lib/jvm/java-21-openjdk-amd64 3 | 4 | if [ -d $JAVA_HOME_USER ]; then 5 | export JAVA_HOME=$JAVA_HOME_USER 6 | elif [ -d $JAVA_HOME_DEBIAN ]; then 7 | export JAVA_HOME=$JAVA_HOME_DEBIAN 8 | fi 9 | 10 | mvn clean install package -Dbitwig.extension.directory=target 11 | -------------------------------------------------------------------------------- /maven-local-repository/purejavahidapi/purejavahidapi/maven-metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | purejavahidapi 4 | purejavahidapi 5 | 6 | 0.0.23 7 | 8 | 0.0.23 9 | 10 | 20250425174052 11 | 12 | 13 | -------------------------------------------------------------------------------- /maven-local-repository/de/mossgrabers/nativefilechooser/maven-metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | de.mossgrabers 4 | nativefilechooser 5 | 6 | 1.3.3 7 | 8 | 1.3.3 9 | 10 | 20250425180208 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IDrumPad.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | /** 8 | * The interface to a drum pad channel. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IDrumPad extends ILayer 13 | { 14 | // Intentionally empty 15 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IDrumDevice.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | /** 8 | * Interface to a drum machine device. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IDrumDevice extends ISpecificDevice 13 | { 14 | // Intentionally empty 15 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/IActionSetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | /** 8 | * An action setting. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IActionSetting extends IStringSetting 13 | { 14 | // Intentionally empty 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/IEnumSetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | /** 8 | * A enum setting. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IEnumSetting extends IValueSetting 13 | { 14 | // Intentionally empty 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/IStringSetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | /** 8 | * A string setting. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IStringSetting extends IValueSetting 13 | { 14 | // Intentionally empty 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/featuregroup/IExpressionView.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.featuregroup; 6 | 7 | /** 8 | * A view which supports expressive playing via MPE (marker interface). 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IExpressionView 13 | { 14 | // Intentionally empty 15 | } 16 | -------------------------------------------------------------------------------- /InstallHIDLibrary.cmd: -------------------------------------------------------------------------------- 1 | set JAVA_HOME=%JAVA_HOME21% 2 | set SOURCE=C:/Privat/Programming/Libraries/USB/purejavahidapi/target 3 | set DESTINATION=./maven-local-repository 4 | 5 | mvn deploy:deploy-file -Dfile=%SOURCE%/purejavahidapi-0.0.18.jar -Dsources=%SOURCE%/purejavahidapi-0.0.18-sources.jar -Djavadoc=%SOURCE%/purejavahidapi-0.0.18-javadoc.jar -DgroupId=purejavahidapi -DartifactId=purejavahidapi -Dversion=0.0.18 -Dpackaging=jar -Durl=file:%DESTINATION% -DrepositoryId=maven-repository -DupdateReleaseInfo=true -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/IHwFader.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | /** 8 | * Interface for a proxy to a fader on a hardware controller. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IHwFader extends IHwAbsoluteControl 13 | { 14 | // Intentionally empty 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/parameter/IFocusedParameter.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.parameter; 6 | 7 | /** 8 | * Access to the data of a parameter in focus, e.g. hovered by the mouse or last touched. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IFocusedParameter extends IParameter 13 | { 14 | // So far only a marker interface 15 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/IHwAbsoluteKnob.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | /** 8 | * Interface for a proxy to a knob on a hardware controller. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IHwAbsoluteKnob extends IHwAbsoluteControl 13 | { 14 | // Intentionally empty 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/bank/ISendBank.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.bank; 6 | 7 | import de.mossgrabers.framework.daw.data.ISend; 8 | 9 | 10 | /** 11 | * Interface to a send bank. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface ISendBank extends IBank 16 | { 17 | // Intentionally empty 18 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ableton/push/PushVersion.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ableton.push; 6 | 7 | /** 8 | * Enumerations of Push versions.. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum PushVersion 13 | { 14 | /** Push 1. */ 15 | VERSION_1, 16 | /** Push 2. */ 17 | VERSION_2, 18 | /** Push 3. */ 19 | VERSION_3 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/bank/ISceneBank.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.bank; 6 | 7 | import de.mossgrabers.framework.daw.data.IScene; 8 | 9 | 10 | /** 11 | * Interface to a scene bank. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface ISceneBank extends IBank 16 | { 17 | // Intentionally empty 18 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/IHwGraphicsDisplay.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | /** 8 | * Interface for a proxy to a graphics display on a hardware controller. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IHwGraphicsDisplay extends IHwControl 13 | { 14 | // Intentionally empty 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/bank/IDeviceBank.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.bank; 6 | 7 | import de.mossgrabers.framework.daw.data.IDevice; 8 | 9 | 10 | /** 11 | * Interface to a device bank. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IDeviceBank extends IBank 16 | { 17 | // Intentionally empty 18 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/bank/ILayerBank.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.bank; 6 | 7 | import de.mossgrabers.framework.daw.data.ILayer; 8 | 9 | 10 | /** 11 | * Interface to a layer bank. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface ILayerBank extends IChannelBank 16 | { 17 | // Intentionally empty 18 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/featuregroup/IScrollableView.java: -------------------------------------------------------------------------------- 1 | package de.mossgrabers.framework.featuregroup; 2 | 3 | import de.mossgrabers.framework.utils.ScrollStates; 4 | 5 | 6 | /** 7 | * A view with cursor key states. 8 | * 9 | * @author Jürgen Moßgraber 10 | */ 11 | public interface IScrollableView extends IView 12 | { 13 | /** 14 | * Update the scroll states. 15 | * 16 | * @param scrollStates The scroll states to update 17 | */ 18 | void updateScrollStates (ScrollStates scrollStates); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/graphics/Align.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.graphics; 6 | 7 | /** 8 | * Alignment constants. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum Align 13 | { 14 | /** Left alignment. */ 15 | LEFT, 16 | /** Right alignment. */ 17 | RIGHT, 18 | /** Centered alignment. */ 19 | CENTER 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/utils/TimerCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.utils; 6 | 7 | /** 8 | * An callback interface for a timer. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface TimerCallback 14 | { 15 | /** 16 | * Will be called when the timer fires. 17 | */ 18 | void call (); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/mode/INoteEditorMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.mode; 6 | 7 | /** 8 | * Interface to a mode which can edit notes. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface INoteEditorMode 13 | { 14 | /** 15 | * Get the note editor. 16 | * 17 | * @return The editor 18 | */ 19 | INoteEditor getNoteEditor (); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/utils/ButtonEvent.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.utils; 6 | 7 | /** 8 | * A button press event. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum ButtonEvent 13 | { 14 | /** Button is pressed down. */ 15 | DOWN, 16 | /** Button is released. */ 17 | UP, 18 | /** Button is long pressed. */ 19 | LONG; 20 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/oxi/one/mode/IOxiModeDisplay.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.oxi.one.mode; 6 | 7 | /** 8 | * Interface for toggling different display options for a mode. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IOxiModeDisplay 13 | { 14 | /** 15 | * Toggles between normal track display and mixer display. 16 | */ 17 | void toggleDisplay (); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/resources/images/channel/record_arm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IBrowserColumnItem.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | /** 8 | * Interface to a browser column entry. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IBrowserColumnItem extends IItem 13 | { 14 | /** 15 | * Get the hit count. 16 | * 17 | * @return The hit count 18 | */ 19 | int getHitCount (); 20 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/graphics/IRenderer.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.graphics; 6 | 7 | /** 8 | * An interface to a renderer. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IRenderer 13 | { 14 | /** 15 | * Render into a graphics context. 16 | * 17 | * @param gc The graphics context 18 | */ 19 | void render (IGraphicsContext gc); 20 | } 21 | -------------------------------------------------------------------------------- /resources/99-userusbdevices.rules: -------------------------------------------------------------------------------- 1 | SUBSYSTEM=="usb",ATTR{idVendor}=="2982",ATTR{idProduct}=="1967",MODE="0660",GROUP="audio" 2 | SUBSYSTEM=="usb",ATTR{idVendor}=="2982",ATTR{idProduct}=="1969",MODE="0660",GROUP="audio" 3 | SUBSYSTEMS=="usb",ATTRS{idVendor}=="17cc",ATTRS{idProduct}=="1340",MODE="0660",GROUP="audio" 4 | SUBSYSTEMS=="usb",ATTRS{idVendor}=="17cc",ATTRS{idProduct}=="1350",MODE="0660",GROUP="audio" 5 | SUBSYSTEMS=="usb",ATTRS{idVendor}=="17cc",ATTRS{idProduct}=="1360",MODE="0660",GROUP="audio" 6 | SUBSYSTEMS=="usb",ATTRS{idVendor}=="17cc",ATTRS{idProduct}=="1410",MODE="0660",GROUP="audio" 7 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/command/trigger/Direction.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.command.trigger; 6 | 7 | /** 8 | * The direction of the cursor. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum Direction 13 | { 14 | /** Move left. */ 15 | LEFT, 16 | /** Move right. */ 17 | RIGHT, 18 | /** Move up. */ 19 | UP, 20 | /** Move down. */ 21 | DOWN 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/observer/IBankPageObserver.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.observer; 6 | 7 | /** 8 | * Callback interface for observing the adjustment of the current bank page. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface IBankPageObserver 14 | { 15 | /** 16 | * The callback function. 17 | */ 18 | void pageAdjusted (); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/IDoubleSetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | /** 8 | * A double setting. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IDoubleSetting extends IValueSetting 13 | { 14 | /** 15 | * Set the double value. 16 | * 17 | * @param value The new value 18 | */ 19 | void set (double value); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/ILayer.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | /** 8 | * The interface to a layer channel. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface ILayer extends IChannel 13 | { 14 | /** 15 | * Check if the layer contains devices. 16 | * 17 | * @return True if there is at least one device 18 | */ 19 | boolean hasDevices (); 20 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/IBooleanSetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | /** 8 | * A boolean setting. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IBooleanSetting extends IValueSetting 13 | { 14 | /** 15 | * Set the boolean value. 16 | * 17 | * @param value The new value 18 | */ 19 | void set (boolean value); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/IIntegerSetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | /** 8 | * An integer setting. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IIntegerSetting extends IValueSetting 13 | { 14 | /** 15 | * Set the integer value. 16 | * 17 | * @param value The new value 18 | */ 19 | void set (int value); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/clip/StepState.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.clip; 6 | 7 | /** 8 | * Enumeration for the state of a step. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum StepState 13 | { 14 | /** Step contains no note. */ 15 | OFF, 16 | /** A note starts at this step. */ 17 | START, 18 | /** A started note continues at that step. */ 19 | CONTINUE; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/display/Format.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.display; 6 | 7 | /** 8 | * Different options how to format values. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum Format 13 | { 14 | /** No formatting. */ 15 | FORMAT_RAW, 16 | /** Format it as a value. */ 17 | FORMAT_VALUE, 18 | /** Format it as a panning value. */ 19 | FORMAT_PAN 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/observer/ISettingObserver.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.observer; 6 | 7 | /** 8 | * An observer interface for settings. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface ISettingObserver 14 | { 15 | /** 16 | * Will be called when the setting for which this observer was registered has changed. 17 | */ 18 | void hasChanged (); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/BindType.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | /** 8 | * Types of MIDI data which can be bound to a hardware element. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum BindType 13 | { 14 | /** Bind to a MIDI CC. */ 15 | CC, 16 | /** Bind to a MIDI note. */ 17 | NOTE, 18 | /** Bind to MIDI pitchbend. */ 19 | PITCHBEND 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/intuitiveinstruments/exquis/mode/IExquisMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.intuitiveinstruments.exquis.mode; 6 | 7 | /** 8 | * Interface for all Exquis modes to be able to toggle the parameters between 1-4 and 5-8. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IExquisMode 13 | { 14 | /** 15 | * Toggle between using parameters 1-4 and 5-8. 16 | */ 17 | void toggleParameters (); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/bank/IMarkerBank.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.bank; 6 | 7 | import de.mossgrabers.framework.daw.data.IMarker; 8 | 9 | 10 | /** 11 | * Interface to a marker bank. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IMarkerBank extends IBank 16 | { 17 | /** 18 | * Create a new marker at the current play cursor position. 19 | */ 20 | void addMarker (); 21 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/view/ColorSelectMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.view; 6 | 7 | /** 8 | * Helper enumeration for the Color view. Where should the selected color applied to? 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum ColorSelectMode 13 | { 14 | /** Select a track color. */ 15 | MODE_TRACK, 16 | /** Select a layer color. */ 17 | MODE_LAYER, 18 | /** Select a clip color. */ 19 | MODE_CLIP 20 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/osc/IOpenSoundControlCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.osc; 6 | 7 | /** 8 | * Interface for a callback to handle OSC messages. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IOpenSoundControlCallback 13 | { 14 | /** 15 | * Handle an OSC message. 16 | * 17 | * @param message The message to handle 18 | */ 19 | void handle (IOpenSoundControlMessage message); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/novation/launchcontrol/mode/IXLMode.java: -------------------------------------------------------------------------------- 1 | package de.mossgrabers.controller.novation.launchcontrol.mode; 2 | 3 | /** 4 | * Additional methods for XL modes. 5 | * 6 | * @author Jürgen Moßgraber 7 | */ 8 | public interface IXLMode 9 | { 10 | /** 11 | * Set the color of one of the knobs depending on the current assignment in the mode. 12 | * 13 | * @param row The row of the knob 14 | * @param column The column of the knob 15 | * @param value The value of the assigned parameter 16 | */ 17 | void setKnobColor (int row, int column, int value); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/oxi/one/mode/IOxiModeReset.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.oxi.one.mode; 6 | 7 | /** 8 | * Interface for resetting settings to their default value, which are not real parameters. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IOxiModeReset 13 | { 14 | /** 15 | * Resets a setting to its default value. 16 | * 17 | * @param index The index of the value 18 | */ 19 | void resetValue (final int index); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/command/core/ContinuousCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.command.core; 6 | 7 | /** 8 | * A continuous command is initiated by a knob or fader event. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface ContinuousCommand 14 | { 15 | /** 16 | * Execute the command. 17 | * 18 | * @param value The updated value 19 | */ 20 | void execute (final int value); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/midi/MidiSysExCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.midi; 6 | 7 | /** 8 | * Callback for receiving MIDI System exclusive messages. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface MidiSysExCallback 13 | { 14 | /** 15 | * Handle received MIDI system exclusive data. 16 | * 17 | * @param data The system exclusive formatted in hex 18 | */ 19 | void handleMidi (final String data); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/featuregroup/ModeManager.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.featuregroup; 6 | 7 | import de.mossgrabers.framework.mode.Modes; 8 | 9 | 10 | /** 11 | * Manages all modes. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public class ModeManager extends FeatureGroupManager 16 | { 17 | /** 18 | * Constructor. 19 | */ 20 | public ModeManager () 21 | { 22 | super (Modes.class); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/observer/IParametersAdjustObserver.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.observer; 6 | 7 | /** 8 | * Callback interface for observing the adjustment of a group of parameters, e.g. a page in a 9 | * parameters bank. 10 | * 11 | * @author Jürgen Moßgraber 12 | */ 13 | @FunctionalInterface 14 | public interface IParametersAdjustObserver 15 | { 16 | /** 17 | * The callback function. 18 | */ 19 | void parametersAdjusted (); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/utils/TestCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.utils; 6 | 7 | /** 8 | * Interface for signaling the start and end of the tests. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface TestCallback 13 | { 14 | /** 15 | * Called before the testing starts. 16 | */ 17 | void startTesting (); 18 | 19 | 20 | /** 21 | * Called after the testing ended. 22 | */ 23 | void endTesting (); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/observer/IValueObserver.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.observer; 6 | 7 | /** 8 | * An observer for a value change. 9 | * 10 | * @author Jürgen Moßgraber 11 | * 12 | * @param The type of the value 13 | */ 14 | @FunctionalInterface 15 | public interface IValueObserver 16 | { 17 | /** 18 | * Called if the value has changed. 19 | * 20 | * @param value The new value 21 | */ 22 | void update (V value); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/arturia/beatstep/view/BeatstepView.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.arturia.beatstep.view; 6 | 7 | /** 8 | * Additional interface for Beatstep views. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface BeatstepView 13 | { 14 | /** 15 | * A knob has been turned. 16 | * 17 | * @param index The index of the knob 18 | * @param value The knobs value 19 | */ 20 | void onKnob (int index, int value); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/valuechanger/ISensitivityCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.valuechanger; 6 | 7 | /** 8 | * Callback interface for getting notified about the relative knob sensitivity. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface ISensitivityCallback 14 | { 15 | /** 16 | * Called when the knob sensitivity has changed. 17 | */ 18 | void knobSensitivityHasChanged (); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/IMemoryBlock.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw; 6 | 7 | import java.nio.ByteBuffer; 8 | 9 | 10 | /** 11 | * Interface to a block of memory. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IMemoryBlock 16 | { 17 | /** 18 | * Creates a ByteBuffer that can be used to read/write the data at this memory block. . 19 | * 20 | * @return The byte buffer 21 | */ 22 | ByteBuffer createByteBuffer (); 23 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/constants/DeviceID.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.constants; 6 | 7 | /** 8 | * Constants for creating specific device monitors. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum DeviceID 13 | { 14 | /** The first instrument device on the track. */ 15 | FIRST_INSTRUMENT, 16 | /** The equalizer device. */ 17 | EQ, 18 | /** The first Native Instruments Komplete Kontrol device on the track. */ 19 | NI_KOMPLETE 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/ICursorTrack.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | import de.mossgrabers.framework.daw.data.bank.IParameterBank; 8 | 9 | 10 | /** 11 | * Interface to the Cursor Track. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface ICursorTrack extends ITrack, ICursor 16 | { 17 | /** 18 | * Get the track wide parameter bank. 19 | * 20 | * @return The bank 21 | */ 22 | IParameterBank getParameterBank (); 23 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/usb/IUsbCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.usb; 6 | 7 | /** 8 | * Interface for a callback when an asynchronous transmission has finished. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IUsbCallback 13 | { 14 | /** 15 | * Called when ready to process the results. 16 | * 17 | * @param receivedLength The length of the received data, -1 if an error occured 18 | */ 19 | void process (int receivedLength); 20 | } 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DrivenByMoss 2 | Bitwig Studio extensions to support several controllers 3 | 4 | ### Building and Installing the extension 5 | 6 | Users should download and install the version from the 7 | [main site](http://www.mossgrabers.de/Software/Bitwig/Bitwig.html). 8 | These directions are for developers to test changes prior to release. 9 | 10 | 1. Install Maven and dependences, either [from here](https://maven.apache.org/install.html) 11 | or if on Linux, using the distro package manager, e.g. `yum install maven` or 12 | `apt-get install maven`. 13 | 2. Run `mvn install` in this repo's root. 14 | 3. Follow [installation instructions] in the included manual for further steps. 15 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/IHwLight.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | /** 8 | * Interface for a proxy to a light / LED on a hardware controller. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IHwLight extends IHwControl 13 | { 14 | /** 15 | * Switch off the light. 16 | */ 17 | void turnOff (); 18 | 19 | 20 | /** 21 | * Clear the light cache state. 22 | */ 23 | void forceFlush (); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/mackie/mcu/MCUController0ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.mackie.mcu; 6 | 7 | /** 8 | * Definition class for the Mackie MCU protocol. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class MCUController0ExtenderExtensionDefinition extends MCUControllerExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public MCUController0ExtenderExtensionDefinition () 18 | { 19 | super (0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/mackie/hui/mode/HUIMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.mackie.hui.mode; 6 | 7 | /** 8 | * Interface for additional HUI mode methods. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface HUIMode 13 | { 14 | /** 15 | * Update the knob LEDs. 16 | */ 17 | void updateKnobLEDs (); 18 | 19 | 20 | /** 21 | * Reset the parameter. 22 | * 23 | * @param index THe index of the parameter 24 | */ 25 | void resetParameter (int index); 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/ni/kontrol/mki/Kontrol1S25ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.ni.kontrol.mki; 6 | 7 | /** 8 | * Definition class for Native Instruments Komplete Kontrol 1 S25 controller. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class Kontrol1S25ExtensionDefinition extends AbstractKontrol1ExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public Kontrol1S25ExtensionDefinition () 18 | { 19 | super (0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/ni/kontrol/mki/Kontrol1S49ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.ni.kontrol.mki; 6 | 7 | /** 8 | * Definition class for Native Instruments Komplete Kontrol 1 S49 controller. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class Kontrol1S49ExtensionDefinition extends AbstractKontrol1ExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public Kontrol1S49ExtensionDefinition () 18 | { 19 | super (1); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/ni/kontrol/mki/Kontrol1S61ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.ni.kontrol.mki; 6 | 7 | /** 8 | * Definition class for Native Instruments Komplete Kontrol 1 S61 controller. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class Kontrol1S61ExtensionDefinition extends AbstractKontrol1ExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public Kontrol1S61ExtensionDefinition () 18 | { 19 | super (2); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/ni/kontrol/mki/Kontrol1S88ExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.ni.kontrol.mki; 6 | 7 | /** 8 | * Definition class for Native Instruments Komplete Kontrol 1 S88 controller. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class Kontrol1S88ExtensionDefinition extends AbstractKontrol1ExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public Kontrol1S88ExtensionDefinition () 18 | { 19 | super (3); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/IHwTextDisplay.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | /** 8 | * Interface for a proxy to a display on a hardware controller. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IHwTextDisplay extends IHwControl 13 | { 14 | /** 15 | * Set a line of the display. 16 | * 17 | * @param line The line 18 | * @param text The text to set 19 | */ 20 | void setLine (int line, String text); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/graphics/IImage.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.graphics; 6 | 7 | /** 8 | * An interface to an image. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IImage 13 | { 14 | /** 15 | * Get the width of the image. 16 | * 17 | * @return The width 18 | */ 19 | double getWidth (); 20 | 21 | 22 | /** 23 | * Get the height of the image. 24 | * 25 | * @return The height 26 | */ 27 | int getHeight (); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/ISignalSetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | import de.mossgrabers.framework.observer.IValueObserver; 8 | 9 | 10 | /** 11 | * A signal setting. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface ISignalSetting extends ISetting 16 | { 17 | /** 18 | * Add an observer for a signal. 19 | * 20 | * @param observer The observer 21 | */ 22 | void addSignalObserver (IValueObserver observer); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/observer/IParameterValueObserver.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.observer; 6 | 7 | /** 8 | * An observer for value changes of parameters. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface IParameterValueObserver 14 | { 15 | /** 16 | * Called if a parameter value has changed. 17 | * 18 | * @param page The page of the parameter 19 | * @param index The index of the parameter 20 | */ 21 | void update (int page, int index); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/mackie/hui/HUIController0ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.mackie.hui; 6 | 7 | /** 8 | * Definition class for the Mackie HUI protocol with no extender device. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class HUIController0ExtenderExtensionDefinition extends HUIControllerExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public HUIController0ExtenderExtensionDefinition () 18 | { 19 | super (0); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/mackie/hui/HUIController1ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.mackie.hui; 6 | 7 | /** 8 | * Definition class for the Mackie HUI protocol with 1 extender device. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class HUIController1ExtenderExtensionDefinition extends HUIControllerExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public HUIController1ExtenderExtensionDefinition () 18 | { 19 | super (1); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/mackie/hui/HUIController2ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.mackie.hui; 6 | 7 | /** 8 | * Definition class for the Mackie HUI protocol with 2 extender devices. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class HUIController2ExtenderExtensionDefinition extends HUIControllerExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public HUIController2ExtenderExtensionDefinition () 18 | { 19 | super (2); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/mackie/mcu/MCUController1ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.mackie.mcu; 6 | 7 | /** 8 | * Definition class for the Mackie MCU protocol with 1 extender device. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class MCUController1ExtenderExtensionDefinition extends MCUControllerExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public MCUController1ExtenderExtensionDefinition () 18 | { 19 | super (1); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/mackie/mcu/MCUController2ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.mackie.mcu; 6 | 7 | /** 8 | * Definition class for the Mackie MCU protocol with 2 extender devices. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class MCUController2ExtenderExtensionDefinition extends MCUControllerExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public MCUController2ExtenderExtensionDefinition () 18 | { 19 | super (2); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/controller/mackie/mcu/MCUController3ExtenderExtensionDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.controller.mackie.mcu; 6 | 7 | /** 8 | * Definition class for the Mackie MCU protocol with 3 extender devices. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class MCUController3ExtenderExtensionDefinition extends MCUControllerExtensionDefinition 13 | { 14 | /** 15 | * Constructor. 16 | */ 17 | public MCUController3ExtenderExtensionDefinition () 18 | { 19 | super (3); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/ButtonEventHandler.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | import de.mossgrabers.framework.utils.ButtonEvent; 8 | 9 | 10 | /** 11 | * Callback interface for button events. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | @FunctionalInterface 16 | public interface ButtonEventHandler 17 | { 18 | /** 19 | * Handle the event. 20 | * 21 | * @param event The button event 22 | */ 23 | void handle (ButtonEvent event); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/images/user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/utils/IntConsumerSupplier.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.utils; 6 | 7 | /** 8 | * Interface for a combination of integer supplier and consumer. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface IntConsumerSupplier 14 | { 15 | /** 16 | * Processes an integer value and returns an integer as the result. 17 | * 18 | * @param value The input value 19 | * @return The result value 20 | */ 21 | int process (int value); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/mackie/mcu/controller/MCUDeviceType.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.mackie.mcu.controller; 6 | 7 | /** 8 | * The type of MCU device. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum MCUDeviceType 13 | { 14 | /** A main device with transport control, buttons, etc. **/ 15 | MAIN, 16 | /** An extender which has only a mixer section. */ 17 | EXTENDER, 18 | /** Extender with a mixer section but uses the specific Mackie extender protocol. */ 19 | MACKIE_EXTENDER 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/command/core/PitchbendCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.command.core; 6 | 7 | /** 8 | * An pitch-bend command. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface PitchbendCommand 14 | { 15 | /** 16 | * Execute the pitch-bend command. 17 | * 18 | * @param data1 The first pitch-bend byte (low byte) 19 | * @param data2 The second pitch-bend byte (high byte) 20 | */ 21 | void onPitchbend (final int data1, int data2); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/osc/exception/MissingCommandException.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.osc.exception; 6 | 7 | /** 8 | * Exception for a missing OSC (sub-)command. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class MissingCommandException extends Exception 13 | { 14 | private static final long serialVersionUID = -6729074086275827225L; 15 | 16 | 17 | /** 18 | * Constructor. 19 | */ 20 | public MissingCommandException () 21 | { 22 | // Intentionally empty 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/utils/LatestTaskException.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.utils; 6 | 7 | /** 8 | * Runtime exception to block use of wrong execution methods. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class LatestTaskException extends RuntimeException 13 | { 14 | private static final long serialVersionUID = 8072517378022859167L; 15 | 16 | 17 | /** 18 | * Constructor. 19 | */ 20 | public LatestTaskException () 21 | { 22 | super ("Use execute instead."); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/osc/IOpenSoundControlMessage.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.osc; 6 | 7 | /** 8 | * Interface to an OSC message. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IOpenSoundControlMessage 13 | { 14 | /** 15 | * Get the OSC address. 16 | * 17 | * @return The OSC address 18 | */ 19 | String getAddress (); 20 | 21 | 22 | /** 23 | * Get the values array. 24 | * 25 | * @return The values array 26 | */ 27 | Object [] getValues (); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/observer/IItemSelectionObserver.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.observer; 6 | 7 | /** 8 | * Callback interface for observing item selection changes in a bank. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface IItemSelectionObserver 14 | { 15 | /** 16 | * The callback function. 17 | * 18 | * @param index The index of the track 19 | * @param isSelected Has the item been selected? 20 | */ 21 | void call (int index, boolean isSelected); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/framework/daw/MemoryBlockImpl.java: -------------------------------------------------------------------------------- 1 | package de.mossgrabers.bitwig.framework.daw; 2 | 3 | import de.mossgrabers.framework.daw.IMemoryBlock; 4 | 5 | import com.bitwig.extension.api.MemoryBlock; 6 | 7 | import java.nio.ByteBuffer; 8 | 9 | 10 | /** 11 | * Wrapper to a block of memory in Bitwig API. 12 | * 13 | * @author Jürgen Moßgraber 14 | * 15 | * @param memoryBlock The memory block to wrap 16 | */ 17 | public record MemoryBlockImpl (MemoryBlock memoryBlock) implements IMemoryBlock 18 | { 19 | /** {@inheritDoc} */ 20 | @Override 21 | public ByteBuffer createByteBuffer () 22 | { 23 | return this.memoryBlock.createByteBuffer (); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/IHwPianoKeyboard.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | import de.mossgrabers.framework.daw.midi.IMidiInput; 8 | 9 | 10 | /** 11 | * Interface for a proxy to a piano keyboard on a hardware controller. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IHwPianoKeyboard extends IHwControl 16 | { 17 | /** 18 | * Bind the piano keyboard to an MIDI input port. 19 | * 20 | * @param input 21 | */ 22 | void bind (IMidiInput input); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/midi/MidiShortCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.midi; 6 | 7 | /** 8 | * Callback for receiving MIDI short messages. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface MidiShortCallback 13 | { 14 | /** 15 | * Handle received MIDI data. 16 | * 17 | * @param status The MIDI status byte 18 | * @param data1 The MIDI data byte 1 19 | * @param data2 The MIDI data byte 2 20 | */ 21 | void handleMidi (final int status, final int data1, final int data2); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/observer/IIndexedValueObserver.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.observer; 6 | 7 | /** 8 | * An observer for indexed value change. 9 | * 10 | * @author Jürgen Moßgraber 11 | * 12 | * @param The type of the value 13 | */ 14 | @FunctionalInterface 15 | public interface IIndexedValueObserver 16 | { 17 | /** 18 | * Called if the value has changed. 19 | * 20 | * @param index The index of the value 21 | * @param value The new value 22 | */ 23 | void update (int index, V value); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/observer/IObserverManagement.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.observer; 6 | 7 | /** 8 | * Interface for disable/enabling observers. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IObserverManagement 13 | { 14 | /** 15 | * Disable/Enable all attributes. They are enabled by default. Use this function if values are 16 | * currently not needed to improve performance. 17 | * 18 | * @param enable True to enable 19 | */ 20 | void enableObservers (final boolean enable); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/resources/images/track/instrument_track.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IDeviceMetadata.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | /** 8 | * Description of a device. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IDeviceMetadata 13 | { 14 | /** 15 | * Get the name of the device. 16 | * 17 | * @return The name 18 | */ 19 | String name (); 20 | 21 | 22 | /** 23 | * Get the long name of the device for identification (e.g. adds type). 24 | * 25 | * @return The full name 26 | */ 27 | String fullName (); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/graphics/DefaultBounds.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.graphics; 6 | 7 | /** 8 | * Default implementation for boundaries. 9 | * 10 | * @author Jürgen Moßgraber 11 | * 12 | * @param left The left bound of the drawing area 13 | * @param top The top bound of the drawing area 14 | * @param width The width of the drawing area 15 | * @param height The height of the drawing area 16 | */ 17 | public record DefaultBounds (double left, double top, double width, double height) implements IBounds 18 | { 19 | // Intentionally empty 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IMasterTrack.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | import de.mossgrabers.framework.observer.IItemSelectionObserver; 8 | 9 | 10 | /** 11 | * Interface to the master track. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IMasterTrack extends ITrack 16 | { 17 | /** 18 | * Register an observer to get notified when the master track gets de-/selected. 19 | * 20 | * @param observer The observer to register 21 | */ 22 | void addSelectionObserver (IItemSelectionObserver observer); 23 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/observer/INoteObserver.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.observer; 6 | 7 | /** 8 | * Callback interface for observing notes. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface INoteObserver 14 | { 15 | /** 16 | * The callback function. 17 | * 18 | * @param trackIndex The index of the track on which the note is playing 19 | * @param note The played note 20 | * @param velocity The played velocity 21 | */ 22 | void call (int trackIndex, int note, int velocity); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/maschine/jam/view/IViewNavigation.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.maschine.jam.view; 6 | 7 | import de.mossgrabers.framework.command.trigger.Direction; 8 | 9 | 10 | /** 11 | * Can the view be scrolled into a certain direction?. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IViewNavigation 16 | { 17 | /** 18 | * Can be scrolled? 19 | * 20 | * @param direction The direction to check 21 | * @return True if it can be scrolled 22 | */ 23 | boolean canScroll (Direction direction); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/graphics/canvas/component/IComponent.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.graphics.canvas.component; 6 | 7 | import de.mossgrabers.framework.graphics.IGraphicsInfo; 8 | 9 | 10 | /** 11 | * A component/element which can be drawn on the canvas. It can draw itself on the canvas. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IComponent 16 | { 17 | /** 18 | * Draw the component. 19 | * 20 | * @param info All necessary information to draw the component 21 | */ 22 | void draw (final IGraphicsInfo info); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/maschine/jam/mode/IMaschineJamMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.maschine.jam.mode; 6 | 7 | import de.mossgrabers.controller.ni.maschine.jam.controller.FaderConfig; 8 | 9 | 10 | /** 11 | * Additional methods for Maschine Jam modes. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IMaschineJamMode 16 | { 17 | /** 18 | * Setup a fader for this mode. 19 | * 20 | * @param index The index of the fader 21 | * @return The configuration 22 | */ 23 | FaderConfig setupFader (final int index); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/acvs/controller/ITextMessageHandler.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.acvs.controller; 6 | 7 | /** 8 | * Callback for text encoded values received via system exclusive messages. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | @FunctionalInterface 13 | public interface ITextMessageHandler 14 | { 15 | /** 16 | * Callback to handle the message text. 17 | * 18 | * @param itemID The ID of the item to which the text belongs 19 | * @param text The text 20 | */ 21 | void handleTextMessage (int itemID, String text); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/grid/IVirtualFaderCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.grid; 6 | 7 | /** 8 | * Callback for a virtual fader. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IVirtualFaderCallback 13 | { 14 | /** 15 | * Hook for getting the fader value. 16 | * 17 | * @return The fader value 18 | */ 19 | int getValue (); 20 | 21 | 22 | /** 23 | * Hook for setting the fader value. 24 | * 25 | * @param value The fader value 26 | */ 27 | void setValue (int value); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/GrooveParameterID.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw; 6 | 7 | /** 8 | * IDs for all groove parameters. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum GrooveParameterID 13 | { 14 | /** Is groove on or off? */ 15 | ENABLED, 16 | /** The amount of shuffle. */ 17 | SHUFFLE_AMOUNT, 18 | /** The rate of shuffle. */ 19 | SHUFFLE_RATE, 20 | /** The amount of accent. */ 21 | ACCENT_AMOUNT, 22 | /** The rate of accent. */ 23 | ACCENT_RATE, 24 | /** The phase of accent. */ 25 | ACCENT_PHASE 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/images/track/audio_track.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/graphics/IEncoder.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.graphics; 6 | 7 | import java.nio.ByteBuffer; 8 | 9 | 10 | /** 11 | * An interface to an image encoder. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IEncoder 16 | { 17 | /** 18 | * Encode the image data. 19 | * 20 | * @param imageBuffer The image data (red, green, blue, alpha, ...) 21 | * @param width The width of the image 22 | * @param height The height of the image 23 | */ 24 | void encode (ByteBuffer imageBuffer, int width, int height); 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/ISetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | /** 8 | * An interface to a setting. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface ISetting 13 | { 14 | /** 15 | * Disable/enable the setting. 16 | * 17 | * @param enable True to enable 18 | */ 19 | void setEnabled (final boolean enable); 20 | 21 | 22 | /** 23 | * Make the widget of the setting visible or hide it. 24 | * 25 | * @param visible True to show 26 | */ 27 | void setVisible (boolean visible); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/osc/exception/UnknownCommandException.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.osc.exception; 6 | 7 | /** 8 | * Exception for an unknown OSC command. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class UnknownCommandException extends Exception 13 | { 14 | private static final long serialVersionUID = -2747212585991228126L; 15 | 16 | 17 | /** 18 | * Constructor. 19 | * 20 | * @param command The unknown command 21 | */ 22 | public UnknownCommandException (final String command) 23 | { 24 | super (command); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/usb/IHidCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.usb; 6 | 7 | /** 8 | * Interface for a callback when data from a HID device is received. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IHidCallback 13 | { 14 | /** 15 | * Called when ready to process the results. 16 | * 17 | * @param reportID The report (= function/method) number 18 | * @param data The received data 19 | * @param length The length of the received data, -1 if an error occurred 20 | */ 21 | void process (byte reportID, byte [] data, int length); 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/graphics/canvas/utils/SendData.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.graphics.canvas.utils; 6 | 7 | /** 8 | * Wraps some send info. 9 | * 10 | * @author Jürgen Moßgraber 11 | * 12 | * @param enabled Is the send enabled? 13 | * @param name The name of the send 14 | * @param text The description text 15 | * @param value The value 16 | * @param modulatedValue The modulated value 17 | * @param edited Is selected for editing 18 | */ 19 | public record SendData (boolean enabled, String name, String text, int value, int modulatedValue, boolean edited) 20 | { 21 | // Intentionally empty 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/osc/exception/IllegalParameterException.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.osc.exception; 6 | 7 | /** 8 | * Exception for an OSC command with a missing or wrong parameter. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class IllegalParameterException extends Exception 13 | { 14 | private static final long serialVersionUID = 8078356944040089800L; 15 | 16 | 17 | /** 18 | * Constructor. 19 | * 20 | * @param message The message text 21 | */ 22 | public IllegalParameterException (final String message) 23 | { 24 | super (message); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/command/core/TriggerCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.command.core; 6 | 7 | import de.mossgrabers.framework.utils.ButtonEvent; 8 | 9 | 10 | /** 11 | * A trigger command is initiated by a button event. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | @FunctionalInterface 16 | public interface TriggerCommand 17 | { 18 | /** 19 | * Execute the command. 20 | * 21 | * @param event The button event that initiated the command 22 | * @param velocity The pressure or release velocity that was applied 23 | */ 24 | void execute (ButtonEvent event, int velocity); 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/BindException.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | /** 8 | * Exception for a not supported MIDI binding. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class BindException extends RuntimeException 13 | { 14 | private static final long serialVersionUID = 3866286220354473693L; 15 | 16 | 17 | /** 18 | * Constructor. 19 | * 20 | * @param type The MIDI binding type, which is not supported 21 | */ 22 | public BindException (final BindType type) 23 | { 24 | super ("Binding type " + type + " is not supported."); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/images/track/hybrid_track.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/color/ColorIndexException.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.color; 6 | 7 | /** 8 | * Exception when a color is already registered under an index or does not exist at that index. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class ColorIndexException extends RuntimeException 13 | { 14 | private static final long serialVersionUID = -9195189051324855572L; 15 | 16 | 17 | /** 18 | * Constructor. 19 | * 20 | * @param message The message of the exception 21 | */ 22 | public ColorIndexException (final String message) 23 | { 24 | super (message); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/maschine/mk3/view/IExecuteFunction.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.maschine.mk3.view; 6 | 7 | import de.mossgrabers.framework.utils.ButtonEvent; 8 | 9 | 10 | /** 11 | * Make the main functions of a Maschine view available for some additional buttons of the Maschine 12 | * Studio. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public interface IExecuteFunction 17 | { 18 | /** 19 | * Implement to execute whatever function the view has. 20 | * 21 | * @param padIndex The index of the pressed pad (0-15) 22 | * @param buttonEvent Down or up 23 | */ 24 | void executeFunction (int padIndex, ButtonEvent buttonEvent); 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/EqualizerBandType.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | /** 8 | * Enumeration for equalizer band types. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum EqualizerBandType 13 | { 14 | /** The band is off. */ 15 | OFF, 16 | /** The band is a low cut filter. */ 17 | LOWCUT, 18 | /** The band is a low shelf filter. */ 19 | LOWSHELF, 20 | /** The band is a bell filter. */ 21 | BELL, 22 | /** The band is a high cut filter. */ 23 | HIGHCUT, 24 | /** The band is a high shelf filter. */ 25 | HIGHSHELF, 26 | /** The band is a notch filter. */ 27 | NOTCH 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/empty/EmptyParameter.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.empty; 6 | 7 | import de.mossgrabers.framework.parameter.AbstractParameterImpl; 8 | import de.mossgrabers.framework.parameter.IParameter; 9 | 10 | 11 | /** 12 | * Default data for an empty send. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public class EmptyParameter extends AbstractParameterImpl 17 | { 18 | /** The singleton. */ 19 | public static final IParameter INSTANCE = new EmptyParameter (); 20 | 21 | 22 | /** 23 | * Constructor. 24 | */ 25 | protected EmptyParameter () 26 | { 27 | super (null, -1); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/featuregroup/FeatureGroupChangeListener.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.featuregroup; 6 | 7 | /** 8 | * Interface for notifications about feature group changes. 9 | * 10 | * @param The specific type of the ID enumeration 11 | * 12 | * @author Jürgen Moßgraber 13 | */ 14 | @FunctionalInterface 15 | public interface FeatureGroupChangeListener> 16 | { 17 | /** 18 | * Called when a feature group changes. 19 | * 20 | * @param previousID The ID of the previous feature group 21 | * @param activeID The ID of the newly activated feature group 22 | */ 23 | void call (E previousID, E activeID); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IPinnable.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | /** 8 | * Interface to a pinnable object. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IPinnable 13 | { 14 | /** 15 | * Get if the object is pinned. 16 | * 17 | * @return True if pinned 18 | */ 19 | boolean isPinned (); 20 | 21 | 22 | /** 23 | * Toggles the pinned state of the object. 24 | */ 25 | void togglePinned (); 26 | 27 | 28 | /** 29 | * Set the pinned state of the object. 30 | * 31 | * @param isPinned True to pin, false to unpin 32 | */ 33 | void setPinned (boolean isPinned); 34 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/command/core/AftertouchCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.command.core; 6 | 7 | /** 8 | * An aftertouch command. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface AftertouchCommand 13 | { 14 | /** 15 | * Poly aftertouch on the grid pad was received. 16 | * 17 | * @param note The note of the pad 18 | * @param value The aftertouch of the note 19 | */ 20 | void onPolyAftertouch (int note, int value); 21 | 22 | 23 | /** 24 | * Channel aftertouch on the grid pad was received. 25 | * 26 | * @param value The aftertouch value 27 | */ 28 | void onChannelAftertouch (int value); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IParameterList.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | import java.util.List; 8 | 9 | import de.mossgrabers.framework.parameter.IParameter; 10 | 11 | 12 | /** 13 | * Interface to a parameter list. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public interface IParameterList 18 | { 19 | /** 20 | * Get the maximum number of parameters which can be in the list. 21 | * 22 | * @return The maximum number of parameters, always a multiple of 8 23 | */ 24 | int getMaxNumberOfParameters (); 25 | 26 | 27 | /** 28 | * Get the parameter page list. 29 | * 30 | * @return The list 31 | */ 32 | List getParameters (); 33 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/maschine/core/view/IMaschineView.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.maschine.core.view; 6 | 7 | import de.mossgrabers.controller.ni.maschine.core.command.trigger.EncoderMode; 8 | import de.mossgrabers.framework.daw.clip.ISessionAlternative; 9 | 10 | 11 | /** 12 | * Additional methods for views. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public interface IMaschineView extends ISessionAlternative 17 | { 18 | /** 19 | * Change an option of the view. 20 | * 21 | * @param temporaryEncoderMode The parameter mode 22 | * @param control The value change 23 | */ 24 | void changeOption (EncoderMode temporaryEncoderMode, int control); 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IDevice.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | /** 8 | * Interface to a device. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IDevice extends IItem 13 | { 14 | /** 15 | * Returns true if the device is enabled. 16 | * 17 | * @return True if the device is enabled 18 | */ 19 | boolean isEnabled (); 20 | 21 | 22 | /** 23 | * Toggle the device on/off. 24 | */ 25 | void toggleEnabledState (); 26 | 27 | 28 | /** 29 | * Delete the device. 30 | */ 31 | void remove (); 32 | 33 | 34 | /** 35 | * Duplicate the device. 36 | */ 37 | void duplicate (); 38 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/osc/OSCControllerDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.osc; 6 | 7 | import de.mossgrabers.framework.controller.DefaultControllerDefinition; 8 | 9 | import java.util.UUID; 10 | 11 | 12 | /** 13 | * Definition class for the OSC extension. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public class OSCControllerDefinition extends DefaultControllerDefinition 18 | { 19 | private static final UUID EXTENSION_ID = UUID.fromString ("94DD41B0-EFEE-11E3-AC10-0800200C9A66"); 20 | 21 | 22 | /** 23 | * Constructor. 24 | */ 25 | public OSCControllerDefinition () 26 | { 27 | super (EXTENSION_ID, "OSC", "Open Sound Control", 1, 0); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/clip/ISessionAlternative.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.clip; 6 | 7 | /** 8 | * Interface to additional methods for keeping track of alternative clip/scene interactions. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface ISessionAlternative 13 | { 14 | /** 15 | * Check for the alternate interaction flag. 16 | * 17 | * @return True if shift button was used in combination with a clip or scene 18 | */ 19 | boolean wasAlternateInteractionUsed (); 20 | 21 | 22 | /** 23 | * Set or clear the alternate interaction flag. 24 | * 25 | * @param wasUsed Set to true if it was used 26 | */ 27 | void setAlternateInteractionUsed (boolean wasUsed); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/fire/view/IFireView.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.fire.view; 6 | 7 | /** 8 | * Extension to all fire views e.g. the select knob. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IFireView 13 | { 14 | /** 15 | * The Select knob has been turned. 16 | * 17 | * @param value The value the knob sent 18 | */ 19 | void onSelectKnobValue (int value); 20 | 21 | 22 | /** 23 | * Get the color index of the solo buttons. 24 | * 25 | * @param index The index of the solo button 0-3 26 | * @return 00 Off, 01 Dull red, 02 Dull green, 03 High red, 04 High green 27 | */ 28 | int getSoloButtonColor (final int index); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/parameterprovider/special/NullParameterProvider.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.parameterprovider.special; 6 | 7 | import de.mossgrabers.framework.parameter.IParameter; 8 | 9 | 10 | /** 11 | * Get a number of null parameters. This can be used to clear a previous parameter provider to 12 | * activate a command based binding. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public class NullParameterProvider extends FixedParameterProvider 17 | { 18 | /** 19 | * Constructor. 20 | * 21 | * @param size The number of null-parameters to provide 22 | */ 23 | public NullParameterProvider (final int size) 24 | { 25 | super (new IParameter [size]); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/gamepad/GamepadControllerDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.gamepad; 6 | 7 | import de.mossgrabers.framework.controller.DefaultControllerDefinition; 8 | 9 | import java.util.UUID; 10 | 11 | 12 | /** 13 | * Definition class for the Gamepad controller extension. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public class GamepadControllerDefinition extends DefaultControllerDefinition 18 | { 19 | private static final UUID EXTENSION_ID = UUID.fromString ("CDE3B53F-0DA6-4B3D-90D6-4E82BB2BFCE7"); 20 | 21 | 22 | /** 23 | * Constructor. 24 | */ 25 | public GamepadControllerDefinition () 26 | { 27 | super (EXTENSION_ID, "Gamepad", "Generic", 1, 0); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/utilities/autocolor/AutoColorDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.utilities.autocolor; 6 | 7 | import de.mossgrabers.framework.controller.DefaultControllerDefinition; 8 | 9 | import java.util.UUID; 10 | 11 | 12 | /** 13 | * Definition class for the Auto Color extension. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public class AutoColorDefinition extends DefaultControllerDefinition 18 | { 19 | private static final UUID EXTENSION_ID = UUID.fromString ("3AC40457-43B5-452D-A2F3-439E40754BDC"); 20 | 21 | 22 | /** 23 | * Constructor. 24 | */ 25 | public AutoColorDefinition () 26 | { 27 | super (EXTENSION_ID, "Auto Color", "Utilities", 0, 0); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/kontrol/mkii/NIHIASysExCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.kontrol.mkii; 6 | 7 | /** 8 | * Callback for values updates received via SysEx. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface NIHIASysExCallback 13 | { 14 | /** 15 | * Callback for setting the tempo via SysEx. 16 | * 17 | * @param tempo THe tempo 18 | */ 19 | void setTempo (double tempo); 20 | 21 | 22 | /** 23 | * Send the info about the DAW to the Kontrol. 24 | */ 25 | void sendDAWInfo (); 26 | 27 | 28 | /** 29 | * Select a device on the current track. 30 | * 31 | * @param deviceIndex The index of the device to select 32 | */ 33 | void selectDevice (int deviceIndex); 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/utilities/midimonitor/MidiMonitorDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.utilities.midimonitor; 6 | 7 | import de.mossgrabers.framework.controller.DefaultControllerDefinition; 8 | 9 | import java.util.UUID; 10 | 11 | 12 | /** 13 | * Definition class for the MIDI Monitor extension. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public class MidiMonitorDefinition extends DefaultControllerDefinition 18 | { 19 | private static final UUID EXTENSION_ID = UUID.fromString ("A897AFE1-E5C5-43F2-B7C7-761B39768A15"); 20 | 21 | 22 | /** 23 | * Constructor. 24 | */ 25 | public MidiMonitorDefinition () 26 | { 27 | super (EXTENSION_ID, "Midi Monitor", "Utilities", 1, 0); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/graphics/IBounds.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.graphics; 6 | 7 | /** 8 | * Boundaries to draw in. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IBounds 13 | { 14 | /** 15 | * The left bound. 16 | * 17 | * @return The value 18 | */ 19 | double left (); 20 | 21 | 22 | /** 23 | * The top bound. 24 | * 25 | * @return The value 26 | */ 27 | double top (); 28 | 29 | 30 | /** 31 | * The width bound. 32 | * 33 | * @return The value 34 | */ 35 | double width (); 36 | 37 | 38 | /** 39 | * The height bound. 40 | * 41 | * @return The value 42 | */ 43 | double height (); 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/framework/graphics/ImageImpl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.framework.graphics; 6 | 7 | import de.mossgrabers.framework.graphics.IImage; 8 | 9 | import com.bitwig.extension.api.graphics.Image; 10 | 11 | 12 | /** 13 | * An implementation for an image. 14 | * 15 | * @author Jürgen Moßgraber 16 | * 17 | * @param image The Bitwig image 18 | */ 19 | public record ImageImpl (Image image) implements IImage 20 | { 21 | /** {@inheritDoc} */ 22 | @Override 23 | public double getWidth () 24 | { 25 | return this.image.getWidth (); 26 | } 27 | 28 | 29 | /** {@inheritDoc} */ 30 | @Override 31 | public int getHeight () 32 | { 33 | return this.image.getHeight (); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/resources/images/track/multi_layer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/generic/GenericFlexiControllerDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.generic; 6 | 7 | import de.mossgrabers.framework.controller.DefaultControllerDefinition; 8 | 9 | import java.util.UUID; 10 | 11 | 12 | /** 13 | * Definition class for the Generic Flexi controller extension. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public class GenericFlexiControllerDefinition extends DefaultControllerDefinition 18 | { 19 | private static final UUID EXTENSION_ID = UUID.fromString ("1B43F14F-CAAF-468A-9418-417C678653A0"); 20 | 21 | 22 | /** 23 | * Constructor. 24 | */ 25 | public GenericFlexiControllerDefinition () 26 | { 27 | super (EXTENSION_ID, "Flexi", "Generic", 1, 1); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/apcmini/view/APCminiView.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.apcmini.view; 6 | 7 | import de.mossgrabers.framework.utils.ButtonEvent; 8 | 9 | 10 | /** 11 | * Additional interface for APCmini views. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface APCminiView 16 | { 17 | /** 18 | * A track button was pressed 19 | * 20 | * @param index The index of the button 21 | * @param event The event 22 | */ 23 | void onSelectTrack (int index, ButtonEvent event); 24 | 25 | 26 | /** 27 | * Get the track button color. 28 | * 29 | * @param index The index of the button 30 | * @return The color 31 | */ 32 | int getTrackButtonColor (int index); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/generic/flexihandler/utils/FlexiHandlerException.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.generic.flexihandler.utils; 6 | 7 | import de.mossgrabers.controller.generic.controller.FlexiCommand; 8 | 9 | 10 | /** 11 | * Exception for unsupported flexi commands. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public class FlexiHandlerException extends RuntimeException 16 | { 17 | private static final long serialVersionUID = 3770417875862714290L; 18 | 19 | 20 | /** 21 | * Constructor. 22 | * 23 | * @param command The unsupported command 24 | */ 25 | public FlexiHandlerException (final FlexiCommand command) 26 | { 27 | super ("Unsupported flexi command: " + command.getName ()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/midi/AbstractNoteInput.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.midi; 6 | 7 | /** 8 | * Abstract note input implementation. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public abstract class AbstractNoteInput implements INoteInput 13 | { 14 | protected INoteRepeat noteRepeat; 15 | protected boolean isMPEEnabled = false; 16 | protected int mpePitchBendSensitivity = 48; 17 | 18 | 19 | /** 20 | * Constructor. 21 | */ 22 | protected AbstractNoteInput () 23 | { 24 | // Intentionally empty 25 | } 26 | 27 | 28 | /** {@inheritDoc} */ 29 | @Override 30 | public INoteRepeat getNoteRepeat () 31 | { 32 | return this.noteRepeat; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/kontrol/mki/mode/IKontrol1Mode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.kontrol.mki.mode; 6 | 7 | /** 8 | * Interface for specific knob and button interactions for modes. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IKontrol1Mode 13 | { 14 | /** 15 | * The main knob was turned. 16 | * 17 | * @param value The updated value 18 | */ 19 | void onMainKnob (final int value); 20 | 21 | 22 | /** 23 | * The main knob was pressed. 24 | */ 25 | void onMainKnobPressed (); 26 | 27 | 28 | /** 29 | * The back button was pressed. 30 | */ 31 | void onBack (); 32 | 33 | 34 | /** 35 | * The enter button was pressed. 36 | */ 37 | void onEnter (); 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/IColorSetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | import de.mossgrabers.framework.controller.color.ColorEx; 8 | 9 | 10 | /** 11 | * A color setting. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IColorSetting extends IValueSetting 16 | { 17 | /** 18 | * Set the RGB color value. 19 | * 20 | * @param red The red component (0..1) 21 | * @param green The green component (0..1) 22 | * @param blue The blue component (0..1) 23 | */ 24 | void set (double red, double green, double blue); 25 | 26 | 27 | /** 28 | * Set the color. 29 | * 30 | * @param rgb The 3 rgb values (0..1) 31 | */ 32 | void set (final double [] rgb); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/utils/ContinuousInfo.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.utils; 6 | 7 | /** 8 | * All information about a continuous controller like a knob or fader. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public class ContinuousInfo 13 | { 14 | private int value = -1; 15 | 16 | 17 | /** 18 | * Get the cached value which was last sent to the device. 19 | * 20 | * @return The value 21 | */ 22 | public int getValue () 23 | { 24 | return this.value; 25 | } 26 | 27 | 28 | /** 29 | * Set the cached value which was last sent to the device. 30 | * 31 | * @param value The value 32 | */ 33 | public void setValue (final int value) 34 | { 35 | this.value = value; 36 | } 37 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IMarker.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | import de.mossgrabers.framework.controller.color.ColorEx; 8 | 9 | 10 | /** 11 | * The interface to a marker (on a timeline). 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IMarker extends IItem 16 | { 17 | /** 18 | * Get the color of the marker. 19 | * 20 | * @return The color in RGB 21 | */ 22 | ColorEx getColor (); 23 | 24 | 25 | /** 26 | * Launches the marker. 27 | * 28 | * @param quantized Specified if the marker should be launched quantized or immediately 29 | */ 30 | void launch (boolean quantized); 31 | 32 | 33 | /** 34 | * Removes the marker. 35 | */ 36 | void removeMarker (); 37 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/bank/ISlotBank.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.bank; 6 | 7 | import de.mossgrabers.framework.daw.data.ISlot; 8 | 9 | import java.util.Optional; 10 | 11 | 12 | /** 13 | * Interface to a slot bank. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public interface ISlotBank extends IBank 18 | { 19 | /** 20 | * Returns the first empty slot in the current clip window. If none is empty null is returned. 21 | * If startFrom is set the search starts from the given index (and wraps around after the last 22 | * one to 0). 23 | * 24 | * @param startFrom At what index to start the search 25 | * @return The empty slot or null if none is found 26 | */ 27 | Optional getEmptySlot (final int startFrom); 28 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/ISend.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | import de.mossgrabers.framework.controller.color.ColorEx; 8 | import de.mossgrabers.framework.parameter.IParameter; 9 | 10 | 11 | /** 12 | * Interface to a send. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public interface ISend extends IParameter 17 | { 18 | /** 19 | * Get the color of the send channel. 20 | * 21 | * @return The color in RGB 22 | */ 23 | ColorEx getColor (); 24 | 25 | 26 | /** 27 | * Returns true if the send is enabled. 28 | * 29 | * @return True if enabled 30 | */ 31 | boolean isEnabled (); 32 | 33 | 34 | /** 35 | * Toggle the enabled state of the send. 36 | */ 37 | void toggleEnabled (); 38 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/empty/EmptyItem.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.empty; 6 | 7 | import de.mossgrabers.framework.daw.data.AbstractItemImpl; 8 | 9 | 10 | /** 11 | * Default data for an empty item. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public class EmptyItem extends AbstractItemImpl 16 | { 17 | /** {@inheritDoc} */ 18 | @Override 19 | public int getPosition () 20 | { 21 | return -1; 22 | } 23 | 24 | 25 | /** {@inheritDoc} */ 26 | @Override 27 | public void setSelected (final boolean isSelected) 28 | { 29 | // Intentionally empty 30 | } 31 | 32 | 33 | /** {@inheritDoc} */ 34 | @Override 35 | public void select () 36 | { 37 | // Intentionally empty 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/intuitiveinstruments/exquis/controller/ISysexCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.intuitiveinstruments.exquis.controller; 6 | 7 | /** 8 | * Callback for commands received via system exclusive messages. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface ISysexCallback 13 | { 14 | /** 15 | * Update the tempo. 16 | * 17 | * @param tempo The tempo 18 | */ 19 | void updateTempo (int tempo); 20 | 21 | 22 | /** 23 | * Store the settings of the current track. 24 | * 25 | * @param trackPosition The position of the track for which the data was received, -1 if not was 26 | * initiated from the DAW side 27 | * @param settings The settings to store 28 | */ 29 | void storeTrackSettings (int trackPosition, byte [] settings); 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/valuechanger/RelativeEncoding.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.valuechanger; 6 | 7 | /** 8 | * Different encoding types for relative knob values. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public enum RelativeEncoding 13 | { 14 | /** 15 | * @see https://en.wikipedia.org/wiki/Two%27s_complement 17 | **/ 18 | TWOS_COMPLEMENT, 19 | 20 | /** 21 | * @see https://en.wikipedia.org/wiki/Offset_binary 23 | */ 24 | OFFSET_BINARY, 25 | /** See SignedBitRelativeValueChanger. */ 26 | SIGNED_BIT, 27 | /** See SignedBit2RelativeValueChanger. */ 28 | SIGNED_BIT2 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/bank/IParameterPageBank.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.bank; 6 | 7 | /** 8 | * Interface to a parameter page bank. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IParameterPageBank extends IBank 13 | { 14 | /** 15 | * Get the position of the selected item. 16 | * 17 | * @return The position 18 | */ 19 | int getSelectedItemPosition (); 20 | 21 | 22 | /** 23 | * Get the index of the selected item in the current page. 24 | * 25 | * @return The index 26 | */ 27 | int getSelectedItemIndex (); 28 | 29 | 30 | /** 31 | * Set the index of the selected item in the current page. 32 | * 33 | * @param index The index 34 | */ 35 | void selectPage (int index); 36 | } -------------------------------------------------------------------------------- /resources/GenericFlexi/Example.programs: -------------------------------------------------------------------------------- 1 | $BANK=Bass 1$MSB=0$LSB=0$CHANNEL=0 2 | 01 12 dB Goodness 3 | 02 3 PMC 4 | 03 Acid RE Flux 5 | 04 Aftertouch 6 | 05 AlphaBass 7 | 06 Attacker 8 | 07 Baby Making Bass 9 | 08 BackToTheCore 10 | 09 BasicAlbert 11 | 10 BassAndFX 12 | 11 Bassics 13 | 12 Blazing Blades 14 | 13 Bottom Bumps 15 | 14 Brainfeeder 16 | 15 ClassicFifth 17 | 16 Dark Side Bass 18 | $BANK=Bass 2$MSB=1$LSB=0$CHANNEL=0 19 | 01 DualfiltersBss 20 | 02 DubMoverBass 21 | 03 ELP Brain BASS 22 | 04 First Rep Bass 23 | 05 Fixed Sync Bass 24 | 06 FunkyBass 25 | 07 LongPlay 26 | 08 MG Fat Bass 27 | 09 MegaRave 28 | 10 NeuroFCK 29 | 11 Neurotic 30 | 12 Noisy Bass 31 | 13 Ollie Open 32 | 14 Sharp Cream 33 | 15 Sharpaf 34 | 16 Sharpy 35 | $BANK=Pads$MSB=2$LSB=0$CHANNEL=0 36 | 01 Metalizer 37 | 02 JMsPowerChord 38 | 03 Broken 39 | 04 Asian Modwheel 40 | 05 Classic sauce 41 | 06 FallingFifth 42 | 07 LostSync 43 | 08 Orgasines 44 | 09 45 | 10 46 | 11 47 | 12 48 | 13 Nostalgic String 49 | 14 AlivePad 50 | 15 JMsPad 51 | 16 Major -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/osc/IOpenSoundControlServer.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.osc; 6 | 7 | import java.io.IOException; 8 | 9 | 10 | /** 11 | * Interface for sending messages to an OSC server. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IOpenSoundControlServer 16 | { 17 | /** 18 | * Starts the server on the given port. If it was already running it is restarted. 19 | * 20 | * @param port The port to start the server on 21 | * @throws IOException Could not start the server 22 | */ 23 | void start (int port) throws IOException; 24 | 25 | 26 | /** 27 | * Returns the port on which the OSC server is listening. 28 | * 29 | * @return The port or -1 if the server has not been started 30 | */ 31 | int getListeningPort (); 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/IGroove.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw; 6 | 7 | import de.mossgrabers.framework.observer.IObserverManagement; 8 | import de.mossgrabers.framework.parameter.IParameter; 9 | 10 | 11 | /** 12 | * Interface to the Groove. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public interface IGroove extends IObserverManagement 17 | { 18 | /** 19 | * Get all groove parameters. 20 | * 21 | * @param id The ID of the parameter to get 22 | * @return The groove parameter, might be null if not supported by the implementation 23 | */ 24 | IParameter getParameter (GrooveParameterID id); 25 | 26 | 27 | /** 28 | * Sets indication for all groove parameters. 29 | * 30 | * @param enable True to enable 31 | */ 32 | void setIndication (boolean enable); 33 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/framework/daw/data/FocusedParameterImpl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.framework.daw.data; 6 | 7 | import com.bitwig.extension.controller.api.Parameter; 8 | 9 | import de.mossgrabers.framework.controller.valuechanger.IValueChanger; 10 | import de.mossgrabers.framework.parameter.IFocusedParameter; 11 | 12 | 13 | /** 14 | * Encapsulates the data of a parameter in focus, e.g. hovered by the mouse or last touched. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class FocusedParameterImpl extends ParameterImpl implements IFocusedParameter 19 | { 20 | /** 21 | * Constructor. 22 | * 23 | * @param valueChanger The value changer 24 | * @param parameter The parameter 25 | */ 26 | public FocusedParameterImpl (final IValueChanger valueChanger, final Parameter parameter) 27 | { 28 | super (valueChanger, parameter, 0); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/osc/OSCControlSurface.java: -------------------------------------------------------------------------------- 1 | package de.mossgrabers.controller.osc; 2 | 3 | import de.mossgrabers.framework.controller.AbstractControlSurface; 4 | import de.mossgrabers.framework.controller.color.ColorManager; 5 | import de.mossgrabers.framework.daw.IHost; 6 | import de.mossgrabers.framework.daw.midi.IMidiInput; 7 | 8 | 9 | /** 10 | * A dummy surface implementation for OSC. 11 | * 12 | * @author Jürgen Moßgraber 13 | */ 14 | public class OSCControlSurface extends AbstractControlSurface 15 | { 16 | /** 17 | * Constructor. 18 | * 19 | * @param host The host 20 | * @param colorManager The color manager 21 | * @param configuration The configuration 22 | * @param input The MIDI input 23 | */ 24 | public OSCControlSurface (final IHost host, final OSCConfiguration configuration, final ColorManager colorManager, final IMidiInput input) 25 | { 26 | super (host, configuration, colorManager, null, input, null, 100, 100); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/display/IDisplay.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.display; 6 | 7 | /** 8 | * Interface to a display. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IDisplay 13 | { 14 | /** 15 | * Displays a notification message on the display and in the DAW. 16 | * 17 | * @param message The message to display 18 | */ 19 | void notify (final String message); 20 | 21 | 22 | /** 23 | * Cancels the display of a notification message. 24 | */ 25 | void cancelNotification (); 26 | 27 | 28 | /** 29 | * Check if a notification is active. 30 | * 31 | * @return True if a notification is active 32 | */ 33 | boolean isNotificationActive (); 34 | 35 | 36 | /** 37 | * If there is any cleanup necessary. 38 | */ 39 | void shutdown (); 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/mode/track/TrackSelectMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.mode.track; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.IControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | 11 | 12 | /** 13 | * The track select mode. 14 | * 15 | * @param The type of the control surface 16 | * @param The type of the configuration 17 | * 18 | * @author Jürgen Moßgraber 19 | */ 20 | public class TrackSelectMode, C extends Configuration> extends DefaultTrackMode 21 | { 22 | /** 23 | * Constructor. 24 | * 25 | * @param surface The surface 26 | * @param model The model 27 | */ 28 | public TrackSelectMode (final S surface, final IModel model) 29 | { 30 | super ("Track Select", surface, model, true); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/osc/IOpenSoundControlClient.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.osc; 6 | 7 | import java.io.IOException; 8 | import java.util.List; 9 | 10 | 11 | /** 12 | * Interface for sending messages to an OSC server. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public interface IOpenSoundControlClient 17 | { 18 | /** 19 | * Send a message to the server. 20 | * 21 | * @param message The message to send 22 | * @throws IOException Could not send the message 23 | */ 24 | void sendMessage (IOpenSoundControlMessage message) throws IOException; 25 | 26 | 27 | /** 28 | * Send several messages to the server as an OSC bundle. 29 | * 30 | * @param messages The messages to send 31 | * @throws IOException Could not send the messages 32 | */ 33 | void sendBundle (List messages) throws IOException; 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/configuration/IValueSetting.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.configuration; 6 | 7 | import de.mossgrabers.framework.observer.IValueObserver; 8 | 9 | 10 | /** 11 | * An interface to a setting which edits a value. 12 | * 13 | * @param The type of the settings value 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public interface IValueSetting extends ISetting 18 | { 19 | /** 20 | * Add an observer for a change of the value. 21 | * 22 | * @param observer The observer 23 | */ 24 | void addValueObserver (IValueObserver observer); 25 | 26 | 27 | /** 28 | * Set the value of the setting. 29 | * 30 | * @param value The value 31 | */ 32 | void set (T value); 33 | 34 | 35 | /** 36 | * Get the current value of the setting. 37 | * 38 | * @return The value 39 | */ 40 | T get (); 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/osc/IOpenSoundControlConfiguration.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.osc; 6 | 7 | /** 8 | * The configuration interface for OSC settings. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IOpenSoundControlConfiguration 13 | { 14 | /** 15 | * Get if logging of input commands should be enabled. 16 | * 17 | * @return True if logging should be enabled 18 | */ 19 | boolean shouldLogInputCommands (); 20 | 21 | 22 | /** 23 | * Get if logging of output commands should be enabled. 24 | * 25 | * @return True if logging should be enabled 26 | */ 27 | boolean shouldLogOutputCommands (); 28 | 29 | 30 | /** 31 | * Return true to filter heartbeat messages (e.g. ping) from message logging. 32 | * 33 | * @return True to enable filtering 34 | */ 35 | boolean filterHeartbeatMessages (); 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/framework/daw/data/Util.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.framework.daw.data; 6 | 7 | import com.bitwig.extension.controller.api.Subscribable; 8 | 9 | 10 | /** 11 | * Helper functions for Bitwig API. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public final class Util 16 | { 17 | /** 18 | * Private due to utility class. 19 | */ 20 | private Util () 21 | { 22 | // Intentionally empty 23 | } 24 | 25 | 26 | /** 27 | * Hides new subscribe/unsubscribe API. 28 | * 29 | * @param subscribable The subscribable 30 | * @param enable True to subscribe, otherwise unsubscribed 31 | */ 32 | public static void setIsSubscribed (final Subscribable subscribable, final boolean enable) 33 | { 34 | if (enable) 35 | subscribable.subscribe (); 36 | else 37 | subscribable.unsubscribe (); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/oxi/one/view/OxiOneRaindropsView.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.oxi.one.view; 6 | 7 | import de.mossgrabers.controller.oxi.one.OxiOneConfiguration; 8 | import de.mossgrabers.controller.oxi.one.controller.OxiOneControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | import de.mossgrabers.framework.view.Views; 11 | import de.mossgrabers.framework.view.sequencer.AbstractRaindropsView; 12 | 13 | 14 | /** 15 | * The Raindrops Sequencer view. 16 | * 17 | * @author Jürgen Moßgraber 18 | */ 19 | public class OxiOneRaindropsView extends AbstractRaindropsView 20 | { 21 | /** 22 | * Constructor. 23 | * 24 | * @param surface The surface 25 | * @param model The model 26 | */ 27 | public OxiOneRaindropsView (final OxiOneControlSurface surface, final IModel model) 28 | { 29 | super (Views.NAME_RAINDROPS, surface, model, true, 16); 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/usb/IUsbEndpoint.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.usb; 6 | 7 | import de.mossgrabers.framework.daw.IMemoryBlock; 8 | 9 | 10 | /** 11 | * Interface to an USB end-point. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IUsbEndpoint 16 | { 17 | /** 18 | * Send data to the end-point. 19 | * 20 | * @param memoryBlock The memory block with the data to send 21 | * @param timeout Timeout for the sending task 22 | */ 23 | void send (IMemoryBlock memoryBlock, int timeout); 24 | 25 | 26 | /** 27 | * Send data asynchronously to the end-point. 28 | * 29 | * @param memoryBlock The memory block with the data to send 30 | * @param callback Callback when the sending has finished 31 | * @param timeout Timeout for the sending task 32 | */ 33 | void sendAsync (IMemoryBlock memoryBlock, IUsbCallback callback, int timeout); 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/apc/mode/PanMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.apc.mode; 6 | 7 | import de.mossgrabers.controller.akai.apc.controller.APCControlSurface; 8 | import de.mossgrabers.framework.daw.IModel; 9 | import de.mossgrabers.framework.daw.data.ITrack; 10 | import de.mossgrabers.framework.parameterprovider.track.PanParameterProvider; 11 | 12 | 13 | /** 14 | * Panning knob mode. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class PanMode extends BaseMode 19 | { 20 | /** 21 | * Constructor. 22 | * 23 | * @param surface The control surface 24 | * @param model The model 25 | */ 26 | public PanMode (final APCControlSurface surface, final IModel model) 27 | { 28 | super ("Panning", surface, model, APCControlSurface.LED_MODE_PAN, model.getCurrentTrackBank ()); 29 | 30 | this.setParameterProvider (new PanParameterProvider (model)); 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ableton/push/view/RaindropsView.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ableton.push.view; 6 | 7 | import de.mossgrabers.controller.ableton.push.PushConfiguration; 8 | import de.mossgrabers.controller.ableton.push.controller.PushControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | import de.mossgrabers.framework.view.Views; 11 | import de.mossgrabers.framework.view.sequencer.AbstractRaindropsView; 12 | 13 | 14 | /** 15 | * The Raindrops Sequencer view. 16 | * 17 | * @author Jürgen Moßgraber 18 | */ 19 | public class RaindropsView extends AbstractRaindropsView 20 | { 21 | /** 22 | * Constructor. 23 | * 24 | * @param surface The surface 25 | * @param model The model 26 | */ 27 | public RaindropsView (final PushControlSurface surface, final IModel model) 28 | { 29 | super (Views.NAME_RAINDROPS, surface, model, true); 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/kontrol/mkii/controller/KontrolProtocol.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.kontrol.mkii.controller; 6 | 7 | /** 8 | * Information about the Komplete Kontrol MIDI protocol. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public final class KontrolProtocol 13 | { 14 | /** Protocol version 1. */ 15 | public static final int VERSION_1 = 1; 16 | /** Protocol version 2. */ 17 | public static final int VERSION_2 = 2; 18 | /** Protocol version 3. */ 19 | public static final int VERSION_3 = 3; 20 | /** Protocol version 4. */ 21 | public static final int VERSION_4 = 4; 22 | 23 | /** The maximal NIHIA protocol version which is supported by this extension. */ 24 | public static final int MAX_VERSION = VERSION_4; 25 | 26 | 27 | /** 28 | * Constructor. 29 | */ 30 | private KontrolProtocol () 31 | { 32 | // Intentionally empty 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/ICursorLayer.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | import java.util.Optional; 8 | 9 | import de.mossgrabers.framework.daw.data.bank.IDeviceBank; 10 | import de.mossgrabers.framework.daw.data.bank.ILayerBank; 11 | 12 | 13 | /** 14 | * A cursor which monitors the selected layer of a device which supports layers. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public interface ICursorLayer 19 | { 20 | /** 21 | * Get the device bank. 22 | * 23 | * @return The device bank 24 | */ 25 | IDeviceBank getDeviceBank (); 26 | 27 | 28 | /** 29 | * Get the selected device. 30 | * 31 | * @return The device if there is a selection 32 | */ 33 | Optional getSelectedDevice (); 34 | 35 | 36 | /** 37 | * Get the layer bank which is monitored by the cursor. 38 | * 39 | * @return The layer bank 40 | */ 41 | ILayerBank getLayerBank (); 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/framework/daw/data/MetronomeVolumeParameterImpl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.framework.daw.data; 6 | 7 | import com.bitwig.extension.controller.api.SettableRangedValue; 8 | 9 | import de.mossgrabers.framework.controller.valuechanger.IValueChanger; 10 | 11 | 12 | /** 13 | * A parameter for the metronome volume. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public class MetronomeVolumeParameterImpl extends RangedValueImpl 18 | { 19 | /** 20 | * Constructor. 21 | * 22 | * @param valueChanger The value changer 23 | * @param rangedValue The ranged value 24 | */ 25 | public MetronomeVolumeParameterImpl (final IValueChanger valueChanger, final SettableRangedValue rangedValue) 26 | { 27 | super ("Metronome Volume", valueChanger, rangedValue, 0); 28 | } 29 | 30 | 31 | /** {@inheritDoc} */ 32 | @Override 33 | public void resetValue () 34 | { 35 | this.setNormalizedValue (0.8); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/command/core/NopCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.command.core; 6 | 7 | import de.mossgrabers.framework.utils.ButtonEvent; 8 | 9 | 10 | /** 11 | * The No Operation command. Does nothing. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public class NopCommand implements TriggerCommand, ContinuousCommand 16 | { 17 | /** The singleton. */ 18 | public static final NopCommand INSTANCE = new NopCommand (); 19 | 20 | 21 | /** 22 | * Constructor. 23 | */ 24 | private NopCommand () 25 | { 26 | // Intentionally empty 27 | } 28 | 29 | 30 | /** {@inheritDoc} */ 31 | @Override 32 | public void execute (final ButtonEvent event, final int velocity) 33 | { 34 | // Intentionally empty 35 | } 36 | 37 | 38 | /** {@inheritDoc} */ 39 | @Override 40 | public void execute (final int value) 41 | { 42 | // Intentionally empty 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/IHwControl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | /** 8 | * A control on a controller surface. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IHwControl 13 | { 14 | /** 15 | * Get the label. 16 | * 17 | * @return The label 18 | */ 19 | String getLabel (); 20 | 21 | 22 | /** 23 | * Update the state of the control (e.g. light, fader position). 24 | */ 25 | void update (); 26 | 27 | 28 | /** 29 | * The physical bounds of this hardware element on the controller. The unit is scaled into the 30 | * GUI window. 31 | * 32 | * @param x The X position of the control 33 | * @param y The Y position of the control 34 | * @param width The width of the control 35 | * @param height The height of the control 36 | */ 37 | void setBounds (double x, double y, double width, double height); 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/bank/IParameterBank.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.bank; 6 | 7 | import de.mossgrabers.framework.observer.IParameterValueObserver; 8 | import de.mossgrabers.framework.parameter.IParameter; 9 | 10 | 11 | /** 12 | * Interface to a parameter bank. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public interface IParameterBank extends IBank 17 | { 18 | /** 19 | * Get the parameter page bank. 20 | * 21 | * @return The bank 22 | */ 23 | IParameterPageBank getPageBank (); 24 | 25 | 26 | /** 27 | * Add an observer for value changes of the parameters on the active page. Must only be called 28 | * on startup! 29 | * 30 | * @param observer The observer to notify on a value change, the parameters are the index of the 31 | * active page and the index of the parameter 32 | */ 33 | void addValueObserver (final IParameterValueObserver observer); 34 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/DummyControlSurface.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.color.ColorManager; 9 | import de.mossgrabers.framework.daw.IHost; 10 | 11 | 12 | /** 13 | * Dummy control surface for implementations, which only implement a protocol. 14 | * 15 | * @param The type of the configuration 16 | * 17 | * @author Jürgen Moßgraber 18 | */ 19 | public class DummyControlSurface extends AbstractControlSurface 20 | { 21 | /** 22 | * Constructor. 23 | * 24 | * @param host The host 25 | * @param colorManager The color manager 26 | * @param configuration The configuration 27 | */ 28 | public DummyControlSurface (final IHost host, final ColorManager colorManager, final C configuration) 29 | { 30 | super (host, configuration, colorManager, null, null, null, 10, 10); 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/parameterprovider/track/CrossfadeParameterProvider.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.parameterprovider.track; 6 | 7 | import de.mossgrabers.framework.daw.IModel; 8 | import de.mossgrabers.framework.parameter.IParameter; 9 | 10 | 11 | /** 12 | * Get a number of parameters. This implementation provides all crossfade parameters of the tracks 13 | * of the current track bank. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public class CrossfadeParameterProvider extends AbstractTrackParameterProvider 18 | { 19 | /** 20 | * Constructor. 21 | * 22 | * @param model Uses the current track bank from this model to get the parameters 23 | */ 24 | public CrossfadeParameterProvider (final IModel model) 25 | { 26 | super (model); 27 | } 28 | 29 | 30 | /** {@inheritDoc} */ 31 | @Override 32 | public IParameter get (final int index) 33 | { 34 | return this.bank.getItem (index).getCrossfadeParameter (); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/utils/ConsoleLogger.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.utils; 6 | 7 | import de.mossgrabers.framework.daw.IHost; 8 | 9 | 10 | /** 11 | * Static global logger. Do not use for production. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public class ConsoleLogger 16 | { 17 | private static IHost globalHost; 18 | 19 | 20 | /** 21 | * Constructor. 22 | */ 23 | private ConsoleLogger () 24 | { 25 | // Intentionally empty 26 | } 27 | 28 | 29 | /** 30 | * Initialize the host for logging. 31 | * 32 | * @param host The host 33 | */ 34 | public static void init (final IHost host) 35 | { 36 | globalHost = host; 37 | } 38 | 39 | 40 | /** 41 | * Log a message. 42 | * 43 | * @param message The message 44 | */ 45 | public static void log (final String message) 46 | { 47 | if (globalHost != null) 48 | globalHost.println (message); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/apcmini/controller/APCminiScales.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.apcmini.controller; 6 | 7 | import de.mossgrabers.framework.controller.valuechanger.IValueChanger; 8 | import de.mossgrabers.framework.scale.Scales; 9 | 10 | 11 | /** 12 | * Changes matrices to different grid note mapping of the APCmini. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public class APCminiScales extends Scales 17 | { 18 | /** 19 | * Constructor. 20 | * 21 | * @param valueChanger A value changer 22 | */ 23 | public APCminiScales (final IValueChanger valueChanger) 24 | { 25 | super (valueChanger, 36, 100, 8, 8); 26 | } 27 | 28 | 29 | /** {@inheritDoc} */ 30 | @Override 31 | public int [] translateMatrixToGrid (final int [] matrix) 32 | { 33 | final int [] gridMatrix = Scales.getEmptyMatrix (); 34 | for (int i = 36; i < 100; i++) 35 | gridMatrix[i - 36] = matrix[i]; 36 | return gridMatrix; 37 | } 38 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/gamepad/controller/IGamepadCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.gamepad.controller; 6 | 7 | import de.mossgrabers.framework.utils.ButtonEvent; 8 | 9 | import com.studiohartman.jamepad.ControllerAxis; 10 | import com.studiohartman.jamepad.ControllerButton; 11 | 12 | 13 | /** 14 | * Interface for a callback when data from a Gamepad controller is received. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public interface IGamepadCallback 19 | { 20 | /** 21 | * Called when ready to process the results. 22 | * 23 | * @param button The pressed or released gamepad button 24 | * @param event The button event 25 | */ 26 | void process (ControllerButton button, ButtonEvent event); 27 | 28 | 29 | /** 30 | * Called when ready to process the results. 31 | * 32 | * @param continuous The continuous axis controller on the gamepad 33 | * @param value The new value 34 | */ 35 | void process (ControllerAxis continuous, float value); 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/fire/controller/FireScales.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.fire.controller; 6 | 7 | import de.mossgrabers.framework.controller.valuechanger.IValueChanger; 8 | import de.mossgrabers.framework.scale.Scales; 9 | 10 | 11 | /** 12 | * Changes matrices to different grid note mapping of the Fire. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public class FireScales extends Scales 17 | { 18 | /** 19 | * Constructor. 20 | * 21 | * @param valueChanger A value changer 22 | */ 23 | public FireScales (final IValueChanger valueChanger) 24 | { 25 | super (valueChanger, 36, 100, 16, 4); 26 | } 27 | 28 | 29 | /** {@inheritDoc} */ 30 | @Override 31 | public int [] translateMatrixToGrid (final int [] matrix) 32 | { 33 | final int [] gridMatrix = Scales.getEmptyMatrix (); 34 | for (int i = 36; i < 100; i++) 35 | gridMatrix[FirePadGrid.TRANSLATE_16x4_MATRIX[i - 36]] = matrix[i]; 36 | return gridMatrix; 37 | } 38 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/constants/TransportConstants.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.constants; 6 | 7 | /** 8 | * Constants for the transport. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public final class TransportConstants 13 | { 14 | /** 1 bar. */ 15 | public static final double INC_FRACTION_TIME = 1.0 * 4; 16 | /** 1/16th of a quarter. */ 17 | public static final double INC_FRACTION_TIME_SLOW = 1.0; 18 | 19 | /** 1 percent. */ 20 | public static final double INC_FRACTION_ACCENT = 1.0; 21 | /** 1/16 percent. */ 22 | public static final double INC_FRACTION_ACCENT_SLOW = 1.0 / 16; 23 | 24 | /** The minimum tempo in BPM. */ 25 | public static final int MIN_TEMPO = 20; 26 | /** The maximum tempo in BPM. */ 27 | public static final int MAX_TEMPO = 666; 28 | 29 | 30 | /** 31 | * Helper class constructor. 32 | */ 33 | private TransportConstants () 34 | { 35 | // Intentionally empty 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/graphics/IBitmap.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.graphics; 6 | 7 | /** 8 | * An interface to a bitmap, which can also be displayed in a window. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IBitmap 13 | { 14 | /** 15 | * Set a title for the window, which displays the Bitmap. 16 | * 17 | * @param title The title 18 | */ 19 | void setDisplayWindowTitle (String title); 20 | 21 | 22 | /** 23 | * Show the display window. 24 | */ 25 | void showDisplayWindow (); 26 | 27 | 28 | /** 29 | * Render the content of the bitmap. 30 | * 31 | * @param enableAntialias True to enable anti aliasing 32 | * @param renderer The renderer to draw on the bitmap 33 | */ 34 | void render (boolean enableAntialias, IRenderer renderer); 35 | 36 | 37 | /** 38 | * Encode the bitmap data into a different format. 39 | * 40 | * @param encoder The encoder to use 41 | */ 42 | void encode (IEncoder encoder); 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/novation/launchpad/command/trigger/TrackCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.novation.launchpad.command.trigger; 6 | 7 | import de.mossgrabers.controller.novation.launchpad.controller.LaunchpadControlSurface; 8 | import de.mossgrabers.framework.daw.IModel; 9 | import de.mossgrabers.framework.mode.Modes; 10 | import de.mossgrabers.framework.utils.ButtonEvent; 11 | 12 | 13 | /** 14 | * Track select command. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class TrackCommand extends AbstractTrackCommand 19 | { 20 | /** 21 | * Constructor. 22 | * 23 | * @param model The model 24 | * @param surface The surface 25 | */ 26 | public TrackCommand (final IModel model, final LaunchpadControlSurface surface) 27 | { 28 | super (model, surface); 29 | } 30 | 31 | 32 | /** {@inheritDoc} */ 33 | @Override 34 | public void execute (final ButtonEvent event, final int velocity) 35 | { 36 | this.onModeButton (event, Modes.MUTE, "Mute"); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/novation/launchpad/command/trigger/PanCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.novation.launchpad.command.trigger; 6 | 7 | import de.mossgrabers.controller.novation.launchpad.controller.LaunchpadControlSurface; 8 | import de.mossgrabers.framework.daw.IModel; 9 | import de.mossgrabers.framework.utils.ButtonEvent; 10 | import de.mossgrabers.framework.view.Views; 11 | 12 | 13 | /** 14 | * Track panning command. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class PanCommand extends AbstractTrackCommand 19 | { 20 | /** 21 | * Constructor. 22 | * 23 | * @param model The model 24 | * @param surface The surface 25 | */ 26 | public PanCommand (final IModel model, final LaunchpadControlSurface surface) 27 | { 28 | super (model, surface); 29 | } 30 | 31 | 32 | /** {@inheritDoc} */ 33 | @Override 34 | public void execute (final ButtonEvent event, final int velocity) 35 | { 36 | this.onFaderModeButton (event, Views.TRACK_PAN, "Pan"); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/command/core/AbstractPitchbendCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.command.core; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.IControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | 11 | 12 | /** 13 | * Abstract base class for aftertouch commands. 14 | * 15 | * @param The type of the control surface 16 | * @param The type of the configuration 17 | * 18 | * @author Jürgen Moßgraber 19 | */ 20 | public abstract class AbstractPitchbendCommand, C extends Configuration> implements PitchbendCommand 21 | { 22 | protected final IModel model; 23 | protected final S surface; 24 | 25 | 26 | /** 27 | * Constructor. 28 | * 29 | * @param model The model 30 | * @param surface The surface 31 | */ 32 | protected AbstractPitchbendCommand (final IModel model, final S surface) 33 | { 34 | this.model = model; 35 | this.surface = surface; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/parameterprovider/device/PanLayerOrDrumPadParameterProvider.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.parameterprovider.device; 6 | 7 | import de.mossgrabers.framework.daw.data.ISpecificDevice; 8 | import de.mossgrabers.framework.parameter.IParameter; 9 | 10 | 11 | /** 12 | * Get a number of parameters. This implementation provides all panning parameters of the layers of 13 | * the current device. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public class PanLayerOrDrumPadParameterProvider extends AbstractLayerOrDrumPadParameterProvider 18 | { 19 | /** 20 | * Constructor. 21 | * 22 | * @param device Uses the layer bank from the given device to get their volume parameters 23 | */ 24 | public PanLayerOrDrumPadParameterProvider (final ISpecificDevice device) 25 | { 26 | super (device); 27 | } 28 | 29 | 30 | /** {@inheritDoc} */ 31 | @Override 32 | public IParameter get (final int index) 33 | { 34 | return this.bank.getItem (index).getPanParameter (); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/command/core/AbstractAftertouchCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.command.core; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.IControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | 11 | 12 | /** 13 | * Abstract base class for aftertouch commands. 14 | * 15 | * @param The type of the control surface 16 | * @param The type of the configuration 17 | * 18 | * @author Jürgen Moßgraber 19 | */ 20 | public abstract class AbstractAftertouchCommand, C extends Configuration> implements AftertouchCommand 21 | { 22 | protected final IModel model; 23 | protected final S surface; 24 | 25 | 26 | /** 27 | * Constructor. 28 | * 29 | * @param model The model 30 | * @param surface The surface 31 | */ 32 | protected AbstractAftertouchCommand (final IModel model, final S surface) 33 | { 34 | this.model = model; 35 | this.surface = surface; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/apc/command/trigger/APCBrowserCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.apc.command.trigger; 6 | 7 | import de.mossgrabers.controller.akai.apc.APCConfiguration; 8 | import de.mossgrabers.controller.akai.apc.controller.APCControlSurface; 9 | import de.mossgrabers.framework.command.trigger.BrowserCommand; 10 | import de.mossgrabers.framework.daw.IModel; 11 | 12 | 13 | /** 14 | * The browser command. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class APCBrowserCommand extends BrowserCommand 19 | { 20 | /** 21 | * Constructor. 22 | * 23 | * @param model The model 24 | * @param surface The surface 25 | */ 26 | public APCBrowserCommand (final IModel model, final APCControlSurface surface) 27 | { 28 | super (model, surface); 29 | } 30 | 31 | 32 | /** {@inheritDoc} */ 33 | @Override 34 | protected boolean getCommit () 35 | { 36 | return !this.surface.isMkII () || !this.surface.isShiftPressed (); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/usb/IUsbDevice.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.usb; 6 | 7 | import java.util.Optional; 8 | 9 | 10 | /** 11 | * Interface to an USB device. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IUsbDevice 16 | { 17 | /** 18 | * Create an end-point for the USB device. 19 | * 20 | * @param interfaceIndex The index of the registered interface 21 | * @param endpointIndex The index of the registered end-point 22 | * @return The end-point 23 | * @throws UsbException Could not lookup or open the end-point 24 | */ 25 | IUsbEndpoint getEndpoint (final int interfaceIndex, final int endpointIndex) throws UsbException; 26 | 27 | 28 | /** 29 | * Release the USB device. 30 | */ 31 | void release (); 32 | 33 | 34 | /** 35 | * Gets the USB device as a HID Device. 36 | * 37 | * @return The HID device 38 | * @throws UsbException Could not lookup or open the device 39 | */ 40 | Optional getHidDevice () throws UsbException; 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/novation/launchpad/command/trigger/VolumeCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.novation.launchpad.command.trigger; 6 | 7 | import de.mossgrabers.controller.novation.launchpad.controller.LaunchpadControlSurface; 8 | import de.mossgrabers.framework.daw.IModel; 9 | import de.mossgrabers.framework.utils.ButtonEvent; 10 | import de.mossgrabers.framework.view.Views; 11 | 12 | 13 | /** 14 | * Track volume command. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class VolumeCommand extends AbstractTrackCommand 19 | { 20 | /** 21 | * Constructor. 22 | * 23 | * @param model The model 24 | * @param surface The surface 25 | */ 26 | public VolumeCommand (final IModel model, final LaunchpadControlSurface surface) 27 | { 28 | super (model, surface); 29 | } 30 | 31 | 32 | /** {@inheritDoc} */ 33 | @Override 34 | public void execute (final ButtonEvent event, final int velocity) 35 | { 36 | this.onFaderModeButton (event, Views.TRACK_VOLUME, "Volume"); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/AbstractHwInputControl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | import de.mossgrabers.framework.daw.IHost; 8 | import de.mossgrabers.framework.daw.midi.IMidiInput; 9 | 10 | 11 | /** 12 | * A control on a hardware controller. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public abstract class AbstractHwInputControl extends AbstractHwControl implements IHwInputControl 17 | { 18 | protected IMidiInput input; 19 | protected BindType type; 20 | protected int channel; 21 | 22 | 23 | /** 24 | * Constructor. 25 | * 26 | * @param host The host 27 | * @param label The label of the control 28 | */ 29 | protected AbstractHwInputControl (final IHost host, final String label) 30 | { 31 | super (host, label); 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | public void bind (final IMidiInput input, final BindType type, final int value) 38 | { 39 | this.bind (input, type, 0, value); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/parameterprovider/device/VolumeLayerOrDrumPadParameterProvider.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.parameterprovider.device; 6 | 7 | import de.mossgrabers.framework.daw.data.ISpecificDevice; 8 | import de.mossgrabers.framework.parameter.IParameter; 9 | 10 | 11 | /** 12 | * Get a number of parameters. This implementation provides all volume parameters of the layers of 13 | * the current device. 14 | * 15 | * @author Jürgen Moßgraber 16 | */ 17 | public class VolumeLayerOrDrumPadParameterProvider extends AbstractLayerOrDrumPadParameterProvider 18 | { 19 | /** 20 | * Constructor. 21 | * 22 | * @param device Uses the layer bank from the given device to get their volume parameters 23 | */ 24 | public VolumeLayerOrDrumPadParameterProvider (final ISpecificDevice device) 25 | { 26 | super (device); 27 | } 28 | 29 | 30 | /** {@inheritDoc} */ 31 | @Override 32 | public IParameter get (final int index) 33 | { 34 | return this.bank.getItem (index).getVolumeParameter (); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/hardware/AbstractHwControl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.hardware; 6 | 7 | import de.mossgrabers.framework.daw.IHost; 8 | 9 | 10 | /** 11 | * A control on a hardware controller. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public abstract class AbstractHwControl implements IHwControl 16 | { 17 | protected final IHost host; 18 | protected final String label; 19 | 20 | 21 | /** 22 | * Constructor. 23 | * 24 | * @param host The host 25 | * @param label The label of the control 26 | */ 27 | protected AbstractHwControl (final IHost host, final String label) 28 | { 29 | this.host = host; 30 | this.label = label; 31 | } 32 | 33 | 34 | /** {@index} */ 35 | @Override 36 | public String getLabel () 37 | { 38 | return this.label; 39 | } 40 | 41 | 42 | /** {@index} */ 43 | @Override 44 | public void update () 45 | { 46 | // Intentionally empty, overwrite for update functionality 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/novation/launchpad/command/trigger/TrackSelectCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.novation.launchpad.command.trigger; 6 | 7 | import de.mossgrabers.controller.novation.launchpad.controller.LaunchpadControlSurface; 8 | import de.mossgrabers.framework.daw.IModel; 9 | import de.mossgrabers.framework.mode.Modes; 10 | import de.mossgrabers.framework.utils.ButtonEvent; 11 | 12 | 13 | /** 14 | * Track select command. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class TrackSelectCommand extends AbstractTrackCommand 19 | { 20 | /** 21 | * Constructor. 22 | * 23 | * @param model The model 24 | * @param surface The surface 25 | */ 26 | public TrackSelectCommand (final IModel model, final LaunchpadControlSurface surface) 27 | { 28 | super (model, surface); 29 | } 30 | 31 | 32 | /** {@inheritDoc} */ 33 | @Override 34 | public void execute (final ButtonEvent event, final int velocity) 35 | { 36 | this.onModeButton (event, Modes.TRACK_SELECT, "Track Select"); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/mode/layer/LayerMuteMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.mode.layer; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.IControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | import de.mossgrabers.framework.daw.data.ILayer; 11 | 12 | 13 | /** 14 | * The layer mute mode. 15 | * 16 | * @param The type of the control surface 17 | * @param The type of the configuration 18 | * 19 | * @author Jürgen Moßgraber 20 | */ 21 | public class LayerMuteMode, C extends Configuration> extends DefaultLayerMode 22 | { 23 | /** 24 | * Constructor. 25 | * 26 | * @param surface The surface 27 | * @param model The model 28 | */ 29 | public LayerMuteMode (final S surface, final IModel model) 30 | { 31 | super ("Layer Mute", surface, model, true); 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | protected void executeMethod (final ILayer layer) 38 | { 39 | layer.toggleMute (); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/mode/layer/LayerSoloMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.mode.layer; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.IControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | import de.mossgrabers.framework.daw.data.ILayer; 11 | 12 | 13 | /** 14 | * The layer solo mode. 15 | * 16 | * @param The type of the control surface 17 | * @param The type of the configuration 18 | * 19 | * @author Jürgen Moßgraber 20 | */ 21 | public class LayerSoloMode, C extends Configuration> extends DefaultLayerMode 22 | { 23 | /** 24 | * Constructor. 25 | * 26 | * @param surface The surface 27 | * @param model The model 28 | */ 29 | public LayerSoloMode (final S surface, final IModel model) 30 | { 31 | super ("Layer Solo", surface, model, true); 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | protected void executeMethod (final ILayer layer) 38 | { 39 | layer.toggleSolo (); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/mode/track/TrackMuteMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.mode.track; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.IControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | import de.mossgrabers.framework.daw.data.ITrack; 11 | 12 | 13 | /** 14 | * The track mute mode. 15 | * 16 | * @param The type of the control surface 17 | * @param The type of the configuration 18 | * 19 | * @author Jürgen Moßgraber 20 | */ 21 | public class TrackMuteMode, C extends Configuration> extends DefaultTrackMode 22 | { 23 | /** 24 | * Constructor. 25 | * 26 | * @param surface The surface 27 | * @param model The model 28 | */ 29 | public TrackMuteMode (final S surface, final IModel model) 30 | { 31 | super ("Track Mute", surface, model, true); 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | protected void executeMethod (final ITrack track) 38 | { 39 | track.toggleMute (); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/mode/track/TrackSoloMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.mode.track; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.IControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | import de.mossgrabers.framework.daw.data.ITrack; 11 | 12 | 13 | /** 14 | * The track solo mode. 15 | * 16 | * @param The type of the control surface 17 | * @param The type of the configuration 18 | * 19 | * @author Jürgen Moßgraber 20 | */ 21 | public class TrackSoloMode, C extends Configuration> extends DefaultTrackMode 22 | { 23 | /** 24 | * Constructor. 25 | * 26 | * @param surface The surface 27 | * @param model The model 28 | */ 29 | public TrackSoloMode (final S surface, final IModel model) 30 | { 31 | super ("Track Solo", surface, model, true); 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | protected void executeMethod (final ITrack track) 38 | { 39 | track.toggleSolo (); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/novation/sl/command/continuous/TapTempoInitMkICommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.novation.sl.command.continuous; 6 | 7 | import de.mossgrabers.controller.novation.sl.SLConfiguration; 8 | import de.mossgrabers.controller.novation.sl.controller.SLControlSurface; 9 | import de.mossgrabers.framework.command.core.AbstractContinuousCommand; 10 | import de.mossgrabers.framework.daw.IModel; 11 | 12 | 13 | /** 14 | * Dedicated Tap Tempo and Tempo Input Knob on MKI. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class TapTempoInitMkICommand extends AbstractContinuousCommand 19 | { 20 | /** 21 | * Constructor. 22 | * 23 | * @param model The model 24 | * @param surface The surface 25 | */ 26 | public TapTempoInitMkICommand (final IModel model, final SLControlSurface surface) 27 | { 28 | super (model, surface); 29 | } 30 | 31 | 32 | /** {@inheritDoc} */ 33 | @Override 34 | public void execute (final int value) 35 | { 36 | this.surface.setLastCC94Value (value); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/view/TransposeView.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.view; 6 | 7 | import de.mossgrabers.framework.utils.ButtonEvent; 8 | 9 | 10 | /** 11 | * Interface for transposing up and down. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface TransposeView 16 | { 17 | /** 18 | * Trigger to display 1 octave lower. 19 | * 20 | * @param event The button event 21 | */ 22 | void onOctaveDown (final ButtonEvent event); 23 | 24 | 25 | /** 26 | * Trigger to display 1 octave higher. 27 | * 28 | * @param event The button event 29 | */ 30 | void onOctaveUp (final ButtonEvent event); 31 | 32 | 33 | /** 34 | * Test if the up button is enabled. 35 | * 36 | * @return True if enabled 37 | */ 38 | boolean isOctaveUpButtonOn (); 39 | 40 | 41 | /** 42 | * Test if the up button is enabled. 43 | * 44 | * @return True if enabled 45 | */ 46 | boolean isOctaveDownButtonOn (); 47 | 48 | 49 | /** 50 | * Resets the octave. 51 | */ 52 | void resetOctave (); 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/featuregroup/IFeatureGroup.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.featuregroup; 6 | 7 | import de.mossgrabers.framework.controller.ButtonID; 8 | 9 | 10 | /** 11 | * Interface to a feature group. A feature group has a number of controls (knobs, buttons, etc.) and 12 | * output elements like a display or LEDs. A feature group has a name and can be de-/activated. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public interface IFeatureGroup 17 | { 18 | /** 19 | * Get the name of the feature group. 20 | * 21 | * @return The name 22 | */ 23 | String getName (); 24 | 25 | 26 | /** 27 | * Called when a feature group is activated. 28 | */ 29 | void onActivate (); 30 | 31 | 32 | /** 33 | * Called when a feature group is deactivated. 34 | */ 35 | void onDeactivate (); 36 | 37 | 38 | /** 39 | * Get the color for a button, which is controlled by the feature group. 40 | * 41 | * @param buttonID The ID of the button 42 | * @return A color index 43 | */ 44 | int getButtonColor (ButtonID buttonID); 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/framework/daw/DeviceMetadataImpl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.framework.daw; 6 | 7 | import de.mossgrabers.framework.daw.data.IDeviceMetadata; 8 | 9 | 10 | /** 11 | * Default implementation for device metadata. 12 | * 13 | * @author Jürgen Moßgraber 14 | * 15 | * @param name The name of the plugin 16 | * @param id The ID of the plugin 17 | * @param pluginType The type 18 | */ 19 | public record DeviceMetadataImpl (String name, String id, PluginType pluginType) implements IDeviceMetadata 20 | { 21 | /** The type of the plug-in. */ 22 | public enum PluginType 23 | { 24 | /** A native Bitwig device. */ 25 | BITWIG, 26 | /** A CLAP device. */ 27 | CLAP, 28 | /** A VST 2 device. */ 29 | VST2, 30 | /** A VST 3 device. */ 31 | VST3 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | public String fullName () 38 | { 39 | if (this.pluginType == PluginType.BITWIG) 40 | return this.name; 41 | return String.format ("%s (%s)", this.name, this.pluginType); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/mode/track/TrackRecArmMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.mode.track; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.IControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | import de.mossgrabers.framework.daw.data.ITrack; 11 | 12 | 13 | /** 14 | * The track record arm mode. 15 | * 16 | * @param The type of the control surface 17 | * @param The type of the configuration 18 | * 19 | * @author Jürgen Moßgraber 20 | */ 21 | public class TrackRecArmMode, C extends Configuration> extends DefaultTrackMode 22 | { 23 | /** 24 | * Constructor. 25 | * 26 | * @param surface The surface 27 | * @param model The model 28 | */ 29 | public TrackRecArmMode (final S surface, final IModel model) 30 | { 31 | super ("Track Rec Arm", surface, model, true); 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | protected void executeMethod (final ITrack track) 38 | { 39 | track.toggleRecArm (); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/apc/mode/SendMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.apc.mode; 6 | 7 | import de.mossgrabers.controller.akai.apc.controller.APCControlSurface; 8 | import de.mossgrabers.framework.daw.IModel; 9 | import de.mossgrabers.framework.daw.data.ITrack; 10 | import de.mossgrabers.framework.parameterprovider.track.SendParameterProvider; 11 | 12 | 13 | /** 14 | * Panning knob mode. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class SendMode extends BaseMode 19 | { 20 | private final int sendIndex; 21 | 22 | 23 | /** 24 | * Constructor. 25 | * 26 | * @param surface The control surface 27 | * @param model The model 28 | * @param sendIndex The index of the send 29 | */ 30 | public SendMode (final APCControlSurface surface, final IModel model, final int sendIndex) 31 | { 32 | super ("Send", surface, model, APCControlSurface.LED_MODE_VOLUME, model.getCurrentTrackBank ()); 33 | 34 | this.sendIndex = sendIndex; 35 | 36 | this.setParameterProvider (new SendParameterProvider (model, this.sendIndex, 0)); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/yaeltex/turn/YaeltexTurnControllerDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.yaeltex.turn; 6 | 7 | import de.mossgrabers.framework.controller.DefaultControllerDefinition; 8 | import de.mossgrabers.framework.utils.OperatingSystem; 9 | import de.mossgrabers.framework.utils.Pair; 10 | 11 | import java.util.List; 12 | import java.util.UUID; 13 | 14 | 15 | /** 16 | * Definition class for the Yaeltex Turn controller extension. 17 | * 18 | * @author Jürgen Moßgraber 19 | */ 20 | public class YaeltexTurnControllerDefinition extends DefaultControllerDefinition 21 | { 22 | private static final UUID EXTENSION_ID = UUID.fromString ("8F86E710-83CF-4A2F-B07B-E2BE6F0D030F"); 23 | 24 | 25 | /** 26 | * Constructor. 27 | */ 28 | public YaeltexTurnControllerDefinition () 29 | { 30 | super (EXTENSION_ID, "Turn", "Yaeltex", 1, 1); 31 | } 32 | 33 | 34 | /** {@inheritDoc} */ 35 | @Override 36 | public List> getMidiDiscoveryPairs (final OperatingSystem os) 37 | { 38 | return this.createDeviceDiscoveryPairs ("TURN"); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/IScene.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | import de.mossgrabers.framework.controller.color.ColorEx; 8 | 9 | 10 | /** 11 | * Interface to a scene. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface IScene extends IItem 16 | { 17 | /** 18 | * Get the color of the scene. 19 | * 20 | * @return The color 21 | */ 22 | ColorEx getColor (); 23 | 24 | 25 | /** 26 | * Set the color of the scene. 27 | * 28 | * @param color The color 29 | */ 30 | void setColor (ColorEx color); 31 | 32 | 33 | /** 34 | * Launch a scene. 35 | * 36 | * @param isPressed If false, the release action is triggered as configured in the DAW. 37 | * @param isAlternative If true, launch the alternative launch option as configured in the DAW. 38 | */ 39 | void launch (boolean isPressed, boolean isAlternative); 40 | 41 | 42 | /** 43 | * Delete the scene. 44 | */ 45 | void remove (); 46 | 47 | 48 | /** 49 | * Duplicate the scene. 50 | */ 51 | void duplicate (); 52 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/valuechanger/OffsetBinaryRelativeValueChanger.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.valuechanger; 6 | 7 | /** 8 | * Implementation for relative values encoded in Offset Binary (e.g. used by Beatstep).
9 | * [0..127] = [-64..63] speed. 10 | * 11 | * @author Jürgen Moßgraber 12 | */ 13 | public class OffsetBinaryRelativeValueChanger extends TwosComplementValueChanger 14 | { 15 | /** 16 | * Constructor. 17 | * 18 | * @param upperBound The range of the parameter values (0 to upperBound - 1) 19 | * @param stepSize The value for de-/increasing the value by '1' without any scaling 20 | */ 21 | public OffsetBinaryRelativeValueChanger (final int upperBound, final int stepSize) 22 | { 23 | super (upperBound, stepSize); 24 | } 25 | 26 | 27 | /** {@inheritDoc} */ 28 | @Override 29 | public int decode (final int control) 30 | { 31 | return control - 64; 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | public int encode (final int speed) 38 | { 39 | return speed + 64; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/arturia/beatstep/BeatstepControllerDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.arturia.beatstep; 6 | 7 | import de.mossgrabers.framework.controller.DefaultControllerDefinition; 8 | import de.mossgrabers.framework.utils.OperatingSystem; 9 | import de.mossgrabers.framework.utils.Pair; 10 | 11 | import java.util.List; 12 | import java.util.UUID; 13 | 14 | 15 | /** 16 | * Definition class for the Beatstep controller extension. 17 | * 18 | * @author Jürgen Moßgraber 19 | */ 20 | public class BeatstepControllerDefinition extends DefaultControllerDefinition 21 | { 22 | private static final UUID EXTENSION_ID = UUID.fromString ("F7FF1750-7EC3-11E4-B4A9-0800200C9A66"); 23 | 24 | 25 | /** 26 | * Constructor. 27 | */ 28 | public BeatstepControllerDefinition () 29 | { 30 | super (EXTENSION_ID, "Beatstep", "Arturia", 1, 1); 31 | } 32 | 33 | 34 | /** {@inheritDoc} */ 35 | @Override 36 | public List> getMidiDiscoveryPairs (final OperatingSystem os) 37 | { 38 | return this.createDeviceDiscoveryPairs ("Arturia BeatStep"); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/grid/LightGuideImpl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.grid; 6 | 7 | import de.mossgrabers.framework.controller.color.ColorManager; 8 | import de.mossgrabers.framework.daw.midi.IMidiOutput; 9 | 10 | 11 | /** 12 | * Implementation of a light guide. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public class LightGuideImpl extends PadGridImpl 17 | { 18 | /** 19 | * Constructor. 20 | * 21 | * @param startNote The first note 22 | * @param keys The number of keys 23 | * @param colorManager The color manager for accessing specific colors to use 24 | * @param output The MIDI output which can address the pad states 25 | */ 26 | public LightGuideImpl (final int startNote, final int keys, final ColorManager colorManager, final IMidiOutput output) 27 | { 28 | super (colorManager, output, 1, keys, startNote); 29 | } 30 | 31 | 32 | /** {@inheritDoc} */ 33 | @Override 34 | protected void sendBlinkState (final int channel, final int note, final int blinkColor, final boolean fast) 35 | { 36 | // No blinky blink 37 | } 38 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/empty/EmptyMarker.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.empty; 6 | 7 | import de.mossgrabers.framework.controller.color.ColorEx; 8 | import de.mossgrabers.framework.daw.data.IMarker; 9 | 10 | 11 | /** 12 | * Default data for an empty scene. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public class EmptyMarker extends EmptyItem implements IMarker 17 | { 18 | /** The singleton. */ 19 | public static final IMarker INSTANCE = new EmptyMarker (); 20 | 21 | 22 | /** 23 | * Constructor. 24 | */ 25 | private EmptyMarker () 26 | { 27 | // Intentionally empty 28 | } 29 | 30 | 31 | /** {@inheritDoc} */ 32 | @Override 33 | public ColorEx getColor () 34 | { 35 | return ColorEx.BLACK; 36 | } 37 | 38 | 39 | /** {@inheritDoc} */ 40 | @Override 41 | public void launch (final boolean quantized) 42 | { 43 | // Intentionally empty 44 | } 45 | 46 | 47 | /** {@inheritDoc} */ 48 | @Override 49 | public void removeMarker () 50 | { 51 | // Intentionally empty 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/empty/EmptySend.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.empty; 6 | 7 | import de.mossgrabers.framework.controller.color.ColorEx; 8 | import de.mossgrabers.framework.daw.data.ISend; 9 | 10 | 11 | /** 12 | * Default data for an empty send. 13 | * 14 | * @author Jürgen Moßgraber 15 | */ 16 | public class EmptySend extends EmptyParameter implements ISend 17 | { 18 | /** The singleton. */ 19 | @SuppressWarnings("hiding") 20 | public static final ISend INSTANCE = new EmptySend (); 21 | 22 | 23 | /** 24 | * Constructor. 25 | */ 26 | private EmptySend () 27 | { 28 | // Intentionally empty 29 | } 30 | 31 | 32 | /** {@inheritDoc} */ 33 | @Override 34 | public ColorEx getColor () 35 | { 36 | return ColorEx.BLACK; 37 | } 38 | 39 | 40 | /** {@inheritDoc} */ 41 | @Override 42 | public boolean isEnabled () 43 | { 44 | return false; 45 | } 46 | 47 | 48 | /** {@inheritDoc} */ 49 | @Override 50 | public void toggleEnabled () 51 | { 52 | // Intentionally empty 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/controller/grid/IVirtualFader.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.controller.grid; 6 | 7 | /** 8 | * Interface to a virtual fader. A virtual fader consists of a number of pads on a grid. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface IVirtualFader 13 | { 14 | /** 15 | * Set the color of a fader (8 vertical pads). 16 | * 17 | * @param color The color to set 18 | * @param isPan True for panning layout 19 | */ 20 | void setup (int color, boolean isPan); 21 | 22 | 23 | /** 24 | * Set the faders value. 25 | * 26 | * @param value The value to set 27 | */ 28 | void setValue (int value); 29 | 30 | 31 | /** 32 | * Get the state of a color step. 33 | * 34 | * @param index The index of the step 35 | * @return The color state 36 | */ 37 | int getColorState (int index); 38 | 39 | 40 | /** 41 | * Move the fader to a new position 42 | * 43 | * @param row The row to move to 44 | * @param velocity The velocity (for speed) 45 | */ 46 | void moveTo (final int row, final int velocity); 47 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/framework/configuration/SignalSettingImpl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.framework.configuration; 6 | 7 | import de.mossgrabers.framework.configuration.ISignalSetting; 8 | import de.mossgrabers.framework.observer.IValueObserver; 9 | 10 | import com.bitwig.extension.controller.api.Setting; 11 | import com.bitwig.extension.controller.api.Signal; 12 | 13 | 14 | /** 15 | * Bitwig implementation of a signal setting. 16 | * 17 | * @author Jürgen Moßgraber 18 | */ 19 | public class SignalSettingImpl extends AbstractSetting implements ISignalSetting 20 | { 21 | private final Signal signalValue; 22 | 23 | 24 | /** 25 | * Constructor. 26 | * 27 | * @param signalValue The signal value 28 | */ 29 | public SignalSettingImpl (final Signal signalValue) 30 | { 31 | super ((Setting) signalValue); 32 | 33 | this.signalValue = signalValue; 34 | } 35 | 36 | 37 | /** {@inheritDoc} */ 38 | @Override 39 | public void addSignalObserver (final IValueObserver observer) 40 | { 41 | this.signalValue.addSignalObserver ( () -> observer.update (null)); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/mode/track/TrackStopClipMode.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.mode.track; 6 | 7 | import de.mossgrabers.framework.configuration.Configuration; 8 | import de.mossgrabers.framework.controller.IControlSurface; 9 | import de.mossgrabers.framework.daw.IModel; 10 | import de.mossgrabers.framework.daw.data.ITrack; 11 | 12 | 13 | /** 14 | * The track stop clip mode. 15 | * 16 | * @param The type of the control surface 17 | * @param The type of the configuration 18 | * 19 | * @author Jürgen Moßgraber 20 | */ 21 | public class TrackStopClipMode, C extends Configuration> extends DefaultTrackMode 22 | { 23 | /** 24 | * Constructor. 25 | * 26 | * @param surface The surface 27 | * @param model The model 28 | */ 29 | public TrackStopClipMode (final S surface, final IModel model) 30 | { 31 | super ("Track Stop Clip", surface, model, true); 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | protected void executeMethod (final ITrack track) 38 | { 39 | track.stop (this.surface.isShiftPressed ()); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/fire/command/trigger/FireBrowserCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.fire.command.trigger; 6 | 7 | import de.mossgrabers.controller.akai.fire.FireConfiguration; 8 | import de.mossgrabers.controller.akai.fire.controller.FireControlSurface; 9 | import de.mossgrabers.framework.command.trigger.BrowserCommand; 10 | import de.mossgrabers.framework.controller.ButtonID; 11 | import de.mossgrabers.framework.daw.IModel; 12 | 13 | 14 | /** 15 | * Command to open and close the browser. 16 | * 17 | * @author Jürgen Moßgraber 18 | */ 19 | public class FireBrowserCommand extends BrowserCommand 20 | { 21 | /** 22 | * Constructor. 23 | * 24 | * @param model The model 25 | * @param surface The surface 26 | */ 27 | public FireBrowserCommand (final IModel model, final FireControlSurface surface) 28 | { 29 | super (model, surface, ButtonID.SHIFT, ButtonID.ALT); 30 | } 31 | 32 | 33 | /** {@inheritDoc} */ 34 | @Override 35 | protected boolean getCommit () 36 | { 37 | return !this.surface.isPressed (ButtonID.ALT); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/ICursorDevice.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data; 6 | 7 | import de.mossgrabers.framework.daw.data.bank.IDeviceBank; 8 | 9 | 10 | /** 11 | * Interface to the Cursor device. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public interface ICursorDevice extends ISpecificDevice, ICursor 16 | { 17 | /** 18 | * Select the parent of the device. 19 | */ 20 | void selectParent (); 21 | 22 | 23 | /** 24 | * Select the channel which hosts the device. 25 | */ 26 | void selectChannel (); 27 | 28 | 29 | /** 30 | * Get the device sibling bank. 31 | * 32 | * @return The bank 33 | */ 34 | IDeviceBank getDeviceBank (); 35 | 36 | 37 | /** 38 | * Get the names of slot chains of a device. 39 | * 40 | * @return The names or an empty array 41 | */ 42 | String [] getSlotChains (); 43 | 44 | 45 | /** 46 | * Select the first device of a slot chain. 47 | * 48 | * @param slotChainName One of the slot chain names retrieved with {@link #getSlotChains()}. 49 | */ 50 | void selectSlotChain (String slotChainName); 51 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/scale/MPEStatus.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.scale; 6 | 7 | import java.util.Arrays; 8 | 9 | 10 | /** 11 | * Keeps track of playing MPE notes. 12 | * 13 | * @author Jürgen Moßgraber 14 | */ 15 | public class MPEStatus 16 | { 17 | private final int [] notes = new int [16]; 18 | 19 | 20 | /** 21 | * Constructor. 22 | */ 23 | public MPEStatus () 24 | { 25 | Arrays.fill (this.notes, -1); 26 | } 27 | 28 | 29 | /** 30 | * Store or clear the note. 31 | * 32 | * @param channel The MIDI channel of the MPE note 33 | * @param note The MIDI note 34 | * @param isOn True if note is played or released 35 | */ 36 | public void handleNote (final int channel, final int note, final boolean isOn) 37 | { 38 | this.notes[channel] = isOn ? note : -1; 39 | } 40 | 41 | 42 | /** 43 | * Get the note currently playing on the channel. 44 | * 45 | * @param channel The MIDI channel 46 | * @return THe note or -1 if no note is playing on this channel 47 | */ 48 | public int getNoteStatus (final int channel) 49 | { 50 | return this.notes[channel]; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/mackie/hui/command/trigger/AssignableCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.mackie.hui.command.trigger; 6 | 7 | import de.mossgrabers.controller.mackie.hui.HUIConfiguration; 8 | import de.mossgrabers.controller.mackie.hui.controller.HUIControlSurface; 9 | import de.mossgrabers.framework.command.trigger.FootswitchCommand; 10 | import de.mossgrabers.framework.daw.IModel; 11 | 12 | 13 | /** 14 | * Command for assignable functions. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public class AssignableCommand extends FootswitchCommand 19 | { 20 | /** 21 | * Constructor. 22 | * 23 | * @param index The index of the assignable button 24 | * @param model The model 25 | * @param surface The surface 26 | */ 27 | public AssignableCommand (final int index, final IModel model, final HUIControlSurface surface) 28 | { 29 | super (model, surface, index); 30 | } 31 | 32 | 33 | /** {@inheritDoc} */ 34 | @Override 35 | protected int getSetting () 36 | { 37 | return this.surface.getConfiguration ().getAssignable (this.index); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/command/continuous/CrossfaderCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.command.continuous; 6 | 7 | import de.mossgrabers.framework.command.core.AbstractContinuousCommand; 8 | import de.mossgrabers.framework.configuration.Configuration; 9 | import de.mossgrabers.framework.controller.IControlSurface; 10 | import de.mossgrabers.framework.daw.IModel; 11 | 12 | 13 | /** 14 | * Command to change the crossfader. 15 | * 16 | * @param The type of the control surface 17 | * @param The type of the configuration 18 | * 19 | * @author Jürgen Moßgraber 20 | */ 21 | public class CrossfaderCommand, C extends Configuration> extends AbstractContinuousCommand 22 | { 23 | /** 24 | * Constructor. 25 | * 26 | * @param model The model 27 | * @param surface The surface 28 | */ 29 | public CrossfaderCommand (final IModel model, final S surface) 30 | { 31 | super (model, surface); 32 | } 33 | 34 | 35 | /** {@inheritDoc} */ 36 | @Override 37 | public void execute (final int value) 38 | { 39 | this.model.getTransport ().setCrossfade (value); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/kontrol/mki/controller/UIChangeCallback.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.kontrol.mki.controller; 6 | 7 | /** 8 | * Callback interface for button and encoder changes. 9 | * 10 | * @author Jürgen Moßgraber 11 | */ 12 | public interface UIChangeCallback 13 | { 14 | /** 15 | * A button was pressed or released. 16 | * 17 | * @param buttonID The ID of the button 18 | * @param isPressed True if pressed 19 | */ 20 | void buttonChange (int buttonID, boolean isPressed); 21 | 22 | 23 | /** 24 | * The main encoder was turned. 25 | * 26 | * @param valueIncreased The change value 27 | */ 28 | void mainEncoderChanged (boolean valueIncreased); 29 | 30 | 31 | /** 32 | * An encoder was turned. 33 | * 34 | * @param encIndex The index of the encoder (0-7) 35 | * @param change The change value 36 | */ 37 | void encoderChanged (int encIndex, int change); 38 | 39 | 40 | /** 41 | * The keyboard was transposed. 42 | * 43 | * @param firstNote The left most note that the keyboard sends now 44 | */ 45 | void octaveChanged (int firstNote); 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/akai/fire/command/trigger/AbstractFireViewMultiSelectCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.akai.fire.command.trigger; 6 | 7 | import de.mossgrabers.controller.akai.fire.FireConfiguration; 8 | import de.mossgrabers.controller.akai.fire.controller.FireControlSurface; 9 | import de.mossgrabers.framework.command.trigger.view.ViewMultiSelectCommand; 10 | import de.mossgrabers.framework.daw.IModel; 11 | import de.mossgrabers.framework.utils.ButtonEvent; 12 | import de.mossgrabers.framework.view.Views; 13 | 14 | 15 | /** 16 | * Selects the next view from a list. Added some Fire specifics. 17 | * 18 | * @author Jürgen Moßgraber 19 | */ 20 | public abstract class AbstractFireViewMultiSelectCommand extends ViewMultiSelectCommand 21 | { 22 | /** 23 | * Constructor. 24 | * 25 | * @param model The model 26 | * @param surface The surface 27 | * @param viewIds The list with IDs of the views to select 28 | */ 29 | protected AbstractFireViewMultiSelectCommand (final IModel model, final FireControlSurface surface, final Views... viewIds) 30 | { 31 | super (model, surface, true, ButtonEvent.UP, viewIds); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/kontrol/mkii/controller/IKontrolProtocolDeviceDescriptor.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.kontrol.mkii.controller; 6 | 7 | import java.util.List; 8 | import java.util.UUID; 9 | 10 | import de.mossgrabers.framework.utils.OperatingSystem; 11 | import de.mossgrabers.framework.utils.Pair; 12 | 13 | 14 | /** 15 | * Interface for describing several devices, which support a specific version of the NIHIA protocol. 16 | * 17 | * @author Jürgen Moßgraber 18 | */ 19 | public interface IKontrolProtocolDeviceDescriptor 20 | { 21 | /** 22 | * Get the ID to use for the device extension. 23 | * 24 | * @return The ID 25 | */ 26 | UUID getID (); 27 | 28 | 29 | /** 30 | * Get the display name for the device extension. 31 | * 32 | * @return The name 33 | */ 34 | String getName (); 35 | 36 | 37 | /** 38 | * Get the MIDI port discovery pairs depending on the operating system. 39 | * 40 | * @param operatingSystem The operating system 41 | * @return The discovery pairs 42 | */ 43 | List> getMidiDiscoveryPairs (final OperatingSystem operatingSystem); 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/framework/daw/data/bank/IDrumPadBank.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.framework.daw.data.bank; 6 | 7 | import de.mossgrabers.framework.daw.data.IDrumPad; 8 | import de.mossgrabers.framework.daw.data.ILayer; 9 | 10 | import java.util.Optional; 11 | 12 | 13 | /** 14 | * Interface to a drumpad bank. 15 | * 16 | * @author Jürgen Moßgraber 17 | */ 18 | public interface IDrumPadBank extends ILayerBank 19 | { 20 | /** 21 | * Clears mute on all drum pads. 22 | */ 23 | void clearMute (); 24 | 25 | 26 | /** 27 | * Clears solo on all drum pads. 28 | */ 29 | void clearSolo (); 30 | 31 | 32 | /** 33 | * Check if a pad of the drum pad bank is muted. 34 | * 35 | * @return True if a pad is muted 36 | */ 37 | boolean hasMutedPads (); 38 | 39 | 40 | /** 41 | * Check if a pad of the drum pad bank is soloed. 42 | * 43 | * @return True if a pad is soloed 44 | */ 45 | boolean hasSoloedPads (); 46 | 47 | 48 | /** {@inheritDoc} */ 49 | @Override 50 | IDrumPad getItem (int index); 51 | 52 | 53 | /** {@inheritDoc} */ 54 | @Override 55 | Optional getSelectedItem (); 56 | } -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/mackie/hui/command/trigger/ZoomCommand.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.mackie.hui.command.trigger; 6 | 7 | import de.mossgrabers.controller.mackie.hui.HUIConfiguration; 8 | import de.mossgrabers.controller.mackie.hui.controller.HUIControlSurface; 9 | import de.mossgrabers.framework.command.core.AbstractTriggerCommand; 10 | import de.mossgrabers.framework.daw.IModel; 11 | import de.mossgrabers.framework.utils.ButtonEvent; 12 | 13 | 14 | /** 15 | * Command for the zoom button. 16 | * 17 | * @author Jürgen Moßgraber 18 | */ 19 | public class ZoomCommand extends AbstractTriggerCommand 20 | { 21 | /** 22 | * Constructor. 23 | * 24 | * @param model The model 25 | * @param surface The surface 26 | */ 27 | public ZoomCommand (final IModel model, final HUIControlSurface surface) 28 | { 29 | super (model, surface); 30 | } 31 | 32 | 33 | /** {@inheritDoc} */ 34 | @Override 35 | public void execute (final ButtonEvent event, final int velocity) 36 | { 37 | if (event == ButtonEvent.DOWN) 38 | this.surface.getConfiguration ().toggleZoomState (); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/controller/ni/maschine/mk3/MaschineMikroMk3ControllerDefinition.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.controller.ni.maschine.mk3; 6 | 7 | import de.mossgrabers.framework.controller.DefaultControllerDefinition; 8 | import de.mossgrabers.framework.utils.OperatingSystem; 9 | import de.mossgrabers.framework.utils.Pair; 10 | 11 | import java.util.List; 12 | import java.util.UUID; 13 | 14 | 15 | /** 16 | * Definition class for the NI Maschine Mikro Mk3 controller extension. 17 | * 18 | * @author Jürgen Moßgraber 19 | */ 20 | public class MaschineMikroMk3ControllerDefinition extends DefaultControllerDefinition 21 | { 22 | private static final UUID EXTENSION_ID = UUID.fromString ("E87516A3-5401-44B1-9952-B4F821ED3DD5"); 23 | 24 | 25 | /** 26 | * Constructor. 27 | */ 28 | public MaschineMikroMk3ControllerDefinition () 29 | { 30 | super (EXTENSION_ID, "Maschine Mikro Mk3", "Native Instruments", 1, 1); 31 | } 32 | 33 | 34 | /** {@inheritDoc} */ 35 | @Override 36 | public List> getMidiDiscoveryPairs (final OperatingSystem os) 37 | { 38 | return this.createDeviceDiscoveryPairs ("Maschine Mikro MK3"); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/de/mossgrabers/bitwig/framework/osc/OpenSoundControlServerImpl.java: -------------------------------------------------------------------------------- 1 | // Written by Jürgen Moßgraber - mossgrabers.de 2 | // (c) 2017-2025 3 | // Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt 4 | 5 | package de.mossgrabers.bitwig.framework.osc; 6 | 7 | import java.io.IOException; 8 | 9 | import com.bitwig.extension.api.opensoundcontrol.OscServer; 10 | 11 | import de.mossgrabers.framework.osc.IOpenSoundControlServer; 12 | 13 | 14 | /** 15 | * Implementation of an OSC server. 16 | * 17 | * @author Jürgen Moßgraber 18 | */ 19 | public class OpenSoundControlServerImpl implements IOpenSoundControlServer 20 | { 21 | private final OscServer server; 22 | private int port = -1; 23 | 24 | 25 | /** 26 | * Constructor. 27 | * 28 | * @param server The Bitwig OSC server implementation 29 | */ 30 | public OpenSoundControlServerImpl (final OscServer server) 31 | { 32 | this.server = server; 33 | } 34 | 35 | 36 | /** {@inheritDoc} */ 37 | @Override 38 | public int getListeningPort () 39 | { 40 | return this.port; 41 | } 42 | 43 | 44 | /** {@inheritDoc} */ 45 | @Override 46 | public void start (final int port) throws IOException 47 | { 48 | this.server.start (port); 49 | 50 | this.port = port; 51 | } 52 | } 53 | --------------------------------------------------------------------------------