4track 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -577,21 +577,6 @@ export class AudioEngine {
577
577
  }
578
578
  /** Loads a .4trk file, restoring all track buffers, mixer settings, and master volume. */
579
579
  async importProject(file) {
580
- // Stop any in-progress recording or playback
581
- if (this.playState === "recording")
582
- this.stopRecording();
583
- this.stopAllPlayback();
584
- this.playState = "stopped";
585
- this.stopMonitoring();
586
- // Clear all existing track data before loading
587
- for (const track of this.tracks) {
588
- if (!track.hidden) {
589
- track.buffer = null;
590
- track.hasContent = false;
591
- track.trimStart = 0;
592
- track.level = 0;
593
- }
594
- }
595
580
  const { masterVolume } = await _importProject(file, this.tracks, () => this.ensureContext());
596
581
  this.setMasterVolume(masterVolume);
597
582
  this.rewind();
@@ -37,6 +37,7 @@
37
37
  let selectedTrack = $state(0)
38
38
  let speed = $state(0)
39
39
  let recordEngaged = $state(false)
40
+ let resetTransport: (() => void) | undefined = $state()
40
41
 
41
42
  async function fetchWithProgress(url: string): Promise<File> {
42
43
  const response = await fetch(url)
@@ -83,6 +84,7 @@
83
84
  const file =
84
85
  typeof source === "string" ? await fetchWithProgress(source) : source
85
86
  await engine!.importProject(file)
87
+ resetTransport?.()
86
88
  status = "ready"
87
89
  } catch (e) {
88
90
  status = "error"
@@ -194,7 +196,7 @@
194
196
 
195
197
  <div class="cell-center" style="grid-area: 2 / 6 / 3 / 8">
196
198
  <div class="mic-status">
197
- <div class="ui-label">mic status</div>
199
+ <div class="ui-label">mic status XXX22</div>
198
200
  <div
199
201
  class="mic-status-light"
200
202
  title="Microphone status: {engine.micStatus}"
@@ -285,6 +287,7 @@
285
287
  {selectedTrack}
286
288
  bind:speed
287
289
  bind:recordEngaged
290
+ bind:resetTransport
288
291
  />
289
292
  </div>
290
293
  </div>
@@ -20,11 +20,13 @@
20
20
  selectedTrack,
21
21
  speed = $bindable(0),
22
22
  recordEngaged = $bindable(false),
23
+ resetTransport = $bindable<() => void>(),
23
24
  }: {
24
25
  engine: AudioEngine
25
26
  selectedTrack: number
26
27
  speed: number
27
28
  recordEngaged: boolean
29
+ resetTransport?: () => void
28
30
  } = $props()
29
31
 
30
32
  let btns = $state({
@@ -74,6 +76,8 @@
74
76
  })
75
77
  }
76
78
 
79
+ resetTransport = reset
80
+
77
81
  function clicky(btnType: string) {
78
82
  switch (btnType) {
79
83
  case "play":
@@ -4,7 +4,8 @@ type $$ComponentProps = {
4
4
  selectedTrack: number;
5
5
  speed: number;
6
6
  recordEngaged: boolean;
7
+ resetTransport?: () => void;
7
8
  };
8
- declare const TransportButtons: import("svelte").Component<$$ComponentProps, {}, "speed" | "recordEngaged">;
9
+ declare const TransportButtons: import("svelte").Component<$$ComponentProps, {}, "speed" | "recordEngaged" | "resetTransport">;
9
10
  type TransportButtons = ReturnType<typeof TransportButtons>;
10
11
  export default TransportButtons;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "4track",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "A 4-track cassette recorder component for Svelte 5",
5
5
  "license": "GPL-3.0-only",
6
6
  "author": "Andre Boekhorst",