You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
1.9 KiB
C#
83 lines
1.9 KiB
C#
using Midi;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace IntelOrca.Launchpad
|
|
{
|
|
public enum ButtonType { Grid, Toolbar, Side }
|
|
public enum ButtonBrightness { Off, Low, Medium, Full };
|
|
public enum ButtonPressState { Up = 0, Down = 127 };
|
|
|
|
public class LaunchpadButton
|
|
{
|
|
private LaunchpadDevice mLaunchpadDevice;
|
|
private ButtonBrightness mRedBrightness, mGreenBrightness;
|
|
private ButtonPressState mState;
|
|
|
|
private ButtonType mType;
|
|
private int mIndex;
|
|
|
|
internal LaunchpadButton(LaunchpadDevice launchpadDevice, ButtonType type, int index)
|
|
{
|
|
mLaunchpadDevice = launchpadDevice;
|
|
mType = type;
|
|
mIndex = index;
|
|
}
|
|
|
|
public void TurnOnLight()
|
|
{
|
|
SetBrightness(ButtonBrightness.Full, ButtonBrightness.Full);
|
|
}
|
|
|
|
public void TurnOffLight()
|
|
{
|
|
SetBrightness(ButtonBrightness.Off, ButtonBrightness.Off);
|
|
}
|
|
|
|
public void SetBrightness(ButtonBrightness red, ButtonBrightness green)
|
|
{
|
|
if (mRedBrightness == red && mGreenBrightness == green)
|
|
return;
|
|
|
|
mRedBrightness = red;
|
|
mGreenBrightness = green;
|
|
|
|
int vel = ((int)mGreenBrightness << 4) | (int)mRedBrightness;
|
|
|
|
if (!mLaunchpadDevice.DoubleBuffered)
|
|
vel |= 12;
|
|
|
|
SetLED(vel);
|
|
}
|
|
|
|
private void SetLED(int value)
|
|
{
|
|
if (mType == ButtonType.Toolbar)
|
|
mLaunchpadDevice.OutputDevice.SendControlChange(Channel.Channel1, (Control)mIndex, value);
|
|
else
|
|
mLaunchpadDevice.OutputDevice.SendNoteOn(Channel.Channel1, (Pitch)mIndex, value);
|
|
}
|
|
|
|
public ButtonBrightness RedBrightness
|
|
{
|
|
get { return mRedBrightness; }
|
|
internal set { mRedBrightness = value; }
|
|
}
|
|
|
|
public ButtonBrightness GreenBrightness
|
|
{
|
|
get { return mGreenBrightness; }
|
|
internal set { mGreenBrightness = value; }
|
|
}
|
|
|
|
public ButtonPressState State
|
|
{
|
|
get { return mState; }
|
|
internal set { mState = value; }
|
|
}
|
|
}
|
|
}
|