#!/usr/bin/env python3 """ Quick VLAW parameter test - just evaluate a few configs per group. """ import numpy as np import os import sys import subprocess sys.path.insert(0, '/home/m/re-tools/scripts') import corpus corpus.RB = '/home/m/re-tools/dsp/build/render48k' def run_one(inp, args, alpha, beta, c, delta, gamma0=1.79): out = f'/tmp/vlaw_test_{alpha}_{beta}_{c}.wav' env = { **os.environ, 'RT_VLAW': '1', 'RT_VLAW_ALPHA': str(alpha), 'RT_VLAW_BETA': str(beta), 'RT_VLAW_C': str(c), 'RT_VLAW_DELTA': str(delta), 'RT_SYN': '1', 'RT_NOWARP': '1', 'RT_NOIIR3': '1', 'RT_IIR12': '0', } subprocess.run( [corpus.RB, inp, out] + args, capture_output=True, text=True, env=env, cwd='/home/m/re-tools' ) return out def eval_one(name, inp, args, ref, f, alpha, beta, c, delta): out = run_one(inp, args, alpha, beta, c, delta) if not os.path.exists(out) or os.path.getsize(out) == 0: return None ref_sig = corpus.load_mono(ref) out_sig = corpus.load_mono(out) min_len = min(len(ref_sig), len(out_sig)) ref_sig = ref_sig[-min_len:] out_sig = out_sig[-min_len:] ref_ta = corpus.ta(ref_sig, f) out_ta = corpus.ta(out_sig, f) return corpus.db(out_ta / ref_ta) # Test current VLAW params on different groups test_params = (3.2193, 0.4927, 0.5423, 6.9177) all_cases = [] for name, inp, args, ref, f in corpus.build_cases(): joined = [','.join(args)] if len(args) == 3 else args all_cases.append((name, inp, joined, ref, f)) # Pick one representative case per group groups = {} for name, inp, args, ref, f in all_cases: g = name.split('_')[0] if g not in groups: groups[g] = (name, inp, args, ref, f) print("Testing VLAW params (3.2193, 0.4927, 0.5423, 6.9177) on each group:") for g, (name, inp, args, ref, f) in groups.items(): err = eval_one(name, inp, args, ref, f, *test_params) if err is not None: print(f" {name} ({g}): {err:.3f} dB") else: print(f" {name} ({g}): FAILED")