├── 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 |
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 |
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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------