Skip to content

Commit

Permalink
feat: Remote Midi controller Adding support for play, stop, pitch ben…
Browse files Browse the repository at this point in the history
…d types in remote protocol. instead of just ctrl-change
  • Loading branch information
olzzon committed May 31, 2019
1 parent ffbde02 commit f043c97
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 50 deletions.
170 changes: 123 additions & 47 deletions src/constants/RemoteFaderPresets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,46 @@
//At first release these will be in seperate files
//So it´s easy to add new equipment.


export interface IMidiMessage {
message: string,
value: any,
type: MidiTypes
}

export enum MidiTypes {
disabled,
playNote,
stopNote,
sendControlChange,
sendPitchBend
}
export interface IRemoteProtocol {
protocol: string,
label: string,
mode: string,
leadingZeros: boolean,
initializeCommands: [
{
oscMessage: string,
value: string,
type: string
}
],
initializeCommands: [ IMidiMessage ],
fromRemote: {
CHANNEL_PGM_ON_OFF: string,
CHANNEL_PST_ON_OFF: string,
CHANNEL_PFL_ON_OFF: string,
CHANNEL_FADER_LEVEL: string,
GRP_FADER_PGM_ON_OFF: string,
GRP_FADER_PST_ON_OFF: string,
GRP_FADER_LEVEL: string,
X_MIX: string,
FADE_TO_BLACK: string,
SNAP_RECALL: string,
CHANNEL_PGM_ON_OFF: IMidiMessage,
CHANNEL_PST_ON_OFF: IMidiMessage,
CHANNEL_PFL_ON_OFF: IMidiMessage,
CHANNEL_FADER_LEVEL: IMidiMessage,
GRP_FADER_PGM_ON_OFF: IMidiMessage,
GRP_FADER_PST_ON_OFF: IMidiMessage,
GRP_FADER_LEVEL: IMidiMessage,
X_MIX: IMidiMessage,
FADE_TO_BLACK: IMidiMessage,
SNAP_RECALL: IMidiMessage,
},
toRemote: {
STATE_CHANNEL_PGM: string,
STATE_CHANNEL_PST: string,
STATE_CHANNEL_PFL: string,
STATE_CHANNEL_FADER_LEVEL: string,
STATE_GRP_FADER_PGM: string,
STATE_GRP_FADER_PST: string,
STATE_GRP_FADER_LEVEL: string,
STATE_CHANNEL_PGM: IMidiMessage,
STATE_CHANNEL_PST: IMidiMessage,
STATE_CHANNEL_PFL: IMidiMessage,
STATE_CHANNEL_FADER_LEVEL: IMidiMessage,
STATE_GRP_FADER_PGM: IMidiMessage,
STATE_GRP_FADER_PST: IMidiMessage,
STATE_GRP_FADER_LEVEL: IMidiMessage,
},
fader: {
min: number,
Expand All @@ -60,37 +68,105 @@ export const RemoteFaderPresets: { [key: string]: IRemoteProtocol } = {
leadingZeros: true,
initializeCommands: [
{
oscMessage: "/info",
message: "",
value: "",
type: "f"
type: MidiTypes.disabled
}
],
fromRemote: {
CHANNEL_PGM_ON_OFF: '/ch/{value1}/mix/pgm',
CHANNEL_PST_ON_OFF: '/ch/{value1}/mix/pst',
CHANNEL_PFL_ON_OFF: '/ch/{value1}/solo',
CHANNEL_FADER_LEVEL: "39",
GRP_FADER_PGM_ON_OFF: '/grp/{value1}/pgm',
GRP_FADER_PST_ON_OFF: '/grp/{value1}/pst',
GRP_FADER_LEVEL: '/grp/{value1}/faderlevel',
X_MIX: '/take',
FADE_TO_BLACK: '/fadetoblack',
SNAP_RECALL: '/snap/{value1}',
CHANNEL_PGM_ON_OFF: {
message: "",
value: "",
type: MidiTypes.disabled
},
CHANNEL_PST_ON_OFF: {
message: "",
value: "",
type: MidiTypes.disabled
},
CHANNEL_PFL_ON_OFF: {
message: "",
value: "",
type: MidiTypes.disabled
},
CHANNEL_FADER_LEVEL: {
message: "",
value: "",
type: MidiTypes.disabled
},
GRP_FADER_PGM_ON_OFF: {
message: "",
value: "",
type: MidiTypes.disabled
},
GRP_FADER_PST_ON_OFF: {
message: "",
value: "",
type: MidiTypes.disabled
},
GRP_FADER_LEVEL: {
message: "",
value: "",
type: MidiTypes.disabled
},
X_MIX: {
message: "",
value: "",
type: MidiTypes.disabled
},
FADE_TO_BLACK: {
message: "",
value: "",
type: MidiTypes.disabled
},
SNAP_RECALL: {
message: "",
value: "",
type: MidiTypes.disabled
},
},
toRemote: {
STATE_CHANNEL_PGM: '/state/ch/{value1}/mix/pgm',
STATE_CHANNEL_PST: '/state/ch/{value1}/mix/pst',
STATE_CHANNEL_PFL: '/state/ch/{value1}/solo',
STATE_CHANNEL_FADER_LEVEL: "39",
STATE_GRP_FADER_PGM: '/state/grp/{value1}/pgm',
STATE_GRP_FADER_PST: '/state/grp/{value1}/pst',
STATE_GRP_FADER_LEVEL: '/state/grp/{value1}/faderlevel',
STATE_CHANNEL_PGM: {
message: "",
value: "",
type: MidiTypes.disabled
},
STATE_CHANNEL_PST: {
message: "",
value: "",
type: MidiTypes.disabled
},
STATE_CHANNEL_PFL: {
message: "",
value: "",
type: MidiTypes.disabled
},
STATE_CHANNEL_FADER_LEVEL: {
message: "",
value: "",
type: MidiTypes.disabled
},
STATE_GRP_FADER_PGM: {
message: "",
value: "",
type: MidiTypes.disabled
},
STATE_GRP_FADER_PST: {
message: "",
value: "",
type: MidiTypes.disabled
},
STATE_GRP_FADER_LEVEL: {
message: "",
value: "",
type: MidiTypes.disabled
},
},
fader: {
min: 0,
max: 1,
zero: 0.75,
step: 0.01,
min: -8192,
max: 8191,
zero: 4396,
step: 10,
fadeTime: 40,
},
meter: {
Expand Down
14 changes: 11 additions & 3 deletions src/utils/MidiRemoteConnection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import os from 'os'; // Used to display (log) network addresses on local machine
import WebMidi, { INoteParam, IMidiChannel } from 'webmidi';

//Utils:
import { IRemoteProtocol, RemoteFaderPresets } from '../constants/RemoteFaderPresets';
import { IRemoteProtocol, RemoteFaderPresets, IMidiMessage, MidiTypes } from '../constants/RemoteFaderPresets';

export class MidiRemoteConnection {
store: any;
Expand Down Expand Up @@ -92,8 +92,16 @@ export class MidiRemoteConnection {
*/
}

sendOutMessage(CtrlMessage: string, channel: number, value: string) {
this.midiOutput.sendControlChange(CtrlMessage, value, channel);
sendOutMessage(CtrlMessage: IMidiMessage, channel: number, value: string) {
if (CtrlMessage.type === MidiTypes.sendControlChange) {
this.midiOutput.sendControlChange(CtrlMessage.message, value, channel);
} else if (CtrlMessage.type === MidiTypes.playNote) {
this.midiOutput.playNote(CtrlMessage.message, value, channel);
} else if (CtrlMessage.type === MidiTypes.stopNote) {
this.midiOutput.stopNote(CtrlMessage.message, value, channel);
} else if (CtrlMessage.type === MidiTypes.sendPitchBend) {
this.midiOutput.sendPitchBend(CtrlMessage.message, value, channel);
}
}

updateOutLevel(channelIndex: number) {
Expand Down

0 comments on commit f043c97

Please sign in to comment.