Skip to content

Rework of MidiDevice & device chooser #104

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions NK2Tray/Button.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,32 @@ public class Button
public int controller;
public MidiCommandCode commandCode;
public int channel;
public MidiOut midiOut;
public MidiDevice midiDevice;

public Button(ref MidiOut midiOutRef, ButtonType butType, int cont, bool initialState, MidiCommandCode code=MidiCommandCode.ControlChange)
public Button(MidiDevice midiDeviceRef, ButtonType butType, int cont, bool initialState, MidiCommandCode code=MidiCommandCode.ControlChange)
{
midiDevice = midiDeviceRef;
commandCode = code;
channel = 1;
buttonType = butType;
controller = cont;
midiOut = midiOutRef;
SetLight(initialState);
}

public void SetLight(bool state)
{
light = state;
if (commandCode == MidiCommandCode.ControlChange)
midiOut.Send(new ControlChangeEvent(0, channel, (MidiController)(controller), state ? 127 : 0).GetAsShortMessage());
else if (commandCode == MidiCommandCode.NoteOn)
midiOut.Send(new NoteOnEvent(0, 1, controller, state ? 127 : 0, 0).GetAsShortMessage());
refreshLight();
}

public void refreshLight()
{
midiDevice.SetLight(controller, light);
}

public void SetLightTemp(bool state)
{
midiDevice.SetLight(controller, state);
}

public bool HandleEvent(MidiInMessageEventArgs e, MidiDevice device)
Expand Down
225 changes: 98 additions & 127 deletions NK2Tray/EasyControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,145 +4,116 @@

