every track on beepbox is always the same length no matter what, but in ultrabox you get mod channels which alows this (i have it in my dwell song):
And that basically is 1/4 of a measure.
oh wait a track is an instrument i think. there is more that should be added, but i had a rough idea of organizing it as:
class SongNote {
pitches: number[] // 0-63 (chords and stuff are multiple, empty array is no note)
shifts: number[] // shift of notes, ordered same as volumes but [time (in grid ticks), shiftAmount, time, shiftAmount], empty array is no pitch slide
duration: number // Number of grid ticks
volumes: number[] // volume can change any time the note plays! how it is ordered: [volume, time, volume, time,... volume] where time is the distance between surrounding volumes, vol is between 0 and 3
// for volumes and shifts, the changing of pitch/vol is a slide, not an immediate change
// example:
// pitches: [18, 20, 23]
// shifts: [1,-1, 1,0, 2,-2]
// duration: 4
// volume: [3 4,0]
}
class SongTrack {
notes: Note[] // Chronological list of notes
//envelopes, instrument sound, effects, etc.
}
class SongProject {
bpm: number
tracks: SongTrack[]
}

