thecollabagepatch commited on
Commit
4587340
·
1 Parent(s): 1f74f2f

oh boy more reverting

Browse files
Files changed (1) hide show
  1. jam_worker.py +10 -29
jam_worker.py CHANGED
@@ -10,7 +10,6 @@ from utils import (
10
  apply_micro_fades, make_bar_aligned_context, take_bar_aligned_tail,
11
  resample_and_snap, wav_bytes_base64
12
  )
13
- from math import floor, ceil
14
 
15
  @dataclass
16
  class JamParams:
@@ -415,31 +414,15 @@ class JamWorker(threading.Thread):
415
  chunk_secs = self.params.bars_per_chunk * spb
416
  xfade = float(self.mrt.config.crossfade_length) # seconds
417
  sr = int(self.mrt.sample_rate)
418
- chunk_step_f = chunk_secs * sr # float samples per chunk
419
- self._emit_phase = getattr(self, "_emit_phase", 0.0)
420
-
421
- def _need(first_chunk_extra: bool = False) -> int:
422
- """
423
- How many more samples we still need in the stream to emit the next slice.
424
- Uses the fractional step (chunk_step_f) + current _emit_phase to compute
425
- the *integer* number of samples required for the next chunk, without
426
- mutating _emit_phase here.
427
- """
428
- start = getattr(self, "_next_emit_start", 0)
429
- total = 0 if getattr(self, "_stream", None) is None else self._stream.shape[0]
430
- have = max(0, total - start)
431
-
432
- # Compute the integer step we'd use for the next emit, non-mutating.
433
- emit_phase = float(getattr(self, "_emit_phase", 0.0))
434
- step_int = int(floor(chunk_step_f + emit_phase)) # matches the logic used when advancing
435
-
436
- # How much we want available beyond 'start' for this emit.
437
- want = step_int
438
- if first_chunk_extra:
439
- # Reserve two extra bars so the first-chunk onset alignment has material.
440
- # Use ceil to be conservative so we don't under-request.
441
- want += int(ceil(2.0 * spb * sr))
442
 
 
 
 
 
 
 
 
443
  return max(0, want - have)
444
 
445
  def _mono_env(x: np.ndarray, sr: int, win_ms: float = 10.0) -> np.ndarray:
@@ -465,6 +448,7 @@ class JamWorker(threading.Thread):
465
  return 0
466
 
467
  # envelopes + z-score
 
468
  def _z(a):
469
  m, s = float(a.mean()), float(a.std() or 1.0); return (a - m) / s
470
  e_ref = _z(_mono_env(ref_tail, sr)).astype(np.float32)
@@ -535,10 +519,7 @@ class JamWorker(threading.Thread):
535
 
536
  # 3) Emit exactly bars_per_chunk × spb from the stream
537
  start = self._next_emit_start
538
- step_total = chunk_step_f + self._emit_phase
539
- step_int = int(np.floor(step_total))
540
- self._emit_phase = float(step_total - step_int)
541
- end = start + step_int
542
  if end > self._stream.shape[0]:
543
  # shouldn't happen often; generate a bit more and loop
544
  continue
 
10
  apply_micro_fades, make_bar_aligned_context, take_bar_aligned_tail,
11
  resample_and_snap, wav_bytes_base64
12
  )
 
13
 
14
  @dataclass
15
  class JamParams:
 
414
  chunk_secs = self.params.bars_per_chunk * spb
415
  xfade = float(self.mrt.config.crossfade_length) # seconds
416
  sr = int(self.mrt.sample_rate)
417
+ chunk_samps = int(round(chunk_secs * sr))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
418
 
419
+ def _need(first_chunk_extra=False):
420
+ """How many more samples we still need in the stream to emit next slice."""
421
+ have = 0 if getattr(self, "_stream", None) is None else self._stream.shape[0] - getattr(self, "_next_emit_start", 0)
422
+ want = chunk_samps
423
+ if first_chunk_extra:
424
+ # reserve two bars extra so first-chunk onset alignment has material
425
+ want += int(round(2 * spb * sr))
426
  return max(0, want - have)
427
 
428
  def _mono_env(x: np.ndarray, sr: int, win_ms: float = 10.0) -> np.ndarray:
 
448
  return 0
449
 
450
  # envelopes + z-score
451
+ import numpy as np
452
  def _z(a):
453
  m, s = float(a.mean()), float(a.std() or 1.0); return (a - m) / s
454
  e_ref = _z(_mono_env(ref_tail, sr)).astype(np.float32)
 
519
 
520
  # 3) Emit exactly bars_per_chunk × spb from the stream
521
  start = self._next_emit_start
522
+ end = start + chunk_samps
 
 
 
523
  if end > self._stream.shape[0]:
524
  # shouldn't happen often; generate a bit more and loop
525
  continue