diff --git a/app/src/renderer/src/lib/components/settings/GeneralSettings.svelte b/app/src/renderer/src/lib/components/settings/GeneralSettings.svelte index 10bce61..225f9d7 100644 --- a/app/src/renderer/src/lib/components/settings/GeneralSettings.svelte +++ b/app/src/renderer/src/lib/components/settings/GeneralSettings.svelte @@ -41,6 +41,11 @@ DEFAULT_DECK_PREFS.quantise, (on) => prefs.setQuantise(on) ), + setting( + () => prefs.loadAtFirstCue, + DEFAULT_DECK_PREFS.loadAtFirstCue, + (on) => prefs.setLoadAtFirstCue(on) + ), setting( () => prefs.cuePlacement, DEFAULT_DECK_PREFS.cuePlacement, @@ -76,6 +81,12 @@ on={prefs.quantise} onflip={() => prefs.setQuantise(!prefs.quantise)} /> + prefs.setLoadAtFirstCue(!prefs.loadAtFirstCue)} + /> ('cuePlacement', ['playhead', 'cuePoint'], DEFAULT_DECK_PREFS.cuePlacement) - ) + loadAtFirstCue = $state(storedFlag('loadAtFirstCue', DEFAULT_DECK_PREFS.loadAtFirstCue)) + cuePlacement = $state(storedChoice('cuePlacement', ['playhead', 'cuePoint'], DEFAULT_DECK_PREFS.cuePlacement)) snapPlayhead = $state(storedFlag('snapPlayhead')) unlimitedMemoryCues = $state(storedFlag('unlimitedMemoryCues')) tempoReadout = $state( @@ -29,6 +29,11 @@ export class DeckPrefs { storeFlag('quantise', on) } + setLoadAtFirstCue(on: boolean): void { + this.loadAtFirstCue = on + storeFlag('loadAtFirstCue', on) + } + setSnapPlayhead(on: boolean): void { this.snapPlayhead = on storeFlag('snapPlayhead', on) diff --git a/app/src/renderer/src/lib/player.svelte.ts b/app/src/renderer/src/lib/player.svelte.ts index 4d7d10f..f0dabd3 100644 --- a/app/src/renderer/src/lib/player.svelte.ts +++ b/app/src/renderer/src/lib/player.svelte.ts @@ -238,6 +238,17 @@ export class Player { const opened = this.session.open(track) this.display.reload() await opened + const stillThisTrack = this.track?.id === track.id + const cuePointUntouched = this.cuePoint === 0 + if (this.prefs.loadAtFirstCue && stillThisTrack && cuePointUntouched) this.cueAtFirstCue() + } + + private cueAtFirstCue(): void { + const first = this.displayCues.reduce( + (earliest, cue) => (!earliest || cue.start < earliest.start ? cue : earliest), + null + ) + if (first) this.cueAt(first.start / 1000) } private play(): void {