Piano Roll Note
data class PianoRollNote(val startSeconds: Double, val durationSeconds: Double, val velocity: Float, val note: Int, val channel: Int, val deleted: Boolean, val editId: Long, val umpGroup: Int, val releaseVelocity: Int, val attributeType: Int, val attributeValue: Int, val automationEventCount: Int)
One note as a session holds it.
deleted notes stay in the list so indexes remain stable across an edit; skip them when drawing. editId is the identity the selection is keyed by — an index is only good until the next edit.