From bfc2dfa6eb44ede8f59f7f81d4fbb157daa7e10f Mon Sep 17 00:00:00 2001 From: emurray2 Date: Tue, 22 Apr 2025 17:44:30 -0500 Subject: [PATCH 1/5] Revise existing test for AudioKit/AudioKit#2955 --- Tests/AudioKitEXTests/SequencerTrackTests.swift | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Tests/AudioKitEXTests/SequencerTrackTests.swift b/Tests/AudioKitEXTests/SequencerTrackTests.swift index 97f14dc..dd5d473 100644 --- a/Tests/AudioKitEXTests/SequencerTrackTests.swift +++ b/Tests/AudioKitEXTests/SequencerTrackTests.swift @@ -125,9 +125,11 @@ class SequencerTrackTests: XCTestCase { engine.output = sampler track.add(noteNumber: 60, position: 0.0, duration: 1.0) - track.add(noteNumber: 60, position: 1.0, duration: 1.0) - track.add(noteNumber: 60, position: 2.0, duration: 1.0) - track.add(noteNumber: 60, position: 3.0, duration: 1.0) + track.add(noteNumber: 60, position: 0.0, duration: 1.0) + track.add(noteNumber: 60, position: 0.0, duration: 1.0) + track.add(noteNumber: 60, position: 0.0, duration: 1.0) + + XCTAssertEqual(track.length, 4, "Track length shouldn't be extended with chord duration less than existing track length") track.playFromStart() XCTAssertTrue(track.isPlaying) From 65d4203f2751bd94b8e01f15d797b4d324630406 Mon Sep 17 00:00:00 2001 From: emurray2 Date: Tue, 22 Apr 2025 17:55:12 -0500 Subject: [PATCH 2/5] Revise existing code for AudioKit/AudioKit#2955 --- Sources/AudioKitEX/Sequencing/Sequence.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/AudioKitEX/Sequencing/Sequence.swift b/Sources/AudioKitEX/Sequencing/Sequence.swift index 3f65690..25c20ff 100644 --- a/Sources/AudioKitEX/Sequencing/Sequence.swift +++ b/Sources/AudioKitEX/Sequencing/Sequence.swift @@ -87,7 +87,7 @@ public struct NoteEventSequence: Equatable { channel: MIDIChannel = 0, position: Double, duration: Double) { - totalDuration += duration + totalDuration = max(totalDuration, position + duration) // Get last note in the track + its duration var newNote = SequenceNote() newNote.noteOn.status = noteOnByte From f91d65cbc23c5dbf53d292cb976cf241ce015a81 Mon Sep 17 00:00:00 2001 From: emurray2 Date: Tue, 22 Apr 2025 18:07:22 -0500 Subject: [PATCH 3/5] Test original behavior too --- Tests/AudioKitEXTests/SequencerTrackTests.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Tests/AudioKitEXTests/SequencerTrackTests.swift b/Tests/AudioKitEXTests/SequencerTrackTests.swift index dd5d473..1273103 100644 --- a/Tests/AudioKitEXTests/SequencerTrackTests.swift +++ b/Tests/AudioKitEXTests/SequencerTrackTests.swift @@ -131,6 +131,13 @@ class SequencerTrackTests: XCTestCase { XCTAssertEqual(track.length, 4, "Track length shouldn't be extended with chord duration less than existing track length") + track.add(noteNumber: 60, position: 0.0, duration: 1.0) + track.add(noteNumber: 60, position: 1.0, duration: 1.0) + track.add(noteNumber: 60, position: 2.0, duration: 1.0) + track.add(noteNumber: 60, position: 3.0, duration: 1.0) + + XCTAssertEqual(track.length, 4.01, "Track length should be extended with note event position + duration greater or equal to existing track length") + track.playFromStart() XCTAssertTrue(track.isPlaying) let audio = engine.startTest(totalDuration: 5.0) From 1b4cba0a66a31e83ca2c82fb848cd890b6fa6c04 Mon Sep 17 00:00:00 2001 From: emurray2 Date: Tue, 8 Jul 2025 10:50:08 -0500 Subject: [PATCH 4/5] Make comment clear --- Sources/AudioKitEX/Sequencing/Sequence.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/AudioKitEX/Sequencing/Sequence.swift b/Sources/AudioKitEX/Sequencing/Sequence.swift index 25c20ff..3c9a640 100644 --- a/Sources/AudioKitEX/Sequencing/Sequence.swift +++ b/Sources/AudioKitEX/Sequencing/Sequence.swift @@ -87,7 +87,7 @@ public struct NoteEventSequence: Equatable { channel: MIDIChannel = 0, position: Double, duration: Double) { - totalDuration = max(totalDuration, position + duration) // Get last note in the track + its duration + totalDuration = max(totalDuration, position + duration) // Compare latest note position and duration to current totalDuration. var newNote = SequenceNote() newNote.noteOn.status = noteOnByte From 97c95e42dd56b64fe51c2cbd6c71eb4e3cb1ee7e Mon Sep 17 00:00:00 2001 From: emurray2 Date: Tue, 8 Jul 2025 11:00:10 -0500 Subject: [PATCH 5/5] Add another test case for track length --- Tests/AudioKitEXTests/SequencerTrackTests.swift | 4 ++++ Tests/AudioKitEXTests/ValidatedMD5s.swift | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Tests/AudioKitEXTests/SequencerTrackTests.swift b/Tests/AudioKitEXTests/SequencerTrackTests.swift index 1273103..d3548e4 100644 --- a/Tests/AudioKitEXTests/SequencerTrackTests.swift +++ b/Tests/AudioKitEXTests/SequencerTrackTests.swift @@ -138,6 +138,10 @@ class SequencerTrackTests: XCTestCase { XCTAssertEqual(track.length, 4.01, "Track length should be extended with note event position + duration greater or equal to existing track length") + track.add(noteNumber: 60, position: 1.0, duration: 5.0) + + XCTAssertEqual(track.length, 6.01, "Track length should be extended with note event position + duration greater or equal to existing track length") + track.playFromStart() XCTAssertTrue(track.isPlaying) let audio = engine.startTest(totalDuration: 5.0) diff --git a/Tests/AudioKitEXTests/ValidatedMD5s.swift b/Tests/AudioKitEXTests/ValidatedMD5s.swift index 839f663..50c5351 100644 --- a/Tests/AudioKitEXTests/ValidatedMD5s.swift +++ b/Tests/AudioKitEXTests/ValidatedMD5s.swift @@ -21,7 +21,7 @@ let validatedMD5s: [String: String] = [ "-[SequencerTrackTests testLoop]": "3a7ebced69ddc6669932f4ee48dabe2b", "-[SequencerTrackTests testOneShot]": "3fbf53f1139a831b3e1a284140c8a53c", "-[SequencerTrackTests testTempo]": "1eb7efc6ea54eafbe616dfa8e1a3ef36", - "-[SequencerTrackTests testNoteBounds]": "6679c7b949d28130549c6a1eb4ceaf59", + "-[SequencerTrackTests testNoteBounds]": "f3b3935e30380367c15652c0a76a8a57", "-[DryWetMixerTests testBalance0]": "789c1e77803a4f9d10063eb60ca03cea", "-[DryWetMixerTests testBalance1]": "3932bc5d49cbefd4a9dd587d16f4b81c", "-[DryWetMixerTests testDefault]": "45a639729d8698a28f134bbe4ccc9d6c",