Initial commit: soothe2 RE workspace + roadmap
- Инфраструктура: RTTI-дампы (rtti_dsp/full.json), декомпиляции DSP-классов (decomp_*.txt), Ghidra-скрипты (Dump*.java, ImportRtti*.java, Diag.java), depthcurve/curve_fits LUT. - Поведенческая модель sim_v5.py + sim.py (RMSE ~0.3dB), утилиты (measure, tt_sweep, patchparam, sweep, harness_*, verify_sim). - summary.md + roadmap.md (контракт из manual M1-M12, топология пайплайна из OCR, фазы A-C). - pipeline_ocr.txt: OCR диаграммы Appendix A (mid/side ручка, trim/mix/bypass порядок).
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verification sweep: generate RPPs from burst500p_b1 template, render, measure.
|
||||
Cleanup-friendly: skips already-rendered wavs.
|
||||
"""
|
||||
import os, re, sys, time, subprocess, signal
|
||||
sys.path.insert(0, '/home/m/re-tools')
|
||||
|
||||
TPL = '/home/m/soothe-bt/burst500p_b1.rpp'
|
||||
DIR = '/home/m/soothe-bt'
|
||||
REAPER = '/usr/bin/reaper'
|
||||
|
||||
def render(rpp, wav, timeout=150):
|
||||
proc = subprocess.Popen([REAPER, '-nosplash', '-renderproject', rpp],
|
||||
stdout=open('/tmp/verif_render.log','w'), stderr=subprocess.STDOUT)
|
||||
try:
|
||||
proc.wait(timeout=timeout)
|
||||
return 'ok' if os.path.exists(wav) else 'no-file'
|
||||
except subprocess.TimeoutExpired:
|
||||
for s in (signal.SIGTERM, signal.SIGKILL):
|
||||
try: proc.send_signal(s); proc.wait(timeout=5)
|
||||
except Exception: pass
|
||||
return 'hang'
|
||||
|
||||
os.system("pkill -9 -x reaper 2>/dev/null; pkill -9 -f '[y]abridge' 2>/dev/null; sleep 1")
|
||||
|
||||
def gen_rpp(name, params):
|
||||
rpp = os.path.join(DIR, name + '.rpp')
|
||||
wav = os.path.join(DIR, name + '.wav')
|
||||
args = [f'{k}={v}' for k, v in params.items()]
|
||||
if os.path.exists(wav):
|
||||
print(f'{name}: cached')
|
||||
return wav
|
||||
os.system(f"python3 /home/m/re-tools/tt_sweep.py {TPL} {rpp} {wav} " + ' '.join(args))
|
||||
rc = render(rpp, wav)
|
||||
print(f'{name}: {rc}')
|
||||
return wav
|
||||
|
||||
DRY = '/home/m/soothe-bt/burst500p_byp.wav'
|
||||
if not os.path.exists(DRY):
|
||||
os.system("cp /home/m/soothe-bt/burst500p_byp.rpp /home/m/soothe-bt/zz_byp.rpp")
|
||||
# render dry baseline
|
||||
proc = subprocess.Popen([REAPER, '-nosplash', '-renderproject', '/home/m/soothe-bt/burst500p_byp.rpp'],
|
||||
stdout=open('/tmp/verif_byp.log','w'), stderr=subprocess.STDOUT)
|
||||
try:
|
||||
proc.wait(timeout=150)
|
||||
except subprocess.TimeoutExpired:
|
||||
proc.kill()
|
||||
print('dry baseline', os.path.exists(DRY))
|
||||
|
||||
sweeps = {
|
||||
'depth': {'0.5':'0.5','1':'1.0','2':'2.0','3':'3.0','5':'5.0','10':'10.0'},
|
||||
'attack': {'a5':'5.0','a25':'25.0','a100':'100.0','a250':'250.0','a500':'500.0'},
|
||||
'release': {'r10':'10.0','r100':'100.0','r500':'500.0','r1000':'1000.0'},
|
||||
'sharp': {'sh1':'1.0','sh3':'3.0','sh5':'5.0','sh20':'20.0'},
|
||||
'mode': {'m0':'0.0','m2':'2.0'},
|
||||
'sens': {'sn0':'0.0','sn6':'6.0','sn24':'24.0','sn48':'48.0'},
|
||||
}
|
||||
for group, vals in sweeps.items():
|
||||
for name, val in vals.items():
|
||||
gen_rpp(f'vp_{group}_{name}', {group: val})
|
||||
|
||||
print('\nall done; run measure.py on each vp_*.wav vs dry')
|
||||
Reference in New Issue
Block a user