#!/usr/bin/env python3 """Render remaining verification sweeps serially with hang protection. Waits for reaper process EXIT (not just wav file appearing).""" import os, sys, time, subprocess, signal TPL = '/home/m/soothe-bt/burst500q_b1.rpp' DIR = '/home/m/soothe-bt' REAPER = '/usr/bin/reaper' def render(rpp, timeout=180): proc = subprocess.Popen([REAPER, '-nosplash', '-renderproject', rpp], stdout=open('/tmp/verif2.log','w'), stderr=subprocess.STDOUT) try: proc.wait(timeout=timeout) return proc.returncode 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(name, params, depth_base='0.8639736175537109'): rpp = os.path.join(DIR, name + '.rpp') wav = os.path.join(DIR, name + '.wav') if os.path.exists(wav) and os.path.getsize(wav) == 1588290: print(f'{name}: cached') return args = ' '.join(f'{k}={v}' for k, v in params.items()) cmd = ['python3', '/home/m/re-tools/tt_sweep.py', TPL, rpp, wav] for k, v in params.items(): cmd.append(f'{k}={v}') subprocess.run(cmd, capture_output=True) rc = render(rpp) size = os.path.getsize(wav) if os.path.exists(wav) else 0 print(f'{name}: rc={rc} size={size}') # avoid "already exists" false positives on truncated files if size != 1588290 and os.path.exists(wav): os.remove(wav) sweeps = { 'release': {'r10':'10.0','r100':'100.0','r500':'500.0','r1000':'1000.0'}, 'sharpness': {'sh1':'1.0','sh3':'3.0','sh5':'5.0','sh20':'20.0'}, 'sens': {'sn0':'0.0','sn6':'6.0','sn24':'24.0','sn48':'48.0'}, 'mode_d5': {'m0':'0.0','m2':'2.0'}, } for group, vals in sweeps.items(): for name, val in vals.items(): params = {group.replace('_d5',''): val} if group == 'sens': params = {'band1 sens': val} if group == 'mode_d5': params = {'mode': val, 'depth': '5.0'} gen(f'vpq_{group}_{name}', params) print('done')