24aa: 563a60 confirmed GUI-branch (detector-LUT params absent from audio-instance memory — full rw-scan); audio-path level compression lives in step 1-19 op semantics (bigkernels/fma/combine); memory-scan tools added
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python3
|
||||
"""scan_pairs.py — dump ALL unique adjacent float pairs (A<0<B) seen in rw-mem
|
||||
during a render window. Diagnostic for LUT param location."""
|
||||
import struct, subprocess, sys, time
|
||||
import glob, os
|
||||
import numpy as np
|
||||
|
||||
def find_host():
|
||||
for p in glob.glob('/proc/[0-9]*'):
|
||||
pid = int(os.path.basename(p))
|
||||
try:
|
||||
cmd = open(f'/proc/{pid}/cmdline','rb').read().replace(b'\0',b' ').decode('utf8','replace')
|
||||
maps = open(f'/proc/{pid}/maps').read()
|
||||
except Exception:
|
||||
continue
|
||||
if 'soothe2' in maps and 'reaper' not in cmd:
|
||||
return pid
|
||||
return None
|
||||
|
||||
subprocess.run("pkill -9 -x reaper; pkill -9 -f '[y]abridge'; "
|
||||
"rm -rf /run/user/1000/yabridge-soothe2_x64-*; sleep 1", shell=True)
|
||||
rpp = sys.argv[1] if len(sys.argv) > 1 else '/home/m/soothe-bt/dual_b1q_0.5.rpp'
|
||||
proc = subprocess.Popen(['/usr/bin/reaper','-nosplash','-ignoreerrors','-renderproject', rpp],
|
||||
stdout=open('/dev/null','w'), stderr=subprocess.STDOUT)
|
||||
t0=time.time(); host=None
|
||||
while time.time()-t0<30 and not host:
|
||||
host = find_host(); time.sleep(0.002)
|
||||
print('host', host, flush=True)
|
||||
if not host:
|
||||
sys.exit(1)
|
||||
fd = os.open(f'/proc/{host}/mem', os.O_RDONLY)
|
||||
|
||||
def rd(a,n):
|
||||
try: return os.pread(fd,n,a)
|
||||
except OSError: return None
|
||||
|
||||
seen={}
|
||||
t_end=time.time()+8
|
||||
while time.time()<t_end:
|
||||
try:
|
||||
alive=True
|
||||
for line in open(f'/proc/{host}/maps'):
|
||||
parts=line.split()
|
||||
if 'rw' not in parts[1]: continue
|
||||
lo,hi=(int(x,16) for x in parts[0].split('-'))
|
||||
CH=16*1024*1024
|
||||
a=lo
|
||||
while a<hi:
|
||||
d=rd(a,min(CH+64,hi-a))
|
||||
if not d:
|
||||
alive=False; break
|
||||
n=len(d)//8*2
|
||||
arr=np.frombuffer(d[:n*4],dtype='<f4').reshape(-1,2)
|
||||
m=(arr[:,0]>-60)&(arr[:,0]<-1)&(arr[:,1]>1)&(arr[:,1]<100)
|
||||
for i in np.nonzero(m)[0]:
|
||||
key=(round(float(arr[i,0]),3),round(float(arr[i,1]),3))
|
||||
if key not in seen:
|
||||
seen[key]=a+i*8
|
||||
print('pair A=%.4f B=%.4f @%x' % (key[0],key[1],a+i*8), flush=True)
|
||||
a+=CH
|
||||
if not alive: break
|
||||
except (FileNotFoundError, ProcessLookupError):
|
||||
break
|
||||
print('unique pairs:', len(seen))
|
||||
Reference in New Issue
Block a user