Spaces:
Running
Running
// abstraction layer for pitch-bend and controller events | |
import { controllerMidiEvent, pitchBendMidiEvent } from "../midi/MidiEvent" | |
import { isControllerEventWithType, isPitchBendEvent } from "../track" | |
export type ValueEventType = | |
| { type: "pitchBend" } | |
| { type: "controller"; controllerType: number } | |
export const createValueEvent = (t: ValueEventType) => (value: number) => { | |
switch (t.type) { | |
case "pitchBend": | |
return pitchBendMidiEvent(0, 0, Math.round(value)) | |
case "controller": | |
return controllerMidiEvent(0, 0, t.controllerType, Math.round(value)) | |
} | |
} | |
export const isValueEvent = (t: ValueEventType) => { | |
switch (t.type) { | |
case "pitchBend": | |
return isPitchBendEvent | |
case "controller": | |
return isControllerEventWithType(t.controllerType) | |
} | |
} | |
export const isEqualValueEventType = ( | |
item: ValueEventType, | |
other: ValueEventType, | |
): boolean => { | |
switch (item.type) { | |
case "pitchBend": | |
return other.type === "pitchBend" | |
case "controller": | |
return ( | |
other.type === "controller" && | |
item.controllerType === other.controllerType | |
) | |
} | |
} | |