Spaces:
Running
Running
import flatten from "lodash/flatten" | |
import { AnyEvent } from "midifile-ts" | |
import { DeltaTimeProvider, TickProvider, TrackEvent } from "../track" | |
import { isSignalEvent, mapFromSignalEvent } from "../track/signalEvents" | |
import { deassemble as deassembleNote } from "./noteAssembler" | |
// events in each tracks | |
export function addDeltaTime<T extends TickProvider>( | |
events: T[], | |
): (T & DeltaTimeProvider)[] { | |
let prevTick = 0 | |
return events | |
.sort((a, b) => a.tick - b.tick) | |
.map((e) => { | |
const newEvent = { | |
...e, | |
deltaTime: e.tick - prevTick, | |
} | |
delete (newEvent as any).tick | |
prevTick = e.tick | |
return newEvent | |
}) | |
} | |
// convert the signal event to the normal sequencer specific event | |
const fromSignalEvent = (e: TrackEvent): TrackEvent => { | |
if (isSignalEvent(e)) { | |
return mapFromSignalEvent(e) | |
} | |
return e | |
} | |
export function toRawEvents(events: TrackEvent[]): AnyEvent[] { | |
const a = flatten(events.map(fromSignalEvent).map(deassembleNote)) | |
const c = addDeltaTime(a) | |
return c as AnyEvent[] | |
} | |