From bffebe4d1c8f05d1029747204dacfc428af68dd2 Mon Sep 17 00:00:00 2001 From: JorySeverijnse Date: Mon, 19 Jan 2026 11:34:56 +0100 Subject: [PATCH] Initial commit --- .gitignore | 1 + .python-version | 1 + .../auto_dj_mix_readable.cpython-313.pyc | Bin 0 -> 29566 bytes __pycache__/search_and_mix.cpython-313.pyc | Bin 0 -> 12914 bytes ambient_test_mix.json | 501 +++++++++++ auto_dj_mix.py | 806 ++++++++++++++++++ dj_mix_playlist.csv | 341 ++++++++ house.json | 125 +++ tempo_cache.json | 77 ++ test_all_features.json | 83 ++ 10 files changed, 1935 insertions(+) create mode 100644 .gitignore create mode 100644 .python-version create mode 100644 __pycache__/auto_dj_mix_readable.cpython-313.pyc create mode 100644 __pycache__/search_and_mix.cpython-313.pyc create mode 100644 ambient_test_mix.json create mode 100644 auto_dj_mix.py create mode 100644 dj_mix_playlist.csv create mode 100644 house.json create mode 100644 tempo_cache.json create mode 100644 test_all_features.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..047d7bb --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +backup/ diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..2c20ac9 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.13.3 diff --git a/__pycache__/auto_dj_mix_readable.cpython-313.pyc b/__pycache__/auto_dj_mix_readable.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c01f3635420ae3471ec71b476646e5cff56275c9 GIT binary patch literal 29566 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 literal 0 HcmV?d00001 diff --git a/__pycache__/search_and_mix.cpython-313.pyc b/__pycache__/search_and_mix.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1adcc8d8b79de1d3b3c1a2a1a7d98c54d507bf4f GIT binary patch literal 12914 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

