removed unwanted bar now with waveforms, major updates and enhancements
This commit is contained in:
@@ -3053,4 +3053,50 @@ extension KJamsCloneTests {
|
||||
for song in dj.songs { XCTAssertNotNil(try WaveformCache.load(audio:URL(fileURLWithPath:song.audio),directory:dj.waveformDirectory)) }
|
||||
}
|
||||
|
||||
@MainActor func testAddingLoopToPlayingTrackDoesNotRestartAudioNode() async throws {
|
||||
let root = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
|
||||
defer { try? FileManager.default.removeItem(at:root) }
|
||||
let fixture = try XCTUnwrap(Bundle(for:Self.self).resourceURL?.appendingPathComponent("Fixtures/Demo.wav"))
|
||||
let player = Player(waveformCacheDirectory:root,persistsMix:false)
|
||||
defer { player.stop() }
|
||||
player.autoFade = false
|
||||
try player.load(Song(id:1,title:"Demo",audio:fixture.path,cdg:nil,rating:0,plays:0))
|
||||
for _ in 0..<100 where player.displayTime < 0.05 { try await Task.sleep(nanoseconds:10_000_000) }
|
||||
let start = player.displayTime,restarts = player.audioScheduleRestartCount
|
||||
player.defineLoop(start:start,end:start+0.3)
|
||||
for _ in 0..<100 where !player.nativeLoopActive { try await Task.sleep(nanoseconds:10_000_000) }
|
||||
XCTAssertTrue(player.nativeLoopActive);XCTAssertTrue(player.audioPlaybackStarted)
|
||||
XCTAssertEqual(player.audioScheduleRestartCount,restarts,"Adding a live loop must not stop the audio node")
|
||||
try await Task.sleep(nanoseconds:400_000_000)
|
||||
XCTAssertGreaterThanOrEqual(player.displayTime,start);XCTAssertLessThan(player.displayTime,start+0.301)
|
||||
player.loopEnabled = false
|
||||
XCTAssertEqual(player.audioScheduleRestartCount,restarts,"Cancelling the loop must also leave the audio node running")
|
||||
XCTAssertTrue(player.audioPlaybackStarted)
|
||||
}
|
||||
|
||||
@MainActor func testLoopOffNearTrackEndStillFinishesWithoutRestarting() async throws {
|
||||
let root = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
|
||||
defer { try? FileManager.default.removeItem(at:root) }
|
||||
let fixture = try XCTUnwrap(Bundle(for:Self.self).resourceURL?.appendingPathComponent("Fixtures/Demo.wav"))
|
||||
let player = Player(waveformCacheDirectory:root,persistsMix:false)
|
||||
defer { player.stop() }
|
||||
player.autoFade = false
|
||||
try player.load(Song(id:1,title:"Demo",audio:fixture.path,cdg:nil,rating:0,plays:0),startPlaying:false)
|
||||
player.defineLoop(start:player.duration-0.2,end:player.duration)
|
||||
for _ in 0..<100 where !player.nativeLoopActive { try await Task.sleep(nanoseconds:10_000_000) }
|
||||
player.seek(player.duration-0.15);player.toggle()
|
||||
for _ in 0..<500 {
|
||||
let remaining = player.duration-player.displayTime
|
||||
if remaining > 0,remaining < 0.015 { break }
|
||||
try await Task.sleep(nanoseconds:1_000_000)
|
||||
}
|
||||
XCTAssertLessThan(player.duration-player.displayTime,0.02)
|
||||
var finished = false;player.onFinished = { finished = true }
|
||||
let restarts = player.audioScheduleRestartCount
|
||||
player.loopEnabled = false
|
||||
XCTAssertEqual(player.audioScheduleRestartCount,restarts)
|
||||
for _ in 0..<200 where !finished { try await Task.sleep(nanoseconds:5_000_000) }
|
||||
XCTAssertTrue(finished);XCTAssertFalse(player.playing)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user