namespace NK2Tray
{
public class EasyControl : MidiDevice
public class EasyControl : MidiDeviceTemplate
{
public override string SearchString => "easy";
public FaderDef FirstFourFaderDef => new FaderDef(
false, // delta
127f, // range
1, // channel
false, // selectPresent
true, // mutePresent
false, // recordPresent
false, // subfaderPresent
14, // faderOffset
0, // selectOffset
23, // muteOffset
0, // recordOffset
0, // subFaderOffset
MidiCommandCode.ControlChange, // faderCode
MidiCommandCode.ControlChange, // selectCode
MidiCommandCode.ControlChange, // muteCode
MidiCommandCode.ControlChange, // recordCode
MidiCommandCode.ControlChange // subFaderCode
);
public override bool hasLights => true;
public override int lightCount => 128;
public override MidiCommandCode lightMessageType => MidiCommandCode.ControlChange;
public override bool hasVolumeIndicator => false;
public override int fadersCount => 11;

public FaderDef SecondFiveFaderDef => new FaderDef(
false, // delta
127f, // range
1, // channel
false, // selectPresent
true, // mutePresent
false, // recordPresent
false, // subfaderPresent
14, // faderOffset
0, // selectOffset
24, // muteOffset
0, // recordOffset
0, // subfaderOffset
MidiCommandCode.ControlChange, // faderCode
MidiCommandCode.ControlChange, // selectCode
MidiCommandCode.ControlChange, // muteCode
MidiCommandCode.ControlChange, // recordCode
MidiCommandCode.ControlChange // subFaderCode
);

public FaderDef KnobFaderDef => new FaderDef(
false, // delta
127f, // range
1, // channel
true, // selectPresent
true, // mutePresent
false, // recordPresent
false, // subfaderPresent
1, // faderOffset
55, // selectOffset
58, // muteOffset
0, // recordOffset
0, // subfaderOffset
MidiCommandCode.ControlChange, // faderCode
MidiCommandCode.ControlChange, // selectCode
MidiCommandCode.ControlChange, // muteCode
MidiCommandCode.ControlChange, // recordCode
MidiCommandCode.ControlChange // subFaderCode
);

public FaderDef HorizontalFaderDef => new FaderDef(
false, // delta
127f, // range
1, // channel
true, // selectPresent
true, // mutePresent
true, // recordPresent
false, // subfaderPresent
-1, // faderOffset
-8, // selectOffset
-9, // muteOffset
17, // recordOffset
0, // subfaderOffset
MidiCommandCode.ControlChange, // faderCode
MidiCommandCode.ControlChange, // selectCode
MidiCommandCode.ControlChange, // muteCode
MidiCommandCode.ControlChange, // recordCode
MidiCommandCode.ControlChange // subFaderCode
);

public EasyControl(AudioDevice audioDev)
public override Button[] buttons => new Button[]
{
audioDevices = audioDev;
FindMidiIn();
FindMidiOut();
new Button(midiDevice, ButtonType.MediaPrevious, 34, true),
new Button(midiDevice, ButtonType.MediaNext, 35, true),
new Button(midiDevice, ButtonType.MediaStop, 36, false),
new Button(midiDevice, ButtonType.MediaPlay, 37, true),
new Button(midiDevice, ButtonType.MediaRecord, 38, false)
};

if (Found)
{
ResetAllLights();
InitFaders();
InitButtons();
LoadAssignments();
ListenForMidi();
}
}

public override void ResetAllLights()
{
foreach (var i in Enumerable.Range(0, 128))
midiOut.Send(new ControlChangeEvent(0, 1, (MidiController)i, 0).GetAsShortMessage());
}
//public override string SearchString => "easy";

public override void SetLight(int controller, bool state)
{
midiOut.Send(new ControlChangeEvent(0, 1, (MidiController)(controller), state ? 127 : 0).GetAsShortMessage());
}
public override FaderDef[] faderDefs => new FaderDef[]{
new FaderDef( //FirstFourFaderDef
false, // delta
127f, // range
1, // channel
false, // selectPresent
true, // mutePresent
false, // recordPresent
false, // subfaderPresent
14, // faderOffset
0, // selectOffset
23, // muteOffset
0, // recordOffset
0, // subFaderOffset
MidiCommandCode.ControlChange, // faderCode
MidiCommandCode.ControlChange, // selectCode
MidiCommandCode.ControlChange, // muteCode
MidiCommandCode.ControlChange, // recordCode
MidiCommandCode.ControlChange // subFaderCode
),
new FaderDef( //SecondFiveFaderDef
false, // delta
127f, // range
1, // channel
false, // selectPresent
true, // mutePresent
false, // recordPresent
false, // subfaderPresent
14, // faderOffset
0, // selectOffset
24, // muteOffset
0, // recordOffset
0, // subfaderOffset
MidiCommandCode.ControlChange, // faderCode
MidiCommandCode.ControlChange, // selectCode
MidiCommandCode.ControlChange, // muteCode
MidiCommandCode.ControlChange, // recordCode
MidiCommandCode.ControlChange // subFaderCode
),
new FaderDef( //KnobFaderDef
false, // delta
127f, // range
1, // channel
true, // selectPresent
true, // mutePresent
false, // recordPresent
false, // subfaderPresent
1, // faderOffset
55, // selectOffset
58, // muteOffset
0, // recordOffset
0, // subfaderOffset
MidiCommandCode.ControlChange, // faderCode
MidiCommandCode.ControlChange, // selectCode
MidiCommandCode.ControlChange, // muteCode
MidiCommandCode.ControlChange, // recordCode
MidiCommandCode.ControlChange // subFaderCode
),
new FaderDef( //HorizontalFaderDef
false, // delta
127f, // range
1, // channel
true, // selectPresent
true, // mutePresent
true, // recordPresent
false, // subfaderPresent
-1, // faderOffset
-8, // selectOffset
-9, // muteOffset
17, // recordOffset
0, // subfaderOffset
MidiCommandCode.ControlChange, // faderCode
MidiCommandCode.ControlChange, // selectCode
MidiCommandCode.ControlChange, // muteCode
MidiCommandCode.ControlChange, // recordCode
MidiCommandCode.ControlChange // subFaderCode
)
};

public override void InitFaders()
public EasyControl(MidiDevice midiDev) : base(midiDev)
{
faders = new List<Fader>();

foreach (var i in Enumerable.Range(0, 11))
{
Fader fader = new Fader(this, i, SelectFaderDef(i));
fader.ResetLights();
faders.Add(fader);
}
}

public FaderDef SelectFaderDef(int faderNum)
public override int SelectFaderDef(int faderNum)
{
if (faderNum < 4) return FirstFourFaderDef;
if (faderNum < 9) return SecondFiveFaderDef;
if (faderNum == 9) return KnobFaderDef;
if (faderNum < 4) return 0; //FirstFourFaderDef
if (faderNum < 9) return 1; //SecondFiveFaderDef
if (faderNum == 9) return 2; //KnobFaderDef

return HorizontalFaderDef;
}

public override void InitButtons()
{
buttons = new List<Button>();
buttons.Add(new Button(ref midiOut, ButtonType.MediaPrevious, 34, true));
buttons.Add(new Button(ref midiOut, ButtonType.MediaNext, 35, true));
buttons.Add(new Button(ref midiOut, ButtonType.MediaStop, 36, false));
buttons.Add(new Button(ref midiOut, ButtonType.MediaPlay, 37, true));
buttons.Add(new Button(ref midiOut, ButtonType.MediaRecord, 38, false));
return 3; //HorizontalFaderDef
}
}
}
18 changes: 16 additions & 2 deletions NK2Tray/Fader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,14 +85,14 @@ public class Fader
public float faderPositionMultiplier;
private int primaryFaderHardwareValue;

public Fader(MidiDevice midiDevice, int faderNum)
/*public Fader(MidiDevice midiDevice, int faderNum)
{
parent = midiDevice;
midiOut = midiDevice.midiOut;
faderNumber = faderNum;
faderDef = parent.DefaultFaderDef;
SetCurve(1f);
}
}*/

public Fader(MidiDevice midiDevice, int faderNum, FaderDef _faderDef)
{
Expand Down Expand Up @@ -213,6 +213,20 @@ public void SetRecordLight(bool state)
parent.SetLight(recordController, state);
}

public void SetLightTemp(bool state)
{
parent.SetLight(selectController, state);
parent.SetLight(muteController, state);
parent.SetLight(recordController, state);
}

public void refreshLights()
{
parent.SetLight(selectController, selectLight);
parent.SetLight(muteController, muteLight);
parent.SetLight(recordController, recordLight);
}

public bool GetSelectLight() { return selectLight; }

public bool GetMuteLight() { return muteLight; }
Expand Down
Loading