diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/OsmoseControllerExtension.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/OsmoseControllerExtension.java deleted file mode 100644 index b4ce3248..00000000 --- a/src/main/java/com/bitwig/extensions/controllers/expressivee/OsmoseControllerExtension.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.bitwig.extensions.controllers.expressivee; - -import java.time.format.DateTimeFormatter; - -import com.bitwig.extension.controller.ControllerExtension; -import com.bitwig.extension.controller.api.ControllerHost; -import com.bitwig.extension.controller.api.HardwareSurface; -import com.bitwig.extension.controller.api.NoteInput; -import com.bitwig.extensions.framework.di.Context; - -public class OsmoseControllerExtension extends ControllerExtension { - private static final DateTimeFormatter DF = DateTimeFormatter.ofPattern("hh:mm:ss SSS"); - private HardwareSurface surface; - - protected OsmoseControllerExtension(final OsmoseControllerExtensionDefinition definition, - final ControllerHost host) { - super(definition, host); - } - - public void init() { - final Context diContext = new Context(this); - surface = diContext.getService(HardwareSurface.class); - final NoteInput noteInput1 = - getHost().getMidiInPort(0).createNoteInput("External MIDI Port (Port 1)", "??????"); - final NoteInput noteInput2 = getHost().getMidiInPort(1).createNoteInput("Haken Port (Port 2)", "??????"); - // Pitchbend range for Port 1 (External MIDI Port) uses the MPE standard of 48 semitones. Sensitivity menu of - // External MIDI Mode allows setting a fraction of this range for per-key bend, typically 1/48 or 2/48. - noteInput1.setUseExpressiveMidi(true, 0, 48); - // Pitchbend range for Port 2 (Haken Port) uses 96 semitone range as typically used by the EaganMatrix. - noteInput2.setUseExpressiveMidi(true, 0, 96); - } - - @Override - public void exit() { - // Nothing right now - } - - @Override - public void flush() { - surface.updateHardware(); - } - -} diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/OsmoseControllerExtensionDefinition.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/OsmoseControllerExtensionDefinition.java deleted file mode 100644 index 7a0db7b0..00000000 --- a/src/main/java/com/bitwig/extensions/controllers/expressivee/OsmoseControllerExtensionDefinition.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.bitwig.extensions.controllers.expressivee; - -import java.util.List; -import java.util.UUID; - -import com.bitwig.extension.api.PlatformType; -import com.bitwig.extension.controller.AutoDetectionMidiPortNamesList; -import com.bitwig.extension.controller.ControllerExtensionDefinition; -import com.bitwig.extension.controller.api.ControllerHost; - -public class OsmoseControllerExtensionDefinition extends ControllerExtensionDefinition { - - private static final UUID DRIVER_ID = UUID.fromString("ffa07aa9-94cb-4c2c-8fc2-becabbddb53e"); - private final static List PORT_NAME_VARIATIONS = - List.of("Port ", "Anschluss ", "Puerto ", "Portti ", "Poort ", "ポート", "포트"); - - public OsmoseControllerExtensionDefinition() { - } - - @Override - public String getName() { - return "Osmose"; - } - - @Override - public String getAuthor() { - return "Bitwig"; - } - - @Override - public String getVersion() { - return "1.0"; - } - - @Override - public UUID getId() { - return DRIVER_ID; - } - - @Override - public String getHardwareVendor() { - return "Expressive E"; - } - - @Override - public String getHardwareModel() { - return "Osmose"; - } - - @Override - public int getRequiredAPIVersion() { - return 20; - } - - @Override - public int getNumMidiInPorts() { - return 2; - } - - @Override - public int getNumMidiOutPorts() { - return 2; - } - - @Override - public String getHelpFilePath() { - return "Controllers/Expressive-e/Osmose.pdf"; - } - - @Override - public void listAutoDetectionMidiPortNames(final AutoDetectionMidiPortNamesList list, - final PlatformType platformType) { - switch (platformType) { - case WINDOWS -> { - list.add(new String[] {"Osmose", "MIDIIN2 (Osmose)"}, new String[] {"Osmose", "MIDIOUT2 (Osmose)"}); - } - case MAC, LINUX -> { - PORT_NAME_VARIATIONS.forEach(var -> list.add( - new String[] {"Osmose %s1".formatted(var), "Osmose %s2".formatted(var)}, - new String[] {"Osmose %s1".formatted(var), "Osmose %s2".formatted(var)})); - } - } - list.add(new String[] {"Osmose play", "Osmose haken"}, new String[] {"Osmose play", "Osmose haken"}); - } - - @Override - public OsmoseControllerExtension createInstance(final ControllerHost host) { - return new OsmoseControllerExtension(this, host); - } - -} diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/common/ApplicationManager.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/common/ApplicationManager.java index 2953ccaf..8eb99126 100644 --- a/src/main/java/com/bitwig/extensions/controllers/expressivee/common/ApplicationManager.java +++ b/src/main/java/com/bitwig/extensions/controllers/expressivee/common/ApplicationManager.java @@ -61,7 +61,7 @@ public void init() { mLauncherClip.exists().markInterested(); mButtonUndo.pressedAction().addBinding(mApplication.undoAction()); - mButtonRedo.pressedAction().addBinding(mApplication.undoAction()); + mButtonRedo.pressedAction().addBinding(mApplication.redoAction()); final HardwareActionBindable quantizeAction = mHost.createAction(() -> { this.quantizeCurrentClip(); diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/common/SynthPreferences.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/common/SynthPreferences.java index 369ed6c3..4e604b4d 100644 --- a/src/main/java/com/bitwig/extensions/controllers/expressivee/common/SynthPreferences.java +++ b/src/main/java/com/bitwig/extensions/controllers/expressivee/common/SynthPreferences.java @@ -5,13 +5,13 @@ public class SynthPreferences { - private SettableBooleanValue mhakenInAllInputs; + private SettableBooleanValue mSoundEngineInAllInputs; public SynthPreferences(ControllerHost host) { - mhakenInAllInputs = host.getPreferences().getBooleanSetting("Include in all inputs", "Osmose Haken", false); + mSoundEngineInAllInputs = host.getPreferences().getBooleanSetting("Include in all inputs", "Osmose Sound Engine", false); } - public boolean hakenInAllInputs() { - return mhakenInAllInputs.get(); + public boolean soundEngineInAllInputs() { + return mSoundEngineInAllInputs.get(); } } diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/common/TrackManager.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/common/TrackManager.java index d736a2f3..c6d3fdd6 100644 --- a/src/main/java/com/bitwig/extensions/controllers/expressivee/common/TrackManager.java +++ b/src/main/java/com/bitwig/extensions/controllers/expressivee/common/TrackManager.java @@ -38,7 +38,7 @@ public class TrackManager extends Manager { // *=============================================*// private static final int TRACK_SENDS_COUNT = 2; - private static final int TRACK_SCENES_COUNT = 8; + private static final int TRACK_SCENES_COUNT = 128; private static final String CTRL_E_ID = "ABCDEF019182FAEB4578707243747265"; private static final String INSTRUMENT_LAYER_ID = "5024be2e-65d6-4d40-bbfe-8b2ea993c445"; diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose49/Osmose49Extension.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose49/Osmose49Extension.java new file mode 100644 index 00000000..2efdd756 --- /dev/null +++ b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose49/Osmose49Extension.java @@ -0,0 +1,75 @@ +package com.bitwig.extensions.controllers.expressivee.osmose49; + +import com.bitwig.extension.api.util.midi.ShortMidiMessage; +import com.bitwig.extension.callback.ShortMidiMessageReceivedCallback; +import com.bitwig.extension.controller.api.ControllerHost; +import com.bitwig.extension.controller.api.NoteInput; +import com.bitwig.extension.controller.ControllerExtension; +import com.bitwig.extension.controller.api.HardwareSurface; + +import com.bitwig.extensions.controllers.expressivee.common.ApplicationManager; +import com.bitwig.extensions.controllers.expressivee.common.Manager; +import com.bitwig.extensions.controllers.expressivee.common.SynthPreferences; +import com.bitwig.extensions.controllers.expressivee.common.TrackManager; +import com.bitwig.extensions.controllers.expressivee.common.TransportManager; +import com.bitwig.extensions.controllers.expressivee.common.ExternalMidiPreferences; + + +public class Osmose49Extension extends ControllerExtension +{ + private TrackManager mTrackManager; + private ApplicationManager mApplicationManager; + private TransportManager mTransportManager; + private ExternalMidiPreferences mExternalMidiPreference; + private SynthPreferences mSynthPreferences; + + protected Osmose49Extension(final Osmose49ExtensionDefinition definition, final ControllerHost host) + { + super(definition, host); + } + + @Override + public void init() { + final ControllerHost host = getHost(); + + final HardwareSurface surface = host.createHardwareSurface(); + + mSynthPreferences = new SynthPreferences(host); + mExternalMidiPreference = new ExternalMidiPreferences(host); + mTransportManager = new TransportManager(host, surface, host.getMidiInPort(2), host.getMidiOutPort(2)); + mTrackManager = new TrackManager(host, surface, host.getMidiInPort(2), host.getMidiOutPort(2), false); + mApplicationManager = new ApplicationManager(host, surface, host.getMidiInPort(2), host.getMidiOutPort(2)); + + final NoteInput soundEngineNoteInput = host.getMidiInPort(1).createNoteInput("Osmose 49 sound engine", "??????"); + soundEngineNoteInput.setShouldConsumeEvents(true); + soundEngineNoteInput.setUseExpressiveMidi(true, 0, 48); + + final NoteInput playNoteInput = host.getMidiInPort(0).createNoteInput("Osmose 49 play", "??????"); + playNoteInput.setShouldConsumeEvents(true); + playNoteInput.setUseExpressiveMidi(true, 0, 48); + + if (mSynthPreferences.soundEngineInAllInputs()) { + soundEngineNoteInput.includeInAllInputs(); + } + + if (mExternalMidiPreference.playInAllInputs()) { + playNoteInput.includeInAllInputs(); + } + + mTransportManager.sendSysexConnectionInfos(true); + + mTransportManager.init(); + mTrackManager.init(); + mApplicationManager.init(); + } + + @Override + public void exit() { + mTransportManager.sendSysexConnectionInfos(false); + } + + @Override + public void flush() { + } + +} diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose49/Osmose49ExtensionDefinition.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose49/Osmose49ExtensionDefinition.java new file mode 100644 index 00000000..7b02eb28 --- /dev/null +++ b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose49/Osmose49ExtensionDefinition.java @@ -0,0 +1,81 @@ +package com.bitwig.extensions.controllers.expressivee.osmose49; +import java.util.UUID; + +import com.bitwig.extension.api.PlatformType; +import com.bitwig.extension.controller.AutoDetectionMidiPortNamesList; +import com.bitwig.extension.controller.ControllerExtensionDefinition; +import com.bitwig.extension.controller.api.ControllerHost; + +public class Osmose49ExtensionDefinition extends ControllerExtensionDefinition +{ + private static final UUID DRIVER_ID = UUID.fromString("a3c9f4b2-7e1d-4f3a-9c8e-12f4b6d9a8c1"); + + public Osmose49ExtensionDefinition() { + } + + @Override + public String getName() { + return "Osmose 49"; + } + + @Override + public String getAuthor() { + return "Expressive E"; + } + + @Override + public String getVersion() { + return "0.4"; + } + + @Override + public UUID getId() { + return DRIVER_ID; + } + + @Override + public String getHardwareVendor() { + return "Expressive E"; + } + + @Override + public String getHardwareModel() { + return "Osmose 49"; + } + + @Override + public int getRequiredAPIVersion() { + return 22; + } + + @Override + public int getNumMidiInPorts() { + return 3; + } + + @Override + public int getNumMidiOutPorts() { + return 3; + } + + @Override + public void listAutoDetectionMidiPortNames(final AutoDetectionMidiPortNamesList list, + final PlatformType platformType) { + if (platformType == PlatformType.WINDOWS) { + list.add(new String[]{ "Osmose 49", "MIDIIN2 (Osmose 49)", "MIDIIN4 (Osmose 49)" }, + new String[]{ "Osmose 49 play", "MIDIOUT2 (Osmose 49)", "MIDIOUT4 (Osmose 49)" }); + } else if (platformType == PlatformType.MAC) { + list.add(new String[]{ "Osmose 49 play", "Osmose 49 sound engine", "Osmose 49 daw control" }, + new String[]{ "Osmose 49 play", "Osmose 49 sound engine", "Osmose 49 daw control" }); + } + else if (platformType == PlatformType.LINUX) { + list.add(new String[]{ "Osmose 49 play", "Osmose 49 sound engine", "Osmose 49 daw control" }, + new String[]{ "Osmose 49 play", "Osmose 49 sound engine", "Osmose 49 daw control" }); + } + } + + @Override + public Osmose49Extension createInstance(final ControllerHost host) { + return new Osmose49Extension(this, host); + } +} diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose61/Osmose61Extension.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose61/Osmose61Extension.java new file mode 100644 index 00000000..9eeb7997 --- /dev/null +++ b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose61/Osmose61Extension.java @@ -0,0 +1,74 @@ +package com.bitwig.extensions.controllers.expressivee.osmose61; + +import com.bitwig.extension.api.util.midi.ShortMidiMessage; +import com.bitwig.extension.callback.ShortMidiMessageReceivedCallback; +import com.bitwig.extension.controller.api.ControllerHost; +import com.bitwig.extension.controller.api.NoteInput; +import com.bitwig.extension.controller.ControllerExtension; +import com.bitwig.extension.controller.api.HardwareSurface; + +import com.bitwig.extensions.controllers.expressivee.common.ApplicationManager; +import com.bitwig.extensions.controllers.expressivee.common.Manager; +import com.bitwig.extensions.controllers.expressivee.common.TrackManager; +import com.bitwig.extensions.controllers.expressivee.common.TransportManager; +import com.bitwig.extensions.controllers.expressivee.common.ExternalMidiPreferences; +import com.bitwig.extensions.controllers.expressivee.common.SynthPreferences; + + +public class Osmose61Extension extends ControllerExtension +{ + private TrackManager mTrackManager; + private ApplicationManager mApplicationManager; + private TransportManager mTransportManager; + private ExternalMidiPreferences mExternalMidiPreference; + private SynthPreferences mSynthPreferences; + + protected Osmose61Extension(final Osmose61ExtensionDefinition definition, final ControllerHost host) + { + super(definition, host); + } + + @Override + public void init() { + final ControllerHost host = getHost(); + + final HardwareSurface surface = host.createHardwareSurface(); + + mSynthPreferences = new SynthPreferences(host); + mExternalMidiPreference = new ExternalMidiPreferences(host); + mTransportManager = new TransportManager(host, surface, host.getMidiInPort(2), host.getMidiOutPort(2)); + mTrackManager = new TrackManager(host, surface, host.getMidiInPort(2), host.getMidiOutPort(2), false); + mApplicationManager = new ApplicationManager(host, surface, host.getMidiInPort(2), host.getMidiOutPort(2)); + + final NoteInput soundEngineNoteInput = host.getMidiInPort(1).createNoteInput("Osmose 61 sound engine", "??????"); + soundEngineNoteInput.setShouldConsumeEvents(true); + soundEngineNoteInput.setUseExpressiveMidi(true, 0, 48); + + final NoteInput playNoteInput = host.getMidiInPort(0).createNoteInput("Osmose 61 play", "??????"); + playNoteInput.setShouldConsumeEvents(true); + playNoteInput.setUseExpressiveMidi(true, 0, 48); + + if (mSynthPreferences.soundEngineInAllInputs()) { + soundEngineNoteInput.includeInAllInputs(); + } + + if (mExternalMidiPreference.playInAllInputs()) { + playNoteInput.includeInAllInputs(); + } + + mTransportManager.sendSysexConnectionInfos(true); + + mTransportManager.init(); + mTrackManager.init(); + mApplicationManager.init(); + } + + @Override + public void exit() { + mTransportManager.sendSysexConnectionInfos(false); + } + + @Override + public void flush() { + } +} diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose61/Osmose61ExtensionDefinition.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose61/Osmose61ExtensionDefinition.java new file mode 100644 index 00000000..be814334 --- /dev/null +++ b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmose61/Osmose61ExtensionDefinition.java @@ -0,0 +1,82 @@ +package com.bitwig.extensions.controllers.expressivee.osmose61; +import java.util.UUID; + +import com.bitwig.extension.api.PlatformType; +import com.bitwig.extension.controller.AutoDetectionMidiPortNamesList; +import com.bitwig.extension.controller.ControllerExtensionDefinition; +import com.bitwig.extension.controller.api.ControllerHost; + +public class Osmose61ExtensionDefinition extends ControllerExtensionDefinition +{ + private static final UUID DRIVER_ID = UUID.fromString("d7b14e8f-2c90-41ab-b3f6-9e82f1c4d77e"); + + public Osmose61ExtensionDefinition() + { + } + + @Override + public String getName() { + return "Osmose 61"; + } + + @Override + public String getAuthor() { + return "Expressive E"; + } + + @Override + public String getVersion() { + return "0.4"; + } + + @Override + public UUID getId() { + return DRIVER_ID; + } + + @Override + public String getHardwareVendor() { + return "Expressive E"; + } + + @Override + public String getHardwareModel() { + return "Osmose 61"; + } + + @Override + public int getRequiredAPIVersion() { + return 22; + } + + @Override + public int getNumMidiInPorts() { + return 3; + } + + @Override + public int getNumMidiOutPorts() { + return 3; + } + + @Override + public void listAutoDetectionMidiPortNames(final AutoDetectionMidiPortNamesList list, + final PlatformType platformType) { + if (platformType == PlatformType.WINDOWS) { + list.add(new String[]{ "Osmose 61", "MIDIIN2 (Osmose 61)", "MIDIIN4 (Osmose 61)" }, + new String[]{ "Osmose 61 play", "MIDIOUT2 (Osmose 61)", "MIDIOUT4 (Osmose 61)" }); + } else if (platformType == PlatformType.MAC) { + list.add(new String[]{"Osmose 61 play", "Osmose 61 sound engine", "Osmose 61 daw control" }, + new String[]{"Osmose 61 play", "Osmose 61 sound engine", "Osmose 61 daw control" }); + } else if (platformType == PlatformType.LINUX) { + list.add(new String[]{"Osmose 61 play", "Osmose 61 sound engine", "Osmose 61 daw control" }, + new String[]{"Osmose 61 play", "Osmose 61 sound engine", "Osmose 61 daw control" }); + } + } + + @Override + public Osmose61Extension createInstance(final ControllerHost host) + { + return new Osmose61Extension(this, host); + } +} diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/osmoseCE49/OsmoseCE49ExtensionDefinition.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmoseCE49/OsmoseCE49ExtensionDefinition.java index c3a1af40..75405342 100644 --- a/src/main/java/com/bitwig/extensions/controllers/expressivee/osmoseCE49/OsmoseCE49ExtensionDefinition.java +++ b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmoseCE49/OsmoseCE49ExtensionDefinition.java @@ -25,7 +25,7 @@ public String getAuthor() { @Override public String getVersion() { - return "0.1"; + return "0.4"; } @Override diff --git a/src/main/java/com/bitwig/extensions/controllers/expressivee/osmoseCE61/OsmoseCE61ExtensionDefinition.java b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmoseCE61/OsmoseCE61ExtensionDefinition.java index 689a2870..ff7dbadb 100644 --- a/src/main/java/com/bitwig/extensions/controllers/expressivee/osmoseCE61/OsmoseCE61ExtensionDefinition.java +++ b/src/main/java/com/bitwig/extensions/controllers/expressivee/osmoseCE61/OsmoseCE61ExtensionDefinition.java @@ -25,7 +25,7 @@ public String getAuthor() { @Override public String getVersion() { - return "0.1"; + return "0.4"; } @Override diff --git a/src/main/resources/META-INF/services/com.bitwig.extension.ExtensionDefinition b/src/main/resources/META-INF/services/com.bitwig.extension.ExtensionDefinition index d277b9dc..fb63cc65 100644 --- a/src/main/resources/META-INF/services/com.bitwig.extension.ExtensionDefinition +++ b/src/main/resources/META-INF/services/com.bitwig.extension.ExtensionDefinition @@ -58,7 +58,8 @@ com.bitwig.extensions.controllers.kenton.KillaMixMiniExtensionDefinition com.bitwig.extensions.controllers.embodme.Erae2ExtensionDefinition -com.bitwig.extensions.controllers.expressivee.OsmoseControllerExtensionDefinition +com.bitwig.extensions.controllers.expressivee.osmose49.Osmose49ExtensionDefinition +com.bitwig.extensions.controllers.expressivee.osmose61.Osmose61ExtensionDefinition com.bitwig.extensions.controllers.expressivee.osmoseCE49.OsmoseCE49ExtensionDefinition com.bitwig.extensions.controllers.expressivee.osmoseCE61.OsmoseCE61ExtensionDefinition