Mercurial > hg > svapp
comparison audio/ClipMixer.cpp @ 596:c99892f0c5c3
Proper handling for notes that end at the same frame as a subsequent note of the same pitch begins. The note-off needs to be associated with the prior note, not a spurious zero-duration version of the subsequent note.
author | Chris Cannam |
---|---|
date | Wed, 18 Apr 2018 15:19:09 +0100 |
parents | b23bebfdfaba |
children | e2715204feaa |
comparison
equal
deleted
inserted
replaced
595:b23bebfdfaba | 596:c99892f0c5c3 |
---|---|
157 if (start > 0) durationHere = m_blockSize - start; | 157 if (start > 0) durationHere = m_blockSize - start; |
158 | 158 |
159 bool ending = false; | 159 bool ending = false; |
160 | 160 |
161 foreach (NoteEnd end, endingNotes) { | 161 foreach (NoteEnd end, endingNotes) { |
162 if (end.frequency == note.frequency && | 162 if (end.frequency == note.frequency && |
163 end.frameOffset >= start && | 163 // This is > rather than >= because if we have a |
164 // note-off and a note-on at the same time, the | |
165 // note-off must be switching off an earlier note-on, | |
166 // not the current one (zero-duration notes are | |
167 // forbidden earlier in the pipeline) | |
168 end.frameOffset > start && | |
164 end.frameOffset <= m_blockSize) { | 169 end.frameOffset <= m_blockSize) { |
165 ending = true; | 170 ending = true; |
166 durationHere = end.frameOffset; | 171 durationHere = end.frameOffset; |
167 if (start > 0) durationHere = end.frameOffset - start; | 172 if (start > 0) durationHere = end.frameOffset - start; |
168 break; | 173 break; |