39353751e67942c3f322b6a75482299d8e8c1a43
- TestScenario: parses a JSON file describing sample rate/block size/ duration, an input signal config (silence/sine/noise/impulse), and a timed sequence of events (noteOn/noteOff/controller/param/loadPatch/ loadBank/savePatch/saveBank), sorted by sample position. Relative file paths inside the JSON resolve against the scenario file's own directory, not the process cwd, so scenario files are portable. Nothing here is JaySynth-specific: an event type a given plugin doesn't care about (e.g. MIDI sent to a plugin with no MIDI input) is simply inert, since AudioProcessor/MidiBuffer already tolerate that generically. - main.cpp: unified the ad-hoc CLI flags (--note/--param/--input/etc.) and --scenario JSON files through one render loop, by synthesizing a TestScenario from the CLI flags when no JSON file is given. Added --bank/--savePatch/--saveBank for the ad-hoc path (loadPatch/wav already existed). Non-MIDI events (param/patch/bank) scheduled inside a block apply at the start of that block; MIDI events keep full per-sample timing via MidiBuffer's own offset parameter. - PerformanceStats: wraps each processBlock call with a high-resolution timer, reports min/mean/max render time and a real-time factor (audio seconds rendered / wall-clock seconds), plus optional per-block CSV export for tracking regressions over time. Never paces the loop to real-time - the point is to run faster than that. Verified end-to-end: - Ad-hoc CLI path against JaySynth.so still renders correctly and now reports performance (e.g. ~74x real-time on this machine). - A JSON scenario driving JaySynth (timed noteOn/param/noteOff/ savePatch) produces correct WAV output and a valid saved patch file. - That saved patch round-trips back in via --patch and renders cleanly (proves the save/load path is consistent, not just one-directional). - A JSON scenario driving a real third-party effect (ZamComp-vst.so, 2 in/1 out - a genuinely asymmetric channel count, not just "0 in" or "stereo") with generated pink noise and a param event produces correct mono output at >1000x real-time. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011dhtwRLARk4eiPngcQykLJ
Description
No description provided
90 MiB
Languages
C++
53.7%
C
36.8%
Makefile
4.1%
MATLAB
2.2%
Roff
1.6%
Other
1.6%