fix(tracker): recording creates empty track when no notes triggered

This commit is contained in:
5684185+vsariola@users.noreply.github.com 2024-03-10 20:01:13 +02:00
parent e488cd391b
commit c55b27b23b
2 changed files with 8 additions and 0 deletions

View File

@ -23,6 +23,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
([#65][i65])
### Fixed
- When recording notes from VSTI, no track was created for instruments that had
no notes triggered, resulting in misalignment of the tracks from instruments.
- 32-bit su_load_gmdls clobbered ebx, even though __stdcall demands it to be not
touched ([#130][i130])
- Spaces are allowed in instrument names ([#120][i120])

View File

@ -77,6 +77,12 @@ func (recording *Recording) Score(patch sointu.Patch, rowsPerBeat, rowsPerPatter
tracks[i][oldestIndex] = append(tracks[i][oldestIndex], n)
}
}
// if there was tracks that had no notes, create empty tracks for them
for i := range channelNotes {
if l := len(tracks[i]); l == 0 && l < patch[i].NumVoices {
tracks[i] = append(tracks[i], []recordingNote{})
}
}
songLengthPatterns := (frameToRow(recording.BPM, rowsPerBeat, recording.TotalFrames) + rowsPerPattern - 1) / rowsPerPattern
songLengthRows := songLengthPatterns * rowsPerPattern
songTracks := make([]sointu.Track, 0)