infinity-player

infinite jukebox clone using librosa
git clone https://git.ce9e.org/infinity-player.git

commit
d1ebb32d5fc80e96400d10844774afd6247a09a2
parent
6a82630623a5d12be26684197825880b985f3ffe
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2025-03-06 11:04
inline enhance_diagonal

Diffstat

M player.py 19 +++++++------------

1 files changed, 7 insertions, 12 deletions


diff --git a/player.py b/player.py

@@ -33,15 +33,6 @@ def print_progress(i, n):
   33    33     print(s, end='\r')
   34    34 
   35    35 
   36    -1 def enhance_diagonals(jumps, weight=0.2, steps=1):
   37    -1     for _ in range(steps):
   38    -1         # combine each cell with its diagonal neighbors
   39    -1         jumps1 = numpy.roll(jumps, (1, 1), (0, 1))
   40    -1         jumps2 = numpy.roll(jumps, (-1, -1), (0, 1))
   41    -1         jumps = (weight * (jumps1 + jumps2) + (1 - weight) * jumps) / 2
   42    -1     return jumps
   43    -1 
   44    -1 
   45    36 def compute_buffers(y, beat_frames):
   46    37     beat_samples = librosa.frames_to_samples(beat_frames)
   47    38     ranges = zip([0, *beat_samples], [*beat_samples, None])
@@ -89,10 +80,14 @@ def load(filename, *, force=False):
   89    80     return compute_buffers(y, beat_frames), sample_rate, jumps
   90    81 
   91    82 
   92    -1 def normalize(jumps, threshold):
   -1    83 def enhance(jumps, threshold):
   93    84     n = len(jumps)
   94    85 
   95    -1     jumps = enhance_diagonals(jumps, 0.8, 4)
   -1    86     # beats are more similar if the surrounding beats are similar
   -1    87     for _ in range(4):
   -1    88         jumps_before = numpy.roll(jumps, (-1, -1), (0, 1))
   -1    89         jumps_after = numpy.roll(jumps, (1, 1), (0, 1))
   -1    90         jumps = 0.4 * jumps_before + 0.4 * jumps_after + 0.2 * jumps
   96    91 
   97    92     # scale
   98    93     x_max = jumps.max()
@@ -152,7 +147,7 @@ def main():
  152   147 
  153   148     print('Loading', args.filename)
  154   149     buffers, sample_rate, jumps = load(args.filename, force=args.force)
  155    -1     jumps = normalize(jumps, args.threshold)
   -1   150     jumps = enhance(jumps, args.threshold)
  156   151     jump_count = sum(sum(jumps > 0))
  157   152 
  158   153     print(f'Detected {jump_count} jump opportunities on {len(buffers)} beats')