/ simulated_instruments / cymbal
Sign in
simulated_instruments / cymbal
cymbal / matlab / cymbal_render.m
33 lines · 1.3 KBCodeBlameHistory
2% CYMBAL_RENDER Full render: basis + strikes -> cascade -> radiate -> output.
3% Convenience composition of the stage functions; the web app calls the stages
4% separately so it can cache intermediates (the shell eigensolves above all).
6basis = cymbal_basis(P);
7fsHi = P.sample_rate * P.oversample;
8[tstr, vstr, jstr, taustr, fstr, sstr, sinfo] = cymbal_strikes(P, basis);
9[env, tframe, DV, kf, cinfo] = cymbal_cascade(P, basis, tstr, jstr, taustr, sstr, sinfo.durationS);
10[p, radinfo] = cymbal_radiate(P, basis, env, tframe, DV, kf, tstr, taustr, fstr, sstr, fsHi);
11[y, peakPa] = cymbal_output(P, p, P.oversample);
13dinfo.strikeCount = sinfo.count;
14dinfo.meanV = sinfo.meanV;
15dinfo.maxV = sinfo.maxV;
16dinfo.meanTauUs = sinfo.meanTauUs;
17dinfo.peakForceN = sinfo.peakForceN;
18dinfo.durationS = sinfo.durationS;
19dinfo.modesKept = basis.n;
20dinfo.maxN = max(basis.ndia);
21dinfo.f1 = basis.f(1);
22dinfo.peakPa = peakPa;
23dinfo.peakSplDb = 20 * log10(peakPa / 20e-6 + 1e-30);
24dinfo.directPeakPa = radinfo.directPeakPa;
25dinfo.listenerInside = radinfo.listenerInside;
26dinfo.listenerDistM = radinfo.listenerDistM;
27dinfo.peakStrength = cinfo.peakStrength;
28dinfo.peakWrmsUm = cinfo.peakWrmsUm;
29dinfo.injectedJ = cinfo.injectedJ;
30dinfo.cascadeLostJ = cinfo.cascadeLostJ;
31dinfo.cascadeFrames = cinfo.frames;
32dinfo.sinfo = sinfo;
33end
↑↓ move↵openescclose