Skip to content

Commit eb24a0f

Browse files
committed
Fixed NoteCallback is not applied on MoveToTime to a note (#332)
1 parent 573c9f4 commit eb24a0f

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

DryWetMidi.Tests/Multimedia/Playback/PlaybackTests.NoteCallback.cs

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,7 @@ public void NoteCallback_MoveBack_BeyondPlaybackStart()
782782

783783
[Retry(RetriesNumber)]
784784
[Test]
785-
public void NoteCallback_MoveToTime()
785+
public void NoteCallback_MoveToTime_1()
786786
{
787787
var lastEventTime = TimeSpan.FromMilliseconds(2000);
788788

@@ -850,6 +850,61 @@ public void NoteCallback_MoveToTime()
850850
});
851851
}
852852

853+
[Retry(RetriesNumber)]
854+
[Test]
855+
public void NoteCallback_MoveToTime_2()
856+
{
857+
var firstNoteTime = TimeSpan.FromMilliseconds(0);
858+
var firstNoteLength = TimeSpan.FromMilliseconds(600);
859+
860+
var secondNoteTime = TimeSpan.FromMilliseconds(700);
861+
var secondNoteLength = TimeSpan.FromMilliseconds(600);
862+
863+
var moveFrom = TimeSpan.FromMilliseconds(300);
864+
var moveTo = TimeSpan.FromMilliseconds(1000);
865+
866+
var originalNote1 = new Note((SevenBitNumber)0) { Velocity = SevenBitNumber.MinValue }
867+
.SetTime((MetricTimeSpan)firstNoteTime, TempoMap)
868+
.SetLength((MetricTimeSpan)firstNoteLength, TempoMap);
869+
870+
var note1 = (Note)originalNote1.Clone();
871+
note1.NoteNumber += TransposeBy;
872+
873+
var originalNote2 = new Note((SevenBitNumber)20) { Velocity = SevenBitNumber.MinValue }
874+
.SetTime((MetricTimeSpan)secondNoteTime, TempoMap)
875+
.SetLength((MetricTimeSpan)secondNoteLength, TempoMap);
876+
877+
var note2 = (Note)originalNote2.Clone();
878+
note2.NoteNumber += TransposeBy;
879+
880+
CheckNoteCallback(
881+
initialPlaybackObjects: new[]
882+
{
883+
originalNote1,
884+
originalNote2,
885+
},
886+
actions: new[]
887+
{
888+
new PlaybackAction(moveFrom, p =>
889+
p.MoveToTime((MetricTimeSpan)moveTo)),
890+
},
891+
expectedReceivedEvents: new[]
892+
{
893+
new SentReceivedEvent(new NoteOnEvent(TransposeBy, SevenBitNumber.MinValue), TimeSpan.Zero),
894+
new SentReceivedEvent(new NoteOffEvent(TransposeBy, SevenBitNumber.MinValue), moveFrom),
895+
new SentReceivedEvent(new NoteOnEvent((SevenBitNumber)(TransposeBy + 20), SevenBitNumber.MinValue), moveFrom),
896+
new SentReceivedEvent(new NoteOffEvent((SevenBitNumber)(TransposeBy + 20), SevenBitNumber.MinValue), moveFrom + secondNoteTime + secondNoteLength - moveTo),
897+
},
898+
expectedNotesEvents: new[]
899+
{
900+
(EventType.Started, note1, originalNote1, true),
901+
(EventType.Finished, note1, originalNote1, true),
902+
(EventType.Started, note2, originalNote2, true),
903+
(EventType.Finished, note2, originalNote2, true),
904+
},
905+
setupPlayback: playback => playback.NoteCallback = NoteCallback);
906+
}
907+
853908
[Retry(RetriesNumber)]
854909
[Test]
855910
public void NoteCallback_MoveToTime_BeyondDuration()

DryWetMidi/Multimedia/Playback/Playback.Misc.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1099,7 +1099,7 @@ private bool TryPlayNoteEvent(
10991099
var notePlaybackData = noteMetadata.NotePlaybackData;
11001100

11011101
var noteCallback = NoteCallback;
1102-
if (noteCallback != null && midiEvent is NoteOnEvent)
1102+
if (noteCallback != null && isNoteOnEvent)
11031103
{
11041104
notePlaybackData = noteCallback(noteMetadata.RawNotePlaybackData, noteMetadata.RawNote.Time, noteMetadata.RawNote.Length, time);
11051105
noteMetadata.SetCustomNotePlaybackData(notePlaybackData);

0 commit comments

Comments
 (0)