56 lines
2.2 KiB
Python
56 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Emit dsp/leveltrack_data.hpp: live level-tracker A[] + mask scalars from
|
|
handoff/rtctx_live.json (P1.5 realtime capture, render_long.rpp preset).
|
|
"""
|
|
import json, os
|
|
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
SRC = os.path.join(HERE, 'rtctx_live.json')
|
|
OUT = os.path.join(HERE, '..', 'dsp', 'leveltrack_data.hpp')
|
|
|
|
d = json.load(open(SRC))
|
|
|
|
A_attack = d['A_4c0528'] # attack smoothing (fast), 341 double
|
|
A_release = d['A_3c0510'] # release smoothing (slow), 341 double
|
|
scalars = d['scalars'] # hex-offset -> float
|
|
|
|
|
|
def fmt_doubles(a):
|
|
return ", ".join("%.17g" % v for v in a)
|
|
|
|
|
|
lines = []
|
|
lines.append("// AUTOGENERATED from P1.5 realtime capture handoff/rtctx_live.json")
|
|
lines.append("// (render_long.rpp: attack=0 release=0 selectivity=10 sharpness=10 depth=0.864).")
|
|
lines.append("// Regenerate with handoff/emit_leveltrack.py. Do not edit by hand.")
|
|
lines.append("#pragma once")
|
|
lines.append("#include <cstddef>")
|
|
lines.append("")
|
|
lines.append("namespace ltk {")
|
|
lines.append("")
|
|
lines.append("// ctx = 0x2370040, marker +0x24 == 48000.0f (internal SR).")
|
|
lines.append("constexpr float CTX_INTERNAL_SR = 48000.0f;")
|
|
lines.append("")
|
|
lines.append("// mask scalars (float) captured live:")
|
|
for off, val in scalars.items():
|
|
lines.append(f"constexpr float SCALAR{off.upper()} = {val}f;")
|
|
lines.append("")
|
|
lines.append(f"constexpr size_t LEVEL_NBINS = {len(A_attack)};")
|
|
lines.append("")
|
|
lines.append("// per-bin level-tracker IIR attack coefficients (0x4c0528):")
|
|
lines.append(f"const double A_ATTACK[{len(A_attack)}] = {{")
|
|
for i in range(0, len(A_attack), 6):
|
|
lines.append(" " + ", ".join("%.17g" % v for v in A_attack[i:i+6]) + ",")
|
|
lines.append("};")
|
|
lines.append("")
|
|
lines.append("// per-bin level-tracker IIR release coefficients (0x3c0510 == 0x2c04f8):")
|
|
lines.append(f"const double A_RELEASE[{len(A_release)}] = {{")
|
|
for i in range(0, len(A_release), 6):
|
|
lines.append(" " + ", ".join("%.17g" % v for v in A_release[i:i+6]) + ",")
|
|
lines.append("};")
|
|
lines.append("")
|
|
lines.append("} // namespace ltk")
|
|
|
|
open(OUT, 'w').write("\n".join(lines) + "\n")
|
|
print(f"wrote {OUT}: attack={len(A_attack)} release={len(A_release)} scalars={len(scalars)}")
|