"""Complete Ruth theme, procedural instruments only, unchanged accepted models; no audio input.""" from pathlib import Path import json, hashlib, shutil, subprocess import numpy as np from scipy.signal import resample_poly, butter, sosfilt from scipy.io.wavfile import write, read import guitar_model, bass_model import sys HERE=Path(__file__).resolve().parent OUT=Path(sys.argv[1]).resolve() if len(sys.argv)>1 else HERE/'output' OUT.mkdir(exist_ok=True) score=json.loads((HERE/'score.json').read_text()) frames=round(score['duration']*44100);sr=44100 gains=json.loads((HERE/'gains.json').read_text());parts={};stats=[] for part in ['guitar','bass']: mono=np.zeros(frames);notes=[e for e in score['events'] if e['part']==part] model=guitar_model if part=='guitar' else bass_model for i,e in enumerate(notes): duration=e['duration'];release=.16 following=next((n for n in notes[i+1:] if n['string']==e['string']),None) if following and following['time']0] assert np.isfinite(x).all() and max(energy)