Skip to content

Commit 09cdf6e

Browse files
committed
Added Euclidian generator to Sequencer View.
1 parent d4f4d74 commit 09cdf6e

File tree

6 files changed

+71
-30
lines changed

6 files changed

+71
-30
lines changed

DrivenByMoss-Manual.pdf

3.01 KB
Binary file not shown.

src/main/java/de/mossgrabers/bitwig/framework/graphics/BitmapImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44

55
package de.mossgrabers.bitwig.framework.graphics;
66

7-
import de.mossgrabers.framework.graphics.IBitmap;
8-
import de.mossgrabers.framework.graphics.IEncoder;
9-
import de.mossgrabers.framework.graphics.IRenderer;
7+
import java.nio.ByteBuffer;
108

119
import com.bitwig.extension.api.graphics.Bitmap;
1210
import com.bitwig.extension.api.graphics.GraphicsOutput.AntialiasMode;
1311

14-
import java.nio.ByteBuffer;
12+
import de.mossgrabers.framework.graphics.IBitmap;
13+
import de.mossgrabers.framework.graphics.IEncoder;
14+
import de.mossgrabers.framework.graphics.IRenderer;
1515

1616

1717
/**

src/main/java/de/mossgrabers/bitwig/framework/graphics/GraphicsContextImpl.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44

55
package de.mossgrabers.bitwig.framework.graphics;
66

7+
import com.bitwig.extension.api.graphics.GradientPattern;
8+
import com.bitwig.extension.api.graphics.GraphicsOutput;
9+
import com.bitwig.extension.api.graphics.GraphicsOutput.AntialiasMode;
10+
import com.bitwig.extension.api.graphics.Image;
11+
712
import de.mossgrabers.framework.controller.color.ColorEx;
813
import de.mossgrabers.framework.graphics.Align;
914
import de.mossgrabers.framework.graphics.IGraphicsContext;
1015
import de.mossgrabers.framework.graphics.IImage;
1116
import de.mossgrabers.framework.utils.StringUtils;
1217

13-
import com.bitwig.extension.api.graphics.GradientPattern;
14-
import com.bitwig.extension.api.graphics.GraphicsOutput;
15-
import com.bitwig.extension.api.graphics.GraphicsOutput.AntialiasMode;
16-
import com.bitwig.extension.api.graphics.Image;
17-
1818

1919
/**
2020
* Implementation for the graphics context.
@@ -72,7 +72,7 @@ public void strokeRectangle (final double left, final double top, final double w
7272
@Override
7373
public void strokeRectangle (final double left, final double top, final double width, final double height, final ColorEx color, final double lineWidth)
7474
{
75-
// Turn off antialias or otherwise we do not get a single line
75+
// Turn off anti-alias or otherwise we do not get a single line
7676
this.gc.setAntialias (AntialiasMode.OFF);
7777
this.setColor (color);
7878
this.gc.setLineWidth (lineWidth);

src/main/java/de/mossgrabers/controller/oxi/one/view/OxiOneDrum8View.java

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -173,28 +173,30 @@ public void onGridNote (final int note, final int velocity)
173173

174174
if (this.modeManager.isActive (Modes.GENERATOR))
175175
{
176-
final OxiOneGeneratorMode generatorMode = (OxiOneGeneratorMode) this.modeManager.get (Modes.GENERATOR);
177-
final int pulse = generatorMode.getPulse ();
178-
final int rotation = generatorMode.getRotation ();
179-
final double density = generatorMode.getDensity ();
180-
final INoteClip clip = this.getClip ();
181-
final int length = Math.min (generatorMode.getLength (), clip.getNumSteps ());
182-
final boolean [] euclideanPattern = NoteGenerator.generateEuclideanPattern (pulse, length, rotation, density);
183-
184-
final int index = note - this.surface.getPadGrid ().getStartNote ();
185-
final int y = index / this.numColumns;
186-
final int sound = y % this.lanes + this.scales.getDrumOffset ();
187-
final int midiEditChannel = this.configuration.getMidiEditChannel ();
188-
final NotePosition notePosition = new NotePosition (midiEditChannel, -1, sound);
189-
for (int step = 0; step < euclideanPattern.length; step++)
176+
if (velocity > 0)
190177
{
191-
notePosition.setStep (step);
192-
if (euclideanPattern[step])
193-
clip.setStep (notePosition, 127, clip.getStepLength ());
194-
else
195-
clip.clearStep (notePosition);
196-
}
178+
final OxiOneGeneratorMode generatorMode = (OxiOneGeneratorMode) this.modeManager.get (Modes.GENERATOR);
179+
final int pulse = generatorMode.getPulse ();
180+
final int rotation = generatorMode.getRotation ();
181+
final double density = generatorMode.getDensity ();
182+
final INoteClip clip = this.getClip ();
183+
final int length = Math.min (generatorMode.getLength (), clip.getNumSteps ());
184+
final boolean [] euclideanPattern = NoteGenerator.generateEuclideanPattern (pulse, length, rotation, density);
197185

186+
final int index = note - this.surface.getPadGrid ().getStartNote ();
187+
final int y = index / this.numColumns;
188+
final int sound = y % this.lanes + this.scales.getDrumOffset ();
189+
final int midiEditChannel = this.configuration.getMidiEditChannel ();
190+
final NotePosition notePosition = new NotePosition (midiEditChannel, -1, sound);
191+
for (int step = 0; step < euclideanPattern.length; step++)
192+
{
193+
notePosition.setStep (step);
194+
if (euclideanPattern[step])
195+
clip.setStep (notePosition, 127, clip.getStepLength ());
196+
else
197+
clip.clearStep (notePosition);
198+
}
199+
}
198200
return;
199201
}
200202

src/main/java/de/mossgrabers/controller/oxi/one/view/OxiOneSequencerView.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import de.mossgrabers.controller.oxi.one.OxiOneConfiguration;
88
import de.mossgrabers.controller.oxi.one.controller.OxiOneControlSurface;
9+
import de.mossgrabers.controller.oxi.one.mode.OxiOneGeneratorMode;
910
import de.mossgrabers.framework.controller.ButtonID;
1011
import de.mossgrabers.framework.daw.IModel;
1112
import de.mossgrabers.framework.daw.clip.INoteClip;
@@ -14,7 +15,10 @@
1415
import de.mossgrabers.framework.daw.clip.NotePosition;
1516
import de.mossgrabers.framework.daw.clip.StepState;
1617
import de.mossgrabers.framework.daw.constants.Resolution;
18+
import de.mossgrabers.framework.featuregroup.ModeManager;
19+
import de.mossgrabers.framework.mode.Modes;
1720
import de.mossgrabers.framework.utils.ButtonEvent;
21+
import de.mossgrabers.framework.utils.NoteGenerator;
1822
import de.mossgrabers.framework.view.Views;
1923
import de.mossgrabers.framework.view.sequencer.AbstractNoteSequencerView;
2024

@@ -26,6 +30,9 @@
2630
*/
2731
public class OxiOneSequencerView extends AbstractNoteSequencerView<OxiOneControlSurface, OxiOneConfiguration>
2832
{
33+
private final ModeManager modeManager;
34+
35+
2936
/**
3037
* Constructor.
3138
*
@@ -37,13 +44,45 @@ public OxiOneSequencerView (final OxiOneControlSurface surface, final IModel mod
3744
super (Views.NAME_SEQUENCER, surface, model, 16, 8, true);
3845

3946
this.numDisplayRows = 8;
47+
this.modeManager = this.surface.getModeManager ();
4048
}
4149

4250

4351
/** {@inheritDoc} */
4452
@Override
4553
public void onGridNote (final int note, final int velocity)
4654
{
55+
if (this.modeManager.isActive (Modes.GENERATOR))
56+
{
57+
if (velocity > 0)
58+
{
59+
final OxiOneGeneratorMode generatorMode = (OxiOneGeneratorMode) this.modeManager.get (Modes.GENERATOR);
60+
final int pulse = generatorMode.getPulse ();
61+
final int rotation = generatorMode.getRotation ();
62+
final double density = generatorMode.getDensity ();
63+
final INoteClip clip = this.getClip ();
64+
final int length = Math.min (generatorMode.getLength (), clip.getNumSteps ());
65+
final boolean [] euclideanPattern = NoteGenerator.generateEuclideanPattern (pulse, length, rotation, density);
66+
67+
final int index = note - this.surface.getPadGrid ().getStartNote ();
68+
final int x = index % this.numDisplayCols;
69+
final int y = index / this.numDisplayCols;
70+
final int mappedY = this.keyManager.map (y);
71+
final NotePosition notePosition = new NotePosition (this.configuration.getMidiEditChannel (), x, mappedY);
72+
73+
for (int step = 0; step < euclideanPattern.length; step++)
74+
{
75+
notePosition.setStep (step);
76+
if (euclideanPattern[step])
77+
clip.setStep (notePosition, 127, clip.getStepLength ());
78+
else
79+
clip.clearStep (notePosition);
80+
}
81+
}
82+
83+
return;
84+
}
85+
4786
// Set loop start and end
4887
final boolean init = this.surface.isPressed (ButtonID.PUNCH_IN);
4988
final boolean end = this.surface.isPressed (ButtonID.PUNCH_OUT);
3.01 KB
Binary file not shown.

0 commit comments

Comments
 (0)