80yN_N@{4w}{9@EX3k2!|v z49vhi3oom--ia*Mj^1Udw2N?I9O#8r-`^;4`h`{bABCm*5~Q4{)oy6eoy@2Xje%&T z@9&kDTVK-R-PGHz>_qEHDXxMz8c;XBE=VM1bCN~y2L~!lkf`BtLSt2 zsivUzrW&Bj=lwKR)jmNKpD?l*Ork(-0V83}AE`U&4jlA3OR6(3g8prY$Ko8^)nZEo zgUH58t=b=ze1(ipmCmy zaYCqDofs%sya12j!2c~9rzVjfTtHT#$DugfEl6bvqRkU7AuxZ3z))zLAUwwj@UjhG z?~6e+90#V6?9^tWJS9b%B6oip8cQ2V*I zx!qDpi)7uqLbcwrIOZ)MSSl7mZ*{&SF17vSYqw5(P&*_&{>0s)vehE*a*=nXzWqjb zvZxQl?%l$oS?5Q2J7&Aqb-9k}d#=Ly=7oY4*DjDuJH5-UsyS+oo6ny2eVkjc<}SE; z{K|2uyz!mJpSHf;y4uvS+|+TSGuhNFH6FiJaf`imR4N--akJ}rME16;wkx)I-z!;b zuCj#&fb<>bZ#+bP&2Mc)-5GM#Qt@yvVX#W}>V=q8z4!WN>sbI*ne?LH+O7ty_ZoOo4a1cIY#}^tPqqGf{+1x@mQHdGt3+OS=jT zHxK!;It|93+X^A`^J+6x{K8P}-*5TFF4BL<_>0~7Q2w3{mA{v3f%5l?-ToHKdwUE} z`(BFymF(A}^r3>TZI<`9>7o7m1=g+|miH@6(CdAVwX4;%!M;PT@k;nT0F4V0^dI1| zPhTd3$OL;DyCZXuyBhL+z=A0d1L&k}`cyHn)pNh}16h?pYmOS=IKAMU8`hw0^)zoQ zVL#+nMc#ShRRg%zPAcNC_i-g2BU|ZC=P_Y!AyXH)$WyWbUzW*c9zY<=T(DNv#41Dh^pzY0? z=KLQOl*}GmbLJz%An7bqEQ7ZSSDnpCXY-xBf~#X!#;!)LL>5|;c`YlhmInr6dnstK zrMo}Hn&H=dX5T*YX4WnUWpfbBvv4#R^pIU1@)LxTr%+*z-H--P)6@jKg4IPQg?W^B zZjwt1%f-wW^_8=MYlFQU=DcDY9A3as(PLdDB{V?`;RFg0>k^(q0cOnTJs`G}F^k6c zn%Kz2)-Sg86t0I>2ce9t;9yXA1$9IB(Rcx6^TCN&Xez=V7FMAQ_#z?tA%xd|B>53x z`H0B+h{*YfaQ-W?``5&_UlXOktiXmdtvUK5}q=YBjy9{<=X;?>n@_tLa|y6bX+X=c$Fx>(o-`E$Y4n0L|F% z=M<28?(fScT@QDZk;V7hNduX4KgUXDKP)hlr^)+nJy~!+>mZqZ|5>t adj_s_time: + normalized_ramps.append(new_ramp) + + return sorted(normalized_ramps, key=lambda r: r["start_time_ms"]) + +def apply_tempo_ramps(y, sr, normalized_ramps, original_tempo, ref_tempo): + logger = logging.getLogger(__name__) + + if not normalized_ramps: + return y + + # Create paths but don't keep them open + tmp_in = tempfile.NamedTemporaryFile(suffix='.wav', delete=False) + tmp_in_path = tmp_in.name + tmp_in.close() + + tmp_out = tempfile.NamedTemporaryFile(suffix='.wav', delete=False) + tmp_out_path = tmp_out.name + tmp_out.close() + + tmp_map = tempfile.NamedTemporaryFile(suffix='.txt', delete=False) + tmp_map_path = tmp_map.name + tmp_map.close() + + try: + # 1. Write the audio to disk as standard 16-bit PCM WAV + sf.write(tmp_in_path, y, sr, subtype='PCM_16') + + # 2. Generate the Time Map + map_points = [] + map_points.append(f"0 0\n") + + current_sample_in = 0.0 + current_sample_out = 0.0 + current_tempo = ref_tempo if ref_tempo else original_tempo + + CHUNK_SIZE = 1024 + total_samples = len(y) + + ramps = sorted(normalized_ramps, key=lambda r: r["start_time_ms"]) + + while current_sample_in < total_samples: + time_ms = (current_sample_in / sr) * 1000.0 + + instant_tempo = current_tempo + + # Find active ramp + for ramp in ramps: + if ramp["start_time_ms"] <= time_ms <= ramp["end_time_ms"]: + ramp_start_tempo = ref_tempo if ref_tempo else original_tempo + for prev_ramp in ramps: + if prev_ramp["end_time_ms"] <= ramp["start_time_ms"]: + ramp_start_tempo = float(prev_ramp["end_tempo"]) + + dur = ramp["end_time_ms"] - ramp["start_time_ms"] + if dur > 0: + prog = (time_ms - ramp["start_time_ms"]) / dur + instant_tempo = ramp_start_tempo + (float(ramp["end_tempo"]) - ramp_start_tempo) * prog + break + elif time_ms > ramp["end_time_ms"]: + instant_tempo = float(ramp["end_tempo"]) + + # Calculate stretch ratio + ratio = instant_tempo / original_tempo + + # Advance + samples_added = CHUNK_SIZE / ratio + current_sample_in += CHUNK_SIZE + current_sample_out += samples_added + + # Only write points that are within the file bounds + if current_sample_in < total_samples: + map_points.append(f"{int(current_sample_in)} {int(current_sample_out)}\n") + + # Add the final exact end point to the map to ensure completeness + map_points.append(f"{total_samples} {int(current_sample_out)}\n") + + # Write map file + with open(tmp_map_path, 'w') as f: + f.writelines(map_points) + + # Calculate total expected duration in seconds for the -D flag + total_duration_sec = current_sample_out / sr + + # 3. Run Rubberband CLI + # We use -D to specify the duration (REQUIRED by your version when using --timemap) + # We removed --threading and --precise as they are not supported by your version + # We use -q for quiet mode + command = [ + "rubberband", + "--quiet", + "--timemap", tmp_map_path, + "-D", str(total_duration_sec), + tmp_in_path, + tmp_out_path + ] + + subprocess.run(command, check=True, capture_output=True, text=True) + + # 4. Load result + y_processed, _ = sf.read(tmp_out_path, dtype='float32') + + # Fix dimensions if mono/stereo mismatch occurs + if y.ndim == 2 and y_processed.ndim == 1: + y_processed = np.column_stack((y_processed, y_processed)) + elif y.ndim == 1 and y_processed.ndim == 2: + y_processed = librosa.to_mono(y_processed.T) + + return y_processed + + except subprocess.CalledProcessError as e: + logger.error("Rubberband CLI failed.") + logger.error(f"Stderr: {e.stderr}") + return y + except Exception as e: + logger.error(f"Map generation failed: {e}") + return y + finally: + for p in [tmp_in_path, tmp_out_path, tmp_map_path]: + if os.path.exists(p): + try: + os.remove(p) + except: + pass + +def compute_mapped_time(original_pos_sec, normalized_ramps, original_tempo, ref_tempo, total_original_duration_sec): + """Computes time in stretched audio using normalized (0-based) ramps.""" + if not normalized_ramps and ref_tempo is None: + return original_pos_sec + if not normalized_ramps and ref_tempo is not None: + return original_pos_sec * (original_tempo / ref_tempo) + + current_time = 0.0 + mapped_time = 0.0 + current_tempo = ref_tempo if ref_tempo else original_tempo + + for ramp in normalized_ramps: + start = ramp["start_time_ms"] / 1000.0 + end = ramp["end_time_ms"] / 1000.0 + end_tempo = float(ramp["end_tempo"]) + + if start < current_time: continue + + # Constant segment before ramp + if start > current_time: + seg_dur = min(start, original_pos_sec) - current_time + if seg_dur > 0: + mapped_time += seg_dur * (original_tempo / current_tempo) + current_time += seg_dur + if current_time >= original_pos_sec: return mapped_time + + # Ramp segment + ramp_dur = end - start + a = current_tempo + b = (end_tempo - current_tempo) / ramp_dur + u = min(original_pos_sec, end) - start + + if u > 0: + if abs(b) < 1e-9: + mapped_time += u * (original_tempo / a) + else: + mapped_time += original_tempo * (math.log(a + b * u) - math.log(a)) / b + current_time += u + if current_time >= original_pos_sec: return mapped_time + + current_tempo = end_tempo + current_time = end + + # Final constant segment + seg_dur = max(0, original_pos_sec - current_time) + if seg_dur > 0: + mapped_time += seg_dur * (original_tempo / current_tempo) + + return mapped_time + +def process_song(config, index, tempo_cache, settings, reference_tempo=None, sample_rate=None): + log_messages = [] + song_path = config["song_path"] + start_offset = parse_time(config.get("start_offset", "0:00")) + no_tempo_adjust = config.get("no_tempo_adjust", False) + + log_messages.append(f"Processing song {index+1}: {song_path}") + + try: + audio_segment = AudioSegment.from_file(song_path) + + if start_offset > 0: + audio_segment = audio_segment[start_offset:] + + # 1. Convert Audio to Arrays for Analysis/Processing EARLY (Needed for Loop Snapping) + full_duration = len(audio_segment) + y_raw = np.array(audio_segment.get_array_of_samples()).astype(np.float32) + y_raw /= (1 << (8 * audio_segment.sample_width - 1)) + + if audio_segment.channels == 2: + y_stereo = y_raw.reshape((-1, 2)) + y_mono = librosa.to_mono(y_stereo.T) + else: + y_mono = y_raw if audio_segment.channels == 1 else librosa.to_mono(y_raw.reshape((-1, audio_segment.channels)).T) + y_stereo = np.column_stack((y_mono, y_mono)) + + current_sample_rate = audio_segment.frame_rate + if sample_rate is None: + sample_rate = current_sample_rate + + # 2. Detect Tempo EARLY + tempo = get_reliable_tempo(y_mono, sample_rate, song_path, tempo_cache) + + # --- Apply Loops (With BPM Grid Snapping) --- + if "loops" in config: + # We need to reconstruct audio_segment because loops change the length + # We'll do this by slicing the original audio_segment based on calculated times + new_audio = AudioSegment.empty() + + # Sort loops by time to handle them sequentially + loops = sorted(config["loops"], key=lambda x: parse_time(x.get("start_time", "0:00"))) + + current_pos = 0 + + for loop in loops: + loop_start_ms = parse_time(loop.get("start_time", "0:00")) + loop_end_ms = parse_time(loop.get("end_time")) + count = int(loop.get("count", 1)) + + if loop_start_ms >= loop_end_ms: continue + + # Add audio BEFORE the loop + if loop_start_ms > current_pos: + new_audio += audio_segment[current_pos:loop_start_ms] + + # --- GRID SNAPPING LOGIC --- + # Calculate exact beat duration at this song's tempo + beat_len_ms = (60.0 / tempo) * 1000.0 + + # How long is the user's manual loop? + user_loop_duration_ms = loop_end_ms - loop_start_ms + + # How many beats is that likely to be? (Round to nearest whole beat) + num_beats = round(user_loop_duration_ms / beat_len_ms) + if num_beats == 0: num_beats = 1 # Prevent division by zero for tiny loops + + # What is the PERFECT grid length for that many beats? + perfect_duration_ms = num_beats * beat_len_ms + + log_messages.append(f"Loop Correction: {user_loop_duration_ms}ms -> {perfect_duration_ms:.2f}ms ({num_beats} beats @ {tempo} BPM)") + + # Extract the loop audio + loop_segment = audio_segment[loop_start_ms:loop_end_ms] + + # Time-Stretch the loop segment to match perfect_duration_ms exactly + # This ensures 28 loops don't drift by even 1 millisecond. + + # Convert loop to numpy for rubberband + l_raw = np.array(loop_segment.get_array_of_samples()).astype(np.float32) + l_raw /= (1 << (8 * loop_segment.sample_width - 1)) + if loop_segment.channels == 2: + l_stereo = l_raw.reshape((-1, 2)) + else: + l_mono = l_raw + l_stereo = np.column_stack((l_mono, l_mono)) + + # Stretch Factor + # If user cut is 3.93s and perfect is 3.931s, we stretch by ~1.0002 (imperceptible pitch change) + stretch_ratio = perfect_duration_ms / user_loop_duration_ms + + # In rubberband: ratio > 1.0 is shorter/faster. We want longer duration. + # duration_new = duration_old * stretch_rate ?? No. + # pyrubberband time_stretch(y, sr, rate). rate=2.0 makes it half duration. + # We want duration to go from User -> Perfect. + # rate = User / Perfect. + rb_rate = user_loop_duration_ms / perfect_duration_ms + + l_stretched_data = pyrubberband.time_stretch(l_stereo, sample_rate, rb_rate) + + # Convert back to AudioSegment + # Ensure 16-bit PCM for Pydub compatibility + l_stretched_data_int = (l_stretched_data * (2**15 - 1)).astype(np.int16) + perfect_loop_segment = AudioSegment( + l_stretched_data_int.tobytes(), + frame_rate=sample_rate, + sample_width=2, + channels=2 + ) + + # Append the snapped loop X times + new_audio += (perfect_loop_segment * count) + + current_pos = loop_end_ms + + # Add remaining audio after the last loop + if current_pos < len(audio_segment): + new_audio += audio_segment[current_pos:] + + audio_segment = new_audio + + # --- Apply EQ Filters --- + if "eq_filters" in config: + for eq_filter in config["eq_filters"]: + filter_type = eq_filter.get("type") + cutoff_hz = eq_filter.get("cutoff_hz") + start_ms = parse_time(eq_filter.get("start_time", "0:00")) + end_time_str = eq_filter.get("end_time") + end_ms = parse_time(end_time_str) if end_time_str else len(audio_segment) + + if not filter_type or not cutoff_hz or start_ms >= end_ms: continue + + pre_segment = audio_segment[:start_ms] + segment_to_filter = audio_segment[start_ms:end_ms] + post_segment = audio_segment[end_ms:] + + if filter_type == "low_pass": + filtered_slice = segment_to_filter.low_pass_filter(cutoff_hz) + elif filter_type == "high_pass": + filtered_slice = segment_to_filter.high_pass_filter(cutoff_hz) + elif filter_type == "band_pass": + low, high = eq_filter.get("low_cutoff_hz"), eq_filter.get("high_cutoff_hz") + filtered_slice = segment_to_filter.high_pass_filter(low).low_pass_filter(high) if low and high else segment_to_filter + elif filter_type == "band_reject": + low, high = eq_filter.get("low_cutoff_hz"), eq_filter.get("high_cutoff_hz") + filtered_slice = segment_to_filter.low_pass_filter(low).overlay(segment_to_filter.high_pass_filter(high)) if low and high else segment_to_filter + else: + filtered_slice = segment_to_filter + + audio_segment = pre_segment + filtered_slice + post_segment + + # --- Apply Volume Automation --- + if "volume_automation" in config: + for automation in config["volume_automation"]: + start_ms = parse_time(automation.get("start_time", "0:00")) + end_time_str = automation.get("end_time") + end_ms = parse_time(end_time_str) if end_time_str else len(audio_segment) + gain_db = float(automation.get("gain_db", 0)) + + if start_ms >= end_ms: continue + + pre_segment = audio_segment[:start_ms] + segment_to_automate = audio_segment[start_ms:end_ms] + post_segment = audio_segment[end_ms:] + audio_segment = pre_segment + segment_to_automate.apply_gain(gain_db) + post_segment + + # --- Apply Band Gains (With Ramping) --- + if "band_gains" in config: + for band_gain in config["band_gains"]: + start_ms = parse_time(band_gain.get("start_time", "0:00")) + end_time_str = band_gain.get("end_time") + end_ms = parse_time(end_time_str) if end_time_str else len(audio_segment) + target_low_gain_db = float(band_gain.get("low_gain_db", 0)) + target_mid_gain_db = float(band_gain.get("mid_gain_db", 0)) + target_high_gain_db = float(band_gain.get("high_gain_db", 0)) + + if start_ms >= end_ms: continue + if target_low_gain_db == 0 and target_mid_gain_db == 0 and target_high_gain_db == 0: + continue + + pre_segment = audio_segment[:start_ms] + segment_to_process = audio_segment[start_ms:end_ms] + post_segment = audio_segment[end_ms:] + + ramp_duration_ms = len(segment_to_process) + if ramp_duration_ms <= 0: continue + + chunk_duration_ms = 250 + num_chunks = max(2, int(ramp_duration_ms / chunk_duration_ms)) + chunk_duration_ms = ramp_duration_ms / num_chunks + + processed_chunks = [] + for i in range(num_chunks): + chunk_start_ms = int(i * chunk_duration_ms) + chunk_end_ms = int((i + 1) * chunk_duration_ms) + chunk = segment_to_process[chunk_start_ms:chunk_end_ms] + + if len(chunk) == 0: continue + + t = (i + 0.5) / num_chunks + low_gain = t * target_low_gain_db + mid_gain = t * target_mid_gain_db + high_gain = t * target_high_gain_db + + filter_str = [] + if low_gain != 0: filter_str.append(f"bass=g={low_gain}:f=250:w=0.707") + if mid_gain != 0: filter_str.append(f"equalizer=f=1000:t=q:w=1:g={mid_gain}") + if high_gain != 0: filter_str.append(f"treble=g={high_gain}:f=2500:w=0.707") + + if filter_str: + processed_chunk = apply_ffmpeg_effect(chunk, ",".join(filter_str)) + else: + processed_chunk = chunk + processed_chunks.append(processed_chunk) + + processed_segment = AudioSegment.empty() + for chunk in processed_chunks: + processed_segment += chunk + + filter_str_post = [] + if target_low_gain_db != 0: filter_str_post.append(f"bass=g={target_low_gain_db}:f=250:w=0.707") + if target_mid_gain_db != 0: filter_str_post.append(f"equalizer=f=1000:t=q:w=1:g={target_mid_gain_db}") + if target_high_gain_db != 0: filter_str_post.append(f"treble=g={target_high_gain_db}:f=2500:w=0.707") + + if filter_str_post and len(post_segment) > 0: + post_segment = apply_ffmpeg_effect(post_segment, ",".join(filter_str_post)) + + audio_segment = pre_segment + processed_segment + post_segment + + # --- Apply Effects --- + if "effects" in config: + for effect in config["effects"]: + start_ms = parse_time(effect.get("start_time", "0:00")) + end_time_str = effect.get("end_time") + end_ms = parse_time(end_time_str) if end_time_str else len(audio_segment) + effect_type = effect.get("type") + + if start_ms >= end_ms: continue + + pre_segment = audio_segment[:start_ms] + segment_to_process = audio_segment[start_ms:end_ms] + post_segment = audio_segment[end_ms:] + + effect_str = "" + if effect_type == "reverb": + wet = effect.get("wet", 0.4) + effect_str = f"afftfilt=real='hypot(re,im)*cos(random(0))*{wet}+re*(1-{wet})':imag='hypot(re,im)*sin(random(0))*{wet}+im*(1-{wet})'" + elif effect_type == "delay": + delay_ms = effect.get("delay_ms", 500) + effect_str = f"adelay=delays={delay_ms}:all=1" + elif effect_type == "raw_ffmpeg": + effect_str = effect.get("filter_string", "") + + if effect_str: + processed_slice = apply_ffmpeg_effect(segment_to_process, effect_str) + audio_segment = pre_segment + processed_slice + post_segment + + # Apply pre-mix normalization + pre_mix_target_dbfs = config.get("target_dBFS", settings.get("pre_mix_target_dbfs", -12.0)) + if config.get("apply_pre_mix_normalization", True): + audio_segment = normalize_audio(audio_segment, pre_mix_target_dbfs) + + full_duration = len(audio_segment) + + # Prepare Final Output for Stretch + y_raw = np.array(audio_segment.get_array_of_samples()).astype(np.float32) + y_raw /= (1 << (8 * audio_segment.sample_width - 1)) + + if audio_segment.channels == 2: + y_stereo = y_raw.reshape((-1, 2)) + y_mono = librosa.to_mono(y_stereo.T) + else: + y_mono = y_raw if audio_segment.channels == 1 else librosa.to_mono(y_raw.reshape((-1, audio_segment.channels)).T) + y_stereo = np.column_stack((y_mono, y_mono)) + + # Tempo Detection (Already done earlier, reusing value) + + # Logic for Ramps and Adjustments + normalized_ramps = get_normalized_ramps(config, start_offset) + + effective_ref = None if no_tempo_adjust else reference_tempo + final_output_tempo = tempo + + stretched_audio = y_stereo + + if normalized_ramps: + log_messages.append(f"Applying tempo ramps with initial ref {effective_ref if effective_ref else tempo}") + stretched_audio = apply_tempo_ramps(stretched_audio, sample_rate, normalized_ramps, tempo, effective_ref) + final_output_tempo = float(normalized_ramps[-1]["end_tempo"]) + elif index > 0 and not no_tempo_adjust: + stretch_rate = reference_tempo / tempo + stretched_audio = pyrubberband.time_stretch(y_stereo, sample_rate, stretch_rate) + final_output_tempo = reference_tempo + else: + final_output_tempo = tempo + + temp_file = f"temp_song{index}.flac" + sf.write(temp_file, stretched_audio, sample_rate) + + return temp_file, sample_rate, tempo, full_duration, len(AudioSegment.from_file(temp_file)), log_messages, final_output_tempo, normalized_ramps + + except Exception as e: + logging.error(f"Error processing {song_path}: {e}") + return None, None, None, None, None, [f"ERROR: Failed to process {song_path}"], None, [] + +def mix_songs(playlist_data): + settings = playlist_data["settings"] + song_configs = playlist_data["tracks"] + output_file = settings.get("output_filename", "mix_output.flac") + default_crossfade = settings.get("default_crossfade_duration", "0:10") + final_mix_target_dbfs = settings.get("final_mix_target_dbfs", -1.0) + num_cores = settings.get("num_cores", 0) + + logger = logging.getLogger(__name__) + manager = Manager() + tempo_cache = manager.dict(load_tempo_cache()) + + # --- Processing Phase --- + first_result = process_song(song_configs[0], 0, tempo_cache, settings, None) + if first_result[0] is None: sys.exit(1) + + current_chain_tempo = first_result[6] + sample_rate = first_result[1] + + processed_configs = [first_result] + + for i, config in enumerate(song_configs[1:], 1): + no_adjust = config.get("no_tempo_adjust", False) + ref_tempo = current_chain_tempo if not no_adjust else None + + result = process_song(config, i, tempo_cache, settings, ref_tempo, sample_rate) + processed_configs.append(result) + + if result[6] is not None: + current_chain_tempo = result[6] + + # --- Mixing Phase --- + temp_files = [res[0] for res in processed_configs] + if any(t is None for t in temp_files): sys.exit(1) + + current_mix = AudioSegment.from_file(temp_files[0]) + chapters = [(0, os.path.basename(song_configs[0]['song_path']))] + song_start_times = [0] + + for index, config in enumerate(tqdm(song_configs[1:], desc="Mixing songs", unit="song"), start=1): + prev_song_config = song_configs[index-1] + prev_result = processed_configs[index-1] + + prev_song_orig_tempo = prev_result[2] + prev_song_ramps = prev_result[7] # Normalized ramps + + if index == 1: + prev_effective_start_tempo = None + else: + p_prev_res = processed_configs[index-2] + p_prev_no_adj = prev_song_config.get("no_tempo_adjust", False) + if p_prev_no_adj: + prev_effective_start_tempo = None + else: + prev_effective_start_tempo = p_prev_res[6] + + crossfade_start_str = config.get("crossfade_start") + crossfade_duration = parse_time(config.get("crossfade_duration", default_crossfade)) + prev_song_start_offset = parse_time(prev_song_config.get("start_offset", "0:00")) + + relative_crossfade_start = parse_time(crossfade_start_str) + + original_pos_in_trimmed = max(0, relative_crossfade_start - prev_song_start_offset) / 1000.0 + + adj_pos_sec = compute_mapped_time( + original_pos_in_trimmed, + prev_song_ramps, + prev_song_orig_tempo, + prev_effective_start_tempo, + prev_result[3] / 1000.0 + ) + + adj_crossfade_in_segment = int(adj_pos_sec * 1000) + next_song_start_time = song_start_times[-1] + adj_crossfade_in_segment + next_song_start_time = max(0, next_song_start_time) + + next_song = AudioSegment.from_file(temp_files[index]) + + fade_in_duration = parse_time(config.get("fade_in_duration")) if config.get("fade_in_duration") else crossfade_duration + fade_out_power = float(prev_song_config.get("fade_out_power", prev_song_config.get("fade_power", 1.0))) + fade_in_power = float(config.get("fade_in_power", config.get("fade_power", 1.0))) + fade_out_delay = parse_time(prev_song_config.get("fade_out_delay", "0:00")) + + track1_before_fade = current_mix[:next_song_start_time] + track1_total_overlap = current_mix[next_song_start_time : next_song_start_time + crossfade_duration] + actual_overlap_duration = len(track1_total_overlap) + + track1_constant_part = track1_total_overlap[:fade_out_delay] + track1_fade_part = track1_total_overlap[fade_out_delay:] + faded_out_segment = apply_custom_fade(track1_fade_part, 'out', len(track1_fade_part), fade_out_power) + faded_out_part = track1_constant_part + faded_out_segment + + track2_overlay_section = next_song[:actual_overlap_duration] + actual_fade_in_duration = min(fade_in_duration, actual_overlap_duration) + track2_fade_in_part = track2_overlay_section[:actual_fade_in_duration] + track2_after_fade_in = track2_overlay_section[actual_fade_in_duration:] + faded_in_part = apply_custom_fade(track2_fade_in_part, 'in', actual_fade_in_duration, fade_in_power) + full_track2_overlay = faded_in_part + track2_after_fade_in + + crossfade_result = faded_out_part.overlay(full_track2_overlay) + if crossfade_result.max_dBFS > -0.1: + crossfade_result = normalize_audio(crossfade_result, -0.1) + + current_mix = track1_before_fade + crossfade_result + next_song[actual_overlap_duration:] + song_start_times.append(next_song_start_time) + chapters.append((next_song_start_time, os.path.basename(config['song_path']))) + + # --- Export --- + logger.info("Exporting raw mix...") + temp_pcm = "temp_raw_mix.raw" + current_mix.export(temp_pcm, format="raw") + temp_raw_file = "temp_raw_mix.flac" + bits = current_mix.sample_width * 8 + pcm_format = f"s{bits}le" + subprocess.run(["ffmpeg", "-f", pcm_format, "-ar", str(current_mix.frame_rate), "-ac", str(current_mix.channels), "-i", temp_pcm, "-c:a", "flac", "-y", temp_raw_file], check=True, capture_output=True) + + logger.info("Normalizing...") + subprocess.run(["ffmpeg", "-i", temp_raw_file, "-af", f"loudnorm=I=-14:LRA=7:TP={final_mix_target_dbfs}", "-y", output_file], check=True, capture_output=True) + + for f in [temp_pcm, temp_raw_file] + temp_files: + if os.path.exists(f): os.remove(f) + + add_flac_chapters(output_file, chapters) + save_tempo_cache(tempo_cache.copy()) + return output_file, len(current_mix), current_chain_tempo + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--playlist", type=str, default="ambient_mix_settings.json") + parser.add_argument("--debug", action="store_true") + parser.add_argument("--test-last-two", action="store_true") + parser.add_argument("--tracks", type=str) + args = parser.parse_args() + + setup_logging(level=logging.DEBUG if args.debug else logging.INFO) + logger = logging.getLogger(__name__) + + with open(args.playlist, 'r') as f: + playlist_data = json.load(f) + + if args.tracks: + try: + track_numbers = [int(t.strip()) for t in args.tracks.split(',')] + original_tracks = playlist_data['tracks'] + playlist_data['tracks'] = [original_tracks[i-1] for i in track_numbers if 0 < i <= len(original_tracks)] + except ValueError: + logger.error("Invalid format for --tracks.") + sys.exit(1) + elif args.test_last_two: + playlist_data['tracks'] = playlist_data['tracks'][-2:] + + try: + output_file, final_duration, ref_tempo = mix_songs(playlist_data) + print(f"\nSuccess! Output: {output_file}") + except Exception as e: + logging.error(f"Error: {e}", exc_info=True) diff --git a/dj_mix_playlist.csv b/dj_mix_playlist.csv new file mode 100644 index 0000000..868174c --- /dev/null +++ b/dj_mix_playlist.csv @@ -0,0 +1,341 @@ +track_path,genre,tempo,camelot_key,category +Barker/ Utility [113541198] [2019]/07 - Barker - Utility.flac,Trance / IDM / Ambient,70.02409362792969,10A,Ambient +"Plastikman, Richie Hawtin/Artifakts (BC) [137659864] [1998]/01 - Plastikman, Richie Hawtin - Korridor.flac",Ambient Techno / Minimal Techno,96.50098419189453,4A,Ambient +Dead Can Dance/ The Serpent's Egg (Remastered) [2210769] [1988]/04 - Dead Can Dance - The Writing on My Father's Hand (Remastered).flac,Ethereal Wave / Neoclassical Darkwave,105.17031860351562,4A,Ambient +Like weather (2020 remaster) [WEB FLAC]/03 Leila - Underwaters (One for Keni).flac,IDM / Ambient,113.99656677246094,,Ambient +Andy Stott/ Faith in Strangers [176029639] [2014]/01 - Andy Stott - Time Away.flac,Ambient / Deconstructed Club,114.11782836914062,7B,Ambient +Ben Buitendijk - Transcended Being EP (2017) [48521112]/02. Ben Buitendijk - Blank Metal.flac,Ambient Techno,116.9906005859375,10A,Ambient +Dark Sky/ Othona [199635044] [2017]/02 - Dark Sky - Domes.flac,Ambient / Electronic,119.95415496826172,,Ambient +Four Tet/Pink [79549403] [2012]/07 - Four Tet - Peace for Earth.flac,Ambient / Downtempo,120.70010375976562,,Ambient +Linkwood/ Expressions [126108159] [2015]/12 - Linkwood - Love Lost.flac,Ambient / Deep House,122.46846008300781,9B,Ambient +Dead Can Dance/ The Serpent's Egg (Remastered) [2210769] [1988]/01 - Dead Can Dance - The Host of Seraphim (Remastered).flac,Ethereal Wave / Neoclassical Darkwave,122.8890151977539,4A,Ambient +Evigt Mörker/ Drömsyn [403208144] [2016]/01 - Evigt Mörker - Drömsyn.flac,Ambient Techno,123.93344116210938,4A,Ambient +Dark Sky/ Othona [199635044] [2017]/08 - Dark Sky - The Walker.flac,Ambient / Electronic,131.04214477539062,8A,Ambient +Twin Peaks/ Soundtrack From Twin Peaks [4625718] [1990]/01 - Twin Peaks Soundtrack - Twin Peaks Theme (Instrumental).flac,Ambient / Jazz,143.49388122558594,7B,Ambient +"Conrad Schnitzler, Pole/ Con-Struct [88150247] [2017]/06 - Conrad Schnitzler, Pole - Wiegenlied für Katzen.flac",Ambient / Experimental,78.26022339,10B,Ambient +Prins Thomas/Paradise Goulash [188131511] [2015]/43 - Stefan Vincent - Fool Me Again.flac,Techno,129.83639526367188,4A,Main +Casino versus Japan/ Go Hawaii [56559140] [1999]/06 - Casino versus Japan - Dielectric Saints.flac,IDM / Ambient,178.20596313476562,7B,Ambient +Seekae/ +Dome [336407937] [2011]/04 - Seekae - Reset Head.flac,Post-Dubstep / IDM,70.03629302978516,6A,Main +Burial/ Burial [53834442] [2006]/08 - Burial - Gutted.flac,Future Garage / Dubstep,71.3104248046875,,Main +Bicep/Bicep [75160673] [2017]/10 - Bicep - Ayr.flac,Breaks / Ambient,161.50001525878906,5A,Main +Nightmares on Wax/ Smokers Delight [16024766] [1995]/05 - Nightmares on Wax - Stars.flac,Downtempo / Trip-Hop,156.5277557373047,11B,Main +Nightmares on Wax/ Smokers Delight [16024766] [1995]/03 - Nightmares on Wax - Pipes Honour.flac,Downtempo / Trip-Hop,156.55911254882812,,Main +Leon Vynehall/ Music for the Uninvited [168277757] [2014]/06 - Leon Vynehall - Christ Air.flac,Deep House,76.15439606,9B,Main +Modeselektor/ Monkeytown [199583149] [2011]/01 - Modeselektor - Blue Clouds.flac,IDM / Hip Hop,78.00963592529297,8B,Main +"Modeselektor/ Monkeytown [199583149] [2011]/03 - Modeselektor, Thom Yorke - Shipwreck.flac",IDM / Electronic,78.0157241821289,9A,Main +Machinedrum/ Vapor City Archives [36162311] [2014]/03 - Machinedrum - Hard 2 Be.flac,Footwork / Juke / UK Bass,80.02485656738281,10B,Main +Machinedrum/[A] Vapor City [21736061] [2013]/03 - Machinedrum - Don’t 1 2 Lose U.flac,Footwork / UK Bass,81.97791290283203,6A,Main +"Burial/ Burial [53834442] [2006]/03 - Burial, Spaceape - Spaceape.flac",Future Garage / Dubstep,84.01387786865234,8B,Main +Machinedrum/[A] Vapor City [21736061] [2013]/01 - Machinedrum - Gunshotta.flac,Footwork / Drum and Bass,85.05208587646484,9A,Main +Art Of Noise/[M] The Ambient Collection [46952148] [1990]/06 - Art Of Noise - Camilla (Remixed by Youth).flac,Ambient,85.25466918945312,9A,Main +Casino versus Japan/ Go Hawaii [56559140] [1999]/02 - Casino versus Japan - It's Very Sunny.flac,IDM / Ambient,85.58793640136719,6A,Main +"Molina, Late Verlane/ Hey Kids [117497586] [2018]/01 - Molina - Hey Kids.flac",Indie Pop / Electronic,86.95806884765625,9A,Main +Gold Panda/ Companion [21583086] [2011]/02 - Gold Panda - Fifth Ave.flac,Chillwave / Folktronica,88.19422149658203,8B,Main +Andy Stott/ Too Many Voices [70320988] [2016]/04 - Andy Stott - First Night.flac,Deconstructed Club / Electronic,89.92286682128906,10A,Main +Vanilla/ Origin [199611226] [2015]/08 - Vanilla - Summer.flac,Chillhop / Instrumental Hip Hop,90.95537567138672,10B,Main +Sahy Uhns/ An Intolerant Disdain of Underlings [404562737] [2011]/01 - Sahy Uhns - Montebello Postpartum.flac,IDM / Glitch,91.96073150634766,4A,Main +Nightmares on Wax/ Smokers Delight [16024766] [1995]/16 - Nightmares on Wax - Gambia Via Vagator Beach.flac,Downtempo / Trip-Hop,92.97482299804688,5A,Main +Jan Hammer/ Escape From Television [3393242] [1987]/01 - Jan Hammer - Crockett's Theme (From -Miami Vice II- Soundtrack).flac,Synth-pop / New Wave,95.67214965820312,7B,Main +Various Artists/[M] Vienna Scientists [13304708] [1998]/05 - Mama Oliver - East West (Stoned Together).flac,Downtempo / Trip-Hop,96.91780853271484,11A,Main +Party Tyme/ Hip Hop & Rap Hits 4 - Party Tyme (Backing Version [314894742] [2023]/CD1/12 - Party Tyme - Zeze (made popular by Kodak Black ft. Travis Scott.flac,Trap,97.96430969238281,,Main +Dabrye/ One - Three [21681300] [2001]/03 - Dabrye - With A Professional.flac,Glitch Hop / Instrumental Hip Hop,97.99185180664062,3B,Main +Rival Consoles/Odyssey - Sonne [103317709] [2015]/08 - Rival Consoles - Haunt.flac,IDM / Ambient Techno,98.20332336425781,6A,Main +Andy Stott/ Too Many Voices [70320988] [2016]/03 - Andy Stott - New Romantic.flac,Deconstructed Club / Electronic,99.90301513671875,5A,Main +Modeselektor/ Monkeytown [199583149] [2011]/07 - Modeselektor - Grillwalker.flac,Techno,100.01006317138672,9A,Main +Plaid/ The Digging Remedy [106693880] [2016]/01 - Plaid - Do Matter.flac,IDM / Electronic,100.04009246826172,,Main +"Plastikman, Richie Hawtin/Artifakts (BC) [137659864] [1998]/03 - Plastikman, Richie Hawtin - Pakard.flac",Minimal Techno,100.0936050415039,4A,Main +Rival Consoles/Odyssey - Sonne [103317709] [2015]/01 - Rival Consoles - Odyssey.flac,IDM / Ambient Techno,100.96162414550781,8A,Main +Nightmares on Wax/ Smokers Delight [16024766] [1995]/13 - Nightmares on Wax - What I'm Feelin (Good).flac,Downtempo / Trip-Hop,100.9806137084961,7B,Main +Modeselektor/ Hello Mom! [87377976] [2005]/03 - Modeselektor - Tetrispack.flac,IDM / Electro,103.00035858154297,6A,Main +"The History Of Trance/ The History of Trance '91-'96, Vol. 1 [392650168] [1996]/04 - The History Of Trance - Contrex Ville.flac",Acid Trance,103.90945434570312,6A,Main +/home/someone/muziek/11 - The Field - No. No... (John Tejada Mix).flac,Tech House / Minimal Techno,109.00038146972656,7A,Main +Prins Thomas/Paradise Goulash [188131511] [2015]/12 - Len Leise - Dance Of The Ghosts.flac,Balearic,109.2009506225586,7B,Main +Andy Stott/ It Should Be Us [176030209] [2019]/04 - Andy Stott - It Should Be Us.flac,Techno / Deconstructed Club,109.56950378417969,5A,Main +Rival Consoles/Odyssey - Sonne [103317709] [2015]/03 - Rival Consoles - Voyager.flac,IDM / Ambient Techno,109.8339614868164,8A,Main +Andy Stott/ Faith in Strangers [176029639] [2014]/06 - Andy Stott - How It Was.flac,Deconstructed Club / Dub Techno,110.00064086914062,,Main +Autechre/Incunabula [16024878] [1993]/06 - Autechre - Eggshell.flac,IDM / Ambient Techno,110.01618194580078,7B,Main +Manuel Göttsching/ E2-E4 [198347885] [1981]/02 - Manuel Göttsching - E2-E4 Ruhige Nervosität 2.flac,Berlin School / Proto-Techno,110.31440734863281,12A,Main +Daniel Avery/Drone Logic [43421119] [2013]/04 - Daniel Avery - These Nights Never End.flac,Techno,111.56741333007812,7A,Main +David August/Diynamic Revisited (By David August) [33582870] [2014]/01 - Kollektiv Turmstrasse - Last Day (David August Revision).flac,Deep House,112.0049057006836,,Main +David August/Diynamic Revisited (By David August) [33582870] [2014]/02 - Stimming - Der Schmelz (David August Revision).flac,Deep House,112.50990295410156,5A,Main +Jean-Michel Jarre/[M] Les concerts en Chine 1981 [335743654] [2015]/02 - Jean-Michel Jarre - Arpegiateur (Live in China).flac,Electronic / Berlin School,114.70527648925781,5A,Main +Burial/ Street Halo [53833720] [2011]/03 - Burial - Stolen Dog.flac,Future Garage,115.63007354736328,12A,Main +"Burial, Four Tet/ Nova - Moth [214180270] [2022]/02 - Burial, Four Tet - Moth.flac",Future Garage / Microhouse,117.50379943847656,10B,Main +Norken/ Southern Soul [72533535] [2017]/01 - Norken - Southern Soul.flac,Deep House,117.79279327392578,10A,Main +Norken/ Southern Soul [72533535] [2017]/01 - Norken - Southern Soul.flac,Deep House,117.79279327392578,10A,Main +David August/ Epikur EP [163672968] [2014]/01 - David August - Epikur (Original).flac,Deep House,117.8792495727539,4A,Main +Marco Bernardi/ Motorways [283557486] [2013]/01 - Marco Bernardi - Motorways.flac,Techno,117.97688293457031,12A,Main +Marco Bernardi/ Motorways [283557486] [2013]/01 - Marco Bernardi - Motorways.flac,Techno,117.97688293457031,12A,Main +Daniel Avery/Drone Logic [43421119] [2013]/08 - Daniel Avery - All I Need.flac,Techno / House,117.98904418945312,6A,Main +"Prins Thomas/Paradise Goulash [188131511] [2015]/18 - Donato Dozzy & Tin Man, Tin Man - Test 7.flac",Acid Techno,118.00253295898438,4A,Main +Bicep/Bicep [75160673] [2017]/06 - Bicep - Spring.flac,Breaks / UK Bass,118.00274658203125,5A,Main +"/home/someone/muziek/09 - Vermont, Dixon - Dschuna (Dixon Mix).flac",Deep House,118.00762939453125,4A,Main +/home/someone/muziek/09 - Jürgen Paape - Manipuri.flac,Microhouse / Pop Ambient,118.31008911132812,9A,Main +"Bicep/Isles [157751887] [2021]/06 - Bicep, Clara La San - X.flac",Breaks / UK Bass,118.33991241455078,,Main +Machinedrum/ Room(s) [230172871] [2011]/10 - Machinedrum - Door(s).flac,Footwork / Juke / UK Bass,76.97500610351562,,Main +Pedestrian/ Pick Your Shots Clean [243104328] [2016]/01 - Pedestrian - Pick Your Shots Clean.flac,Deep House / UK Bass,118.663330078125,7A,Main +Pedestrian/ Pick Your Shots Clean [243104328] [2016]/01 - Pedestrian - Pick Your Shots Clean.flac,Deep House / UK Bass,118.663330078125,7A,Main +Bonobo/[A] The North Borders [19084868] [2013]/03 - Bonobo - Cirrus.flac,Downtempo / Electronic,118.96809387207031,7A,Main +Manikěizt - 2018 - Disco Futurista/14 - MTRLV - Whatever We Go Through.flac,House / Disco,119.00023651123047,9A,Main +Baltra/ No Regrets [95913420] [2017]/02 - Baltra - Fuck All Y’all Haters.flac,Lo-Fi House,119.00711059570312,7A,Main +"Plastikman, Richie Hawtin/Artifakts (BC) [137659864] [1998]/02 - Plastikman, Richie Hawtin - Psyk.flac",Minimal Techno / Ambient Techno,119.46066284179688,4A,Main +Leon Vynehall/ Music for the Uninvited [168277757] [2014]/01 - Leon Vynehall - Inside the Deku Tree.flac,Deep House,119.66380310058594,11A,Main +Andy Stott/ Merciless [176028467] [2006]/01 - Andy Stott - Florence.flac,Dub Techno,119.91050720214844,6A,Main +Daniel Avery/Drone Logic [43421119] [2013]/01 - Daniel Avery - Water Jump (Album Version).flac,Techno / Acid House,119.96485900878906,8A,Main +Rone/ Spanish Breakfast [6304551] [2009]/08 - Rone - Tasty City.flac,IDM / Techno,119.97761535644531,10A,Main +DJ Boring/ Sunday Avenue [284620418] [2017]/01 - DJ Boring - Sunday Avenue.flac,Lo-Fi House,119.97834777832031,6A,Main +Prins Thomas/Paradise Goulash [188131511] [2015]/21 - Forever Sound - Glowworm.flac,Deep House,119.97863006591797,8A,Main +Kiasmos/Kiasmos [103318515] [2014]/03 - Kiasmos - Looped.flac,Minimal Techno / Ambient,119.9796142578125,6A,Main +Prins Thomas/Paradise Goulash [188131511] [2015]/22 - Odd Numbers - Riviera.flac,House,119.98377990722656,8A,Main +Various Artists/VA - Electronic Music Anthology (by FG) (2018) [FLAC]/47. Frankey and Sandrino - Acamar.flac,Deep House / Melodic House & Techno,119.98524475097656,8A,Main +Coastdream/ Soft Moon [96721340] [2017]/01 - Coastdream - Soft Moon.flac,Lo-Fi House,119.99015808105469,5A,Main +Laurence Guy/ Saw You for the First Time [307534484] [2017]/10 - Laurence Guy - W.L.Y.B.flac,Deep House,119.99136352539062,,Main +Coastdream/ Shine [100193746] [2018]/03 - Coastdream - 2k7.flac,Lo-Fi House,119.99568176269531,7A,Main +/home/someone/muziek/02 - Coma - Atlantis.flac,Tech House / Pop Ambient,119.99854278564453,6A,Main +Leon Vynehall/ Butterflies - This is the Place [68135678] [2014]/01 - Leon Vynehall - Butterflies.flac,Deep House,120.00247192382812,5A,Main +Coastdream/ Shine [100193746] [2018]/01 - Coastdream - Shine (Euro Mix).flac,Lo-Fi House,120.00251770019531,12B,Main +Kiasmos/Blurred [103386930] [2017]/03 - Kiasmos - Jarred.flac,Minimal Techno / Ambient,120.0053482055664,5A,Main +Groove Armada/[M] Groove Armada Greatest Hits [1189539] [2007]/08 - Groove Armada - Chicago.flac,House,120.00834655761719,,Main +Daniel Klauser/ Always I'm Back Here [67894299] [2015]/03 - Daniel Klauser - Always I'm Back Here.flac,House,120.01665496826172,8A,Main +"Andy Stott/ Never The Right Time [176296284] [2021]/02 - Andy Stott, Alison Skidmore - Never the right time.flac",Deconstructed Club / Trip-Hop,120.02083587646484,5A,Main +Robag Wruhme/ Olgamikks [16676895] [2012]/05 - Kollektiv Turmstrasse - Heimat (Robags Turmkolle Rekksmow).flac,Microhouse / Minimal Techno,120.03728485107422,10A,Main +Gavinco/ Funkula [310361510] [2023]/01 - Gavinco - Funkula.flac,House,120.05329132080078,5A,Main +Monolake/ Gravity [31532897] [2001]/01 - Monolake - Mobile.flac,Dub Techno / Minimal Techno,120.5144271850586,7A,Main +Aleksandir/Yamaha [90897198] [2018]/01 - Aleksandir - Yamaha.flac,Lo-Fi House,120.90277862548828,5A,Main +"Laurence Guy/ Saw You for the First Time [307534484] [2017]/05 - Laurence Guy, Ishmael - Anchor.flac",Deep House,120.94184875488281,11A,Main +Stephan Bodzin/ Powers of Ten [45241387] [2015]/01 - Stephan Bodzin - Singularity.flac,Melodic Techno,120.9670181274414,,Main +Laurence Guy/ Saw You for the First Time [307534484] [2017]/06 - Laurence Guy - Saw You for the First Time.flac,Deep House,120.98542022705078,4A,Main +/home/someone/muziek/05 - Matias Aguayo - Komm.flac,Microhouse / Minimal Techno,120.99076843261719,,Main +Leon Vynehall/ Music for the Uninvited [168277757] [2014]/05 - Leon Vynehall - It's Just (House of Dupree).flac,Deep House,121.30806732177734,4A,Main +so. mind/ Born to Live [106929042] [2019]/02 - so. mind - Callin for Ya.flac,Lo-Fi House / Deep House,121.97224426269531,,Main +"Prins Thomas/Paradise Goulash [188131511] [2015]/25 - Joachim Holm & Alejandro Mosso, Alejandro Mosso - Tre Melodi.flac",Minimal Techno,121.99746704101562,12A,Main +/home/someone/muziek/10 - Dave DK - Smukke Lyde.flac,Deep House / Tech House,121.99961853027344,5A,Main +SLIM HUSTLA - Turnstile Jumps EP/SLIM HUSTLA - Turnstile Jumps EP - 05 Codeine Cups (Ft. DJ ÆDIDIAS).flac,Lo-Fi House,122.00263214111328,11A,Main +Kiasmos/Blurred [103386930] [2017]/02 - Kiasmos - Blurred.flac,Minimal Techno / Ambient,122.0286865234375,12B,Main +Various Artists/ HDC003 [352797419] [2016]/02 - Baltra - Tears Drop.flac,Lo-Fi House,122.02957916259766,12A,Main +Laurence Guy/ Les Mur [147799811] [2015]/01 - Laurence Guy - Les Mur.flac,Deep House,122.03390502929688,10A,Main +so. mind/ Born to Live [106929042] [2019]/03 - so. mind - Good Conditions.flac,Lo-Fi House / Deep House,122.53311157226562,,Main +"Beatport Top 100 Deep House May 2025/A-Trak, Kapote, Sam Ruffillo - La La Tune (A-Trak Remix Extended Version).flac",House / Disco House,122.9247817993164,5A,Main +Robag Wruhme/ Olgamikks [16676895] [2012]/10 - Extrawelt - Neuland (Robags Rexmow 001).flac,Microhouse / Minimal Techno,122.95919036865234,12A,Main +Joseph Ray/ 300 Below - EP [182675724] [2021]/01 - Joseph Ray - 300 Below.flac,Melodic House & Techno,122.95954132080078,,Main +Various Artists/Various - Step Back Trax 003 [SBT003] [2018]/04. Slim Hustla - Remain Unseen.flac,Lo-Fi House,122.9631576538086,7B,Main +Bicep/Bicep [75160673] [2017]/12 - Bicep - Aura.flac,Breaks / Trance,122.975341796875,,Main +Marcu Rares/ Soul Bonding [175595586] [2021]/04 - Marcu Rares - Forever After.flac,Minimal / Deep Tech,122.98562622070312,5A,Main +Claude Vonstroke/ Urban Animal [312337277] [2013]/09 - Claude Vonstroke - Can't Wait.flac,Tech House,122.98572540283203,9A,Main +/home/someone/muziek/08 - Gui Boratto - 22.flac,Progressive House / Tech House,122.98978424072266,,Main +/home/someone/muziek/09 - Raxon - Dark Light.flac,Melodic House & Techno,122.99674987792969,,Main +Bicep/Bicep [75160673] [2017]/01 - Bicep - Orca.flac,Breaks / UK Bass,122.99825286865234,10A,Main +Baltra/ No Regrets [95913420] [2017]/03 - Baltra - No Regrets.flac,Lo-Fi House,122.9984359741211,1B,Main +NiNO/ Odysseia EP [66638063] [2016]/02 - NiNO - Odysseia (Original Mix).flac,Tech House,122.99845123291016,9A,Main +Yatoba Lia/ Moi Aussi Marianne [172522828] [2021]/01 - Yatoba Lia - Moi Aussi Marianne.flac,Deep House,123.00215148925781,10A,Main +Honey Dijon/ DJ-Kicks- Honey Dijon [381057642] [2024]/CD2/15 - Art Of Tones - Praise.flac,House,123.00961303710938,7A,Main +(1993) Far East Recording [FER06858]/10 - Soichi Terada; Shinichiro Yokota - Tokyo XXX.flac,House,123.06609344482422,,Main +Leon Vynehall/ Music for the Uninvited [168277757] [2014]/02 - Leon Vynehall - Goodthing.flac,Deep House,123.33172607421875,2B,Main +geods sorèd/ Findings [279217889] [2023]/02 - geods sorèd - Don't Make Me Wait.flac,Deep House,123.50894165039062,,Main +Orbital/[M] Orbital 2 [82530740] [1993]/09 - Orbital - Halcyon and On and On.flac,Ambient House / Trance,126.92256164550781,12B,Main +Pachanga Boys/ Girlcatcher [78444961] [2012]/03 - Pachanga Boys - Time.flac,Deep House / Tech House,123.79177856445312,7B,Main +Gui Boratto/ The K2 Chapter [154863821] [2013]/01 - Gui Boratto - Arquipelago.flac,Tech House / Progressive House,123.8010025024414,,Main +Floating Points/ Shadows [251631952] [2011]/05 - Floating Points - Sais.flac,Deep House / Broken Beat,135.32374572753906,5A,Main +Raär/ Sometimes I Hear Sirens [162531593] [2015]/01 - Raär - Sometimes I Hear Sirens.flac,Lo-Fi Techno,123.81367492675781,4A,Main +Autechre/Incunabula [16024878] [1993]/05 - Autechre - Basscadet.flac,IDM / Techno,123.87831115722656,8A,Main +"yungpolar/ Lofi House Tape, Vol. 1 [271715763] [2023]/08 - yungpolar - Last Station.flac",Lo-Fi House,123.90953063964844,8A,Main +"yungpolar/ Lofi House Tape, Vol. 1 [271715763] [2023]/06 - yungpolar - Maybe It's Love---.flac",Lo-Fi House,123.918701171875,8A,Main +Stephan Bodzin/ Powers of Ten [45241387] [2015]/10 - Stephan Bodzin - Wir.flac,Melodic Techno,123.92633056640625,7A,Main +Baltra/ Fade Away (Vocal) [182615002] [2016]/01 - Baltra - Fade Away (Vocal).flac,Lo-Fi House,123.95465850830078,8A,Main +Various Artists/ Various Adepts- Volume IV [125526399] [2019]/01 - Primal Code - Moth.flac,Techno,123.97295379638672,4A,Main +Daso/Daso - 2007 - Absinthe EP [FLAC]/03 La Fée Verte.flac,Minimal Techno / Tech House,123.98363494873047,7A,Main +Kiasmos/Blurred [103386930] [2017]/04 - Kiasmos - Paused.flac,Minimal Techno / Ambient,123.98764038085938,11A,Main +Palms Trax/ Equation [60783245] [2013]/02 - Palms Trax - Equation.flac,Deep House,123.9992904663086,6A,Main +Claude Vonstroke/ Urban Animal [312337277] [2013]/03 - Claude Vonstroke - Dood.flac,Tech House,124.00584411621094,12A,Main +Various Artists/ Grand Cru 2008 [18274893] [2008]/06 - Daso - Booker (Original Mix).flac,Tech House,124.01505279541016,10A,Main +Ross from Friends/ You'll Understand [69281351] [2017]/01 - Ross from Friends - Talk To Me You'll Understand.flac,Lo-Fi House,124.01791381835938,12A,Main +Ross from Friends/ You'll Understand [69281351] [2017]/01 - Ross from Friends - Talk To Me You'll Understand.flac,Lo-Fi House,124.01791381835938,12A,Main +John Tejada/ Signs Under Test [39791796] [2015]/07 - John Tejada - Rubric.flac,Tech House,124.33545684814453,8A,Main +micronism/ inside a quiet mind [247257350] [1998]/08 - micronism - engaging causeless mercy.flac,Deep House / Ambient Techno,124.87757873535156,9A,Main +Prins Thomas/Paradise Goulash [188131511] [2015]/35 - Louis Haiman - Ghosts Of Gratiot.flac,Deep House / Dub Techno,124.9041748046875,5A,Main +Shortcut/ Hope [219777058] [2022]/01 - Shortcut - Hope.flac,House,124.94646453857422,7A,Main +808 State/ In Yer Face Bicep Remixes [282358986] [2016]/01 - 808 State - In Yer Face (Bicep Remix).flac,Techno / House,124.94929504394531,8A,Main +Robag Wruhme/ Olgamikks [16676895] [2012]/09 - Gui Boratto - No Turning Back (Robags Likkalize Love Remix).flac,Microhouse / Minimal Techno,124.95291137695312,7B,Main +Floating Points/Ratio [251648888] [2017]/01 - Floating Points - Ratio (Full Mix).flac,Acid Techno,124.96118927001953,,Main +/home/someone/muziek/04 - ANNA - Hidden Beauties.flac,Techno,124.96752166748047,4A,Main +Various Artists/ Grand Cru 2008 [18274893] [2008]/10 - Kollektiv Turmstrasse - Lüchttoorn (Original Mix).flac,Minimal Techno,124.97062683105469,,Main +AljoMen/ Cherrrybomb [255167405] [2022]/01 - AljoMen - Cherrrybomb.flac,House,124.97331237792969,5A,Main +John Tejada/ Signs Under Test [39791796] [2015]/06 - John Tejada - Cryptochrome.flac,Tech House,124.97714233398438,4A,Main +"Bicep/Isles [157751887] [2021]/07 - Bicep, Julia Kent - Rever.flac",Breaks / Ambient,124.9795150756836,5A,Main +John Tejada/ Signs Under Test [39791796] [2015]/03 - John Tejada - Beacht.flac,Tech House,124.98284149169922,7B,Main +Folamour - Naarm's Sunset/Folamour - Naarm's Sunset (Extended Version).aiff,House / Disco House,124.98799896240234,8A,Main +Mark Laird/ Funk That [84287225] [2018]/01 - Mark Laird - Funk That (Original mix).flac,House / Bass House,124.9882583618164,,Main +Mark Laird/ Funk That [84287225] [2018]/02 - Mark Laird - Crazy Things (Original mix).flac,House / Bass House,124.98883819580078,5A,Main +"Silicone Soul-The Answer-WEB-FLAC-2000/03. Silicone Soul - Right on, Right On (Original Instrumental).flac",Deep House,124.98915100097656,,Main +Sascha Funke/ Mango [87379506] [2008]/01 - Sascha Funke - Mango.flac,Minimal Techno / Tech House,124.9942626953125,5A,Main +Sascha Funke/ Mango [87379506] [2008]/01 - Sascha Funke - Mango.flac,Minimal Techno / Tech House,124.9942626953125,5A,Main +Leon Vynehall/ Music for the Uninvited [168277757] [2014]/04 - Leon Vynehall - Pier Children.flac,Deep House,124.9962387084961,10A,Main +Paranoid London/[E] Paranoid London [82666895] [2018]/11 - Paranoid London - Eating Glue (Instrumental).flac,Acid House,124.99907684326172,11B,Main +Audion/ Mouth to Mouth [151255637] [2006]/01 - Audion - Mouth to Mouth.flac,Minimal Techno / Tech House,125.00029754638672,,Main +Extrawelt/ Schöne Neue Extrawelt [63313618] [2008]/12 - Extrawelt - Homing.flac,Techno / Minimal Techno,125.00592041015625,6A,Main +Linkwood/ Expressions [126108159] [2015]/09 - Linkwood - Expressions.flac,Deep House,125.00676727294922,8A,Main +Stephan Bodzin/ Powers of Ten [45241387] [2015]/02 - Stephan Bodzin - IX.flac,Melodic Techno,125.00922393798828,5A,Main +Agoria - 2007 - Les Violons Ivres EP/01 Agoria - Les Violons Ivres (Super Remix).flac,Tech House,125.00953674316406,7B,Main +Mall Grab/ 2015 - 2017 [268521056] [2023]/05 - Mall Grab - I've Always Liked Grime.flac,Lo-Fi House,125.01271057128906,7A,Main +Bicep/Just EP [184785872] [2015]/02 - Bicep - Celeste.flac,Breaks / House,125.01766967773438,7A,Main +Booka Shade/ Movements [212830133] [2006]/10 - Booka Shade - In White Rooms.flac,Tech House,125.01844787597656,5A,Main +"Beatport Top 100 Deep House May 2025/Chris Stussy, S.A.M. - Breather (Original Mix).flac",Deep House,125.0193862915039,8A,Main +"Paranoid London/[E] Paranoid London [82666895] [2018]/01 - Paranoid London, Mutado Pintado - Light Tunnel.flac",Acid House,125.0213851928711,3B,Main +Prins Thomas/Paradise Goulash [188131511] [2015]/36 - Evigt Mörker - Högre.flac,Techno,125.02205657958984,4A,Main +Bicep/ Circles EP [364842690] [2014]/02 - Bicep - NRG106.flac,Techno / House,125.02267456054688,12A,Main +Daso/Daso - 2007 - Absinthe EP [FLAC]/02 Louche.flac,Minimal Techno / Tech House,125.02801513671875,7A,Main +Floating Points/ Shadows [251631952] [2011]/04 - Floating Points - ARP3.flac,Deep House / Broken Beat,125.0283203125,4A,Main +Daso/Meine Idee [151253289] [2007]/01 - Daso - Meine.flac,Minimal Techno / Tech House,125.95564270019531,11A,Main +Mr.Brown/ Blau [333179949] [2022]/01 - Mr.Brown - Blau.flac,Deep House,125.95970916748047,,Main +Various Artists/VA - Electronic Music Anthology (by FG) (2018) [FLAC]/40. Oxia - Domino (Rework Edit).flac,Techno,125.98706817626953,,Main +Various Artists/ Naba VA 002 [103500941] [2019]/01 - Primal Code - Alhambra (Original Mix).flac,Techno,125.99022674560547,6A,Main +Extrawelt/ Schöne Neue Extrawelt [63313618] [2008]/04 - Extrawelt - Messy Machinery.flac,Techno / Minimal Techno,125.99393463134766,10A,Main +Daso/Go Upstairs [87607257] [2006]/01 - Daso - Go Upstairs.flac,Minimal Techno / Tech House,126.00054168701172,4A,Main +"Artmann/A1_July'z,_Artmann_Phenomenal01_VINYL_ONLY_July'z.aiff",Minimal / Deep Tech,126.00304412841797,,Main +Daso/Daso - 2007 - Absinthe EP [FLAC]/01 Thujon.flac,Minimal Techno / Tech House,126.0052261352539,7A,Main +Baltra/ No Regrets [95913420] [2017]/04 - Baltra - Soul 4 Real (Vocal Mix).flac,Lo-Fi House,126.00614929199219,,Main +Daphni/ Joli Mai [79527240] [2017]/06 - Daphni - Vikram.flac,House / Tech House,126.03064727783203,9A,Main +dominica - gotta let you go (2015 edit) - promo/02 - Gotta Let You Go (2015 Edit).flac,House,126.35246276855469,1B,Main +Space/ The Best Of Space [95014591] [2018]/01 - Space - Magic Fly.flac,Disco / Space Disco,126.46379852294922,8A,Main +Space/ The Best Of Space [95014591] [2018]/01 - Space - Magic Fly.flac,Disco / Space Disco,126.46379852294922,8A,Main +Andy Stott/ Faith in Strangers [176029639] [2014]/08 - Andy Stott - Faith in Strangers.flac,Deconstructed Club / Ambient,136.911865234375,8B,Main +Monolake/ Momentum [31300339] [2003]/02 - Monolake - Linear.flac,Dub Techno / Minimal Techno,126.82186126708984,11A,Main +Four Tet/New Energy [79358620] [2017]/14 - Four Tet - Planet.flac,House / Electronic,126.93342590332031,7A,Main +Prins Thomas/Paradise Goulash [188131511] [2015]/20 - Hieroglyphic Being - Imaginary Soundscapes 9.flac,Experimental / Acid House,126.94746398925781,,Main +Robag Wruhme/ Olgamikks [16676895] [2012]/03 - Fenin - None of Them (Robags Berfa Lubb Dubbse).flac,Microhouse / Minimal Techno,126.96561431884766,9A,Main +"Artmann/A2_July'z,_Artmann_Phenomenal02_VINYL_ONLY_July'z.aiff",Minimal / Deep Tech,126.9784164428711,7A,Main +Catlow/ Coming to See You - EP [380269511] [2024]/04 - Catlow - Looking Back.flac,Deep House,126.99139404296875,10A,Main +Rone/ Spanish Breakfast [6304551] [2009]/03 - Rone - Belleville.flac,IDM / Techno,127.00289916992188,,Main +Various Artists/VA - Electronic Music Anthology (by FG) (2018) [FLAC]/14. Soha - Eve.flac,House,127.00386810302734,12A,Main +Merv - Re-Melted (FLAC)/A - Dust.flac,Techno,131.15802001953125,2B,Main +John Tejada/ Parabolas [154466396] [2011]/01 - John Tejada - Farther And Fainter.flac,Tech House,127.01416778564453,,Main +Four Tet/Pink [79549403] [2012]/02 - Four Tet - Lion.flac,Microhouse / UK Funky,127.03502655029297,,Main +Modeselektor/ Monkeytown [199583149] [2011]/05 - Modeselektor - German Clap.flac,Techno / Electro,127.9735336303711,10A,Main +Various Artists/ 15 Years Fuse [158929553] [2009]/05 - Second-Hand Satellites - Orbit 1.4.flac,Deep House / Dub Techno,127.97834014892578,,Main +"Jesse Bru, Harrison BDP/ Happiness Therapy Split, Vol. 2 [186396321] [2018]/04 - Harrison BDP - Parallax.flac",Deep House,127.98197174072266,,Main +Beatport Top 100 Deep House May 2025/M-High - Soulseeker (Original Mix).flac,Deep House,127.99237060546875,,Main +"Artmann/Yogi P, Artmann - Check This Feelin' (PM Mix).aiff",Minimal / Deep Tech,127.99882507324219,6A,Main +Alex Dolby/ Multiple Faces Ep [69040645] [2017]/03 - Alex Dolby - Sintesi (Original mix).flac,Techno,128.01943969726562,12B,Main +"/home/someone/muziek/18 - Danny Daze, Shokh - Aire.flac",Electro / Techno,128.02011108398438,7A,Main +Extrawelt/ Schöne Neue Extrawelt [63313618] [2008]/03 - Extrawelt - Wippsteert.flac,Techno / Minimal Techno,128.02931213378906,11A,Main +Prins Thomas/Paradise Goulash [188131511] [2015]/26 - Robert Hood - Drive (The Age Of Automation).flac,Techno,128.03973388671875,9A,Main +Artmann/ARTMANN - Blockparty Host [OVRDOSE DEEP].aiff,Minimal / Deep Tech,128.04913330078125,,Main +Roy of the Ravers/2 Late 4 Love [283558071] [2020]/02 - Roy of the Ravers - Emotinium.flac,Acid Techno,128.23374938964844,3B,Main +Monolake/ Polygon_Cities [31460017] [2005]/09 - Monolake - Plumbicon.flac,Dub Techno / Minimal Techno,128.33206176757812,8B,Main +Daso/Go Upstairs [87607257] [2006]/03 - Daso - Until I Find You.flac,Minimal Techno / Tech House,128.3930206298828,10A,Main +deadmau5/ Faxing Berlin x4 [83358547] [2018]/01 - deadmau5 - Faxing Berlin.flac,Progressive House,128.50514221191406,7A,Main +Caribou/ Swim [334913585] [2010]/02 - Caribou - Sun.flac,Indietronica / House,128.65695190429688,,Main +Moderat/Moderat [87387741] [2009]/02 - Moderat - Rusty Nails.flac,IDM / Glitch Pop,128.7318572998047,12A,Main +Extrawelt/ Schöne Neue Extrawelt [63313618] [2008]/02 - Extrawelt - Dark Side of My Room.flac,Techno / Minimal Techno,128.74549865722656,8B,Main +Mathew Jonson/ Marionette [165363476] [2005]/01 - Mathew Jonson - Marionette.flac,Minimal Techno / Tech House,128.86192321777344,1B,Main +Bicep/Isles [157751887] [2021]/01 - Bicep - Atlas.flac,Breaks / UK Bass,128.91839599609375,,Main +Four Tet/Sixteen Oceans [133870268] [2020]/06 - Four Tet - Love Salad.flac,Microhouse / Ambient,128.93954467773438,5A,Main +Modeselektor/ Hello Mom! [87377976] [2005]/06 - Modeselektor - Ziq Zaq.flac,IDM / Electro,128.97760009765625,11B,Main +Various Artists/ Vibe 3 [73212039] [2017]/10 - Shanti Celeste - Strung Up.flac,Breakbeat / House,128.998779296875,,Main +Four Tet/New Energy [79358620] [2017]/09 - Four Tet - SW9 9SL.flac,UK Bass / House,129.0614013671875,9A,Main +Bicep/ Circles EP [364842690] [2014]/01 - Bicep - Circles.flac,House,129.1299285888672,6A,Main +Floating Points/Floating Points - LesAlpx & Coorabell (Ninja Tune) [2019]/02 Floating Points - LesAlpx (Extended).flac,Techno,129.6783905029297,4A,Main +"CJ Bolland, The Advent/ Camargue 2019 [291321527] [2019]/01 - CJ Bolland, The Advent - Camargue 2019.flac",Techno,129.70904541015625,5A,Main +Extrawelt/ Soopertrack [2380807] [2005]/01 - Extrawelt - Soopertrack.flac,Techno / Minimal Techno,129.7407989501953,4A,Main +"Phon.o/Black Boulder [199591543] [2012]/02 - Phon.o, Pantasz - Twilight.flac",Bass Music / Techno,129.75804138183594,8A,Main +"Mall Grab/ How The Dogs Chill, Vol.1 [203947228] [2018]/01 - Mall Grab - Liverpool Street In The Rain.flac",Lo-Fi House,129.84495544433594,12A,Main +Orbital/[M] Orbital 2 [82530740] [1993]/03 - Orbital - Lush 3-1.flac,Progressive Trance / Techno,129.87744140625,11A,Main +Robert Miles/ Remember Robert Miles [74123545] [2017]/01 - Robert Miles - Children (Dream Version).flac,Dream Trance,137.02688598632812,4A,Main +Cignol/Guidance Release [296651317] [2023]/04 - Cignol - Modularity.flac,Electro / Techno,129.91163635253906,6A,Main +Cobblestone Jazz/ 23 Seconds [184856920] [2007]/CD1/02 - Cobblestone Jazz - Hired Touch.flac,Minimal Techno / Tech House,129.92376708984375,,Main +"yungpolar/ Lofi House Tape, Vol. 1 [271715763] [2023]/04 - yungpolar - Amsterdam.flac",Lo-Fi House,129.93638610839844,,Main +Floating Points/Grammar [222925710] [2022]/01 - Floating Points - Grammar.flac,Breaks / UK Bass,129.97512817382812,5A,Main +Moderat/Moderat [87387741] [2009]/03 - Moderat - Seamonkey.flac,IDM / Dubstep,129.98109436035156,7B,Main +"yungpolar/ Lofi House Tape, Vol. 1 [271715763] [2023]/01 - yungpolar - Intro.flac",Lo-Fi House,129.9873046875,8A,Main +DVS1/ Klockworks 13 [102237439] [2014]/01 - DVS1 - Black Russian.flac,Techno,129.9974365234375,12A,Main +Gat Decor/ Passion [40846178] [1992]/03 - Gat Decor - Passion (Naked Mix).flac,Progressive House,124.85189819335938,4A,Main + +Mathew Jonson/ Learning To Fly [135194536] [2011]/01 - Mathew Jonson - Learning To Fly.flac,Minimal Techno / Tech House,130.0073699951172,,Main +Cobblestone Jazz/ 23 Seconds [184856920] [2007]/CD1/03 - Cobblestone Jazz - Lime In Da Coconut.flac,Minimal Techno / Tech House,130.0281524658203,,Main +Phon.o/Black Boulder [199591543] [2012]/01 - Phon.o - Nightshifts.flac,Techno / Bass Music,130.04795837402344,10A,Main +Burial/ Burial [53834442] [2006]/06 - Burial - Southern Comfort.flac,Future Garage / Dubstep,130.2335968017578,,Main +Cobblestone Jazz/ 23 Seconds [184856920] [2007]/CD2/09 - Cobblestone Jazz - India In Me.flac,Minimal Techno / Tech House,130.3125762939453,,Main +Mathew Jonson/ Typerope EP [63020609] [2013]/01 - Mathew Jonson - Typerope (Original Mix).flac,Minimal Techno / Tech House,130.31776428222656,,Main +"Modeselektor/ Monkeytown [199583149] [2011]/08 - Modeselektor, PVT - Green Light Go.flac",Electro / Techno,130.52467346191406,8B,Main +Severed Heads/ Dead Eyes Opened [71820657] [1984]/01 - Severed Heads - Dead Eyes Opened.flac,Industrial / EBM,130.68795776367188,,Main +Cobblestone Jazz/ 23 Seconds [184856920] [2007]/CD1/10 - Cobblestone Jazz - W.flac,Minimal Techno / Tech House,130.82327270507812,,Main +Fatima Yamaha/ A Girl Between Two Worlds [103709112] [2015]/01 - Fatima Yamaha - Between Worlds.flac,Synth Funk / House,131.0084991455078,,Main +Video Unknown/ Keep Dancing 4ever [197191074] [2021]/01 - Video Unknown - Keep Dancing 4ever.flac,House,131.03497314453125,,Main +"The History Of Trance/ The History of Trance '91-'96, Vol. 1 [392650168] [1996]/05 - The History Of Trance - Acid Eiffel.flac",Acid Trance,131.79476928710938,11A,Main +DVS1/ Klockworks 13 [102237439] [2014]/02 - DVS1 - Creepin.flac,Techno,131.98623657226562,8B,Main +NASCAR20/ 200mph [428807211] [2025]/01 - NASCAR20 - 200mph.flac,Hard Techno,131.98670959472656,9A,Main +"Bicep/Bicep, Ejeca, Omar Odyssey - You_Don't EP (2012) [WEB FLAC] {AUS1239}/01 You.flac",Deep House,131.9957275390625,,Main +Basic Channel/ Bcd-2 [87366018] [2008]/03 - Basic Channel - Inversion.flac,Dub Techno,132.01849365234375,8B,Main +Alena/ Turn It Around [167671314] [1999]/03 - Alena - Turn It Around.flac,House / Garage House,132.02525329589844,12B,Main +Cylone/ Lord of the Land [29168400] [2003]/01 - Cylone - Lord of the Land.flac,Techno,132.0474090576172,3B,Main +Mathew Jonson/ Panna Cotta [63092565] [2012]/01 - Mathew Jonson - Panna Cotta.flac,Minimal Techno / Tech House,132.79100036621094,8A,Main +"DVS1, Zak Khutoretsky/ Love Under Pressure [284770191] [2010]/01 - DVS1, Zak Khutoretsky - Polyphonic Love.flac",Techno,132.9979705810547,8B,Main +Phon.o/Black Boulder [199591543] [2012]/06 - Phon.o - ABAW 723.flac,Bass Music / Techno,133.00787353515625,9A,Main +Four Tet/New Energy [79358620] [2017]/05 - Four Tet - Lush.flac,Downtempo / Electronic,133.02320861816406,12A,Main +Energy 52/ Café Del Mar (The Anthems Edits) [311361549] [1997]/02 - Energy 52 - Café Del Mar (Three 'N One Radio Edit).flac,Trance,133.02474975585938,4A,Main +••• HISTORY OF HOUSE 2024 RELOADED VOL 1/Grooveyard - Mary Go Wild (Original).flac,Techno / Hardcore,133.08197021484375,5A,Main +Dave Clarke/ Archive One (2023 Remaster) [349518415] [1996]/06 - Dave Clarke - Wisdom to the Wise (2023 Remaster).flac,Techno,134.5380859375,9B,Main +Loophole/ Situations (I Love You) [297730958] [2003]/01 - Loophole - Situations (I Love You).flac,Progressive House,134.98391723632812,9A,Main +Shanti Celeste/Make Time [73586001] [2017]/01 - Shanti Celeste - Make Time.flac,Breakbeat / House,135.01539611816406,12A,Main +Nikolai/ Ready to Flow (97) [15797235] [1997]/08 - Nikolai - Ready to Flow (Original Mix).flac,Trance,135.02206420898438,5A,Main +Liquid/ Sweet Harmony [2212256] [2004]/01 - Liquid - Sweet Harmony.flac,Breakbeat Hardcore / Rave,135.08383178710938,8B,Main +Four Tet/Pink [79549403] [2012]/01 - Four Tet - Locked.flac,Microhouse / Downtempo,135.16030883789062,9A,Main +Marco V/ Simulated [16473271] [2001]/02 - Marco V - Simulated (Original Mix).flac,Tech Trance,135.22256469726562,,Main +Marmion/ Schöneberg [285730346] [2023]/01 - Marmion - Schöneberg.flac,Trance / Hard Trance,135.41111755371094,11A,Main +KIKO/ World Cup [348586627] [2024]/04 - KIKO - World Cup.flac,Melodic House & Techno,135.50953674316406,6A,Main +"Bicep/Isles [157751887] [2021]/10 - Bicep, machìna - Hawk.flac",Breaks / Ambient,135.9182586669922,9B,Main +Moderat/Moderat [87387741] [2009]/10 - Moderat - Les Grandes Marches.flac,IDM / Techno,135.93882751464844,,Main +Beatport Top 100 Deep House May 2025/Locklead - Apollo (Original Mix).flac,Deep House,135.9693603515625,8A,Main +"At The Villa People/ Open Your Eyes [240076038] [2011]/02 - At The Villa People, Etienne Vandewiele - Open Your Eyes (2009 Remaster).flac",Hard Trance,135.98733520507812,7A,Main +Push/ The Legacy(Remastered Classic Mixes) [218845580] [2022]/01 - Push - The Legacy (Remastered 2001 Remake).flac,Trance,137.08123779296875,4A,Main +Push/ The Legacy(Remastered Classic Mixes) [218845580] [2022]/01 - Push - The Legacy (Remastered 2001 Remake).flac,Trance,137.08123779296875,4A,Main +Push/ Strange World - Remastered [270344199] [2023]/01 - Push - Strange World (Remastered 2000 Remake).flac,Trance,137.23184204101562,10A,Main +Push/ Strange World - Remastered [270344199] [2023]/01 - Push - Strange World (Remastered 2000 Remake).flac,Trance,137.23184204101562,10A,Main +Carlos/ The Silmarillia Remixes [99717802] [1998]/04 - Carlos - The Silmarillia.flac,Trance,137.56430053710938,5A,Main +Various Artists/ Paradise Garage- Inspirations [95507538] [2018]/04 - DJ Rolando - Knights of the Jaguar (Original Mix).flac,Techno,137.6572265625,7A,Main +Art Of Noise/ (Who's Afraid Of) The Art Of Noise- (Remastered) [86476339] [1984]/06 - Art Of Noise - Moments In Love.flac,Ambient / Synth-pop,137.77627563476562,12A,Main +4 Strings/ Take Me Away (Into The Night) [97208941] [2020]/07 - 4 Strings - Take Me Away (Into The Night).flac,Vocal Trance,138.00697326660156,,Main +Push/ Universal Nation - Remastered Classic Mixes [269947846] [2023]/02 - Push - Universal Nation (Remastered Original Extended Mix.flac,Trance,138.00877380371094,,Main +L.S.G. - Netherworld/2005 - Netherworld 2005 [JOOF 024] WEB/04. L.S.G. - Netherworld (Original Mix).flac,Trance,138.0335693359375,8A,Main +Various Artists/ 15 Years Fuse [158929553] [2009]/07 - Link - Amenity.flac,Techno,138.05128479003906,,Main +Brainchild/ Symmetry C [161022074] [1999]/01 - Brainchild - Symmetry C (Original 12- Mix).flac,Progressive Trance,139.81787109375,4A,Main +The Visions Of Shiva - How Much Can You Take (MFS 7042-3)/02. The Visions Of Shiva - How Much Can You Take (Emotional).flac,Hard Trance,139.8653564453125,,Main +Ramin/ Back to Future 1 [28127024] [2012]/02 - Ramin - Pie Jesu (Tracid-Mix).flac,Hard Trance,139.9711151123047,,Main +MASSI-/ Come Wit' It [286935013] [2023]/01 - MASSI- - Come Wit' It.flac,House,139.974365234375,,Main +"Modeselektor/ Monkeytown [199583149] [2011]/10 - Modeselektor, Thom Yorke - This.flac",IDM / Electronic,139.98606872558594,6A,Main +Bicep/Isles [157751887] [2021]/09 - Bicep - Fir.flac,Breaks / UK Bass,139.98751831054688,5A,Main +Kraftwerk/[M] Tour de France (2009 Remaster) [3131398] [2003]/02 - Kraftwerk - Tour de France (Etape 1) [2009 Remaster].flac,Electronic / Synth-pop,140.0033416748047,4A,Main +Various Artists/VA-Clergy_10_Years__Charlie-CRGX3-24BIT-WEB-FLAC-2025-WAVED/01-usaw-kokedama.flac,Techno,140.00772094726562,12B,Main +Sciahri And Hertz Collision-Echoes Of The Void EP-CRG035-24BIT-WEB-FLAC-2024-WAVED/04-sciahri_and_hertz_collision-echoes_of_the_void.flac,Techno,141.00845336914062,8A,Main +Travmkind/ Travmkinder [411935551] [2025]/03 - Travmkind - Living in my mind.flac,Minimal / Deep Tech,142.13510131835938,,Main +"Various Artists/ Clergy 10 Years - Beta [417327786] [2025]/03 - Hertz Collision, Programma 101 - Concrete Skin.flac",Techno,142.94375610351562,12A,Main +Max Simon/ Flashing Colors [288210570] [2022]/01 - Max Simon - Flashing Colors.flac,Deep House,143.02406311035156,10B,Main +Machinedrum/ Room(s) [230172871] [2011]/01 - Machinedrum - She Died There.flac,Footwork / Juke / UK Bass,143.8229217529297,8B,Main +"Various Artists/VA - We Are Secta, Vol. 1 [SECT001]/Danny Wabbit - Girls Like Wine (Original Mix).aiff",Techno,143.9299774169922,,Main +Max Simon/ Flashing Colors [288210570] [2022]/02 - Max Simon - Clouds.flac,Deep House,144.84609985351562,,Main +Sole Dosi/ The Abyss Blooms [417858969] [2025]/03 - Sole Dosi - The Abyss Blooms.flac,Techno,144.86402893066406,9A,Main +Phon.o/Black Boulder [199591543] [2012]/11 - Phon.o - 12th.flac,Bass Music / Techno,144.93170166015625,5A,Main +Vilchezz/ slash 005 - Camelo's [304299374] [2023]/01 - Vilchezz - Camelo's (Original Mix).flac,Minimal / Deep Tech,144.93194580078125,12A,Main +Various Artists/ Clergy 10 Years - Beta [417327786] [2025]/01 - Stef Mendesidis - Hydra.flac,Techno,144.9584503173828,7B,Main +The Prodigy/[E] More Music for the Jilted Generation [2204688] [1994]/CD1/09 - The Prodigy - No Good (Start the Dance) (Remastered).flac,Breakbeat / Big Beat,144.9822998046875,5A,Main +"Various Artists/VA - We Are Secta, Vol. 1 [SECT001]/BENZA995 - Kinky (Original Mix).aiff",Tech House,146.02333068847656,9B,Main +Basic Channel/ Bcd-2 [87366018] [2008]/01 - Basic Channel - Enforcement.flac,Dub Techno,146.5289306640625,,Main +"Various Artists/VA - We Are Secta, Vol. 1 [SECT001]/Ju Lovett - Alive Again (Original Mix).aiff",Tech House,147.00523376464844,11A,Main +Don't F___ With My Energy EP/Danny Wabbit - Don't F- With My Energy EP -.aiff,Techno,148.0142059326172,5A,Main +Wippenberg/ Neurodancer [15921253] [2011]/01 - Wippenberg - Neurodancer (Original Mix).flac,Hard Trance,150.17022705078125,,Main +Gold Panda/ Companion [21583086] [2011]/13 - Gold Panda - Police.flac,Chillwave / Folktronica,151.95773315429688,,Main +Various Artists/VA - Electronic Music Anthology (by FG) (2018) [FLAC]/37. Aurora Borealis - The Milky Way.flac,Trance,153.94393920898438,8A,Main +CD-3/3-13. Kamasutra - Waterfront.flac,Progressive House,156.46304321289062,9A,Main +"Various Artists/[E] Best Of Liquid, Vol. 1 [147202525] [1994]/01 - Buzz & Ace - Killer (4 Ours Mix).flac",Jungle / Hardcore,161.4998321533203,9B,Main +"Franky Jones, Axel Stephenson, Jones & Stephenson/ The First Rebirth [65558851] [2016]/03 - Franky Jones, Axel Stephenson, Jones & Stephenson - The First Rebirth (Original Remastered Mix).flac",Hard Trance,161.50767517089844,1B,Main +"Roni Size, Reprazent/[E] New Forms (20th Anniversary Edition) [276244735] [1997]/CD3/08 - Roni Size, Reprazent - Heroes (Kruder Long Loose Bossa - Edit).flac",Downtempo,161.5162811279297,9A,Main +Travmkind/ Travmkinder [411935551] [2025]/02 - Travmkind - Nothing but a dream.flac,Minimal / Deep Tech,161.7273712158203,8A,Main +CD-3/3-01. Dune - Hardcore Vibes.flac,Happy Hardcore,163.880859375,8A,Main +Monolake/ Momentum [31300339] [2003]/01 - Monolake - Cern.flac,Dub Techno / Minimal Techno,178.20547485351562,8B,Main +Various Artists/VA - Hardcore Vibes (1997) [FLAC]/04 - Lenny Dee - Forgotten Moments.flac,Hardcore / Gabber,95.50914001464844,10A,Main + + +Various Artists/VA - Glasgow Underground Ibiza 2021 [Glasgow Underground] FLAC-2021/06-Stanny Abram - Amellebuee (Extended Mix).flac + + +Various Artists/VA - Glasgow Underground Ibiza 2021 [Glasgow Underground] FLAC-2021/38-Mallin - Off My Mind (Extended Mix).flac MAYBE diff --git a/house.json b/house.json new file mode 100644 index 0000000..d1499f5 --- /dev/null +++ b/house.json @@ -0,0 +1,125 @@ +{ + "settings": { + "output_filename": "/mnt/opslag/test_house.flac", + "default_crossfade_duration": "0:00.00", + "pre_mix_target_dbfs": -12.0, + "final_mix_target_dbfs": -1.0 + }, + "tracks": [ +{ + "song_path": "/mnt/raid_storage/Music/Various Artists/ Naba VA 002 [103500941] [2019]/02 - Münch - Note (Original Mix).flac", + "crossfade_start": "7:21.99", + "fade_power": 1.0, + "fade_out_delay": "1:30.00", + "no_tempo_adjust": true, + "volume_automation": [ + { + "start_time": "7:21.99", + "end_time": "9:21.99", + "gain_db": -1.94 + } + ], + "effects": [ + { + "type": "raw_ffmpeg", + "filter_string": "equalizer=f=1500:t=q:w=1:g=1.6,equalizer=f=5000:t=q:w=1:g=1.6", + "start_time": "7:21.99", + "end_time": "9:21.99" + } + ], + "eq_filters": [ + { + "type": "high_pass", + "cutoff_hz": 80, + "start_time": "7:21.99", + "end_time": "7:51.99" + }, + { + "type": "high_pass", + "cutoff_hz": 120, + "start_time": "7:51.99", + "end_time": "8:21.99" + }, + { + "type": "high_pass", + "cutoff_hz": 180, + "start_time": "8:21.99", + "end_time": "8:51.99" + }, + { + "type": "high_pass", + "cutoff_hz": 250, + "start_time": "8:51.99", + "end_time": "9:21.99" + } + ] + }, + { + "song_path": "/mnt/raid_storage/Music/Christian Löffler/A Forest [88101930] [2012]/03 - Christian Löffler - Eleven.flac", + "crossfade_start": "5:36.00", + "crossfade_duration": "2:00.00", + "fade_in_duration": "0:15.00", + "fade_power": 0.0, + "no_tempo_adjust": true, + "eq_filters": [ + { + "type": "high_pass", + "cutoff_hz": 250, + "start_time": "0:00.00", + "end_time": "0:30.00" + }, + { + "type": "high_pass", + "cutoff_hz": 180, + "start_time": "0:30.00", + "end_time": "1:00.00" + }, + { + "type": "high_pass", + "cutoff_hz": 120, + "start_time": "1:00.00", + "end_time": "1:30.00" + }, + { + "type": "high_pass", + "cutoff_hz": 80, + "start_time": "1:30.00", + "end_time": "2:00.00" + } + ] + }, + { + "song_path": "/mnt/raid_storage/Music/Christian Löffler/Young Alaska [88102745] [2014]/04 - Christian Löffler - Beirut.flac", + "start_offset": "0:04.56", + "crossfade_start": "5:36.00", + "crossfade_duration": "1:00.00", + "fade_in_duration": "0:10.00", + "fade_power": 1.0, + "no_tempo_adjust": true + }, + { + "song_path": "/mnt/raid_storage/Music/Kiasmos/Kiasmos [103318515] [2014]/03 - Kiasmos - Looped.flac", + "crossfade_start": "6:48.56", + "crossfade_duration": "0:47.75", + "fade_in_duration": "0:05.00", + "fade_power": 1.0, + "no_tempo_adjust": true, + "loops": [ + { + "start_time": "5:46.83", + "end_time": "5:58.78", + "count": 1 + } + ] + }, + { + "song_path": "/mnt/raid_storage/Music/Kiasmos/Blurred [103386930] [2017]/03 - Kiasmos - Jarred.flac", + "crossfade_start": "5:24.04", + "start_offset": "0:00.17", + "crossfade_duration": "1:30.00", + "fade_in_duration": "0:05.00", + "fade_power": 1.0, + "no_tempo_adjust": true + } + ] +} diff --git a/tempo_cache.json b/tempo_cache.json new file mode 100644 index 0000000..22c1d97 --- /dev/null +++ b/tempo_cache.json @@ -0,0 +1,77 @@ +{ + "/mnt/opslag/Album/Album/Krxziol/ The feeling of a dark cold winter outside [281504034] [2022]/01 - Krxziol - The feeling of a dark cold winter outside.flac": 123.046875, + "/mnt/opslag/Album/Album/Tangerine Dream/ Rubycon (Deluxe Version) [110765710] [1975]/01 - Tangerine Dream - Rubycon (Pt. 1 - Remastered 2018).flac": 129.19921875, + "/mnt/opslag/Album/Album/Klaus Schulze/ Timewind [3229881] [1975]/01 - Klaus Schulze - Bayreuth Return.flac": 114.84375, + "/mnt/opslag/Album/Album/Klaus Schulze/ Mirage (Remastered 2017) [82235529] [1977]/02 - Klaus Schulze - Crystal Lake.flac": 126.04801829268293, + "/mnt/opslag/Album/Album/Pauline Anna Strom/ Trans-Millenia Music [79870512] [2017]/05 - Pauline Anna Strom - Energies.flac": 126.04801829268293, + "/mnt/opslag/Album/Album/Klaus Schulze/ Kontinuum [380019868] [2007]/01 - Klaus Schulze - Sequencer (from 70 to 07).flac": 139.6748310810811, + "/mnt/opslag/Album/Album/Astral Pilot, Sven V\u00e4th/ Electro Acupuncture [63331511] [1995]/06 - Astral Pilot, Sven V\u00e4th - The Day After.flac": 129.19921875, + "/mnt/opslag/Album/Album/Biosphere/ Cirque [4186861] [2000]/06 - Biosphere - When I Leave.flac": 109.95678191489361, + "/mnt/opslag/Album/Album/Prins Thomas/Paradise Goulash [188131511] [2015]/36 - Evigt M\u00f6rker - H\u00f6gre.flac": 126.04801829268293, + "/mnt/opslag/Album/Album/Yagya/ Rigning (2018) [89007128] [2018]/02 - Yagya - Rigning Tv\u00f6.flac": 112.34714673913044, + "/mnt/opslag/Album/Album/David August/Diynamic Revisited (By David August) [33582870] [2014]/01 - Kollektiv Turmstrasse - Last Day (David August Revision).flac": 112.34714673913044, + "/mnt/opslag/Album/Album/Primal Code/Primal Code - Caimano Tribe (2019 ep, XW)/04 - Primal Code - Conjuration.flac": 139.6748310810811, + "/mnt/opslag/Album/Album/Primal Code/La Via della Seta [94401315] [2018]/07 - Primal Code - Magellano.flac": 139.6748310810811, + "/mnt/opslag/Album/Album/04 Kollektiv Turmstrasse - Ordinary (Lake People's Circle Motive remix).flac": 120.18531976744185, + "/mnt/opslag/Album/Album/Christian L\u00f6ffler/York [266760278] [2015]/03 - Christian L\u00f6ffler - Nordkap (Original Mix).flac": 120.18531976744185, + "/mnt/opslag/Album/Album/Christian L\u00f6ffler/Mare [88102248] [2016]/06 - Christian L\u00f6ffler - Lid.flac": 120.18531976744185, + "/mnt/opslag/Album/Album/Christian L\u00f6ffler/Young Alaska [88102745] [2014]/03 - Christian L\u00f6ffler - Notes.flac": 120.18531976744185, + "/mnt/opslag/Album/Album/Prins Thomas/Paradise Goulash [188131511] [2015]/25 - Joachim Holm & Alejandro Mosso, Alejandro Mosso - Tre Melodi.flac": 97.50884433962264, + "/mnt/opslag/Album/Album/Brian Eno/ Discreet Music [164531] [1975]/01 - Brian Eno - Discreet Music (Remastered 2004).flac": 123.046875, + "/mnt/opslag/Album/Album/Shanti Celeste/ Tangerine [120578211] [2019]/01 - Shanti Celeste - Sun Notification.flac": 123.046875, + "/mnt/opslag/Album/Album/Aphex Twin/ Selected Ambient Works Volume II (Expanded Edition [366456437] [1994]/01 - Aphex Twin - #1.flac": 103.359375, + "/mnt/opslag/Album/Album/Aphex Twin/ Selected Ambient Works Volume II (Expanded Edition [366456437] [1994]/07 - Aphex Twin - #7.flac": 109.95678191489361, + "/mnt/opslag/Album/Album/Aphex Twin/ Selected Ambient Works Volume II (Expanded Edition [366456437] [1994]/19 - Aphex Twin - #19.flac": 126.04801829268293, + "/mnt/opslag/Album/Album/Brian Eno/ Reflection [272550958] [2017]/01 - Brian Eno - Reflection.flac": 123.046875, + "/mnt/opslag/Album/Album/Steve Roach/ Structures From Silence [333370155] [1984]/03 - Steve Roach - Structures from Silence.flac": 123.046875, + "/mnt/opslag/Album/Album/Aphex Twin/ Selected Ambient Works Volume II (Expanded Edition [366456437] [1994]/03 - Aphex Twin - #3.flac": 123.046875, + "/mnt/opslag/Album/Album/CD 02/Brian Eno - Neroli - 01 - New Space Music.flac": 126.04801829268293, + "/mnt/opslag/Album/Album/Art Of Noise/[M] The Ambient Collection [46952148] [1990]/06 - Art Of Noise - Camilla (Remixed by Youth).flac": 114.84375, + "/mnt/raid_storage/Music/Christian L\u00f6ffler/Young Alaska [88102745] [2014]/03 - Christian L\u00f6ffler - Notes.flac": 120.18531976744185, + "/mnt/raid_storage/Music/Various Artists/Prins Thomas/Paradise Goulash [188131511] [2015]/25 - Joachim Holm & Alejandro Mosso, Alejandro Mosso - Tre Melodi.flac": 97.50884433962264, + "/mnt/raid_storage/Music/Various Artists/ Naba VA 002 [103500941] [2019]/02 - M\u00fcnch - Note (Original Mix).flac": 120.18531976744185, + "/mnt/raid_storage/Music/Christian L\u00f6ffler/A Forest [88101930] [2012]/03 - Christian L\u00f6ffler - Eleven.flac": 120.18531976744185, + "/mnt/raid_storage/Music/Christian L\u00f6ffler/Young Alaska [88102745] [2014]/04 - Christian L\u00f6ffler - Beirut.flac": 120.18531976744185, + "/mnt/raid_storage/Music/Brian Eno/ Discreet Music [164531] [1975]/01 - Brian Eno - Discreet Music (Remastered 2004).flac": 123.046875, + "/mnt/raid_storage/Music/Shanti Celeste/ Tangerine [120578211] [2019]/01 - Shanti Celeste - Sun Notification.flac": 123.046875, + "/mnt/raid_storage/Music/Aphex Twin/ Selected Ambient Works Volume II (Expanded Edition [366456437] [1994]/01 - Aphex Twin - #1.flac": 103.359375, + "/mnt/raid_storage/Music/Aphex Twin/ Selected Ambient Works Volume II (Expanded Edition [366456437] [1994]/03 - Aphex Twin - #3.flac": 123.046875, + "/mnt/raid_storage/Music/Aphex Twin/ Selected Ambient Works Volume II (Expanded Edition [366456437] [1994]/07 - Aphex Twin - #7.flac": 109.95678191489361, + "/mnt/raid_storage/Music/Art Of Noise/[M] The Ambient Collection [46952148] [1990]/06 - Art Of Noise - Camilla (Remixed by Youth).flac": 114.84375, + "/mnt/raid_storage/Music/Pauline Anna Strom/ Trans-Millenia Music [79870512] [2017]/05 - Pauline Anna Strom - Energies.flac": 126.04801829268293, + "/mnt/raid_storage/Music/Tangerine Dream/ Rubycon (Deluxe Version) [110765710] [1975]/01 - Tangerine Dream - Rubycon (Pt. 1 - Remastered 2018).flac": 129.19921875, + "/mnt/raid_storage/Music/Biosphere/ Cirque [4186861] [2000]/06 - Biosphere - When I Leave.flac": 109.95678191489361, + "/mnt/raid_storage/Music/Primal Code/Primal Code - Caimano Tribe (2019 ep, XW)/04 - Primal Code - Conjuration.flac": 139.6748310810811, + "/mnt/raid_storage/Music/Primal Code/La Via della Seta [94401315] [2018]/07 - Primal Code - Magellano.flac": 139.6748310810811, + "/mnt/raid_storage/Music/Krxziol/ The feeling of a dark cold winter outside [281504034] [2022]/01 - Krxziol - The feeling of a dark cold winter outside.flac": 123.046875, + "/mnt/raid_storage/Music/Klaus Schulze/ Mirage (Remastered 2017) [82235529] [1977]/02 - Klaus Schulze - Crystal Lake.flac": 126.04801829268293, + "/mnt/raid_storage/Music/Christian L\u00f6ffler/York [266760278] [2015]/03 - Christian L\u00f6ffler - Nordkap (Original Mix).flac": 120.18531976744185, + "/mnt/raid_storage/Music/Christian L\u00f6ffler/Mare [88102248] [2016]/06 - Christian L\u00f6ffler - Lid.flac": 120.18531976744185, + "/mnt/raid_storage/Music/Steve Roach/ Structures From Silence [333370155] [1984]/03 - Steve Roach - Structures from Silence.flac": 123.046875, + "/mnt/raid_storage/Music/04 Kollektiv Turmstrasse - Ordinary (Lake People's Circle Motive remix).flac": 120.18531976744185, + "/mnt/raid_storage/Music/Klaus Schulze/ Timewind [3229881] [1975]/01 - Klaus Schulze - Bayreuth Return.flac": 114.84375, + "/mnt/raid_storage/Music/Aphex Twin/ Selected Ambient Works Volume II (Expanded Edition [366456437] [1994]/19 - Aphex Twin - #19.flac": 126.04801829268293, + "/mnt/raid_storage/Music/Astral Pilot, Sven V\u00e4th/ Electro Acupuncture [63331511] [1995]/06 - Astral Pilot, Sven V\u00e4th - The Day After.flac": 129.19921875, + "/mnt/raid_storage/Music/Klaus Schulze/ Kontinuum [380019868] [2007]/01 - Klaus Schulze - Sequencer (from 70 to 07).flac": 139.6748310810811, + "/mnt/raid_storage/Music/CD 02/Brian Eno - Neroli - 01 - New Space Music.flac": 126.04801829268293, + "/mnt/raid_storage/Music/Brian Eno/ Reflection [272550958] [2017]/01 - Brian Eno - Reflection.flac": 123.046875, + "/mnt/raid_storage/Music/Kiasmos/Kiasmos [103318515] [2014]/03 - Kiasmos - Looped.flac": 120.18531976744185, + "/mnt/raid_storage/Music/Kiasmos/Blurred [103386930] [2017]/03 - Kiasmos - Jarred.flac": 120.18531976744185, + "/mnt/raid_storage/Music/Marcu Rares/ Soul Bonding [175595586] [2021]/01 - Marcu Rares - Soul Bonding.flac": 120.18531976744185, + "/mnt/raid_storage/Music/Plastikman, Richie Hawtin/Artifakts (BC) [137659864] [1998]/02 - Plastikman, Richie Hawtin - Psyk.flac": 120.18531976744185, + "/mnt/raid_storage/Music/Rone/Mirapolis [78562101] [2017]/11 - Rone - Mirapolis.flac": 120.18531976744185, + "/mnt/raid_storage/Music/Various Artists/ Grand Cru 2008 [18274893] [2008]/02 - Wareika - Fantasy (Wareika Remix).flac": 120, + "/mnt/raid_storage/Music/Daso/ All My People [86109655] [2012]/02 - Daso - Dan Lyke.flac": 121, + "/mnt/raid_storage/Music/Christian L\u00f6ffler/A Forest [88101930] [2012]/07 - Christian L\u00f6ffler - Blind.flac": 121, + "/mnt/raid_storage/Music/Stephan Bodzin/ Powers of Ten [45241387] [2015]/01 - Stephan Bodzin - Singularity.flac": 121, + "/mnt/raid_storage/Music/Daniel Avery/Drone Logic [43421119] [2013]/07 - Daniel Avery - Need Electric (Album Version).flac": 122, + "/mnt/raid_storage/Music/Sascha Funke/ Mango [87379506] [2008]/02 - Sascha Funke - We Are Facing the Sun.flac": 122, + "/mnt/raid_storage/Music/Bicep/Just EP [184785872] [2015]/03 - Bicep - Back 2 U.flac": 122, + "/mnt/raid_storage/Music/Various Artists/ HDC003 [352797419] [2016]/02 - Baltra - Tears Drop.flac": 122, + "/mnt/raid_storage/Music/Various Artists/ Memories, Pt. I [139085472] [2017]/05 - Thomas Wood - Cave.flac": 122.1, + "/mnt/raid_storage/Music/Bicep/Bicep [75160673] [2017]/12 - Bicep - Aura.flac": 123, + "/mnt/raid_storage/Music/Christian L\u00f6ffler/A Forest [88101930] [2012]/11 - Christian L\u00f6ffler - A Hundred Lights.flac": 123.046875, + "/mnt/raid_storage/Music/Robag Wruhme/ Olgamikks [16676895] [2012]/10 - Extrawelt - Neuland (Robags Rexmow 001).flac": 123, + "/mnt/raid_storage/Music/Leon Vynehall/ Music for the Uninvited [168277757] [2014]/02 - Leon Vynehall - Goodthing.flac": 123.53, + "/mnt/raid_storage/Music/DJ Boring/ Sunday Avenue [284620418] [2017]/02 - DJ Boring - 6 AM Mimosa.flac": 124 +} \ No newline at end of file diff --git a/test_all_features.json b/test_all_features.json new file mode 100644 index 0000000..e2016f1 --- /dev/null +++ b/test_all_features.json @@ -0,0 +1,83 @@ +{ + "settings": { + "output_filename": "test_all_features_output.flac", + "default_crossfade_duration": "0:05", + "final_mix_target_dbfs": -1.0 + }, + "tracks": [ + { + "song_path": "/mnt/opslag/Album/Album/Shanti Celeste/ Tangerine [120578211] [2019]/01 - Shanti Celeste - Sun Notification.flac", + "crossfade_duration": "0:08", + "crossfade_start": "4:55.00", + "start_offset": "0:38.64", + "fade_power": 1.0, + "loops": [ + { + "start_time": "1:00.00", + "end_time": "1:02.00", + "count": 2 + } + ], + "volume_automation": [ + { + "start_time": "1:30.00", + "end_time": "1:35.00", + "gain_db": -6 + } + ], + "eq_filters": [ + { + "type": "high_pass", + "cutoff_hz": 1000, + "start_time": "2:00.00", + "end_time": "2:05.00" + }, + { + "type": "band_reject", + "low_cutoff_hz": 400, + "high_cutoff_hz": 2000, + "start_time": "2:10.00", + "end_time": "2:15.00" + } + ], + "effects": [ + { + "type": "delay", + "start_time": "3:00.00", + "end_time": "3:02.00", + "delay_ms": 250, + "intensity": 0.5 + } + ] + }, + { + "song_path": "/mnt/opslag/Album/Album/Aphex Twin/ Selected Ambient Works Volume II (Expanded Edition [366456437] [1994]/01 - Aphex Twin - #1.flac", + "start_offset": "0:14.84", + "fade_power": 1.0, + "no_tempo_adjust": true, + "eq_filters": [ + { + "type": "low_pass", + "cutoff_hz": 500, + "start_time": "0:30.00", + "end_time": "0:35.00" + }, + { + "type": "band_pass", + "low_cutoff_hz": 300, + "high_cutoff_hz": 1500, + "start_time": "0:40.00", + "end_time": "0:45.00" + } + ], + "effects": [ + { + "type": "reverb", + "start_time": "1:00.00", + "end_time": "1:05.00", + "wet": 0.25 + } + ] + } + ] +} \ No newline at end of file