Spaces:
Sleeping
Sleeping
| // 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 | |
| ) | |
| } | |
| } | |