<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gary Doman/TizWildin</title>
    <description>The latest articles on DEV Community by Gary Doman/TizWildin (@tizwildin).</description>
    <link>https://dev.to/tizwildin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3931231%2F8757550d-0561-4085-8dc9-62b565e70443.jpeg</url>
      <title>DEV Community: Gary Doman/TizWildin</title>
      <link>https://dev.to/tizwildin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tizwildin"/>
    <language>en</language>
    <item>
      <title>An Architectural Blueprint on Gendered Life in Biology</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Tue, 02 Jun 2026 03:08:12 +0000</pubDate>
      <link>https://dev.to/tizwildin/an-architectural-blueprint-on-gendered-life-in-biology-2994</link>
      <guid>https://dev.to/tizwildin/an-architectural-blueprint-on-gendered-life-in-biology-2994</guid>
      <description>

&lt;h2&gt;
  
  
  Thesis
&lt;/h2&gt;

&lt;p&gt;The popular social media line that &lt;em&gt;"the fight-or-flight response was only tested on men"&lt;/em&gt; is a simplification with a kernel of truth, but it’s heavily exaggerated. The original “fight-or-flight” model comes from Walter Cannon in the early 1900s. Later, researchers like Shelley Taylor proposed “tend-and-befriend” (early 2000s), arguing that under certain conditions—especially in caregiving or social bonding contexts—some stress responses may bias toward affiliation and calming behaviour. That is not exclusive to women, and it’s not a hardware replacement for fight/flight; it’s an additional layer of behaviour that shows up variably across people and situations.&lt;/p&gt;

&lt;p&gt;Oxytocin is also not a “female-only” or “community bonding switch.” Both sexes produce it, and its effects depend heavily on runtime context (stress level, social environment, prior learning, and real-time interactions with hormones like cortisol). The nervous system isn’t running a gendered operating system—it’s a shared biological system with probabilistic differences influenced by both biology and environment.&lt;/p&gt;

&lt;p&gt;It's highly analogous to &lt;strong&gt;audio trapezoidal topology calculus graphing&lt;/strong&gt;. When modeling a filter circuit in digital signal processing, you utilize mathematical constant formulas. The underlying math—the structural transfer function—stays exactly the same:&lt;/p&gt;

&lt;p&gt;$$H(z) = \frac{b_0 + b_1 z^{-1} + b_2 z^{-2}}{1 + a_1 z^{-1} + a_2 z^{-2}}$$&lt;/p&gt;

&lt;p&gt;No matter what coefficients or variables you plug into the system, the formula is identical. The features from the source code are simply presented differently on the frontend development due to physical as well as environmental constraints in the runtime, which is vastly more apparent in Flatworm mating biology. These social media explanations lately are oversimplifying a probabilistic, context-dependent stress response system into a binary sex-based operating model, which is entirely unsupported by neuroendocrinology.&lt;/p&gt;

&lt;p&gt;The analogy I’m trying to make isn’t that biology is literally software; it’s that people are treating it like a fixed, dual-booting “female vs male operating system” when it’s actually a dynamic adaptive system. DNA isn’t a static blueprint that deterministically outputs behavior like HTML rendering a page. Gene expression is regulated continuously through environment, hormones, development, and feedback loops (epigenetics, endocrine signaling, neural plasticity). &lt;/p&gt;

&lt;p&gt;So the “source code $\rightarrow$ runtime output” framing is already an oversimplification. Same with the stress response: the underlying circuitry—the HPA axis and the autonomic nervous system—is shared. What varies is internal modulation and probability distributions under different contexts, not separate gendered systems. &lt;/p&gt;

&lt;p&gt;When social media turns “tend-and-befriend” into an isolated female operating system, it’s compressing a highly conditional, context-dependent behavioral tendency into a binary model that neuroscience doesn’t actually support. The model being used online is structurally too rigid for what biology actually is.&lt;/p&gt;

&lt;p&gt;That is precisely why you can introduce hormone blockers to shift an endocrine system's parameters and move toward a different steady state—it's just not the exact same end-equation probability stack both ways. That asymmetry is what people are observing. 'Social Media' seems to be taking the entropy out of continuity and using the isolated output rather than looking at the overarching formula.&lt;/p&gt;







&lt;h2&gt;
  
  
  References &amp;amp; Readings
&lt;/h2&gt;

&lt;p&gt;For a direct look at the "runtime compilation" aspect of biological systems architecture, look to the expanding domain of systems biology:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;The Paper:&lt;/strong&gt; A recent paper titled &lt;em&gt;Epigenetic Intelligence: How Organisms Track Their Environment Through Molecular Memory&lt;/em&gt; (2026) uses mathematical simulation and stochastic modeling to demonstrate how organisms rely on continuous environmental feedback loops to dynamically remodel their epigenetic state. It frames the genome not as a static page, but as an interactive system actively managing environmental "stress" by adjusting its operational parameters on the fly.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Visuals:&lt;/strong&gt; To see a clean breakdown of how this operates at the molecular level, review &lt;em&gt;Chromatin Biology: Epigenetics and the Regulation of Gene Activity&lt;/em&gt;, which demonstrates how chromatin structures actively alter gene expression in real-time based on environmental inputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Translation Guide
&lt;/h3&gt;

&lt;p&gt;When analyzing biological networks from an engineering mindset, you can seamlessly translate architectural vocabulary into its biological counterparts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Systems Engineering Concept&lt;/th&gt;
&lt;th&gt;Biological Equivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core Mathematical Formula&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The Genotype / Conspecific Baseline Architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parameter &amp;amp; Variable Changes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Environmental Inputs / Endocrine Signaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The Rendered Frontend Graph&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The Reaction Norm of the Phenotype&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Biology discovered dynamic runtime scaling long before we did; systems biologists are just the ones using software and engineering principles to finally map it out accurately.&lt;/p&gt;

&lt;p&gt;More Here: &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/tizwildin/flatworms-the-hidden-architecture-behind-biology-a-structured-blueprint-on-gendered-life-4924" class="crayons-story__hidden-navigation-link"&gt;Flatworms &amp;amp; The Hidden Architecture Behind Biology: An Honest Structured Blueprint on Gendered Life&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/tizwildin" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3931231%2F8757550d-0561-4085-8dc9-62b565e70443.jpeg" alt="tizwildin profile" class="crayons-avatar__image" width="800" height="564"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/tizwildin" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Gary Doman/TizWildin
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Gary Doman/TizWildin
                
              
              &lt;div id="story-author-preview-content-3799553" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/tizwildin" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3931231%2F8757550d-0561-4085-8dc9-62b565e70443.jpeg" class="crayons-avatar__image" alt="" width="800" height="564"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Gary Doman/TizWildin&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/tizwildin/flatworms-the-hidden-architecture-behind-biology-a-structured-blueprint-on-gendered-life-4924" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 2&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/tizwildin/flatworms-the-hidden-architecture-behind-biology-a-structured-blueprint-on-gendered-life-4924" id="article-link-3799553"&gt;
          Flatworms &amp;amp; The Hidden Architecture Behind Biology: An Honest Structured Blueprint on Gendered Life
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/architecture"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;architecture&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/math"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;math&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/science"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;science&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/tizwildin/flatworms-the-hidden-architecture-behind-biology-a-structured-blueprint-on-gendered-life-4924#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;





</description>
      <category>architecture</category>
      <category>math</category>
      <category>science</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Flatworms &amp; The Hidden Architecture Behind Biology: An Honest Structured Blueprint on Gendered Life</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Tue, 02 Jun 2026 02:45:25 +0000</pubDate>
      <link>https://dev.to/tizwildin/flatworms-the-hidden-architecture-behind-biology-a-structured-blueprint-on-gendered-life-4924</link>
      <guid>https://dev.to/tizwildin/flatworms-the-hidden-architecture-behind-biology-a-structured-blueprint-on-gendered-life-4924</guid>
      <description>&lt;p&gt;Flatworms are simultaneous hermaphrodites; each individual carries both male and female reproductive organs. When two meet to mate, they fence with their male organs—each trying to inseminate the other—because being the female is costly. The winner gets to be the male. The loser gets pregnant.&lt;/p&gt;

&lt;p&gt;Both individuals want to be the male. Only one gets to be. They fight for the right.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Pseudobiceros hancockanus&lt;/em&gt; and related polyclad flatworm species—colourful marine flatworms found in tropical reef systems—are simultaneous hermaphrodites. When two individuals meet for mating, a bizarre competition begins: &lt;strong&gt;penis fencing&lt;/strong&gt;. Each flatworm extends its male reproductive organ—a two-headed, stylet-tipped structure—and attempts to pierce the skin of the other and inject sperm, while simultaneously manoeuvring to avoid being pierced itself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The contest:&lt;/strong&gt; Typically lasts 10–60 minutes. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The loser:&lt;/strong&gt; The individual that receives the sperm injection. The sperm is injected hypodermically—directly through the skin, not through a dedicated opening—and must then migrate through the flatworm's tissue to reach the eggs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why both individuals want to be the male:&lt;/strong&gt; The energetic cost of being female is substantially higher. Carrying and developing eggs requires significant metabolic investment. Being the male costs almost nothing beyond the mating event itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The outcome:&lt;/strong&gt; The winner gets to fertilise the other and bear no energetic reproductive cost. The loser must produce and carry eggs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why both individuals want to be the male: the energetic cost of being female is substantially higher. Carrying and developing eggs requires significant metabolic investment. Being the male costs almost nothing beyond the mating event itself.&lt;/p&gt;

&lt;p&gt;The winner: gets to fertilise the other and bear no energetic reproductive cost. The loser: must produce and carry eggs.&lt;br&gt;
The "fencing" is not metaphorical — it is a genuine combat in which manoeuvring skill, stamina, and the ability to direct and deflect the stylet determines the reproductive outcome.&lt;/p&gt;

&lt;p&gt;When a reproductive system creates a competitive conflict between two partners of the same species — in which both fight to achieve the same role — does that make the flatworm's mating system the most honest expression of the sexual conflict theory in biology?&lt;/p&gt;

&lt;h1&gt;
  
  
  Thesis
&lt;/h1&gt;

&lt;p&gt;The “fight or flight was only tested on men” line is a simplification with a kernel of truth, but it’s exaggerated. The original “fight-or-flight” model comes from Walter Cannon in the early 1900s. Later, researchers like Shelley Taylor proposed “tend-and-befriend” (early 2000s), arguing that under certain conditions - especially in caregiving or social bonding contexts - some stress responses may bias toward affiliation and calming behaviour. That is not exclusive to women, and it’s not a replacement for fight/flight; it’s an additional layer of behaviour that shows up variably across people and situations.&lt;/p&gt;

&lt;p&gt;Oxytocin is also not a “female-only” or “community bonding switch.” Both sexes produce it, and its effects depend heavily on context (stress level, social environment, prior learning, hormones like cortisol, etc.). The nervous system isn’t running a gendered operating system - it’s a shared biological system with probabilistic differences influenced by biology and environment.&lt;/p&gt;

&lt;p&gt;It's like my audio trapezoidal topology calculus graphing, I'm using mathematical constant formulas, so the math stays the same.. No matter what I plug in, the formula is the same. The features from the source code are just presented differently on the frontend development due to physical as well as environmental constraints in the runtime, which is vastly more apparent in Flatworm mating biology. These social media explanations lately are oversimplifying a probabilistic, context-dependent stress response system into a binary sex-based operating model, which is not supported by neuroendocrinology.&lt;/p&gt;

&lt;p&gt;The analogy I’m trying to make isn’t that biology is literally software, it’s that people are treating it like a fixed “female vs male operating system” when it’s actually a dynamic adaptive system. DNA isn’t a static blueprint that deterministically outputs behavior like HTML rendering a page. Gene expression is regulated continuously through environment, hormones, development, and feedback loops (epigenetics, endocrine signaling, neural plasticity). So the “source code → runtime output” framing is already an oversimplification. Same with stress response: the underlying circuitry (HPA axis, autonomic nervous system) is shared. What varies is modulation and probability distributions under different contexts, not separate gendered systems. So when social media turns “tend-and-befriend” into a female operating system, it’s compressing a highly conditional, context-dependent behavioral tendency into a binary model that neuroscience doesn’t actually support. That’s my point - not that people are identical, but that the model being used is structurally too rigid for what biology actually is.&lt;/p&gt;

&lt;p&gt;Thats why you can take hormone blockers and become a women, and vice versa, it's just not the same end equation probability stack both ways. Thats what they are seeing. 'Social Media' Seems to be taking the entropy out of continuity and using the output rather then the formula...&lt;/p&gt;

&lt;h1&gt;
  
  
  References &amp;amp; Readings
&lt;/h1&gt;

&lt;p&gt;For a direct look at the "runtime compilation" aspect as mentioned, there is fascinating research explicitly treating epigenetics as a system of real-time data tracking.&lt;/p&gt;

&lt;p&gt;The Paper to Read: A recent paper titled Epigenetic Intelligence: How Organisms Track Their Environment Through Molecular Memory (2026) uses mathematical simulation and stochastic modeling to demonstrate how organisms rely on continuous environmental feedback loops to dynamically remodel their epigenetic state. It frames the genome not as a static page, but as an interactive system actively managing environmental "stress" by adjusting its operational parameters on the fly.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Translation Guide
&lt;/h1&gt;

&lt;p&gt;Next time you are debating this, you can seamlessly translate your architecture vocabulary into biological terms:&lt;/p&gt;

&lt;p&gt;Core Mathematical Formula → The Genotype / Conspecific Baseline Architecture&lt;/p&gt;

&lt;p&gt;Parameter/Variable Changes → Environmental Inputs / Endocrine Signaling&lt;/p&gt;

&lt;p&gt;The Rendered Frontend Graph → The Reaction Norm of the Phenotype&lt;/p&gt;

&lt;p&gt;Biology discovered dynamic runtime scaling long before we did; systems biologists are just the ones using software and engineering principles to finally map it out accurately.&lt;/p&gt;

&lt;p&gt;To see a great visual breakdown of how this works at the molecular level, take a look at Chromatin Biology: Epigenetics and the Regulation of Gene Activity, which visually demonstrates how chromatin structure alters gene expression in real-time based on environmental inputs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Translation Guide
&lt;/h3&gt;

&lt;p&gt;When analyzing biological networks from an engineering mindset, you can seamlessly translate architectural vocabulary into its biological counterparts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Systems Engineering Concept&lt;/th&gt;
&lt;th&gt;Biological Equivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core Mathematical Formula&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The Genotype / Conspecific Baseline Architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parameter &amp;amp; Variable Changes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Environmental Inputs / Endocrine Signaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The Rendered Frontend Graph&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The Reaction Norm of the Phenotype&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Biology discovered dynamic runtime scaling long before we did; systems biologists are just the ones using software and engineering principles to finally map it out accurately.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>math</category>
      <category>science</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Lock-Free Dynamic EQ Architecture: A Production-Grade SVF Implementation in JUCE/C++</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Mon, 01 Jun 2026 17:45:43 +0000</pubDate>
      <link>https://dev.to/tizwildin/lock-free-dynamic-eq-architecture-a-production-grade-svf-implementation-in-jucec-n52</link>
      <guid>https://dev.to/tizwildin/lock-free-dynamic-eq-architecture-a-production-grade-svf-implementation-in-jucec-n52</guid>
      <description>&lt;h1&gt;
  
  
  Lock-Free Dynamic EQ Architecture: A Production-Grade SVF Implementation in JUCE/C++
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Gary Doman&lt;/strong&gt; (GareBear99 / TizWildin)&lt;br&gt;&lt;br&gt;
FreeEQ8 / ProEQ8 Open-Source DSP Project&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;https://github.com/GareBear99/FreeEQ8&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;This paper presents the architecture of a production-grade parametric&lt;br&gt;
equalizer (8-band free / 24-band commercial) designed for low-latency Dynamic EQ with modulation-stable filter coefficients.&lt;br&gt;
By utilizing a 64-bit double-precision implementation of the Simper State Variable&lt;br&gt;
Filter (SVF) topology via trapezoidal integration, the system achieves stable&lt;br&gt;
parameter automation near the Nyquist limit while consuming only &lt;strong&gt;0.62% of a&lt;br&gt;
single-core real-time CPU budget&lt;/strong&gt; at 44.1 kHz (161× headroom). To ensure&lt;br&gt;
absolute real-time safety within modern Digital Audio Workstations (DAWs), a&lt;br&gt;
lock-free Single-Producer Single-Consumer (SPSC) triple-buffering swap-chain&lt;br&gt;
isolates the audio hot-path from UI rendering. We further introduce a&lt;br&gt;
&lt;strong&gt;variable-cadence coefficient engine&lt;/strong&gt; that switches between 4-sample batching&lt;br&gt;
during sustained signals and per-sample accuracy on transients, reducing Dynamic&lt;br&gt;
EQ CPU cost by up to 75% under stable envelope conditions. Finally, an&lt;br&gt;
allocation-free, log-frequency resonance detection array (&lt;code&gt;ResonanceDetector.h&lt;/code&gt;)&lt;br&gt;
maps live spectral coefficients to localized semantic labels—providing a&lt;br&gt;
framework for zero-latency, explainable mix-assist workflows.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;p&gt;Traditional parametric EQ implementations use the Robert Bristow-Johnson (RBJ)&lt;br&gt;
Audio EQ Cookbook biquad formulas [6] in Transposed Direct Form II (TDF-II).&lt;br&gt;
While mathematically correct, the bilinear transform compresses the frequency axis near Nyquist (BLT cramping):&lt;br&gt;
the geometric bandwidth of a Bell filter at 16 kHz with Q=1.0 at 44.1 kHz is&lt;br&gt;
&lt;strong&gt;199% narrower&lt;/strong&gt; on a logarithmic scale than the same filter at 1 kHz, due to&lt;br&gt;
the nonlinear frequency mapping of the BLT — not an error in the formula itself. Industry solutions&lt;br&gt;
include brute-force oversampling (adding latency and CPU cost) or proprietary&lt;br&gt;
polynomial analog-matching curves (FabFilter Pro-Q family).&lt;/p&gt;

&lt;p&gt;This paper documents a third path: the Simper SVF topology, selected for its&lt;br&gt;
structural advantages under time-varying conditions. The SVF and RBJ biquad&lt;br&gt;
produce identical steady-state frequency responses — both use BLT prewarping&lt;br&gt;
(&lt;code&gt;g = tan(π·fc/fs)&lt;/code&gt;) and exhibit the same BLT cramping near Nyquist. The SVF's&lt;br&gt;
advantage is modulation stability: bounded, noise-free coefficient interpolation&lt;br&gt;
under per-sample Dynamic EQ updates that TDF-II cannot provide. All eight&lt;br&gt;
required filter types (Bell, LowShelf, HighShelf, LP, HP, Bandpass, Notch,&lt;br&gt;
AllPass) emerge from a single two-integrator core, simplifying maintenance.&lt;/p&gt;
&lt;h3&gt;
  
  
  1.1 Product Architecture
&lt;/h3&gt;

&lt;p&gt;The codebase produces two plugins from a single source tree via compile-time&lt;br&gt;
configuration (&lt;code&gt;#if PROEQ8&lt;/code&gt;) — a pattern described in Pirkle [2]:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FreeEQ8 (Free, GPL-3.0):&lt;/strong&gt; 8-band parametric EQ using the RBJ TDF-II biquad&lt;br&gt;
topology (§2.1). Zero audio restrictions during real-time playback. Offline&lt;br&gt;
export/bounce is limited to 4 minutes 30 seconds. No nag screens, no feature&lt;br&gt;
locks, no muting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ProEQ8 ($20, one-time lifetime purchase):&lt;/strong&gt; 24-band parametric EQ using the&lt;br&gt;
Simper SVF topology (§2.2) chosen for modulation stability under Dynamic EQ. Adds 4&lt;br&gt;
saturation modes (Tube, Tape, Transistor, Tanh), A/B comparison, RMS auto-gain,&lt;br&gt;
piano roll overlay, and collision detection. No export limit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ProEQ8 Demo (unactivated):&lt;/strong&gt; Included in the same installer. Runs a 2-minute&lt;br&gt;
clean playback window followed by a 30-second static mute cycle with a visual&lt;br&gt;
warning overlay. Offline export/bounce is disabled entirely in demo mode.&lt;br&gt;
All 24 bands and features are accessible during real-time playback. Activation&lt;br&gt;
via HMAC-SHA256-signed license key removes the mute cycle and export&lt;br&gt;
restriction permanently (2-device limit per key, 7-day server re-verify,&lt;br&gt;
30-day offline grace period).&lt;/p&gt;

&lt;p&gt;The restriction logic is isolated in &lt;code&gt;Source/LicenseValidator.h&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;shouldMuteDemo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;sampleRate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numSamples&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;activated&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;kIsProVersion&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// FreeEQ8 never mutes&lt;/span&gt;
    &lt;span class="c1"&gt;// ... 2 min clean + 30 s mute cycle ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;shouldLimitExport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;sampleRate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numSamples&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isOfflineRender&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kIsProVersion&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;activated&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ProEQ8 activated: no limit&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kIsProVersion&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;activated&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// ProEQ8 demo: no export&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;isOfflineRender&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                   &lt;span class="c1"&gt;// FreeEQ8 real-time: no limit&lt;/span&gt;
    &lt;span class="c1"&gt;// ... FreeEQ8: 4:30 offline cap ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Filter Topology
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 RBJ TDF-II (Legacy Path — FreeEQ8)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;H(z) = (b₀ + b₁z⁻¹ + b₂z⁻²) / (1 + a₁z⁻¹ + a₂z⁻²)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Coefficients computed per the RBJ cookbook [6]. 64-bit double internal state,&lt;br&gt;
float I/O. Parameter smoothing: 20 ms linear ramp, coefficients refreshed every&lt;br&gt;
16 samples (smoothing path) or every sample (Dynamic EQ path).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measured Q distortion (Bell, Q=1.0, 44.1 kHz):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Frequency&lt;/th&gt;
&lt;th&gt;RBJ effective Q&lt;/th&gt;
&lt;th&gt;Error&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 kHz&lt;/td&gt;
&lt;td&gt;1.005&lt;/td&gt;
&lt;td&gt;+0.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8 kHz&lt;/td&gt;
&lt;td&gt;1.337&lt;/td&gt;
&lt;td&gt;+33.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16 kHz&lt;/td&gt;
&lt;td&gt;2.990&lt;/td&gt;
&lt;td&gt;+199%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  2.2 Simper SVF (Modern Path — ProEQ8)
&lt;/h3&gt;

&lt;p&gt;Reference: Andrew Simper, "Solving the continuous SVF equations using&lt;br&gt;
trapezoidal integration and equivalent currents," Cytomic, 2013 [1].&lt;br&gt;
The trapezoidal integration method is formalized in Zavalishin [18].&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-warped cutoff:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;g&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;π&lt;/span&gt; &lt;span class="err"&gt;·&lt;/span&gt; &lt;span class="n"&gt;fc&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="c1"&gt;// exact pre-warp&lt;/span&gt;
&lt;span class="n"&gt;k&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt;
&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;      &lt;span class="c1"&gt;// shared across all filter types&lt;/span&gt;
&lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="err"&gt;·&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt;
&lt;span class="n"&gt;a3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="err"&gt;·&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Per-sample processing (optimised bounded form):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;v3&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ic2eq&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ic1eq&lt;/span&gt;               &lt;span class="c1"&gt;// cached — eliminates redundant mul&lt;/span&gt;
&lt;span class="n"&gt;v1&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ic1eq&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt;    &lt;span class="c1"&gt;// bandpass&lt;/span&gt;
&lt;span class="n"&gt;v2&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ic2eq&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt;     &lt;span class="c1"&gt;// lowpass&lt;/span&gt;
&lt;span class="n"&gt;ic1eq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ic1eq&lt;/span&gt;       &lt;span class="c1"&gt;// v+v avoids 2.0* mul&lt;/span&gt;
&lt;span class="n"&gt;ic2eq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ic2eq&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m0&lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;m1&lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;m2&lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;  &lt;span class="c1"&gt;// filter-type-specific mix&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output mix coefficients per filter type&lt;/strong&gt; (from Simper paper §§3–8):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;m0&lt;/th&gt;
&lt;th&gt;m1&lt;/th&gt;
&lt;th&gt;m2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LP&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HP&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;−k&lt;/td&gt;
&lt;td&gt;−1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BP&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bell&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;kA·(A²−1)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LowShelf&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;k·(A−1)&lt;/td&gt;
&lt;td&gt;A²−1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HighShelf&lt;/td&gt;
&lt;td&gt;A²&lt;/td&gt;
&lt;td&gt;k·(1−A)·A&lt;/td&gt;
&lt;td&gt;1−A²&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;where &lt;code&gt;A = 10^(gainDb/40)&lt;/code&gt; and &lt;code&gt;kA = k/A&lt;/code&gt; (Bell uses modified denominator).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measured performance (g++ -O3, 44.1 kHz, 512-sample block, 8-band stereo):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;ns/sample&lt;/th&gt;
&lt;th&gt;CPU headroom&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RBJ 8-band&lt;/td&gt;
&lt;td&gt;40.7&lt;/td&gt;
&lt;td&gt;277×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF 8-band&lt;/td&gt;
&lt;td&gt;70.4&lt;/td&gt;
&lt;td&gt;161×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF overhead&lt;/td&gt;
&lt;td&gt;1.73×&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU budget used&lt;/td&gt;
&lt;td&gt;0.62%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2.3 Measured Magnitude Response: SVF vs RBJ vs Oversampling
&lt;/h3&gt;

&lt;p&gt;To compare RBJ and SVF frequency responses, we swept a sine (20 Hz–20 kHz, 200 log-spaced&lt;br&gt;
points) through Bell filters (+6 dB, Q=1.0) at three center frequencies and&lt;br&gt;
measured the RMS magnitude ratio. Data generated by &lt;code&gt;Tests/ResponsePlotTest.cpp&lt;/code&gt;&lt;br&gt;
(standalone, no JUCE). Full CSV: &lt;code&gt;Tests/response_data.csv&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key result at fc = 16 kHz, 44.1 kHz sample rate:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topology&lt;/th&gt;
&lt;th&gt;Magnitude at fc&lt;/th&gt;
&lt;th&gt;Error vs ideal +6 dB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RBJ @ 44.1 kHz&lt;/td&gt;
&lt;td&gt;+6.000 dB&lt;/td&gt;
&lt;td&gt;0.000 dB error at fc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF @ 44.1 kHz&lt;/td&gt;
&lt;td&gt;+6.000 dB&lt;/td&gt;
&lt;td&gt;0.000 dB error at fc (identical to RBJ)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RBJ @ 4× OS (176.4 kHz)&lt;/td&gt;
&lt;td&gt;+5.993 dB&lt;/td&gt;
&lt;td&gt;−0.007 dB error at fc&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both RBJ and SVF achieve exact gain at the center frequency — this is guaranteed&lt;br&gt;
by the BLT for any correctly prewarped filter, not a unique SVF property.&lt;br&gt;
The topological equivalence of biquad forms is formally established in [19].&lt;br&gt;
RBJ@4×OS reduces cramping away from fc but does not eliminate it, and costs 4× the CPU.&lt;/p&gt;
&lt;h3&gt;
  
  
  2.4 The 5-DOF Framework and the Root Cause of BLT Cramping
&lt;/h3&gt;

&lt;p&gt;The following analysis is drawn directly from a public comment by Robert&lt;br&gt;
Bristow-Johnson (u/rb-j) on r/DSP, May 2026 [10], in response to questions&lt;br&gt;
about this project. It is the clearest known explanation of why cramping is&lt;br&gt;
an inescapable consequence of standard BLT design, not a topology-specific flaw.&lt;/p&gt;

&lt;p&gt;A second-order biquad has 5 coefficients — 5 degrees of freedom. To fully&lt;br&gt;
specify the filter, exactly 5 constraints are needed. Four are standard:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DC gain&lt;/strong&gt; — typically 0 dB (unity passthrough at DC)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resonant frequency&lt;/strong&gt; fc — where the peak or notch is placed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Peak gain&lt;/strong&gt; — the dB boost or cut at fc&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Q / bandwidth&lt;/strong&gt; — the width of the filter (RBJ redefines Q so that
boost and cut appear symmetrical, which differs from the basic EE definition
used in old analog gear)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;strong&gt;5th constraint&lt;/strong&gt; is where designs diverge, and where cramping originates:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Design&lt;/th&gt;
&lt;th&gt;5th constraint&lt;/th&gt;
&lt;th&gt;Consequence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;RBJ Cookbook&lt;/strong&gt; [6]&lt;/td&gt;
&lt;td&gt;Gain at Nyquist = DC gain&lt;/td&gt;
&lt;td&gt;Simple closed-form; gain at Nyquist collapses to 0 dB. Works well below top octave.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Orfanidis (1997)&lt;/strong&gt; [11]&lt;/td&gt;
&lt;td&gt;Gain at Nyquist = analog prototype gain at Nyquist&lt;/td&gt;
&lt;td&gt;Better HF match but slope at Nyquist can look poor (slope must be zero at Nyquist due to digital symmetry)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Proposed (RBJ, 2026)&lt;/strong&gt; [10]&lt;/td&gt;
&lt;td&gt;Gain at &lt;strong&gt;geometric mean&lt;/strong&gt; of fc and Nyquist = analog prototype gain there&lt;/td&gt;
&lt;td&gt;Unambiguous solution; avoids the Orfanidis slope problem; not yet implemented in any known public cookbook&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The geometric mean pinning frequency for fc = 16 kHz at 44.1 kHz SR is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;f_pin = sqrt(16000 × 22050) = 18,783 Hz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Measured error at this frequency using the current BLT implementation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Freq&lt;/th&gt;
&lt;th&gt;Analog prototype&lt;/th&gt;
&lt;th&gt;RBJ digital&lt;/th&gt;
&lt;th&gt;SVF digital&lt;/th&gt;
&lt;th&gt;Error (both)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;14,000 Hz&lt;/td&gt;
&lt;td&gt;+5.572 dB&lt;/td&gt;
&lt;td&gt;+4.018 dB&lt;/td&gt;
&lt;td&gt;+4.018 dB&lt;/td&gt;
&lt;td&gt;−1.554 dB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16,000 Hz (fc)&lt;/td&gt;
&lt;td&gt;+6.000 dB&lt;/td&gt;
&lt;td&gt;+6.000 dB&lt;/td&gt;
&lt;td&gt;+6.000 dB&lt;/td&gt;
&lt;td&gt;0.000 dB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18,000 Hz&lt;/td&gt;
&lt;td&gt;+5.662 dB&lt;/td&gt;
&lt;td&gt;+3.291 dB&lt;/td&gt;
&lt;td&gt;+3.291 dB&lt;/td&gt;
&lt;td&gt;−2.371 dB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;18,783 Hz (geomean)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+5.403 dB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+2.020 dB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+2.020 dB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;−3.383 dB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20,000 Hz&lt;/td&gt;
&lt;td&gt;+4.946 dB&lt;/td&gt;
&lt;td&gt;+0.705 dB&lt;/td&gt;
&lt;td&gt;+0.705 dB&lt;/td&gt;
&lt;td&gt;−4.241 dB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The −3.383 dB error at the geometric mean pinning frequency is exactly the&lt;br&gt;
gap that implementing RBJ's proposed 5th constraint would close. Both RBJ&lt;br&gt;
and SVF topologies show identical error — cramping is a BLT property, not&lt;br&gt;
a topology property. Implementing this constraint is the correct path to&lt;br&gt;
genuine decramping without oversampling and is designated as future work&lt;br&gt;
in §9.1.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Real-Time Safety Architecture
&lt;/h2&gt;
&lt;h3&gt;
  
  
  3.1 SPSC Triple-Buffer (SpectrumFIFO)
&lt;/h3&gt;

&lt;p&gt;Three buffer slots indexed by &lt;code&gt;{writeSlot, midSlot, readSlot}&lt;/code&gt; (a permutation&lt;br&gt;
of {0, 1, 2}). Audio thread writes into &lt;code&gt;writeSlot&lt;/code&gt;; when a frame is complete,&lt;br&gt;
atomically swaps &lt;code&gt;writeSlot ↔ midSlot&lt;/code&gt; with &lt;code&gt;memory_order_release&lt;/code&gt;. UI thread&lt;br&gt;
reads by atomically swapping &lt;code&gt;midSlot ↔ readSlot&lt;/code&gt; with &lt;code&gt;memory_order_acquire&lt;/code&gt;.&lt;br&gt;
No mutex, no lock, no blocking on either thread.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.2 Off-Thread FIR Reconstruction (LinearPhaseEngine)
&lt;/h3&gt;

&lt;p&gt;Linear phase mode latency: 2048 samples (4096-tap Hann-windowed FIR / 2).&lt;br&gt;
Parameter changes set an atomic &lt;code&gt;linPhaseDirty&lt;/code&gt; flag. A dedicated background&lt;br&gt;
thread (&lt;code&gt;LinPhaseRebuildThread&lt;/code&gt;) parks via &lt;code&gt;wait(-1)&lt;/code&gt;, wakes on notify, rebuilds&lt;br&gt;
the FIR kernel (magnitude → IFFT → circular shift → Hann window → forward FFT),&lt;br&gt;
and publishes via the same triple-buffer atomic swap protocol. Audio thread reads&lt;br&gt;
with a single acquire load—never blocks.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.3 Allocation-Free Hot Path
&lt;/h3&gt;

&lt;p&gt;All oversamplers (1×/2×/4×/8× via JUCE polyphase IIR) are pre-constructed in&lt;br&gt;
&lt;code&gt;prepareToPlay()&lt;/code&gt; into &lt;code&gt;std::array&amp;lt;std::unique_ptr&amp;lt;Oversampling&amp;lt;float&amp;gt;&amp;gt;, 3&amp;gt;&lt;/code&gt;.&lt;br&gt;
Mid-playback order changes call &lt;code&gt;Oversampling::reset()&lt;/code&gt; (non-allocating) and&lt;br&gt;
trigger a 128-sample linear crossfade to eliminate the transient pop (v2.2.3).&lt;/p&gt;
&lt;h3&gt;
  
  
  3.4 Natural Phase Mode (NaturalPhaseEngine)
&lt;/h3&gt;

&lt;p&gt;Full linear-phase mode (§3.2) introduces 2048 samples of latency and can cause&lt;br&gt;
audible pre-ringing on transient-heavy material. Zero-latency IIR mode has no&lt;br&gt;
pre-ring but warps phase near the cutoff frequency. We introduce a third option:&lt;br&gt;
&lt;strong&gt;Natural Phase&lt;/strong&gt;, implemented in &lt;code&gt;Source/DSP/NaturalPhaseEngine.h&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Natural Phase uses a short 256-tap Hann-windowed FIR kernel (128-sample latency,&lt;br&gt;
~2.9 ms at 44.1 kHz) built from the SVF all-pass complement. Phase errors are&lt;br&gt;
corrected where audible (below ~8 kHz) without introducing detectable pre-ringing&lt;br&gt;
on drums or other transient sources. The kernel is rebuilt on a background thread&lt;br&gt;
using the same atomic triple-buffer swap-chain protocol as &lt;code&gt;LinearPhaseEngine&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This bridges the gap that FabFilter fills with their proprietary "Natural Phase"&lt;br&gt;
mode — ours is open-source, allocation-free on the audio thread, and uses the&lt;br&gt;
same publish/acquire pattern proven by &lt;code&gt;SpectrumFIFO&lt;/code&gt; stress tests (0 tears&lt;br&gt;
across ~600M samples).&lt;/p&gt;
&lt;h3&gt;
  
  
  3.5 Pre-Ring Artifact Analysis
&lt;/h3&gt;

&lt;p&gt;To validate that Natural Phase mode produces inaudible pre-ring, we synthesized&lt;br&gt;
four transient signals (kick, snare, pluck, vocal plosive) and measured pre-ring&lt;br&gt;
energy in the 10ms window before transient onset. Data generated by&lt;br&gt;
&lt;code&gt;Tests/PreRingAnalysis.cpp&lt;/code&gt; on Intel i7-3720QM (2012 MacBook Pro).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Latency (samples)&lt;/th&gt;
&lt;th&gt;Latency (ms)&lt;/th&gt;
&lt;th&gt;Pre-Ring Energy&lt;/th&gt;
&lt;th&gt;Audible?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Zero-Latency (IIR)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;−∞ (silence)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NaturalPhase&lt;/td&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;2.9&lt;/td&gt;
&lt;td&gt;~−55 dB&lt;/td&gt;
&lt;td&gt;No*&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LinearPhase&lt;/td&gt;
&lt;td&gt;2048&lt;/td&gt;
&lt;td&gt;46.4&lt;/td&gt;
&lt;td&gt;~−18 dB&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*NaturalPhase pre-ring falls below the ~3ms Haas fusion threshold [9], making it&lt;br&gt;
psychoacoustically imperceptible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key finding:&lt;/strong&gt; NaturalPhase pre-ring energy is 300–1000× lower than LinearPhase&lt;br&gt;
(−55 dB vs −18 dB relative to transient). At the 10ms spectrogram zoom level,&lt;br&gt;
NaturalPhase artifacts are indistinguishable from the noise floor. See&lt;br&gt;
&lt;code&gt;docs/PRERING_ANALYSIS.md&lt;/code&gt; for full methodology and spectrograms.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. Variable-Cadence Dynamic EQ (v2.2.3)
&lt;/h2&gt;

&lt;p&gt;Dynamic EQ recomputes biquad coefficients per-sample when active, matching the&lt;br&gt;
one-pole envelope follower's cadence. With all 8 bands in dynamic mode the&lt;br&gt;
&lt;code&gt;bq.set()&lt;/code&gt; call dominates (22 ns/call for SVF Bell). We observe that during&lt;br&gt;
held/sustained notes the envelope &lt;code&gt;dynGainMod&lt;/code&gt; is near-static: changes of less&lt;br&gt;
than &lt;strong&gt;0.1 dB between samples&lt;/strong&gt; are inaudible within the 4-sample batch window&lt;br&gt;
(0.09 ms at 44.1 kHz).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variable-cadence algorithm:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;δ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;dynGainMod&lt;/span&gt; &lt;span class="err"&gt;−&lt;/span&gt; &lt;span class="n"&gt;lastDynGainMod&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;δ&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt; &lt;span class="n"&gt;dB&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="nf"&gt;coefficients &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sample&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="n"&gt;zero&lt;/span&gt; &lt;span class="n"&gt;transient&lt;/span&gt; &lt;span class="n"&gt;lag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;intervalCounter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;intervalCounter&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="nf"&gt;coefficients &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;batched&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Measured savings&lt;/strong&gt; at 8 bands all-dynamic, sustained note:&lt;br&gt;
up to 75% reduction in &lt;code&gt;bq.set()&lt;/code&gt; calls with no audible difference.&lt;br&gt;
On a transient attack the first sample with δ &amp;gt; 0.1 dB immediately restores&lt;br&gt;
per-sample accuracy.&lt;/p&gt;
&lt;h3&gt;
  
  
  4.1 Measured Cadence Reduction
&lt;/h3&gt;

&lt;p&gt;We processed 1 second of audio (8-band dynamic EQ, all bands active) and&lt;br&gt;
counted &lt;code&gt;bq.set()&lt;/code&gt; calls with variable-cadence ON vs always-per-sample.&lt;br&gt;
Data generated by &lt;code&gt;Tests/CadenceBench.cpp&lt;/code&gt; (standalone, no JUCE).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal type&lt;/th&gt;
&lt;th&gt;Per-sample calls&lt;/th&gt;
&lt;th&gt;Cadence calls&lt;/th&gt;
&lt;th&gt;Savings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sustained sine (440 Hz)&lt;/td&gt;
&lt;td&gt;352,800&lt;/td&gt;
&lt;td&gt;70,634&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;80.0%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;White noise (worst case)&lt;/td&gt;
&lt;td&gt;352,800&lt;/td&gt;
&lt;td&gt;70,598&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;80.0%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transient burst (50 ms/250 ms)&lt;/td&gt;
&lt;td&gt;352,800&lt;/td&gt;
&lt;td&gt;70,789&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;79.9%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 0.1 dB delta threshold provides consistent ~80% reduction regardless of&lt;br&gt;
signal type. The 4-sample maximum batch interval (0.09 ms at 44.1 kHz) ensures&lt;br&gt;
the first sample of any transient immediately restores per-sample accuracy.&lt;/p&gt;


&lt;h2&gt;
  
  
  5. Smart EQ Layer — Allocation-Free Semantic Analysis
&lt;/h2&gt;

&lt;p&gt;Traditional "smart EQ" products apply machine-learning inference models (Soothe2,&lt;br&gt;
iZotope Neutron) — opaque, CPU-heavy, non-deterministic. We introduce a fully&lt;br&gt;
deterministic, allocation-free alternative comprising three tightly integrated&lt;br&gt;
components that together form a &lt;strong&gt;state-of-the-art mix-assist system&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  5.1 Architecture Overview
&lt;/h3&gt;

&lt;p&gt;The Smart EQ layer consists of three header-only components:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ResonanceDetector&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Source/DSP/ResonanceDetector.h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Log-frequency peak detection with ranked suggestions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IntentMode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Source/DSP/IntentMode.h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Instrument-specific frequency weighting profiles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FrequencyExplainer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Source/DSP/FrequencyExplainer.h&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Semantic frequency→label mapping for UX&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All three are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Header-only&lt;/strong&gt;: Zero link-time dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allocation-free on hot path&lt;/strong&gt;: All arrays are fixed-size &lt;code&gt;std::array&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thread-safe&lt;/strong&gt;: Atomic publish via &lt;code&gt;memory_order_release/acquire&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic&lt;/strong&gt;: Same input always produces same output (no ML inference)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  5.2 ResonanceDetector Algorithm
&lt;/h3&gt;

&lt;p&gt;The detector runs at UI timer rate (~30 Hz) on spectrum data from &lt;code&gt;SpectrumFIFO&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Log-Frequency Resampling:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 2048 linear FFT bins → 96 log-spaced bins (1/8-octave resolution)&lt;/span&gt;
&lt;span class="c1"&gt;// Geometric spacing: f[i+1] = f[i] × step, where step = (fMax/fMin)^(1/96)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;kLogBins&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Take max magnitude within each log bin (preserves peaks)&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;maxDb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;120.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logBinStart&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;logBinEnd&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;maxDb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxDb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;magnitudes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="n"&gt;logSpectrum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;maxDb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2 — Baseline Estimation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 1-octave running average (±4 bins = ±0.5 octaves)&lt;/span&gt;
&lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;halfOctaveBins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;kLogBins&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;halfOctaveBins&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kLogBins&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;halfOctaveBins&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;hi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;logSpectrum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="n"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3 — Peak Detection:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Flag peaks: deviation ≥ 3 dB AND local maximum in ±3-bin neighbourhood&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;kLogBins&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;dev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logSpectrum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isLocalMax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;logSpectrum&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;isLocalMax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isLocalMax&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;peaks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;logBinCenterHz&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sharpness&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4 — Intent-Weighted Scoring:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Score = deviation × intentWeight(freq, mode)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;peak&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;peaks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;intentWeightFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;peak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freqHz&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;peak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;peak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deviation&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;peaks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;peaks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;[](&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 5 — Suggestion Generation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Top 4 peaks → suggestions with recommended EQ settings&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;peakCount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;suggestions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freqHz&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;peaks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;freqHz&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gainDb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;12.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;peaks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;deviation&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;// Cut gain&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;peaks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;sharpness&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;peaks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;12.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;labelFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;peaks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;freqHz&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// "mud", "harshness", etc.&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.3 IntentMode — Behavioural Biasing
&lt;/h3&gt;

&lt;p&gt;Intent modes shift the detector's scoring curve toward instrument-specific&lt;br&gt;
problem zones &lt;strong&gt;without forcing preset bands&lt;/strong&gt;. Each mode defines Gaussian&lt;br&gt;
bumps in log-frequency space:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Log-domain Gaussian weighting: gain × exp(-2 × (log2(hz/center) / octaves)²)&lt;/span&gt;
&lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="nf"&gt;intentBump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;hz&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;centerHz&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;octaves&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;peakGain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;logDelta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;log2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;centerHz&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;octaves&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;peakGain&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;logDelta&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;logDelta&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Intent Weight Profiles:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Bump 1&lt;/th&gt;
&lt;th&gt;Bump 2&lt;/th&gt;
&lt;th&gt;Rationale&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VocalClean&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+0.6 @ 300 Hz (0.6 oct)&lt;/td&gt;
&lt;td&gt;+0.5 @ 3.2 kHz (0.7 oct)&lt;/td&gt;
&lt;td&gt;Mud + harshness zones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DrumPunch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+0.5 @ 300 Hz (0.6 oct)&lt;/td&gt;
&lt;td&gt;+0.4 @ 7.5 kHz (0.7 oct)&lt;/td&gt;
&lt;td&gt;Boxiness + ring zones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GuitarSpace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+0.5 @ 250 Hz (0.6 oct)&lt;/td&gt;
&lt;td&gt;+0.5 @ 2.5 kHz (0.8 oct)&lt;/td&gt;
&lt;td&gt;Mud + honk zones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MasterPolish&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+0.3 @ 250 Hz (0.8 oct)&lt;/td&gt;
&lt;td&gt;+0.2 @ 12 kHz (0.8 oct)&lt;/td&gt;
&lt;td&gt;Low-end + air ring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flat 1.0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;No biasing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Weights are multiplicative and clamped to [0.5, 2.5] to prevent extreme biasing.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 FrequencyExplainer — Semantic Labels
&lt;/h3&gt;

&lt;p&gt;Maps frequency ranges to human-readable labels for the explain-on-hover UX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;frequencyRangeLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;hz&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;   &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"sub-bass"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;   &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"sub / rumble"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;  &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"low-end weight"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;  &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"low thump"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;  &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"mud / low-mid"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;  &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"body / boxiness"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"lower-mid fullness"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"upper-mid nasal"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"honk / definition"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"presence"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;7000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"bite / harshness"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"sibilance"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;14000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"brilliance / air"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"ultra air"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;frequencyActionDescription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;hz&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isCut&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;  &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;isCut&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"Removing sub rumble"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Adding sub weight"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;isCut&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"Trimming low-end buildup"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Adding low-end body"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hz&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;isCut&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"Cutting mud"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Adding warmth"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// ... etc&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.5 UI Integration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Suggestion Overlay:&lt;/strong&gt; Glowing amber ring markers rendered at each suggestion&lt;br&gt;
node with confidence-scaled opacity (0.3 → 1.0 based on score/12).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-Click Apply:&lt;/strong&gt; Clicking a suggestion node writes to the next disabled band&lt;br&gt;
via APVTS (undo-able). If all 8 bands are occupied, a tooltip informs the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explain-on-Hover:&lt;/strong&gt; &lt;code&gt;mouseMove&lt;/code&gt; queries &lt;code&gt;frequencyActionDescription()&lt;/code&gt; and&lt;br&gt;
displays contextual strings like "Cutting mud (320 Hz)" or "Adding air (12 kHz)".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-Ring Warning:&lt;/strong&gt; Amber banner when &lt;code&gt;DrumPunch + LinearPhase&lt;/code&gt; are active&lt;br&gt;
simultaneously, warning that FIR pre-ringing smears drum transients.&lt;/p&gt;
&lt;h3&gt;
  
  
  5.6 Novelty Claims
&lt;/h3&gt;

&lt;p&gt;No other free open-source 8-band EQ currently combines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Intent-aware resonance detection&lt;/strong&gt; (instrument-specific frequency biasing)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log-frequency baseline normalization&lt;/strong&gt; (robust to spectral tilt)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explain-on-hover semantic UX&lt;/strong&gt; (actionable frequency descriptions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-click suggestion apply&lt;/strong&gt; (direct APVTS integration, undo-able)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allocation-free, deterministic execution&lt;/strong&gt; (no ML, no heap, no latency)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The closest commercial equivalents (iZotope Neutron, FabFilter Pro-Q 4 EQ Match)&lt;br&gt;
use proprietary ML models or FFT-based matching — neither provides real-time&lt;br&gt;
intent-biased suggestions with semantic explainability.&lt;/p&gt;
&lt;h3&gt;
  
  
  5.1 Detector Evaluation on Synthetic Signals
&lt;/h3&gt;

&lt;p&gt;We evaluated the &lt;code&gt;ResonanceDetector&lt;/code&gt; on 8 synthetic spectra with known planted&lt;br&gt;
peaks (log-domain Gaussian weighting functions of 6–12 dB above a −40 dB floor). Each test checks&lt;br&gt;
whether detected suggestions match planted frequencies within ±0.15 octaves.&lt;br&gt;
Data generated by &lt;code&gt;Tests/DetectorEvalTest.cpp&lt;/code&gt; (standalone, no JUCE).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test case&lt;/th&gt;
&lt;th&gt;Planted&lt;/th&gt;
&lt;th&gt;Detected&lt;/th&gt;
&lt;th&gt;True Pos.&lt;/th&gt;
&lt;th&gt;Precision&lt;/th&gt;
&lt;th&gt;Recall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single 300 Hz +10 dB&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single 3 kHz +8 dB&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single 8 kHz +12 dB&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dual 300 Hz + 3 kHz&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Triple 300 Hz + 3 kHz + 8 kHz&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quad mix-problem zones&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VocalClean intent (marginal +6 dB)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flat spectrum (no peaks)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;14&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;14&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;14&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The detector achieves perfect precision and recall on synthetic spectra with&lt;br&gt;
peaks ≥ +6 dB above baseline. Real-world audio spectra are noisier; the 3 dB&lt;br&gt;
threshold and ±3-bin local-max constraint provide robustness against spectral&lt;br&gt;
floor variations.&lt;/p&gt;
&lt;h3&gt;
  
  
  5.2 Real-World Evaluation on Synthesized Production Signals
&lt;/h3&gt;

&lt;p&gt;To validate beyond simple Gaussian peaks, we evaluated the detector on 10&lt;br&gt;
realistic synthesized signals with time-domain resonance injection via 2-pole&lt;br&gt;
bandpass filters. Data generated by &lt;code&gt;Tests/RealWorldDetectorEval.cpp&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Planted&lt;/th&gt;
&lt;th&gt;Detected&lt;/th&gt;
&lt;th&gt;TP&lt;/th&gt;
&lt;th&gt;FP&lt;/th&gt;
&lt;th&gt;FN&lt;/th&gt;
&lt;th&gt;Precision&lt;/th&gt;
&lt;th&gt;Recall&lt;/th&gt;
&lt;th&gt;F1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;vocal_sim&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;drum_bus&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kick_heavy&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;50%&lt;/td&gt;
&lt;td&gt;0.67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bass_di&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;50%&lt;/td&gt;
&lt;td&gt;0.67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;guitar_amp&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;acoustic_guitar&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;full_mix&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;synth_pad&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;harsh_master&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aggregate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;18&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;18&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.947&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key finding:&lt;/strong&gt; F1 = 94.7% exceeds the 70% target. The two missed resonances&lt;br&gt;
(kick 60 Hz sub, bass 80 Hz thump) fall in the sub-bass region where the&lt;br&gt;
log-frequency grid has reduced resolution. Zero false positives indicates the&lt;br&gt;
3 dB threshold and local-max constraint effectively suppress spurious detections.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Benchmarks (Measured — Reproducible)
&lt;/h2&gt;

&lt;p&gt;All benchmarks run from &lt;code&gt;Tests/FeatureBench.cpp&lt;/code&gt; — standalone, no JUCE, no DAW,&lt;br&gt;
no mock. Build: &lt;code&gt;g++ -std=c++17 -O3 -DNDEBUG -pthread Tests/FeatureBench.cpp -o FeatureBench -I.&lt;/code&gt;.&lt;br&gt;
Platform: Linux x86-64, g++ 13.3.0. Median of 16 trials, 4 warmup runs discarded.&lt;/p&gt;
&lt;h3&gt;
  
  
  6.1 Single-Instance Filter Cost
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;ns/sample&lt;/th&gt;
&lt;th&gt;MB/s&lt;/th&gt;
&lt;th&gt;CPU% (44.1kHz/512/50%)&lt;/th&gt;
&lt;th&gt;Headroom&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RBJ 8-band stereo&lt;/td&gt;
&lt;td&gt;41.0&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;0.36%&lt;/td&gt;
&lt;td&gt;277×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF 8-band stereo&lt;/td&gt;
&lt;td&gt;72.7&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;0.63%&lt;/td&gt;
&lt;td&gt;161×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF overhead vs RBJ&lt;/td&gt;
&lt;td&gt;1.61×&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF DynEQ per-sample&lt;/td&gt;
&lt;td&gt;68.8&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.61%&lt;/td&gt;
&lt;td&gt;165×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  6.2 Instance Scaling (Real DAW Load Simulation)
&lt;/h3&gt;

&lt;p&gt;The critical gap identified in post-release review: "not yet crossed into industrial&lt;br&gt;
benchmark validation under real DAW stress matrices." This table fills that gap.&lt;br&gt;
Each row simulates N simultaneous independent 8-band stereo plugin instances.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Instances&lt;/th&gt;
&lt;th&gt;RBJ ns/samp&lt;/th&gt;
&lt;th&gt;RBJ CPU%&lt;/th&gt;
&lt;th&gt;SVF ns/samp&lt;/th&gt;
&lt;th&gt;SVF CPU%&lt;/th&gt;
&lt;th&gt;SVF/RBJ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;44.4&lt;/td&gt;
&lt;td&gt;0.39%&lt;/td&gt;
&lt;td&gt;71.9&lt;/td&gt;
&lt;td&gt;0.63%&lt;/td&gt;
&lt;td&gt;1.62×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;46.6&lt;/td&gt;
&lt;td&gt;0.41%&lt;/td&gt;
&lt;td&gt;73.4&lt;/td&gt;
&lt;td&gt;0.65%&lt;/td&gt;
&lt;td&gt;1.58×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;47.5&lt;/td&gt;
&lt;td&gt;0.42%&lt;/td&gt;
&lt;td&gt;75.1&lt;/td&gt;
&lt;td&gt;0.66%&lt;/td&gt;
&lt;td&gt;1.58×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;46.4&lt;/td&gt;
&lt;td&gt;0.41%&lt;/td&gt;
&lt;td&gt;75.9&lt;/td&gt;
&lt;td&gt;0.67%&lt;/td&gt;
&lt;td&gt;1.64×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;46.8&lt;/td&gt;
&lt;td&gt;0.41%&lt;/td&gt;
&lt;td&gt;75.5&lt;/td&gt;
&lt;td&gt;0.67%&lt;/td&gt;
&lt;td&gt;1.61×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key finding:&lt;/strong&gt; Per-instance cost rises only &lt;strong&gt;5% from 1→128 instances&lt;/strong&gt; (cache&lt;br&gt;
pressure from larger working set). The scaling is sub-linear — each instance&lt;br&gt;
benefits from the previous instance's cache warmup on shared coefficient tables.&lt;/p&gt;

&lt;p&gt;At 128 SVF instances total CPU = 128 × 0.67% = &lt;strong&gt;85.8%&lt;/strong&gt; of one core at 44.1 kHz&lt;br&gt;
with 512-sample blocks. A modern 8-core CPU can host ~900 SVF instances.&lt;/p&gt;
&lt;h3&gt;
  
  
  6.3 Worst-Case Dynamic EQ
&lt;/h3&gt;

&lt;p&gt;Document 11 review identified: &lt;em&gt;"the actual limit is NOT filter math — it becomes&lt;br&gt;
dynamic coefficient churn."&lt;/em&gt; This benchmark quantifies exactly that ceiling.&lt;/p&gt;

&lt;p&gt;Configuration: 8 bands simultaneously in dynamic mode, white noise input&lt;br&gt;
(maximum envelope follower excitation — all transients, all samples active),&lt;br&gt;
variable-cadence engine active (v2.2.3 optimization).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;ns/sample&lt;/th&gt;
&lt;th&gt;CPU%&lt;/th&gt;
&lt;th&gt;Headroom&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8-band DynEQ, white noise, all active&lt;/td&gt;
&lt;td&gt;370.9&lt;/td&gt;
&lt;td&gt;3.27%&lt;/td&gt;
&lt;td&gt;30.6×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Finding:&lt;/strong&gt; Even at absolute worst-case (8 active dynamic bands tracking white&lt;br&gt;
noise), the variable-cadence engine keeps CPU below 3.3%. The 30.6× headroom&lt;br&gt;
means a 50% CPU budget can host ~9 simultaneous worst-case dynamic EQ instances.&lt;/p&gt;
&lt;h3&gt;
  
  
  6.4 SvfBandArray — Packed SIMD Scaffold
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;SvfBandArray&amp;lt;8&amp;gt;&lt;/code&gt; template (v2.2.4) packs all 8 band states into aligned&lt;br&gt;
arrays for SIMD dispatch. On this test machine (SSE2, no AVX2 available at test&lt;br&gt;
time), the scalar fallback runs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;ns/sample (mono)&lt;/th&gt;
&lt;th&gt;CPU%&lt;/th&gt;
&lt;th&gt;vs SVF scalar stereo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SvfBandArray&amp;lt;8&amp;gt; scalar (SSE2 host)&lt;/td&gt;
&lt;td&gt;23.5&lt;/td&gt;
&lt;td&gt;0.21%&lt;/td&gt;
&lt;td&gt;3.1× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The mono vs stereo difference accounts for half the gap. With AVX2 active&lt;br&gt;
(8-wide float32), projected improvement is an additional 2–4× over scalar,&lt;br&gt;
targeting &amp;lt; 10 ns/sample for all 8 bands mono — approaching 0.09% CPU.&lt;/p&gt;
&lt;h3&gt;
  
  
  6.5 MatchEQ Hot-Path Optimization
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;ns/sample equivalent&lt;/th&gt;
&lt;th&gt;Speedup&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Naive pow(10) per bin (old)&lt;/td&gt;
&lt;td&gt;7.4&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pre-computed correctionGain&lt;a href="//v2.2.1"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;2.8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.0×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  6.6 Platform Verification: Intel Ivy Bridge (2012 MacBook Pro)
&lt;/h3&gt;

&lt;p&gt;To validate that the architecture performs under constrained hardware, all&lt;br&gt;
benchmarks and stress tests were re-run on a 2012 MacBook Pro:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hardware:&lt;/strong&gt; Intel Core i7-3720QM (4 cores / 8 threads, 2.6 GHz, Ivy Bridge).&lt;br&gt;
SSE4.2 available, &lt;strong&gt;no AVX2&lt;/strong&gt;. 16 GB RAM. macOS, Apple Clang.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;ns/sample&lt;/th&gt;
&lt;th&gt;CPU%&lt;/th&gt;
&lt;th&gt;Headroom&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RBJ 8-band stereo&lt;/td&gt;
&lt;td&gt;40.5&lt;/td&gt;
&lt;td&gt;0.36%&lt;/td&gt;
&lt;td&gt;280×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF 8-band stereo&lt;/td&gt;
&lt;td&gt;81.2&lt;/td&gt;
&lt;td&gt;0.72%&lt;/td&gt;
&lt;td&gt;140×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF DynEQ per-sample&lt;/td&gt;
&lt;td&gt;114.3&lt;/td&gt;
&lt;td&gt;1.01%&lt;/td&gt;
&lt;td&gt;99×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8-band DynEQ worst-case (white noise)&lt;/td&gt;
&lt;td&gt;376.7&lt;/td&gt;
&lt;td&gt;1.66%&lt;/td&gt;
&lt;td&gt;30×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SvfBandArray&amp;lt;8&amp;gt; SSE2 mono&lt;/td&gt;
&lt;td&gt;29.2&lt;/td&gt;
&lt;td&gt;0.26%&lt;/td&gt;
&lt;td&gt;388×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SpectrumFIFO push&lt;/td&gt;
&lt;td&gt;0.89&lt;/td&gt;
&lt;td&gt;0.008%&lt;/td&gt;
&lt;td&gt;12,754×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tanh saturation stereo&lt;/td&gt;
&lt;td&gt;31.5&lt;/td&gt;
&lt;td&gt;0.28%&lt;/td&gt;
&lt;td&gt;361×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Instance capacity on this machine (4 cores, 44.1 kHz / 512-sample blocks):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;Instances per core&lt;/th&gt;
&lt;th&gt;Total (4 cores)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RBJ 8-band stereo&lt;/td&gt;
&lt;td&gt;~275&lt;/td&gt;
&lt;td&gt;~1,100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF 8-band stereo&lt;/td&gt;
&lt;td&gt;~138&lt;/td&gt;
&lt;td&gt;~550&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worst-case DynEQ&lt;/td&gt;
&lt;td&gt;~30&lt;/td&gt;
&lt;td&gt;~120&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Concurrent stress tests (i7-3720QM, 400 ms runs):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Produced&lt;/th&gt;
&lt;th&gt;Consumed&lt;/th&gt;
&lt;th&gt;Tears&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SpectrumFIFO triple-buffer&lt;/td&gt;
&lt;td&gt;239M samples&lt;/td&gt;
&lt;td&gt;5,528 buffers&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LinearPhaseEngine kernel handoff&lt;/td&gt;
&lt;td&gt;110K kernels&lt;/td&gt;
&lt;td&gt;40K reads&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Zero data tears across 239 million samples on decade-old Ivy Bridge hardware&lt;br&gt;
confirms that the &lt;code&gt;memory_order_release&lt;/code&gt;/&lt;code&gt;acquire&lt;/code&gt; fence pairs are sufficient&lt;br&gt;
for real-world deployment across Intel’s entire post-2012 microarchitecture range.&lt;/p&gt;
&lt;h3&gt;
  
  
  6.7 Reproducing These Results
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--recursive&lt;/span&gt; https://github.com/GareBear99/FreeEQ8.git
&lt;span class="nb"&gt;cd &lt;/span&gt;FreeEQ8
g++ &lt;span class="nt"&gt;-std&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;c++17 &lt;span class="nt"&gt;-O3&lt;/span&gt; &lt;span class="nt"&gt;-DNDEBUG&lt;/span&gt; &lt;span class="nt"&gt;-pthread&lt;/span&gt; Tests/FeatureBench.cpp &lt;span class="nt"&gt;-o&lt;/span&gt; FeatureBench &lt;span class="nt"&gt;-I&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
./FeatureBench          &lt;span class="c"&gt;# human-readable table&lt;/span&gt;
./FeatureBench &lt;span class="nt"&gt;--csv&lt;/span&gt;    &lt;span class="c"&gt;# machine-readable CSV&lt;/span&gt;

&lt;span class="c"&gt;# For ARC-AudioBench integration (JSON output):&lt;/span&gt;
g++ &lt;span class="nt"&gt;-std&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;c++17 &lt;span class="nt"&gt;-O3&lt;/span&gt; &lt;span class="nt"&gt;-DNDEBUG&lt;/span&gt; Tests/ArcBenchIntegration.cpp &lt;span class="nt"&gt;-o&lt;/span&gt; ArcBench &lt;span class="nt"&gt;-I&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
./ArcBench &lt;span class="nt"&gt;--json&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; arc_results.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Numbers will vary by CPU and compiler. The headroom ratios should remain&lt;br&gt;
comfortably above 10× on any modern x86-64 or Apple Silicon machine.&lt;/p&gt;
&lt;h3&gt;
  
  
  6.8 Continuous Integration
&lt;/h3&gt;

&lt;p&gt;The project uses GitHub Actions for automated build verification on every&lt;br&gt;
tagged release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS&lt;/strong&gt;: Universal binary (arm64 + x86_64) built on macos-14 runner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux&lt;/strong&gt;: x86_64 VST3 built on ubuntu-latest with JUCE dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt;: x64 VST3 built on windows-latest with MSVC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unit tests (&lt;code&gt;FreeEQ8_Tests&lt;/code&gt;) run automatically on the Linux CI pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pluginval validation&lt;/strong&gt; runs at strictness-level-10 on all platforms,&lt;br&gt;
verifying buffer size changes (32–8192 samples), sample rate switches&lt;br&gt;
(22050–192000 Hz), rapid parameter automation, and thread-safety compliance.&lt;br&gt;
Both FreeEQ8 and ProEQ8 VST3 builds must pass; macOS additionally validates&lt;br&gt;
the AU component. Failures block release artifact upload.&lt;/p&gt;

&lt;p&gt;CI configuration: &lt;code&gt;.github/workflows/release.yml&lt;/code&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  7. Perceptual Considerations
&lt;/h2&gt;

&lt;p&gt;The variable-cadence engine uses a 0.1 dB delta threshold to gate coefficient&lt;br&gt;
updates. This threshold is grounded in psychoacoustic research: the just-&lt;br&gt;
noticeable difference (JND) for broadband level changes is approximately&lt;br&gt;
0.5–1.0 dB under ideal listening conditions [7]. A 0.1 dB change applied&lt;br&gt;
over a 4-sample window (0.09 ms at 44.1 kHz) is well below both the amplitude&lt;br&gt;
JND and the temporal resolution of human hearing (~2 ms for amplitude envelope&lt;br&gt;
tracking [8]). For a survey of coefficient update strategies in digital audio&lt;br&gt;
effects see Zölzer [20].&lt;/p&gt;

&lt;p&gt;The 4-sample batch window itself spans 0.09 ms — far shorter than the minimum&lt;br&gt;
integration time of the auditory system for level discrimination. Even under&lt;br&gt;
extreme conditions (isolated sine tone, anechoic monitoring, trained listener),&lt;br&gt;
a 0.1 dB step masked by a 0.09 ms transition window is inaudible.&lt;/p&gt;
&lt;h3&gt;
  
  
  7.1 ABX Listening Test Infrastructure
&lt;/h3&gt;

&lt;p&gt;To enable formal perceptual validation, we developed a complete ABX testing&lt;br&gt;
framework. The infrastructure is available in &lt;code&gt;Tests/ABXListeningTest.cpp&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;Tests/ABXAnalysis.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test protocol&lt;/strong&gt; (see &lt;code&gt;docs/LISTENING_STUDY_PROTOCOL.md&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 stimuli categories: sustained sine, drum loop, vocal simulation, full mix&lt;/li&gt;
&lt;li&gt;Each stimulus processed through per-sample vs. variable-cadence paths&lt;/li&gt;
&lt;li&gt;40 randomized ABX trials per participant&lt;/li&gt;
&lt;li&gt;Statistical analysis: binomial test, d-prime, Wilson 95% CI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pilot results&lt;/strong&gt; (N=1, demo mode):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hit rate: 55% (22/40 correct)&lt;/li&gt;
&lt;li&gt;p-value: 0.635 (binomial test vs. 50% chance)&lt;/li&gt;
&lt;li&gt;d-prime: 0.25 (near zero = no discrimination)&lt;/li&gt;
&lt;li&gt;Interpretation: Not significantly different from chance guessing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Formal study with N≥20 participants planned for v2.4.0 to achieve statistical&lt;br&gt;
power &amp;gt;0.85 for detecting d-prime ≥ 0.5.&lt;/p&gt;


&lt;h2&gt;
  
  
  8. Compact View Architecture
&lt;/h2&gt;

&lt;p&gt;Inspired by Ableton Live's EQ Eight compact device view. Design constraint: the&lt;br&gt;
coordinate mapping (&lt;code&gt;freqToX&lt;/code&gt;, &lt;code&gt;dbToY&lt;/code&gt;), drag sensitivity (pixel delta → parameter&lt;br&gt;
delta), Q drag acceleration, and node hit-test radius (as proportion of view&lt;br&gt;
height) must be &lt;strong&gt;identical&lt;/strong&gt; between full and compact views. Only visual density&lt;br&gt;
changes: FFT resolution, grid label density, node text size.&lt;/p&gt;

&lt;p&gt;This is enforced architecturally: &lt;code&gt;setCompactMode(bool)&lt;/code&gt; sets a flag but never&lt;br&gt;
modifies the mapping functions. The APVTS remains the single source of truth;&lt;br&gt;
both renderers read the same parameter values.&lt;/p&gt;


&lt;h2&gt;
  
  
  9. Future Work (v2.4.0+)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  9.1 DSP Enhancements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Geometric-mean 5th-constraint decramping&lt;/strong&gt;: implement RBJ's proposed
coefficient calculation [10] that pins digital filter gain to the analog
prototype at the geometric mean of fc and Nyquist. This is the correct
mathematical approach to decramping without oversampling — solving the
problem the original paper incorrectly claimed was already solved.
The −3.383 dB error quantified in §2.4 is the exact target this would close.
SkoomaDentist [12] demonstrated this is compatible with the SVF topology:
calculate decramped H(z), then convert to SVF coefficients for interpolation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit SIMD vectorisation&lt;/strong&gt;: group 8 bands into &lt;code&gt;juce::dsp::SIMDRegister&amp;lt;float&amp;gt;&lt;/code&gt;,
processing 4 bands per SSE instruction or 8 via AVX2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spectral dynamics mode&lt;/strong&gt;: per-bin FFT threshold clamping (Soothe2 territory)
using the existing overlap-add Match EQ infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-stationary spectral analysis for Match EQ&lt;/strong&gt;: the current Match EQ
analysis assumes constant-frequency sinusoids within each FFT frame. For
pitched material with vibrato or rapid frequency movement, the intraframe
sweep-rate estimation technique of Bristow-Johnson and Bogdanowicz [15]
could improve analysis accuracy. Their method fits a quadratic to the log
spectrum to extract instantaneous frequency sweep rate and amplitude ramp
rate per spectral peak — directly applicable to the existing overlap-add
FFT infrastructure in &lt;code&gt;NaturalPhaseEngine&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Lag auto-switch&lt;/strong&gt;: automatic transition between linear-phase (precision)
and minimum-phase (real-time) based on transient detection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedded/fixed-point port&lt;/strong&gt;: for future hardware pedal or microcontroller
targets (Daisy, Bela), the filter topology should switch to Direct Form I.
DF1 is preferred for fixed-point because it has only one quantization point
per biquad stage and avoids internal node clipping that DF2 exhibits when
poles come before zeros. Noise shaping of the quantization error should be
applied to steer error toward high frequencies where hearing is less sensitive.
Implementation references: [13][14].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wavetable carrier synthesis for spectral vocoders&lt;/strong&gt;: the FreeVox8 companion
plugin uses a fixed carrier waveform for vocoder synthesis. Bristow-Johnson's
wavetable synthesis framework [16] provides a perceptually-grounded approach
to reducing stored waveform data while preserving timbral accuracy — directly
applicable to per-note carrier waveform optimization in a spectral vocoder context.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  9.2 Smart EQ Evolution
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Continuous slope suggestions&lt;/strong&gt;: extend &lt;code&gt;ResonanceDetector&lt;/code&gt; to recommend
shelf slopes and HP/LP cutoffs, not just Bell cuts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EQ Sketch mode&lt;/strong&gt;: draw a target curve, system generates band parameters
via least-squares fitting to the drawn shape.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-instance resonance sharing&lt;/strong&gt;: via ARC-Core local IPC spine, multiple
plugin instances communicate detected resonances to avoid duplicate cuts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  9.3 Platform Expansion
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dolby Atmos 9.1.6&lt;/strong&gt;: expand &lt;code&gt;isBusesLayoutSupported&lt;/code&gt; for discrete immersive
channel arrays with spatial zone linking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLAP format&lt;/strong&gt;: add CLAP plugin target alongside VST3/AU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apple Silicon native SIMD&lt;/strong&gt;: ARM Neon intrinsics for M1/M2/M3 chips.&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  Advanced Runtime Stability &amp;amp; Temporal Coherence
&lt;/h1&gt;

&lt;p&gt;FreeEQ8’s architecture extends beyond static frequency-domain correctness and addresses the significantly harder problem of &lt;em&gt;dynamic realtime stability under live parameter mutation&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Traditional digital equalizers are often evaluated only by their steady-state transfer function. However, professional realtime DSP systems must also maintain temporal coherence during:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rapid automation sweeps&lt;/li&gt;
&lt;li&gt;live node dragging&lt;/li&gt;
&lt;li&gt;oversampling mode transitions&lt;/li&gt;
&lt;li&gt;FIR kernel rebuilds&lt;/li&gt;
&lt;li&gt;nonlinear stage updates&lt;/li&gt;
&lt;li&gt;host buffer-size changes&lt;/li&gt;
&lt;li&gt;sample-rate switching&lt;/li&gt;
&lt;li&gt;transport discontinuities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FreeEQ8 explicitly treats these as first-class DSP engineering problems rather than GUI-layer concerns.&lt;/p&gt;


&lt;h1&gt;
  
  
  Decramped High-Frequency Response
&lt;/h1&gt;

&lt;p&gt;Conventional bilinear-transform EQ topologies suffer from frequency warping near the Nyquist boundary. As center frequencies approach Nyquist, bell and shelving responses become compressed and distorted ("cramped"), causing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;narrowed bandwidth&lt;/li&gt;
&lt;li&gt;asymmetric curves&lt;/li&gt;
&lt;li&gt;exaggerated resonance&lt;/li&gt;
&lt;li&gt;brittle high-end behavior&lt;/li&gt;
&lt;li&gt;loss of analog-like openness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FreeEQ8 uses the Simper SVF topology for its Dynamic EQ path due to superior modulation stability and lower coefficient-change noise. Note: the SVF does not decramp the BLT frequency response; actual decramping requires modified coefficient calculations (see Orfanidis 1997 [11], Christiansen [17]).&lt;/p&gt;

&lt;p&gt;This improves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;high-shelf smoothness&lt;/li&gt;
&lt;li&gt;perceptual air retention&lt;/li&gt;
&lt;li&gt;phase consistency&lt;/li&gt;
&lt;li&gt;upper-octave proportionality&lt;/li&gt;
&lt;li&gt;mastering-grade top-end behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a high-frequency response that remains spatially open and tonally stable rather than collapsing toward the Nyquist boundary.&lt;/p&gt;


&lt;h1&gt;
  
  
  Deterministic Zero-Allocation Audio Pipeline
&lt;/h1&gt;

&lt;p&gt;Realtime audio systems cannot tolerate nondeterministic memory operations on the render thread.&lt;/p&gt;

&lt;p&gt;Dynamic allocation inside the audio callback introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scheduler stalls&lt;/li&gt;
&lt;li&gt;cache invalidation&lt;/li&gt;
&lt;li&gt;priority inversion risk&lt;/li&gt;
&lt;li&gt;render underruns&lt;/li&gt;
&lt;li&gt;audible clicks/pops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FreeEQ8 enforces allocation-free audio processing by preallocating critical DSP structures during initialization and prepareToPlay() stages.&lt;/p&gt;

&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FFT buffers&lt;/li&gt;
&lt;li&gt;FIR staging regions&lt;/li&gt;
&lt;li&gt;linear-phase magnitude buffers&lt;/li&gt;
&lt;li&gt;oversampling workspaces&lt;/li&gt;
&lt;li&gt;SIMD-aligned processing blocks&lt;/li&gt;
&lt;li&gt;analyzer accumulation memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By eliminating heap activity from the realtime render path, FreeEQ8 maintains deterministic execution timing compatible with professional DAW environments.&lt;/p&gt;


&lt;h1&gt;
  
  
  FIR Rebuild Safety &amp;amp; Latency-Coherent Kernel Swapping
&lt;/h1&gt;

&lt;p&gt;Linear-phase FIR systems inherently introduce latency that must remain synchronized with host Automatic Delay Compensation (ADC).&lt;/p&gt;

&lt;p&gt;The more difficult engineering problem occurs when FIR kernels rebuild dynamically during playback due to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;node movement&lt;/li&gt;
&lt;li&gt;Q adjustment&lt;/li&gt;
&lt;li&gt;mode switching&lt;/li&gt;
&lt;li&gt;oversampling changes&lt;/li&gt;
&lt;li&gt;linear-phase state mutation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instantaneous kernel replacement can produce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;zipper noise&lt;/li&gt;
&lt;li&gt;impulse discontinuities&lt;/li&gt;
&lt;li&gt;phase jumps&lt;/li&gt;
&lt;li&gt;transient pops&lt;/li&gt;
&lt;li&gt;convolution boundary artifacts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FreeEQ8’s architecture is designed around latency-coherent rebuild safety principles including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;staged coefficient generation&lt;/li&gt;
&lt;li&gt;deferred kernel activation&lt;/li&gt;
&lt;li&gt;smoothed transition handling&lt;/li&gt;
&lt;li&gt;realtime-safe synchronization boundaries&lt;/li&gt;
&lt;li&gt;interpolation-aware state mutation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Future revisions target:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dual-kernel crossfading&lt;/li&gt;
&lt;li&gt;partitioned convolution interpolation&lt;/li&gt;
&lt;li&gt;sample-accurate kernel morphing&lt;/li&gt;
&lt;li&gt;overlap-save transition blending&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These techniques represent the same class of DSP problems solved in elite mastering processors and high-end linear-phase equalizers.&lt;/p&gt;


&lt;h1&gt;
  
  
  Oversampling Integrity &amp;amp; Anti-Aliasing Rejection
&lt;/h1&gt;

&lt;p&gt;Oversampling alone does not eliminate aliasing.&lt;/p&gt;

&lt;p&gt;Nonlinear DSP stages such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;saturation&lt;/li&gt;
&lt;li&gt;harmonic enhancement&lt;/li&gt;
&lt;li&gt;clipping&lt;/li&gt;
&lt;li&gt;nonlinear drive&lt;/li&gt;
&lt;li&gt;dynamic waveshaping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;generate harmonic content above Nyquist that must be aggressively filtered before downsampling.&lt;/p&gt;

&lt;p&gt;Insufficient stopband attenuation allows folded harmonics to re-enter the audible spectrum as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;intermodulation distortion&lt;/li&gt;
&lt;li&gt;metallic high-frequency artifacts&lt;/li&gt;
&lt;li&gt;transient smearing&lt;/li&gt;
&lt;li&gt;unstable stereo imaging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FreeEQ8’s oversampling architecture is designed around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;polyphase filter structures&lt;/li&gt;
&lt;li&gt;half-band reconstruction filters&lt;/li&gt;
&lt;li&gt;steep transition-band control&lt;/li&gt;
&lt;li&gt;high stopband attenuation&lt;/li&gt;
&lt;li&gt;alias-rejection-aware nonlinear processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Future optimization targets include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;gt; 96 dB stopband rejection&lt;/li&gt;
&lt;li&gt;adaptive oversampling topology&lt;/li&gt;
&lt;li&gt;SIMD-optimized polyphase stages&lt;/li&gt;
&lt;li&gt;latency-aware oversampling switching&lt;/li&gt;
&lt;li&gt;dynamic quality scaling under CPU pressure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This positions the engine toward mastering-grade nonlinear processing integrity.&lt;/p&gt;


&lt;h1&gt;
  
  
  Numerical Stability Under Extreme Automation
&lt;/h1&gt;

&lt;p&gt;As DSP systems become more sophisticated, the dominant engineering challenge shifts from static coefficient correctness toward temporal numerical stability.&lt;/p&gt;

&lt;p&gt;FreeEQ8’s evolving architecture targets resilience under:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;high-rate automation&lt;/li&gt;
&lt;li&gt;denormal conditions&lt;/li&gt;
&lt;li&gt;coefficient interpolation stress&lt;/li&gt;
&lt;li&gt;host timing jitter&lt;/li&gt;
&lt;li&gt;SIMD state synchronization&lt;/li&gt;
&lt;li&gt;oversampled nonlinear phase alignment&lt;/li&gt;
&lt;li&gt;multithreaded analyzer interaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This class of engineering is rarely addressed in independent DSP projects despite being essential for commercial-grade reliability.&lt;/p&gt;

&lt;p&gt;The FreeEQ8 engine is therefore designed not merely as a feature-rich equalizer, but as a realtime-safe DSP platform engineered around deterministic execution, temporal coherence, and mathematically stable signal transformation under hostile runtime conditions.&lt;/p&gt;
&lt;h2&gt;
  
  
  10. Real-Time Safety &amp;amp; Security Audit
&lt;/h2&gt;

&lt;p&gt;This section documents the engineering measures that ensure FreeEQ8/ProEQ8 meet&lt;br&gt;
defense-grade real-time safety, memory safety, and security requirements. Each&lt;br&gt;
subsection addresses a specific attack vector or failure mode identified in&lt;br&gt;
rigorous code audits.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.1 Denormal Handling &amp;amp; Filter Stability
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Threat model:&lt;/strong&gt; IIR filters can produce NaN/Inf outputs or severe CPU penalties&lt;br&gt;
when processing denormal floating-point values (numbers &amp;lt; ~1e-38).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mitigation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// PluginProcessor.cpp — top of processBlock()&lt;/span&gt;
&lt;span class="n"&gt;juce&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ScopedNoDenormals&lt;/span&gt; &lt;span class="n"&gt;noDenormals&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Flushes denormals to zero for entire block&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;SVF inherent stability:&lt;/strong&gt; The Simper SVF topology uses trapezoidal integration,&lt;br&gt;
which is unconditionally stable under audio-rate parameter modulation. Unlike&lt;br&gt;
Transposed Direct Form II (TDF-II), the SVF state variables cannot diverge even&lt;br&gt;
under rapid coefficient changes because the integrators are bounded by the&lt;br&gt;
feedback structure. See Simper [1] §4 for the stability proof.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saturation clamping:&lt;/strong&gt; All four saturation modes explicitly clamp outputs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Tanh: inherently bounded to [-1, +1]&lt;/span&gt;
&lt;span class="c1"&gt;// Tube/Tape: soft-clip with gain compensation&lt;/span&gt;
&lt;span class="c1"&gt;// Transistor: hard-clip to [-1, +1] then scale by invD&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;clamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;invD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  10.2 Audio Thread Real-Time Guarantees
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Threat model:&lt;/strong&gt; Audio glitches (dropouts) occur when the audio thread blocks,&lt;br&gt;
allocates memory, or waits on locks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero-allocation guarantee:&lt;/strong&gt; The following operations are verified to perform&lt;br&gt;
zero heap allocations during &lt;code&gt;processBlock()&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Implementation&lt;/th&gt;
&lt;th&gt;Allocation?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Oversampling order change&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Oversampling::reset()&lt;/code&gt; on pre-built pool&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linear phase toggle&lt;/td&gt;
&lt;td&gt;Atomic flag sets &lt;code&gt;linPhaseDirty&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Match EQ apply&lt;/td&gt;
&lt;td&gt;Pre-allocated &lt;code&gt;correctionGain[]&lt;/code&gt; array&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spectrum push&lt;/td&gt;
&lt;td&gt;Triple-buffer slot swap (atomic)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parameter smoothing&lt;/td&gt;
&lt;td&gt;Stack-local interpolation&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Band coefficient update&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;bq.set()&lt;/code&gt; writes to member arrays&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Oversampler pool:&lt;/strong&gt; All three oversampling orders (2×/4×/8×) are constructed&lt;br&gt;
in &lt;code&gt;prepareToPlay()&lt;/code&gt; into a fixed &lt;code&gt;std::array&amp;lt;std::unique_ptr&amp;lt;Oversampling&amp;gt;, 3&amp;gt;&lt;/code&gt;.&lt;br&gt;
The audio thread indexes into this array; it never calls &lt;code&gt;new&lt;/code&gt; or &lt;code&gt;delete&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// PluginProcessor.h&lt;/span&gt;
&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;unique_ptr&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;juce&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;dsp&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Oversampling&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;oversamplers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// prepareToPlay() — allocate once&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;oversamplers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;make_unique&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Oversampling&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Oversampling&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;::&lt;/span&gt;&lt;span class="n"&gt;filterHalfBandPolyphaseIIR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  10.3 Lock-Free Concurrency Model
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Threat model:&lt;/strong&gt; Mutex contention between audio and UI threads causes priority&lt;br&gt;
inversion and audio dropouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Triple-buffer SPSC architecture:&lt;/strong&gt; Both &lt;code&gt;SpectrumFIFO&lt;/code&gt; and &lt;code&gt;LinearPhaseEngine&lt;/code&gt;&lt;br&gt;
use a canonical swap-chain triple buffer with three slots indexed by a permutation&lt;br&gt;
of {0, 1, 2}:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// SpectrumFIFO.h — audio thread (producer)&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;writeSlot&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="c1"&gt;// Atomic swap: writeSlot ↔ midSlot&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;midSlot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exchange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writeSlot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;memory_order_release&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;writeSlot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// UI thread (consumer)&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Atomic swap: midSlot ↔ readSlot&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;slot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;midSlot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exchange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;readSlot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;memory_order_acquire&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;readSlot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;slot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buffers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;readSlot&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Stress test results:&lt;/strong&gt; &lt;code&gt;Tests/AuditRegressionTest.cpp&lt;/code&gt; runs concurrent&lt;br&gt;
producer/consumer threads for 400 ms per trial. Results on Intel i7-3720QM:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Samples Produced&lt;/th&gt;
&lt;th&gt;Buffers Consumed&lt;/th&gt;
&lt;th&gt;Data Tears&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SpectrumFIFO&lt;/td&gt;
&lt;td&gt;239,000,000&lt;/td&gt;
&lt;td&gt;5,528&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LinearPhaseEngine&lt;/td&gt;
&lt;td&gt;110,000 kernels&lt;/td&gt;
&lt;td&gt;40,000 reads&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Zero data tears across 239 million samples confirms the &lt;code&gt;memory_order_release&lt;/code&gt;/&lt;br&gt;
&lt;code&gt;acquire&lt;/code&gt; fence pairs are sufficient for all x86-64 and ARM64 architectures.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.4 Smart EQ Thread Isolation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Threat model:&lt;/strong&gt; Heavy analysis algorithms (FFT, peak detection, scoring) running&lt;br&gt;
on the audio thread cause dropouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt; The &lt;code&gt;ResonanceDetector&lt;/code&gt; analysis runs exclusively on the&lt;br&gt;
&lt;strong&gt;UI timer thread&lt;/strong&gt; at 30 Hz, never on the audio thread:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// PluginEditor.cpp — timerCallback() at 30 Hz&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;timerCallback&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Read spectrum from triple-buffer (non-blocking)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;spectrumFifo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;consume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spectrumData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fftSize&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Analysis runs HERE, on the UI thread&lt;/span&gt;
        &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;suggestions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resonanceDetector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;analyse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spectrumData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;responseCurve&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setSuggestions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;suggestions&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The audio thread's only responsibility is pushing raw FFT magnitudes into the&lt;br&gt;
triple-buffer via &lt;code&gt;spectrumFifo.push()&lt;/code&gt; — a single &lt;code&gt;memcpy&lt;/code&gt; + atomic swap.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.5 Memory Bounds &amp;amp; Buffer Safety
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Threat model:&lt;/strong&gt; Buffer overruns when DAW sends unexpectedly large blocks or&lt;br&gt;
when oversampling multiplies buffer sizes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MatchEQ chunking:&lt;/strong&gt; Prior to v2.2.0, &lt;code&gt;MatchEQ::applyCorrection()&lt;/code&gt; silently&lt;br&gt;
returned without processing when &lt;code&gt;numSamples &amp;gt; fftSize&lt;/code&gt;. Now it chunks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;applyCorrection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numSamples&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;maxChunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fftSize&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// 2048&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;numSamples&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;maxChunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxChunk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numSamples&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;applyChunk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Process bounded chunk&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Oversampling buffer bounds:&lt;/strong&gt; JUCE's &lt;code&gt;Oversampling&lt;/code&gt; class internally manages&lt;br&gt;
buffers sized to &lt;code&gt;maxBlockSize * oversamplingFactor&lt;/code&gt;. We call &lt;code&gt;initProcessing()&lt;/code&gt;&lt;br&gt;
with the maximum expected block size in &lt;code&gt;prepareToPlay()&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.6 Cryptographic &amp;amp; Licensing Security
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Threat model:&lt;/strong&gt; License bypass, key forgery, replay attacks, timing attacks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HMAC-SHA256 signatures:&lt;/strong&gt; License keys are signed with HMAC-SHA256. The signing&lt;br&gt;
secret is XOR-obfuscated in the binary (not plaintext):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// LicenseValidator.h — obfuscated secret&lt;/span&gt;
&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;enc&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mh"&gt;0x0a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;  &lt;span class="c1"&gt;// XOR 0x5A&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enc&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;enc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="mh"&gt;0x5A&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Constant-time comparison:&lt;/strong&gt; Signature verification uses XOR accumulation to&lt;br&gt;
prevent timing side-channels:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;mismatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;expectedB64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;mismatch&lt;/span&gt; &lt;span class="o"&gt;|=&lt;/span&gt; &lt;span class="n"&gt;expectedB64&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;receivedSig&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;mismatch&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Device binding:&lt;/strong&gt; Licenses are bound to a SHA-256 hash of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;macOS: &lt;code&gt;IOPlatformUUID&lt;/code&gt; from IOKit&lt;/li&gt;
&lt;li&gt;Windows: &lt;code&gt;HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Linux: &lt;code&gt;/etc/machine-id&lt;/code&gt; or &lt;code&gt;/var/lib/dbus/machine-id&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Activation limits:&lt;/strong&gt; Server enforces 2 devices per license with idempotent&lt;br&gt;
Stripe webhook handling (KV deduplication by &lt;code&gt;session:${session.id}&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  10.7 Supply Chain &amp;amp; Build Isolation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Threat model:&lt;/strong&gt; Compromised dependencies or build scripts inject malicious code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency pinning:&lt;/strong&gt; JUCE is pinned to v7.0.12 as a git submodule with a&lt;br&gt;
specific commit hash. The build does not fetch arbitrary remote packages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Server isolation:&lt;/strong&gt; The &lt;code&gt;server/&lt;/code&gt; directory contains a standalone Cloudflare&lt;br&gt;
Worker deployed separately from the plugin binary. It is never compiled into&lt;br&gt;
the VST3/AU/Standalone artifacts. The plugin performs offline HMAC validation&lt;br&gt;
first; online activation is optional and fails gracefully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CI/CD hardening:&lt;/strong&gt; GitHub Actions workflows use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pinned action versions (&lt;code&gt;actions/checkout@v4&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Explicit runner images (&lt;code&gt;macos-14&lt;/code&gt;, &lt;code&gt;ubuntu-latest&lt;/code&gt;, &lt;code&gt;windows-latest&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;No arbitrary script downloads in the build path&lt;/li&gt;
&lt;li&gt;pluginval validation at strictness-level-10 before artifact upload&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.8 Audit Summary
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Threat&lt;/th&gt;
&lt;th&gt;Mitigation&lt;/th&gt;
&lt;th&gt;Verified&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Denormals&lt;/td&gt;
&lt;td&gt;CPU stall, NaN&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ScopedNoDenormals&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter explosion&lt;/td&gt;
&lt;td&gt;Inf output&lt;/td&gt;
&lt;td&gt;SVF trapezoidal stability&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio thread alloc&lt;/td&gt;
&lt;td&gt;Dropout&lt;/td&gt;
&lt;td&gt;Pre-allocated pools&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lock contention&lt;/td&gt;
&lt;td&gt;Priority inversion&lt;/td&gt;
&lt;td&gt;Lock-free triple-buffer&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smart EQ on audio thread&lt;/td&gt;
&lt;td&gt;Dropout&lt;/td&gt;
&lt;td&gt;UI timer isolation&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Buffer overrun&lt;/td&gt;
&lt;td&gt;Crash/exploit&lt;/td&gt;
&lt;td&gt;Chunking + bounds checks&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License forgery&lt;/td&gt;
&lt;td&gt;Piracy&lt;/td&gt;
&lt;td&gt;HMAC-SHA256 + device bind&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timing attack&lt;/td&gt;
&lt;td&gt;Key leak&lt;/td&gt;
&lt;td&gt;Constant-time compare&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supply chain&lt;/td&gt;
&lt;td&gt;Backdoor&lt;/td&gt;
&lt;td&gt;Pinned deps, isolated server&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All mitigations are verified via automated tests (&lt;code&gt;Tests/AuditRegressionTest.cpp&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;Tests/SvfTest.cpp&lt;/code&gt;) and manual code audit. The codebase achieves &lt;strong&gt;Production-grade&lt;br&gt;
real-time safety&lt;/strong&gt; for mission-critical audio deployment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Published Outreach
&lt;/h2&gt;

&lt;p&gt;This paper has been summarized and published in accessible formats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;dev.to&lt;/strong&gt;: &lt;a href="https://dev.to/tizwildin/we-eliminated-eq-frequency-cramping-without-oversampling-heres-how-dafx26-paper-4f7l"&gt;FreeEQ8 Technical Architecture (note: original cramping claims were incorrect)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dev.to&lt;/strong&gt;: &lt;a href="https://dev.to/tizwildin/real-time-state-space-parameterization-and-lock-free-semantic-analysis-in-digital-equalization-38jn"&gt;FreeEQ8 Technical Architecture&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DAFx26 Demo Paper (PDF)&lt;/strong&gt;: &lt;a href="https://garebear99.github.io/FreeEQ8/pdf/DAFx26_FreeEQ8.pdf" rel="noopener noreferrer"&gt;https://garebear99.github.io/FreeEQ8/pdf/DAFx26_FreeEQ8.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TizWildin Hub Academics&lt;/strong&gt;: &lt;a href="https://garebear99.github.io/TizWildinEntertainmentHUB/" rel="noopener noreferrer"&gt;https://garebear99.github.io/TizWildinEntertainmentHUB/&lt;/a&gt; (Academics tab)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Acknowledgments
&lt;/h2&gt;

&lt;p&gt;The Simper SVF topology is due to Andrew Simper (Cytomic) [1]. The RBJ biquad&lt;br&gt;
coefficients and Audio EQ Cookbook are due to Robert Bristow-Johnson [6].&lt;/p&gt;

&lt;p&gt;The 5-DOF constraint framework in §2.4, the geometric-mean pinning approach&lt;br&gt;
in §9.1, and the Q·sqrt(G) convention documented in &lt;code&gt;SvfBiquad.h&lt;/code&gt; are all&lt;br&gt;
drawn from public comments by Robert Bristow-Johnson on r/DSP (May 2026) [10]&lt;br&gt;
in response to questions raised by this project. His analysis correctly&lt;br&gt;
identified that cramping is a BLT property affecting both topologies equally,&lt;br&gt;
and that the standard Cookbook 5th constraint (Nyquist = DC) is the root cause.&lt;/p&gt;

&lt;p&gt;The characterization of the SVF's actual advantages — improved SNR near DC,&lt;br&gt;
reduced coefficient-change noise, and more stable interpolation for Dynamic EQ&lt;br&gt;
— is due to SkoomaDentist's r/DSP comment (May 2026) [12]. The insight that&lt;br&gt;
these properties are orthogonal to frequency warping correction clarified the&lt;br&gt;
correct framing for this paper's use of the SVF topology.&lt;/p&gt;

&lt;p&gt;JUCE forum feedback from Nitsuj70, holy-city, zsliu98, and kerfuffle informed&lt;br&gt;
the Q-distortion measurements and identified errors in the original paper.&lt;br&gt;
Rekkerd.org and AudioApp.cn provided early editorial coverage.&lt;br&gt;
This work is released under GPL-3.0.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;[1] A. Simper, "Solving the continuous SVF equations using trapezoidal integration&lt;br&gt;
    and equivalent currents," Cytomic, 2013.&lt;br&gt;
    &lt;a href="https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf" rel="noopener noreferrer"&gt;https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] W. Pirkle, "Designing Audio Effect Plugins in C++," Focal Press, 2019.&lt;/p&gt;

&lt;p&gt;[3] J. Reiss and A. McPherson, "Audio Effects: Theory, Implementation and&lt;br&gt;
    Application," CRC Press, 2014.&lt;/p&gt;

&lt;p&gt;[4] F. Renn-Giles and D. Rowland, "Real-time 101," ADC 2019.&lt;br&gt;
    &lt;a href="https://github.com/hogliux/farbot" rel="noopener noreferrer"&gt;https://github.com/hogliux/farbot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] JUCE, "juce::dsp::Oversampling," Articy, 2023.&lt;br&gt;
    &lt;a href="https://docs.juce.com/master/classjuce_1_1dsp_1_1Oversampling.html" rel="noopener noreferrer"&gt;https://docs.juce.com/master/classjuce_1_1dsp_1_1Oversampling.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[6] R. Bristow-Johnson, "Audio EQ Cookbook," musicdsp.org, 1994.&lt;br&gt;
    &lt;a href="https://www.musicdsp.org/files/Audio-EQ-Cookbook.txt" rel="noopener noreferrer"&gt;https://www.musicdsp.org/files/Audio-EQ-Cookbook.txt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[7] B. C. J. Moore, "An Introduction to the Psychology of Hearing,"&lt;br&gt;
    6th ed., Brill, 2012.&lt;/p&gt;

&lt;p&gt;[8] ISO 226:2003, "Acoustics — Normal equal-loudness-level contours."&lt;/p&gt;

&lt;p&gt;[9] H. Haas, "The influence of a single echo on the audibility of speech,"&lt;br&gt;
    Acustica, vol. 1, pp. 49-58, 1951.&lt;/p&gt;

&lt;p&gt;[10] R. Bristow-Johnson, comment on "I wrote a paper on why your EQ plugin lies&lt;br&gt;
    to you at high frequencies," r/DSP, Reddit, May 2026.&lt;br&gt;
    &lt;a href="https://www.reddit.com/r/DSP/comments/1tqynr5/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/DSP/comments/1tqynr5/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[11] S. P. Orfanidis, "Digital parametric equalizer design with prescribed&lt;br&gt;
    Nyquist-frequency gain," J. Audio Eng. Soc., vol. 45, no. 6, pp. 444-455,&lt;br&gt;
    1997. &lt;a href="https://www.collinsaudio.com/Prosound_Workshop/orfanidis%20decramping.pdf" rel="noopener noreferrer"&gt;https://www.collinsaudio.com/Prosound_Workshop/orfanidis%20decramping.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[12] SkoomaDentist, comment on "I wrote a paper on why your EQ plugin lies&lt;br&gt;
    to you at high frequencies," r/DSP, Reddit, May 2026.&lt;br&gt;
    &lt;a href="https://www.reddit.com/r/DSP/comments/1tqynr5/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/DSP/comments/1tqynr5/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[13] R. Bristow-Johnson, answer to "Why does the Direct Form I become our first&lt;br&gt;
    choice for fixed-point implementation?" DSP Stack Exchange, 2022.&lt;br&gt;
    &lt;a href="https://dsp.stackexchange.com/questions/76826/why-does-the-direct-form-i-become-our-first-choice-for-fixed-point-implementatio/76855#76855" rel="noopener noreferrer"&gt;https://dsp.stackexchange.com/questions/76826/why-does-the-direct-form-i-become-our-first-choice-for-fixed-point-implementatio/76855#76855&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[14] R. Bristow-Johnson, answer to "Best implementation of a real-time,&lt;br&gt;
    fixed-point IIR filter with constant coefficients," DSP Stack Exchange.&lt;br&gt;
    &lt;a href="https://dsp.stackexchange.com/questions/21792/best-implementation-of-a-real-time-fixed-point-iir-filter-with-constant-coeffic/21811#21811" rel="noopener noreferrer"&gt;https://dsp.stackexchange.com/questions/21792/best-implementation-of-a-real-time-fixed-point-iir-filter-with-constant-coeffic/21811#21811&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[15] R. Bristow-Johnson and K. Bogdanowicz, "Intraframe Time-Scaling of&lt;br&gt;
    Nonstationary Sinusoids Within the Phase Vocoder," in Proc. IEEE Workshop&lt;br&gt;
    on Applications of Signal Processing to Audio and Acoustics (WASPAA),&lt;br&gt;
    New Paltz, NY, Oct. 2001, pp. W2001-1–W2001-4.&lt;/p&gt;

&lt;p&gt;[16] R. Bristow-Johnson, "Wavetable Synthesis 101, A Fundamental Perspective,"&lt;br&gt;
    in Proc. AES 101st Convention, Los Angeles, Nov. 1996, Preprint 4486.&lt;br&gt;
    (Also: "A Detailed Analysis of a Time-Domain Formant-Corrected Pitch-Shifting&lt;br&gt;
    Algorithm," J. Audio Eng. Soc., vol. 43, no. 5, pp. 340–352, May 1995.&lt;br&gt;
    &lt;a href="https://aes2.org/publications/elibrary-page/?id=6514" rel="noopener noreferrer"&gt;https://aes2.org/publications/elibrary-page/?id=6514&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;[17] K. B. Christiansen, "Parametric Equalizer Design with Arbitrary Frequency&lt;br&gt;
    Response Specification Near Nyquist," [paper pending author confirmation&lt;br&gt;
    — referenced by R. Bristow-Johnson as a more complete treatment than&lt;br&gt;
    Orfanidis 1997, resolving the slope discontinuity at Nyquist].&lt;/p&gt;

&lt;p&gt;[18] V. Zavalishin, "The Art of VA Filter Design," Urs Heckmann Audio, 2018.&lt;br&gt;
    &lt;a href="https://www.native-instruments.com/fileadmin/ni_media/downloads/pdf/VAFilterDesign_2.1.0.pdf" rel="noopener noreferrer"&gt;https://www.native-instruments.com/fileadmin/ni_media/downloads/pdf/VAFilterDesign_2.1.0.pdf&lt;/a&gt;&lt;br&gt;
    (Provides the TPT/trapezoidal integration framework underlying the Simper SVF.)&lt;/p&gt;

&lt;p&gt;[19] R. Bristow-Johnson, "The Equivalence of Various Methods of Computing&lt;br&gt;
    Biquad Coefficients for Audio Parametric Equalizers," in Proc. AES 97th&lt;br&gt;
    Convention, San Francisco, Nov. 1994, Preprint 3906.&lt;br&gt;
    (Proves that all biquad topologies produce identical transfer functions —&lt;br&gt;
    directly supports §2.3 measurement of 0.000 dB difference between RBJ and SVF.)&lt;/p&gt;

&lt;p&gt;[20] U. Zölzer (Ed.), "DAFX: Digital Audio Effects," 2nd ed., Wiley, 2011.&lt;br&gt;
    (Standard DSP reference for filter structures, oversampling, and audio effect&lt;/p&gt;

&lt;h2&gt;
  
  
      implementation methodology cited across §2, §3, §4.)
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;p&gt;The following works informed the broader FreeEQ8 ecosystem and are recommended&lt;br&gt;
for readers interested in related DSP topics, though they do not directly support&lt;br&gt;
claims made in this paper:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Robert Bristow-Johnson — additional published work&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Performance of Low-Order Polynomial Interpolators in the Presence of
Oversampled Input," AES preprint — relevant to oversampling interpolation
quality in future embedded ports.&lt;/li&gt;
&lt;li&gt;"Effect of DAC Deglitching on Frequency Response" — measurement methodology
for audio hardware characterization.&lt;/li&gt;
&lt;li&gt;"Comments on A Digital Approach to Time-Delay Spectrometry" — audio
measurement systems context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Julius O. Smith III — digital filter theory&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Introduction to Digital Filters with Audio Applications," W3K Publishing /
CCRMA online. &lt;a href="https://ccrma.stanford.edu/%7Ejos/filters/" rel="noopener noreferrer"&gt;https://ccrma.stanford.edu/~jos/filters/&lt;/a&gt;
Comprehensive treatment of the bilinear transform, IIR filter design, and
direct-form topologies. Foundational reading for §2.1–§2.4.&lt;/li&gt;
&lt;li&gt;"Audio Signal Processing in MATLAB." &lt;a href="https://ccrma.stanford.edu/%7Ejos/sasp/" rel="noopener noreferrer"&gt;https://ccrma.stanford.edu/~jos/sasp/&lt;/a&gt;
Complements the Zölzer DAFX reference [20] for implementation methodology.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Knud Bank Christiansen&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parametric EQ design work on decramped response near Nyquist. RBJ describes
this as a more complete treatment than Orfanidis (1997), resolving the slope
discontinuity at Nyquist. Full citation pending; reference [17] will be
updated when confirmed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vadim Zavalishin&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"The Art of VA Filter Design," 2nd ed. — already cited as [18]. The full
book (freely available) covers nonlinear extensions, implicit solvers, and
topology-preserving discretization beyond what is cited in §2.2.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>dsp</category>
      <category>eq</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>FreeEQ8 — State-variable EQ architecture (SVF vs RBJ), lock-free JUCE design, and realtime-safe DSP structure</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Fri, 29 May 2026 17:30:24 +0000</pubDate>
      <link>https://dev.to/tizwildin/freeeq8-state-variable-eq-architecture-svf-vs-rbj-lock-free-juce-design-and-realtime-safe-dsp-2l0c</link>
      <guid>https://dev.to/tizwildin/freeeq8-state-variable-eq-architecture-svf-vs-rbj-lock-free-juce-design-and-realtime-safe-dsp-2l0c</guid>
      <description>&lt;h1&gt;
  
  
  FreeEQ8 / ProEQ8 — Lock-Free, Allocation-Free Parametric EQ Architecture Using Simper SVF (Open Source Core)
&lt;/h1&gt;

&lt;p&gt;Hey everyone,&lt;/p&gt;

&lt;p&gt;I wanted to share a project I’ve been building called &lt;strong&gt;FreeEQ8&lt;/strong&gt; (with a commercial counterpart, &lt;strong&gt;ProEQ8&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;The goal was to explore what a modern JUCE-based EQ architecture looks like when it is designed around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;strict real-time safety&lt;/li&gt;
&lt;li&gt;lock-free concurrency&lt;/li&gt;
&lt;li&gt;allocation-free audio paths&lt;/li&gt;
&lt;li&gt;stable high-frequency filter behavior&lt;/li&gt;
&lt;li&gt;and deterministic, explainable DSP assistance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repository:&lt;br&gt;
&lt;a href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;https://github.com/GareBear99/FreeEQ8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Technical paper / architecture breakdown:&lt;br&gt;
&lt;a href="https://github.com/GareBear99/FreeEQ8/blob/main/PAPER.md" rel="noopener noreferrer"&gt;https://github.com/GareBear99/FreeEQ8/blob/main/PAPER.md&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Core DSP Architecture
&lt;/h2&gt;

&lt;p&gt;The filter engine expands beyond the classic RBJ biquad implementation with a Simper-style State Variable Filter (SVF) topology using trapezoidal integration and analytically pre-warped cutoff mapping.&lt;/p&gt;

&lt;p&gt;The motivation is to address well-known high-frequency cramping behavior in standard biquad designs near Nyquist, especially in bell and shelf filters at higher sample rates.&lt;/p&gt;

&lt;p&gt;At 44.1kHz, this distortion becomes increasingly noticeable in narrow high-frequency boosts. The SVF approach preserves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frequency symmetry&lt;/li&gt;
&lt;li&gt;Q stability under modulation&lt;/li&gt;
&lt;li&gt;smoother automation response&lt;/li&gt;
&lt;li&gt;more consistent high-end behavior without oversampling dependency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Supported filter types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bell&lt;/li&gt;
&lt;li&gt;Low / High Shelf&lt;/li&gt;
&lt;li&gt;Low / High Pass&lt;/li&gt;
&lt;li&gt;Band Pass&lt;/li&gt;
&lt;li&gt;Notch&lt;/li&gt;
&lt;li&gt;All Pass&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Design characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;double-precision internal state&lt;/li&gt;
&lt;li&gt;trapezoidal integrators&lt;/li&gt;
&lt;li&gt;stable coefficient modulation&lt;/li&gt;
&lt;li&gt;low-cost recalculation per parameter change&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Real-Time Safety &amp;amp; Concurrency Model
&lt;/h2&gt;

&lt;p&gt;A major focus of the project was enforcing strict separation between audio, UI, and background systems.&lt;/p&gt;

&lt;p&gt;Key design choices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;processBlock() is fully allocation-free&lt;/li&gt;
&lt;li&gt;all runtime objects preallocated in prepareToPlay()&lt;/li&gt;
&lt;li&gt;lock-free SPSC triple-buffer system for spectrum + UI data (writeSlot / midSlot / readSlot)&lt;/li&gt;
&lt;li&gt;audio thread never blocks on UI thread&lt;/li&gt;
&lt;li&gt;linear-phase FIR kernel rebuilds moved to a dedicated worker thread&lt;/li&gt;
&lt;li&gt;async callbacks protected using weak references&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is deterministic behavior even under heavy UI interaction (fast node dragging, spectrum repaint bursts, automation changes).&lt;/p&gt;




&lt;h2&gt;
  
  
  Dynamic EQ + Semantic DSP Layer (Experimental)
&lt;/h2&gt;

&lt;p&gt;The project also explores deterministic assistive DSP systems instead of black-box ML approaches.&lt;/p&gt;

&lt;p&gt;Current modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ResonanceDetector.h&lt;/li&gt;
&lt;li&gt;IntentMode.h&lt;/li&gt;
&lt;li&gt;FrequencyExplainer.h&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These operate on spectral analysis data to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detect resonant or problematic frequency regions&lt;/li&gt;
&lt;li&gt;classify mix issues (mud, harshness, sibilance, etc.)&lt;/li&gt;
&lt;li&gt;adapt detection behavior based on intent profiles&lt;/li&gt;
&lt;li&gt;provide explainable feedback directly tied to DSP behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is &lt;strong&gt;interpretability over automation&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Performance Work
&lt;/h2&gt;

&lt;p&gt;Recent optimization focus:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;removing expensive transcendental calls from hot paths where possible&lt;/li&gt;
&lt;li&gt;caching Match EQ gain computations after analysis&lt;/li&gt;
&lt;li&gt;reducing per-sample coefficient overhead in dynamic mode&lt;/li&gt;
&lt;li&gt;improving stability under dense multi-band sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The SVF path is designed for predictable scaling across real-world DAW sessions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Recent Coverage
&lt;/h2&gt;

&lt;p&gt;FreeEQ8 was recently featured on &lt;strong&gt;rekkerd.org&lt;/strong&gt;, which was a nice milestone for the project and helped bring more visibility to the open-source DSP direction.&lt;/p&gt;

&lt;p&gt;Feature article:&lt;br&gt;
&lt;a href="https://rekkerd.org/free-freeeq8-parametric-eq-effect-plugin-by-gary-doman/" rel="noopener noreferrer"&gt;https://rekkerd.org/free-freeeq8-parametric-eq-effect-plugin-by-gary-doman/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This feedback has been encouraging because it reflects interest not just in the plugin, but in the underlying architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;realtime-safe DSP design&lt;/li&gt;
&lt;li&gt;lock-free JUCE systems&lt;/li&gt;
&lt;li&gt;explainable processing&lt;/li&gt;
&lt;li&gt;transparent engineering approach&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Feedback Welcome
&lt;/h2&gt;

&lt;p&gt;I’d really appreciate feedback from other JUCE / DSP developers on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SVF vs RBJ tradeoffs&lt;/li&gt;
&lt;li&gt;lock-free concurrency edge cases in real plugin hosts&lt;/li&gt;
&lt;li&gt;SIMD/vectorization strategies for multi-band EQs&lt;/li&gt;
&lt;li&gt;DAW compatibility issues&lt;/li&gt;
&lt;li&gt;realtime safety blind spots&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture is still evolving, but it’s stabilizing enough now for deeper critique.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

&lt;p&gt;— Gary Doman / GareBear99&lt;/p&gt;

</description>
      <category>dsp</category>
      <category>programming</category>
      <category>productivity</category>
      <category>automation</category>
    </item>
    <item>
      <title>FreeEQ8 has officially evolved beyond “just a free EQ plugin.”</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Fri, 29 May 2026 16:24:18 +0000</pubDate>
      <link>https://dev.to/tizwildin/freeeq8-has-officially-evolved-beyond-just-a-free-eq-plugin-10fm</link>
      <guid>https://dev.to/tizwildin/freeeq8-has-officially-evolved-beyond-just-a-free-eq-plugin-10fm</guid>
      <description>&lt;p&gt;FreeEQ8 has officially evolved beyond “just a free EQ plugin.”&lt;/p&gt;

&lt;p&gt;The project now includes:&lt;br&gt;
🎛️ Advanced decramped recursive EQ architecture&lt;br&gt;
📄 DAFx-style DSP research papers&lt;br&gt;
⚡ Real-time-safe processing systems&lt;br&gt;
🧠 Benchmark-driven engineering validation&lt;br&gt;
🔬 Deep documentation covering DSP theory, runtime behavior, and implementation design&lt;/p&gt;

&lt;p&gt;Recent work focuses on measurable DSP behavior instead of vague marketing claims:&lt;br&gt;
• High-frequency decramping near Nyquist&lt;br&gt;
• Filter integrity &amp;amp; phase behavior&lt;br&gt;
• Parameter smoothing &amp;amp; automation stability&lt;br&gt;
• Lock-free architecture concepts&lt;br&gt;
• CPU/runtime determinism&lt;br&gt;
• Real-world plugin scalability&lt;/p&gt;

&lt;p&gt;The ecosystem itself is also expanding into a full infrastructure platform with:&lt;br&gt;
🔑 Account systems&lt;br&gt;
📦 License/key management&lt;br&gt;
📊 Community infrastructure dashboards&lt;br&gt;
🛠️ Open-source tooling&lt;br&gt;
🎮 Experimental DSP/game systems&lt;br&gt;
📚 Research documentation&lt;/p&gt;

&lt;p&gt;You can now create an account directly through the HUB to manage licenses, ecosystem access, future releases, and platform features.&lt;/p&gt;

&lt;p&gt;🌐 HUB:&lt;br&gt;
&lt;a href="https://garebear99.github.io/TizWildinEntertainmentHUB/" rel="noopener noreferrer"&gt;https://garebear99.github.io/TizWildinEntertainmentHUB/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📚 Technical Paper / Documentation:&lt;br&gt;
&lt;a href="https://github.com/GareBear99/FreeEQ8/blob/main/PAPER.md" rel="noopener noreferrer"&gt;https://github.com/GareBear99/FreeEQ8/blob/main/PAPER.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 FreeEQ8 Repository:&lt;br&gt;
&lt;a href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;https://github.com/GareBear99/FreeEQ8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;br&gt;
build open-source DSP systems with the level of transparency, rigor, and architectural documentation normally reserved for commercial research environments.&lt;/p&gt;

&lt;h1&gt;
  
  
  DSP #AudioProgramming #JUCE #OpenSource #AudioEngineering #VST #MusicTech #DAFx #PluginDevelopment #DigitalSignalProcessing #CPlusPlus #FreeEQ8
&lt;/h1&gt;

</description>
      <category>tizwildin</category>
      <category>dsp</category>
      <category>freeeq8</category>
      <category>devdiscuss</category>
    </item>
    <item>
      <title>🎛️ TizWildin HUB is LIVE</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Thu, 28 May 2026 13:49:36 +0000</pubDate>
      <link>https://dev.to/tizwildin/tizwildin-hub-is-live-2271</link>
      <guid>https://dev.to/tizwildin/tizwildin-hub-is-live-2271</guid>
      <description>&lt;p&gt;🎛️ TizWildin HUB is LIVE&lt;/p&gt;

&lt;p&gt;The central platform for all TizWildin Entertainment products is now online.&lt;/p&gt;

&lt;p&gt;What's inside:&lt;br&gt;
🔑 Account management with Google Sign-In&lt;br&gt;
🎚️ ProEQ8 license activation &amp;amp; recovery&lt;br&gt;
💎 Master Key subscriptions for power users&lt;br&gt;
📻 24/7 Radio Stream (coming soon)&lt;br&gt;
🎁 Community giveaway at 1,000 users&lt;/p&gt;

&lt;p&gt;For producers:&lt;br&gt;
• 21 VST3/AU plugins&lt;br&gt;
• 11 free sample packs&lt;br&gt;
• 3 browser-based MIDI tools&lt;br&gt;
• Song submission portal&lt;/p&gt;

&lt;p&gt;First 1,000 members unlock exclusive packs + plugin upgrades.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://garebear99.github.io/TizWildinEntertainmentHUB/" rel="noopener noreferrer" class="c-link"&gt;
            TizWildin Entertainment HUB — Free Plugins, Sample Packs, Audio Lists &amp;amp; ARC Source Spine
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Free audio plugins, producer kits, sample packs, public discovery lists, and ARC source-spine links from GareBear99 / TizWildin.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          garebear99.github.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;
  
  
  MusicProduction #VST #AudioPlugins #ProducerLife #TizWildin
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Real-Time State-Space Parameterization and Lock-Free Semantic Analysis in Digital Equalization Update:</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Wed, 27 May 2026 20:26:57 +0000</pubDate>
      <link>https://dev.to/tizwildin/real-time-state-space-parameterization-and-lock-free-semantic-analysis-in-digital-equalization-29i5</link>
      <guid>https://dev.to/tizwildin/real-time-state-space-parameterization-and-lock-free-semantic-analysis-in-digital-equalization-29i5</guid>
      <description>&lt;h1&gt;
  
  
  Real-Time State-Space Parameterization and Lock-Free Semantic Analysis in Digital Equalization
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Gary Doman&lt;/strong&gt; (GareBear99 / TizWildin)&lt;br&gt;&lt;br&gt;
FreeEQ8 / ProEQ8 Open-Source DSP Project&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;https://github.com/GareBear99/FreeEQ8&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;This paper presents the architecture of a production-grade 8-band parametric&lt;br&gt;
equalizer designed to eliminate high-frequency magnitude cramping without the&lt;br&gt;
computational overhead of brute-force oversampling. By utilizing a 64-bit&lt;br&gt;
double-precision implementation of the Simper State Variable Filter (SVF)&lt;br&gt;
topology via trapezoidal integration, the system achieves a de-cramped&lt;br&gt;
frequency response near the Nyquist limit while consuming only &lt;strong&gt;0.62% of a&lt;br&gt;
single-core real-time CPU budget&lt;/strong&gt; at 44.1 kHz (161× headroom). To ensure&lt;br&gt;
absolute real-time safety within modern Digital Audio Workstations (DAWs), a&lt;br&gt;
lock-free Single-Producer Single-Consumer (SPSC) triple-buffering swap-chain&lt;br&gt;
isolates the audio hot-path from UI rendering. We further introduce a&lt;br&gt;
&lt;strong&gt;variable-cadence coefficient engine&lt;/strong&gt; that switches between 4-sample batching&lt;br&gt;
during sustained signals and per-sample accuracy on transients, reducing Dynamic&lt;br&gt;
EQ CPU cost by up to 75% under stable envelope conditions. Finally, an&lt;br&gt;
allocation-free, log-frequency resonance detection array (&lt;code&gt;ResonanceDetector.h&lt;/code&gt;)&lt;br&gt;
maps live spectral coefficients to localized semantic labels—providing a&lt;br&gt;
framework for zero-latency, explainable mix-assist workflows.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;p&gt;Traditional parametric EQ implementations use the Robert Bristow-Johnson (RBJ)&lt;br&gt;
Audio EQ Cookbook biquad formulas [6] in Transposed Direct Form II (TDF-II).&lt;br&gt;
While mathematically correct, the bilinear transform introduces frequency&lt;br&gt;
cramping near Nyquist: a Bell filter at 16 kHz with Q=1.0 at 44.1 kHz exhibits&lt;br&gt;
an effective bandwidth &lt;strong&gt;199% narrower&lt;/strong&gt; than intended. Industry solutions&lt;br&gt;
include brute-force oversampling (adding latency and CPU cost) or proprietary&lt;br&gt;
polynomial analog-matching curves (FabFilter Pro-Q family).&lt;/p&gt;

&lt;p&gt;This paper documents a third path: the Simper SVF topology, which pre-warps&lt;br&gt;
the cutoff frequency via &lt;code&gt;g = tan(π·fc/fs)&lt;/code&gt;, achieving exact cutoff placement&lt;br&gt;
at any frequency up to Nyquist without oversampling. All eight required filter&lt;br&gt;
types (Bell, LowShelf, HighShelf, LP, HP, Bandpass, Notch, AllPass) emerge from&lt;br&gt;
a single two-integrator core, simplifying maintenance and enabling structural&lt;br&gt;
modulation safety that TDF-II cannot provide.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Filter Topology
&lt;/h2&gt;
&lt;h3&gt;
  
  
  2.1 RBJ TDF-II (Legacy Path — FreeEQ8)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;H(z) = (b₀ + b₁z⁻¹ + b₂z⁻²) / (1 + a₁z⁻¹ + a₂z⁻²)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Coefficients computed per the RBJ cookbook [6]. 64-bit double internal state,&lt;br&gt;
float I/O. Parameter smoothing: 20 ms linear ramp, coefficients refreshed every&lt;br&gt;
16 samples (smoothing path) or every sample (Dynamic EQ path).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measured Q distortion (Bell, Q=1.0, 44.1 kHz):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Frequency&lt;/th&gt;
&lt;th&gt;RBJ effective Q&lt;/th&gt;
&lt;th&gt;Error&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 kHz&lt;/td&gt;
&lt;td&gt;1.005&lt;/td&gt;
&lt;td&gt;+0.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8 kHz&lt;/td&gt;
&lt;td&gt;1.337&lt;/td&gt;
&lt;td&gt;+33.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16 kHz&lt;/td&gt;
&lt;td&gt;2.990&lt;/td&gt;
&lt;td&gt;+199%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  2.2 Simper SVF (Modern Path — ProEQ8)
&lt;/h3&gt;

&lt;p&gt;Reference: Andrew Simper, "Solving the continuous SVF equations using&lt;br&gt;
trapezoidal integration and equivalent currents," Cytomic, 2013 [1].&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-warped cutoff:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;g  = tan(π · fc / fs)          // exact pre-warp
k  = 1/Q
a1 = 1 / (1 + g·(g + k))      // shared across all filter types
a2 = g · a1
a3 = g · a2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Per-sample processing (optimised bounded form):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;v3&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ic2eq&lt;/span&gt;
&lt;span class="n"&gt;t&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ic1eq&lt;/span&gt;               &lt;span class="c1"&gt;// cached — eliminates redundant mul&lt;/span&gt;
&lt;span class="n"&gt;v1&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ic1eq&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt;    &lt;span class="c1"&gt;// bandpass&lt;/span&gt;
&lt;span class="n"&gt;v2&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ic2eq&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt;     &lt;span class="c1"&gt;// lowpass&lt;/span&gt;
&lt;span class="n"&gt;ic1eq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ic1eq&lt;/span&gt;       &lt;span class="c1"&gt;// v+v avoids 2.0* mul&lt;/span&gt;
&lt;span class="n"&gt;ic2eq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ic2eq&lt;/span&gt;
&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m0&lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="n"&gt;v0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;m1&lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;m2&lt;/span&gt;&lt;span class="err"&gt;·&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt;  &lt;span class="c1"&gt;// filter-type-specific mix&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output mix coefficients per filter type&lt;/strong&gt; (from Simper paper §§3–8):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;m0&lt;/th&gt;
&lt;th&gt;m1&lt;/th&gt;
&lt;th&gt;m2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LP&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HP&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;−k&lt;/td&gt;
&lt;td&gt;−1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BP&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bell&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;kA·(A²−1)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LowShelf&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;k·(A−1)&lt;/td&gt;
&lt;td&gt;A²−1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HighShelf&lt;/td&gt;
&lt;td&gt;A²&lt;/td&gt;
&lt;td&gt;k·(1−A)·A&lt;/td&gt;
&lt;td&gt;1−A²&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;where &lt;code&gt;A = 10^(gainDb/40)&lt;/code&gt; and &lt;code&gt;kA = k/A&lt;/code&gt; (Bell uses modified denominator).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measured performance (g++ -O3, 44.1 kHz, 512-sample block, 8-band stereo):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;ns/sample&lt;/th&gt;
&lt;th&gt;CPU headroom&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RBJ 8-band&lt;/td&gt;
&lt;td&gt;40.7&lt;/td&gt;
&lt;td&gt;277×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF 8-band&lt;/td&gt;
&lt;td&gt;70.4&lt;/td&gt;
&lt;td&gt;161×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF overhead&lt;/td&gt;
&lt;td&gt;1.73×&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU budget used&lt;/td&gt;
&lt;td&gt;0.62%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  3. Real-Time Safety Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 SPSC Triple-Buffer (SpectrumFIFO)
&lt;/h3&gt;

&lt;p&gt;Three buffer slots indexed by &lt;code&gt;{writeSlot, midSlot, readSlot}&lt;/code&gt; (a permutation&lt;br&gt;
of {0, 1, 2}). Audio thread writes into &lt;code&gt;writeSlot&lt;/code&gt;; when a frame is complete,&lt;br&gt;
atomically swaps &lt;code&gt;writeSlot ↔ midSlot&lt;/code&gt; with &lt;code&gt;memory_order_release&lt;/code&gt;. UI thread&lt;br&gt;
reads by atomically swapping &lt;code&gt;midSlot ↔ readSlot&lt;/code&gt; with &lt;code&gt;memory_order_acquire&lt;/code&gt;.&lt;br&gt;
No mutex, no lock, no blocking on either thread.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.2 Off-Thread FIR Reconstruction (LinearPhaseEngine)
&lt;/h3&gt;

&lt;p&gt;Linear phase mode latency: 2048 samples (4096-tap Hann-windowed FIR / 2).&lt;br&gt;
Parameter changes set an atomic &lt;code&gt;linPhaseDirty&lt;/code&gt; flag. A dedicated background&lt;br&gt;
thread (&lt;code&gt;LinPhaseRebuildThread&lt;/code&gt;) parks via &lt;code&gt;wait(-1)&lt;/code&gt;, wakes on notify, rebuilds&lt;br&gt;
the FIR kernel (magnitude → IFFT → circular shift → Hann window → forward FFT),&lt;br&gt;
and publishes via the same triple-buffer atomic swap protocol. Audio thread reads&lt;br&gt;
with a single acquire load—never blocks.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.3 Allocation-Free Hot Path
&lt;/h3&gt;

&lt;p&gt;All oversamplers (1×/2×/4×/8× via JUCE polyphase IIR) are pre-constructed in&lt;br&gt;
&lt;code&gt;prepareToPlay()&lt;/code&gt; into &lt;code&gt;std::array&amp;lt;std::unique_ptr&amp;lt;Oversampling&amp;lt;float&amp;gt;&amp;gt;, 3&amp;gt;&lt;/code&gt;.&lt;br&gt;
Mid-playback order changes call &lt;code&gt;Oversampling::reset()&lt;/code&gt; (non-allocating) and&lt;br&gt;
trigger a 128-sample linear crossfade to eliminate the transient pop (v2.2.3).&lt;/p&gt;


&lt;h2&gt;
  
  
  4. Variable-Cadence Dynamic EQ (v2.2.3)
&lt;/h2&gt;

&lt;p&gt;Dynamic EQ recomputes biquad coefficients per-sample when active, matching the&lt;br&gt;
one-pole envelope follower's cadence. With all 8 bands in dynamic mode the&lt;br&gt;
&lt;code&gt;bq.set()&lt;/code&gt; call dominates (22 ns/call for SVF Bell). We observe that during&lt;br&gt;
held/sustained notes the envelope &lt;code&gt;dynGainMod&lt;/code&gt; is near-static: changes of less&lt;br&gt;
than &lt;strong&gt;0.1 dB between samples&lt;/strong&gt; are inaudible within the 4-sample batch window&lt;br&gt;
(0.09 ms at 44.1 kHz).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variable-cadence algorithm:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;δ = |dynGainMod − lastDynGainMod|
if δ &amp;gt; 0.1 dB:
    update coefficients (per-sample — zero transient lag)
    intervalCounter = 0
else:
    if intervalCounter++ &amp;gt;= 4:
        update coefficients (batched)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Measured savings&lt;/strong&gt; at 8 bands all-dynamic, sustained note:&lt;br&gt;
up to 75% reduction in &lt;code&gt;bq.set()&lt;/code&gt; calls with no audible difference.&lt;br&gt;
On a transient attack the first sample with δ &amp;gt; 0.1 dB immediately restores&lt;br&gt;
per-sample accuracy.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Allocation-Free Semantic Analysis (ResonanceDetector)
&lt;/h2&gt;

&lt;p&gt;Traditional "smart EQ" products apply machine-learning inference models (Soothe2,&lt;br&gt;
iZotope Neutron) — opaque, CPU-heavy, non-deterministic. We introduce a&lt;br&gt;
deterministic alternative that adds zero latency and allocates no memory:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Take the 2048-bin log-magnitude spectrum from &lt;code&gt;SpectrumFIFO&lt;/code&gt; (UI thread rate).&lt;/li&gt;
&lt;li&gt;Re-sample into a 96-bin log-frequency grid (20 Hz → Nyquist).&lt;/li&gt;
&lt;li&gt;Estimate local baseline via ±0.5-octave moving average.&lt;/li&gt;
&lt;li&gt;Flag peaks where &lt;code&gt;(magnitude − baseline) ≥ 3 dB&lt;/code&gt; and peak is local max in
±3-bin neighbourhood.&lt;/li&gt;
&lt;li&gt;Score each peak: &lt;code&gt;score = deviation × intentWeight(hz, mode)&lt;/code&gt; where
&lt;code&gt;intentWeight&lt;/code&gt; is a log-frequency Gaussian bump per &lt;code&gt;IntentMode&lt;/code&gt; profile.&lt;/li&gt;
&lt;li&gt;Return top-4 suggestions: &lt;code&gt;{freqHz, gainDb, q, confidence, label}&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;code&gt;intentWeight&lt;/code&gt; function encodes instrument-specific problem zones:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Primary Bump&lt;/th&gt;
&lt;th&gt;Zone&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VocalClean&lt;/td&gt;
&lt;td&gt;×1.6 at 300 Hz&lt;/td&gt;
&lt;td&gt;mud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DrumPunch&lt;/td&gt;
&lt;td&gt;×1.5 at 300 Hz&lt;/td&gt;
&lt;td&gt;boxiness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GuitarSpace&lt;/td&gt;
&lt;td&gt;×1.5 at 250 Hz&lt;/td&gt;
&lt;td&gt;mud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MasterPolish&lt;/td&gt;
&lt;td&gt;×1.3 at 250 Hz&lt;/td&gt;
&lt;td&gt;low-end buildup&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Semantic labels from &lt;code&gt;FrequencyExplainer.h&lt;/code&gt; map frequency ranges to strings&lt;br&gt;
("mud", "harshness", "sibilance", "air") enabling explain-on-hover UX.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Benchmarks (Measured — Reproducible)
&lt;/h2&gt;

&lt;p&gt;All benchmarks run from &lt;code&gt;Tests/FeatureBench.cpp&lt;/code&gt; — standalone, no JUCE, no DAW,&lt;br&gt;
no mock. Build: &lt;code&gt;g++ -std=c++17 -O3 -DNDEBUG -pthread Tests/FeatureBench.cpp -o FeatureBench -ISource&lt;/code&gt;.&lt;br&gt;
Platform: Linux x86-64, g++ 13.3.0. Median of 16 trials, 4 warmup runs discarded.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 Single-Instance Filter Cost
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;ns/sample&lt;/th&gt;
&lt;th&gt;MB/s&lt;/th&gt;
&lt;th&gt;CPU% (44.1kHz/512/50%)&lt;/th&gt;
&lt;th&gt;Headroom&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RBJ 8-band stereo&lt;/td&gt;
&lt;td&gt;41.0&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;0.36%&lt;/td&gt;
&lt;td&gt;277×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF 8-band stereo&lt;/td&gt;
&lt;td&gt;72.7&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;0.63%&lt;/td&gt;
&lt;td&gt;161×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF overhead vs RBJ&lt;/td&gt;
&lt;td&gt;1.61×&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVF DynEQ per-sample&lt;/td&gt;
&lt;td&gt;68.8&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.61%&lt;/td&gt;
&lt;td&gt;165×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  7.2 Instance Scaling (Real DAW Load Simulation)
&lt;/h3&gt;

&lt;p&gt;The critical gap identified in post-release review: "not yet crossed into industrial&lt;br&gt;
benchmark validation under real DAW stress matrices." This table fills that gap.&lt;br&gt;
Each row simulates N simultaneous independent 8-band stereo plugin instances.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Instances&lt;/th&gt;
&lt;th&gt;RBJ ns/samp&lt;/th&gt;
&lt;th&gt;RBJ CPU%&lt;/th&gt;
&lt;th&gt;SVF ns/samp&lt;/th&gt;
&lt;th&gt;SVF CPU%&lt;/th&gt;
&lt;th&gt;SVF/RBJ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;44.4&lt;/td&gt;
&lt;td&gt;0.39%&lt;/td&gt;
&lt;td&gt;71.9&lt;/td&gt;
&lt;td&gt;0.63%&lt;/td&gt;
&lt;td&gt;1.62×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;46.6&lt;/td&gt;
&lt;td&gt;0.41%&lt;/td&gt;
&lt;td&gt;73.4&lt;/td&gt;
&lt;td&gt;0.65%&lt;/td&gt;
&lt;td&gt;1.58×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;47.5&lt;/td&gt;
&lt;td&gt;0.42%&lt;/td&gt;
&lt;td&gt;75.1&lt;/td&gt;
&lt;td&gt;0.66%&lt;/td&gt;
&lt;td&gt;1.58×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;46.4&lt;/td&gt;
&lt;td&gt;0.41%&lt;/td&gt;
&lt;td&gt;75.9&lt;/td&gt;
&lt;td&gt;0.67%&lt;/td&gt;
&lt;td&gt;1.64×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;46.8&lt;/td&gt;
&lt;td&gt;0.41%&lt;/td&gt;
&lt;td&gt;75.5&lt;/td&gt;
&lt;td&gt;0.67%&lt;/td&gt;
&lt;td&gt;1.61×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key finding:&lt;/strong&gt; Per-instance cost rises only &lt;strong&gt;5% from 1→128 instances&lt;/strong&gt; (cache&lt;br&gt;
pressure from larger working set). The scaling is sub-linear — each instance&lt;br&gt;
benefits from the previous instance's cache warmup on shared coefficient tables.&lt;/p&gt;

&lt;p&gt;At 128 SVF instances total CPU = 128 × 0.67% = &lt;strong&gt;85.8%&lt;/strong&gt; of one core at 44.1 kHz&lt;br&gt;
with 512-sample blocks. A modern 8-core CPU can host ~900 SVF instances.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3 Worst-Case Dynamic EQ
&lt;/h3&gt;

&lt;p&gt;Document 11 review identified: &lt;em&gt;"the actual limit is NOT filter math — it becomes&lt;br&gt;
dynamic coefficient churn."&lt;/em&gt; This benchmark quantifies exactly that ceiling.&lt;/p&gt;

&lt;p&gt;Configuration: 8 bands simultaneously in dynamic mode, white noise input&lt;br&gt;
(maximum envelope follower excitation — all transients, all samples active),&lt;br&gt;
variable-cadence engine active (v2.2.3 optimization).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;th&gt;ns/sample&lt;/th&gt;
&lt;th&gt;CPU%&lt;/th&gt;
&lt;th&gt;Headroom&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8-band DynEQ, white noise, all active&lt;/td&gt;
&lt;td&gt;370.9&lt;/td&gt;
&lt;td&gt;3.27%&lt;/td&gt;
&lt;td&gt;30.6×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Finding:&lt;/strong&gt; Even at absolute worst-case (8 active dynamic bands tracking white&lt;br&gt;
noise), the variable-cadence engine keeps CPU below 3.3%. The 30.6× headroom&lt;br&gt;
means a 50% CPU budget can host ~9 simultaneous worst-case dynamic EQ instances.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 SvfBandArray — Packed SIMD Scaffold
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;SvfBandArray&amp;lt;8&amp;gt;&lt;/code&gt; template (v2.2.4) packs all 8 band states into aligned&lt;br&gt;
arrays for SIMD dispatch. On this test machine (SSE2, no AVX2 available at test&lt;br&gt;
time), the scalar fallback runs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;ns/sample (mono)&lt;/th&gt;
&lt;th&gt;CPU%&lt;/th&gt;
&lt;th&gt;vs SVF scalar stereo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SvfBandArray&amp;lt;8&amp;gt; scalar (SSE2 host)&lt;/td&gt;
&lt;td&gt;23.5&lt;/td&gt;
&lt;td&gt;0.21%&lt;/td&gt;
&lt;td&gt;3.1× faster&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The mono vs stereo difference accounts for half the gap. With AVX2 active&lt;br&gt;
(8-wide float32), projected improvement is an additional 2–4× over scalar,&lt;br&gt;
targeting &amp;lt; 10 ns/sample for all 8 bands mono — approaching 0.09% CPU.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.5 MatchEQ Hot-Path Optimization
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;ns/sample equivalent&lt;/th&gt;
&lt;th&gt;Speedup&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Naive pow(10) per bin (old)&lt;/td&gt;
&lt;td&gt;7.4&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pre-computed correctionGain&lt;a href="//v2.2.1"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;2.8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.0×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  7.6 Reproducing These Results
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--recursive&lt;/span&gt; https://github.com/GareBear99/FreeEQ8.git
&lt;span class="nb"&gt;cd &lt;/span&gt;FreeEQ8
g++ &lt;span class="nt"&gt;-std&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;c++17 &lt;span class="nt"&gt;-O3&lt;/span&gt; &lt;span class="nt"&gt;-DNDEBUG&lt;/span&gt; &lt;span class="nt"&gt;-pthread&lt;/span&gt; Tests/FeatureBench.cpp &lt;span class="nt"&gt;-o&lt;/span&gt; FeatureBench &lt;span class="nt"&gt;-ISource&lt;/span&gt;
./FeatureBench          &lt;span class="c"&gt;# human-readable table&lt;/span&gt;
./FeatureBench &lt;span class="nt"&gt;--csv&lt;/span&gt;    &lt;span class="c"&gt;# machine-readable CSV&lt;/span&gt;

&lt;span class="c"&gt;# For ARC-AudioBench integration (JSON output):&lt;/span&gt;
g++ &lt;span class="nt"&gt;-std&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;c++17 &lt;span class="nt"&gt;-O3&lt;/span&gt; &lt;span class="nt"&gt;-DNDEBUG&lt;/span&gt; Tests/ArcBenchIntegration.cpp &lt;span class="nt"&gt;-o&lt;/span&gt; ArcBench &lt;span class="nt"&gt;-ISource&lt;/span&gt;
./ArcBench &lt;span class="nt"&gt;--json&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; arc_results.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Numbers will vary by CPU and compiler. The headroom ratios should remain&lt;br&gt;
comfortably above 10× on any modern x86-64 or Apple Silicon machine.&lt;/p&gt;

&lt;p&gt;Inspired by Ableton Live's EQ Eight compact device view. Design constraint: the&lt;br&gt;
coordinate mapping (&lt;code&gt;freqToX&lt;/code&gt;, &lt;code&gt;dbToY&lt;/code&gt;), drag sensitivity (pixel delta → parameter&lt;br&gt;
delta), Q drag acceleration, and node hit-test radius (as proportion of view&lt;br&gt;
height) must be &lt;strong&gt;identical&lt;/strong&gt; between full and compact views. Only visual density&lt;br&gt;
changes: FFT resolution, grid label density, node text size.&lt;/p&gt;

&lt;p&gt;This is enforced architecturally: &lt;code&gt;setCompactMode(bool)&lt;/code&gt; sets a flag but never&lt;br&gt;
modifies the mapping functions. The APVTS remains the single source of truth;&lt;br&gt;
both renderers read the same parameter values.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Future Work (v2.2.5+)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Explicit SIMD vectorisation&lt;/strong&gt;: group 8 bands into &lt;code&gt;juce::dsp::SIMDRegister&amp;lt;float&amp;gt;&lt;/code&gt;,
processing 4 bands per SSE instruction or 8 via AVX2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-instance masking negotiation&lt;/strong&gt;: via ARC-Core local IPC spine, multiple
plugin instances communicate energy peaks and negotiate inverse dynamic notches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spectral dynamics mode&lt;/strong&gt;: per-bin FFT threshold clamping (Soothe2 territory)
using the existing overlap-add Match EQ infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dolby Atmos 9.1.6&lt;/strong&gt;: expand &lt;code&gt;isBusesLayoutSupported&lt;/code&gt; for discrete immersive
channel arrays with spatial zone linking.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;[1] A. Simper, "Solving the continuous SVF equations using trapezoidal integration&lt;br&gt;
    and equivalent currents," Cytomic, 2013.&lt;br&gt;
    &lt;a href="https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf" rel="noopener noreferrer"&gt;https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] W. Pirkle, "Designing Audio Effect Plugins in C++," Focal Press, 2019.&lt;/p&gt;

&lt;p&gt;[3] J. Reiss and A. McPherson, "Audio Effects: Theory, Implementation and&lt;br&gt;
    Application," CRC Press, 2014.&lt;/p&gt;

&lt;p&gt;[4] F. Renn-Giles and D. Rowland, "Real-time 101," ADC 2019.&lt;br&gt;
    &lt;a href="https://github.com/hogliux/farbot" rel="noopener noreferrer"&gt;https://github.com/hogliux/farbot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] JUCE, "juce::dsp::Oversampling," Articy, 2023.&lt;br&gt;
    &lt;a href="https://docs.juce.com/master/classjuce_1_1dsp_1_1Oversampling.html" rel="noopener noreferrer"&gt;https://docs.juce.com/master/classjuce_1_1dsp_1_1Oversampling.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[6] R. Bristow-Johnson, "Audio EQ Cookbook," musicdsp.org, 1994.&lt;br&gt;
    &lt;a href="https://www.musicdsp.org/files/Audio-EQ-Cookbook.txt" rel="noopener noreferrer"&gt;https://www.musicdsp.org/files/Audio-EQ-Cookbook.txt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>eq</category>
      <category>eq8</category>
      <category>dsp</category>
      <category>tizwildin</category>
    </item>
    <item>
      <title>Studio Violin - Helmholtz bowed string · H2 correction · Stradivari body EQ · Sympathetic resonance · Physical modelling</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Sun, 24 May 2026 21:13:55 +0000</pubDate>
      <link>https://dev.to/tizwildin/studio-violin-helmholtz-bowed-string-h2-correction-stradivari-body-eq-sympathetic-resonance-3c8l</link>
      <guid>https://dev.to/tizwildin/studio-violin-helmholtz-bowed-string-h2-correction-stradivari-body-eq-sympathetic-resonance-3c8l</guid>
      <description>&lt;p&gt;Studio Violin&lt;br&gt;
Helmholtz bowed string · H2 correction · Stradivari body EQ · Sympathetic resonance · Physical modelling&lt;br&gt;
Instrument Summary&lt;br&gt;
The most technically advanced instrument in the suite. Full physical modelling of a bowed violin string using Helmholtz motion synthesis, H2 correction oscillator, inharmonicity chorus, 8-band Stradivari body resonances, sympathetic open-string resonance, and continuous pitch glide on the fingerboard. All parameters are derived from peer-reviewed acoustic measurements.&lt;/p&gt;

&lt;p&gt;Synthesis Features&lt;br&gt;
Helmholtz waveform: bₙ = −(2/n²π²D(1−D))·sin(nπD), D = 0.5 + bowPressure×0.30&lt;br&gt;
H2 correction oscillator: brings H2/H1 from 0.27 to 0.65 (Schelleng measured target)&lt;br&gt;
Inharmonicity chorus: ±2.5 cents per-string (B: G=0.00035, D=0.00028, A=0.00022, E=0.00018)&lt;br&gt;
8-band Stradivari EQ: A0(275Hz), A1(475Hz), B1-(530Hz), B1+(580Hz), bridge hill(2800Hz Q=6.5), upper(4500Hz), notch(1100Hz), warmth(180Hz)&lt;br&gt;
Per-string body offsets: G string warmer (−3dB bridge hill), E string brighter (+3dB)&lt;br&gt;
Sympathetic resonance: 4 triangle oscillators at open string Hz, amplitude = (1−cents/20)×0.038&lt;br&gt;
Nonlinear bow coupling: tanh(bowSpeed×bowPressure×3.8)×0.42&lt;br&gt;
Pressure-coupled vibrato: effDepth = depth×(0.6+pressure×0.6)&lt;br&gt;
Interval-scaled portamento: glideTime = (18+semitones×4)ms&lt;br&gt;
Attack scratch: 20–60ms noise burst, speed-dependent release: 0.10+(1−bowSpeed)×0.28s&lt;br&gt;
Signal Chain&lt;br&gt;
PeriodicWave osc → H2 osc → Chorus oscs → WaveShaper → InjGain → WarmShelf → 8×peaking body EQ → Master&lt;/p&gt;

&lt;p&gt;Novel Contribution&lt;br&gt;
Single-Source-of-Truth Cross-Platform Virtual Instrument Architecture. This instrument demonstrates a novel architecture where one JSON definition file, version-controlled on GitHub, simultaneously drives: (1) the web audio synthesis engine and UI, (2) external MIDI CC routing and note mapping, (3) plugin bridge event protocol, (4) preset management, and (5) live auto-update propagation across all connected outlets. Definition changes pushed to the repository propagate to every running instance within the cache TTL window (default 5 minutes) without redeployment. The definition-runtime uses a remote-first fetch strategy with instrumented timing metrics for academic evaluation.&lt;/p&gt;

&lt;p&gt;Measurable claims: The Evaluation Metrics panel (right sidebar) displays live measurements of SSOT fetch latency, definition apply time, remote source availability, and MIDI pipeline latency — all captured via performance.now() high-resolution timestamps. These metrics are accessible programmatically via InstrudioSSOTRuntime.getMetrics() and InstrudioMIDI.getLatencyMetrics().&lt;/p&gt;

&lt;p&gt;Academic References&lt;br&gt;
1973&lt;br&gt;
Schelleng, J.C. "The bowed string and the player." JASA 53(1):26–41. — Measured violin harmonic spectrum showing H2/H1=0.65. The H2 correction oscillator gain 0.38 was calibrated to reach this target.&lt;br&gt;
2002&lt;br&gt;
Jansson, E.V. Acoustics for Violin and Guitar Makers, 4th ed. KTH Stockholm. — Stradivari body resonance frequencies A0, A1, B1−, B1+ from Table 6.1. Bridge hill at 2800Hz and Q=6.5 from Chapter 7.&lt;br&gt;
2004&lt;br&gt;
Woodhouse, J. "Bowed string simulation using a thermal friction model." Acustica 90. — Helmholtz motion Fourier series derivation. The formula bₙ = 2/(n²π²D(1−D))·sin(nπD) is from Woodhouse's eq. 4.2.&lt;br&gt;
2010&lt;br&gt;
Smith, J.O. Physical Audio Signal Processing. CCRMA, Stanford. — Digital waveguide theory and Thiran allpass interpolation. Vibrato Hz-based depth formula from Chapter 4.&lt;br&gt;
2026&lt;br&gt;
Doman, G. "Instrudio: A single-source-of-truth architecture for cross-platform virtual instrument ecosystems." GitHub, 2026. — Demonstrates that one version-controlled JSON definition can drive web synthesis, MIDI CC routing, plugin bridge protocol, preset management, and live auto-update across all outlets. Reference implementation with instrumented evaluation metrics. &lt;/p&gt;

&lt;p&gt;Repo:&lt;br&gt;
github.com/GareBear99/Instrudio&lt;/p&gt;

&lt;p&gt;!FREE! Violin Synth Kit:&lt;br&gt;
&lt;a href="https://github.com/GareBear99/Free-Violin-Synth-Sample-Kit" rel="noopener noreferrer"&gt;https://github.com/GareBear99/Free-Violin-Synth-Sample-Kit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live Demo: &lt;a href="https://garebear99.github.io/Instrudio/Instrudio_v2/violin.html" rel="noopener noreferrer"&gt;https://garebear99.github.io/Instrudio/Instrudio_v2/violin.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>programming</category>
      <category>dsp</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Real-Time State-Space Parameterization and Lock-Free Semantic Analysis in Digital Equalization</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Sun, 24 May 2026 20:52:39 +0000</pubDate>
      <link>https://dev.to/tizwildin/real-time-state-space-parameterization-and-lock-free-semantic-analysis-in-digital-equalization-38jn</link>
      <guid>https://dev.to/tizwildin/real-time-state-space-parameterization-and-lock-free-semantic-analysis-in-digital-equalization-38jn</guid>
      <description>&lt;p&gt;Real-Time State-Space Parameterization and Lock-Free Semantic Analysis in Digital Equalization&lt;br&gt;
Gary Doman (GareBear99 / TizWildin)&lt;br&gt;
FreeEQ8 / ProEQ8 Open-Source DSP Project&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/GareBear99" rel="noopener noreferrer"&gt;
        GareBear99
      &lt;/a&gt; / &lt;a href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;
        FreeEQ8
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      FreeEQ8 is a professional-grade, free and open-source 8-band parametric EQ plugin for macOS, Linux, and Windows. Linear phase, dynamic EQ, match EQ, per-band drive, band linking, M/S processing, oversampling, and a real-time spectrum analyzer. FabFilter Pro-Q alternative for $0–$20
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;blockquote&gt;
&lt;p&gt;🎛️ Part of the &lt;a href="https://garebear99.github.io/TizWildinEntertainmentHUB/" rel="nofollow noopener noreferrer"&gt;TizWildin Plugin Ecosystem&lt;/a&gt; — 20+ free audio plugins, creator tools, lists, deconstructed-loop routers, and release surfaces.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;FreeEQ8&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/FreeVox8" rel="noopener noreferrer"&gt;FreeVox8&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/XyloCore" rel="noopener noreferrer"&gt;XyloCore&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/Instrudio" rel="noopener noreferrer"&gt;Instrudio&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/Therum_JUCE-Plugin" rel="noopener noreferrer"&gt;Therum&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/BassMaid" rel="noopener noreferrer"&gt;BassMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/SpaceMaid" rel="noopener noreferrer"&gt;SpaceMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/GlueMaid" rel="noopener noreferrer"&gt;GlueMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/MixMaid" rel="noopener noreferrer"&gt;MixMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/MultiMaid" rel="noopener noreferrer"&gt;MultiMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/MeterMaid" rel="noopener noreferrer"&gt;MeterMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/ChainMaid" rel="noopener noreferrer"&gt;ChainMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/PaintMask_Free-JUCE-Plugin" rel="noopener noreferrer"&gt;PaintMask&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/WURP_Toxic-Motion-Engine_JUCE" rel="noopener noreferrer"&gt;WURP&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/AETHER_Choir-Atmosphere-Designer" rel="noopener noreferrer"&gt;AETHER&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/WhisperGate_Free-JUCE-Plugin" rel="noopener noreferrer"&gt;WhisperGate&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/RiftWaveSuite_RiftSynth_WaveForm_Lite" rel="noopener noreferrer"&gt;RiftWave&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/FreeSampler_v0.3" rel="noopener noreferrer"&gt;FreeSampler&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/VF-PlexLab" rel="noopener noreferrer"&gt;VF-PlexLab&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/PAP-Forge-Audio" rel="noopener noreferrer"&gt;PAP-Forge-Audio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🎧 &lt;strong&gt;SoundCloud:&lt;/strong&gt; &lt;a href="https://soundcloud.com/tizwildin" rel="nofollow noopener noreferrer"&gt;TizWildin on SoundCloud&lt;/a&gt; — original music, remixes, VIP mixes, experimental drops, and underground releases.&lt;/p&gt;
&lt;p&gt;🎁 &lt;a href="https://github.com/GareBear99/FreeEQ8#tizwildin-free-sample-packs" rel="noopener noreferrer"&gt;Free Packs &amp;amp; Samples&lt;/a&gt; — jump to free packs &amp;amp; samples&lt;/p&gt;
&lt;p&gt;🎵 &lt;a href="https://github.com/GareBear99/awesome-audio-plugins-dev" rel="noopener noreferrer"&gt;Awesome Audio&lt;/a&gt; — My (FREE) Awesome Audio Dev List&lt;/p&gt;
&lt;p&gt;▶️ &lt;strong&gt;&lt;a href="https://www.youtube.com/@gfgfvmhj" rel="nofollow noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/strong&gt; — music, visuals, demos, and releases&lt;br&gt;
🌊 &lt;strong&gt;&lt;a href="https://github.com/GareBear99/Voxel_Audio" rel="noopener noreferrer"&gt;Voxel Audio&lt;/a&gt;&lt;/strong&gt; — free RGB waveform visualizer and audio export tool&lt;br&gt;
📘 &lt;strong&gt;&lt;a href="https://www.facebook.com/profile.php?id=61564485196765" rel="nofollow noopener noreferrer"&gt;Facebook Page&lt;/a&gt;&lt;/strong&gt; — TizWildin / GareBearProductionz updates and Media&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;🎧 &lt;a href="https://github.com/GareBear99/awesome-audio-lists" rel="noopener noreferrer"&gt;Awesome Audio Lists&lt;/a&gt; — even more audio lists, submission routes, and promotional directories&lt;/p&gt;
&lt;div&gt;
  &lt;a href="https://github.com/GareBear99/FreeEQ8/docs/FEATURED_ON.md" rel="noopener noreferrer"&gt;&lt;b&gt;⭐ Featured / submitted on&lt;/b&gt; — full tracker →&lt;/a&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Abstract&lt;br&gt;
This paper presents the architecture of a production-grade 8-band parametric equalizer designed to eliminate high-frequency magnitude cramping without the computational overhead of brute-force oversampling. By utilizing a 64-bit double-precision implementation of the Simper State Variable Filter (SVF) topology via trapezoidal integration, the system achieves a de-cramped frequency response near the Nyquist limit while consuming only 0.62% of a single-core real-time CPU budget at 44.1 kHz (161× headroom). To ensure absolute real-time safety within modern Digital Audio Workstations (DAWs), a lock-free Single-Producer Single-Consumer (SPSC) triple-buffering swap-chain isolates the audio hot-path from UI rendering. We further introduce a variable-cadence coefficient engine that switches between 4-sample batching during sustained signals and per-sample accuracy on transients, reducing Dynamic EQ CPU cost by up to 75% under stable envelope conditions. Finally, an allocation-free, log-frequency resonance detection array (ResonanceDetector.h) maps live spectral coefficients to localized semantic labels—providing a framework for zero-latency, explainable mix-assist workflows.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduction
Traditional parametric EQ implementations use the Robert Bristow-Johnson (RBJ) Audio EQ Cookbook biquad formulas [6] in Transposed Direct Form II (TDF-II). While mathematically correct, the bilinear transform introduces frequency cramping near Nyquist: a Bell filter at 16 kHz with Q=1.0 at 44.1 kHz exhibits an effective bandwidth 199% narrower than intended. Industry solutions include brute-force oversampling (adding latency and CPU cost) or proprietary polynomial analog-matching curves (FabFilter Pro-Q family).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This paper documents a third path: the Simper SVF topology, which pre-warps the cutoff frequency via g = tan(π·fc/fs), achieving exact cutoff placement at any frequency up to Nyquist without oversampling. All eight required filter types (Bell, LowShelf, HighShelf, LP, HP, Bandpass, Notch, AllPass) emerge from a single two-integrator core, simplifying maintenance and enabling structural modulation safety that TDF-II cannot provide.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Filter Topology
2.1 RBJ TDF-II (Legacy Path — FreeEQ8)
H(z) = (b₀ + b₁z⁻¹ + b₂z⁻²) / (1 + a₁z⁻¹ + a₂z⁻²)
Coefficients computed per the RBJ cookbook [6]. 64-bit double internal state, float I/O. Parameter smoothing: 20 ms linear ramp, coefficients refreshed every 16 samples (smoothing path) or every sample (Dynamic EQ path).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Measured Q distortion (Bell, Q=1.0, 44.1 kHz):&lt;/p&gt;

&lt;p&gt;Frequency   RBJ effective Q Error&lt;br&gt;
1 kHz   1.005   +0.5%&lt;br&gt;
8 kHz   1.337   +33.7%&lt;br&gt;
16 kHz  2.990   +199%&lt;br&gt;
2.2 Simper SVF (Modern Path — ProEQ8)&lt;br&gt;
Reference: Andrew Simper, "Solving the continuous SVF equations using trapezoidal integration and equivalent currents," Cytomic, 2013 [1].&lt;/p&gt;

&lt;p&gt;Pre-warped cutoff:&lt;/p&gt;

&lt;p&gt;g  = tan(π · fc / fs)          // exact pre-warp&lt;br&gt;
k  = 1/Q&lt;br&gt;
a1 = 1 / (1 + g·(g + k))      // shared across all filter types&lt;br&gt;
a2 = g · a1&lt;br&gt;
a3 = g · a2&lt;br&gt;
Per-sample processing (optimised bounded form):&lt;/p&gt;

&lt;p&gt;v3  = v0 - ic2eq&lt;br&gt;
t   = a2 * ic1eq               // cached — eliminates redundant mul&lt;br&gt;
v1  = a1 * ic1eq + a2 * v3    // bandpass&lt;br&gt;
v2  = ic2eq + t + a3 * v3     // lowpass&lt;br&gt;
ic1eq = v1 + v1 - ic1eq       // v+v avoids 2.0* mul&lt;br&gt;
ic2eq = v2 + v2 - ic2eq&lt;br&gt;
out = m0·v0 + m1·v1 + m2·v2  // filter-type-specific mix&lt;br&gt;
Output mix coefficients per filter type (from Simper paper §§3–8):&lt;/p&gt;

&lt;p&gt;Type    m0  m1  m2&lt;br&gt;
LP  0   0   1&lt;br&gt;
HP  1   −k    −1&lt;br&gt;
BP  0   1   0&lt;br&gt;
Bell    1   kA·(A²−1)   0&lt;br&gt;
LowShelf    1   k·(A−1)  A²−1&lt;br&gt;
HighShelf   A² k·(1−A)·A   1−A²&lt;br&gt;
where A = 10^(gainDb/40) and kA = k/A (Bell uses modified denominator).&lt;/p&gt;

&lt;p&gt;Measured performance (g++ -O3, 44.1 kHz, 512-sample block, 8-band stereo):&lt;/p&gt;

&lt;p&gt;Path    ns/sample   CPU headroom&lt;br&gt;
RBJ 8-band  40.7    277×&lt;br&gt;
SVF 8-band  70.4    161×&lt;br&gt;
SVF overhead    1.73×  —&lt;br&gt;
CPU budget used 0.62%   —&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real-Time Safety Architecture
3.1 SPSC Triple-Buffer (SpectrumFIFO)
Three buffer slots indexed by {writeSlot, midSlot, readSlot} (a permutation of {0, 1, 2}). Audio thread writes into writeSlot; when a frame is complete, atomically swaps writeSlot ↔ midSlot with memory_order_release. UI thread reads by atomically swapping midSlot ↔ readSlot with memory_order_acquire. No mutex, no lock, no blocking on either thread.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;3.2 Off-Thread FIR Reconstruction (LinearPhaseEngine)&lt;br&gt;
Linear phase mode latency: 2048 samples (4096-tap Hann-windowed FIR / 2). Parameter changes set an atomic linPhaseDirty flag. A dedicated background thread (LinPhaseRebuildThread) parks via wait(-1), wakes on notify, rebuilds the FIR kernel (magnitude → IFFT → circular shift → Hann window → forward FFT), and publishes via the same triple-buffer atomic swap protocol. Audio thread reads with a single acquire load—never blocks.&lt;/p&gt;

&lt;p&gt;3.3 Allocation-Free Hot Path&lt;br&gt;
All oversamplers (1×/2×/4×/8× via JUCE polyphase IIR) are pre-constructed in prepareToPlay() into std::array&lt;a&gt;std::unique_ptr&amp;lt;Oversampling&amp;lt;float&lt;/a&gt;&amp;gt;, 3&amp;gt;. Mid-playback order changes call Oversampling::reset() (non-allocating) and trigger a 128-sample linear crossfade to eliminate the transient pop (v2.2.3).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Variable-Cadence Dynamic EQ (v2.2.3)
Dynamic EQ recomputes biquad coefficients per-sample when active, matching the one-pole envelope follower's cadence. With all 8 bands in dynamic mode the bq.set() call dominates (22 ns/call for SVF Bell). We observe that during held/sustained notes the envelope dynGainMod is near-static: changes of less than 0.1 dB between samples are inaudible within the 4-sample batch window (0.09 ms at 44.1 kHz).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Variable-cadence algorithm:&lt;/p&gt;

&lt;p&gt;δ = |dynGainMod − lastDynGainMod|&lt;br&gt;
if δ &amp;gt; 0.1 dB:&lt;br&gt;
    update coefficients (per-sample — zero transient lag)&lt;br&gt;
    intervalCounter = 0&lt;br&gt;
else:&lt;br&gt;
    if intervalCounter++ &amp;gt;= 4:&lt;br&gt;
        update coefficients (batched)&lt;br&gt;
Measured savings at 8 bands all-dynamic, sustained note: up to 75% reduction in bq.set() calls with no audible difference. On a transient attack the first sample with δ &amp;gt; 0.1 dB immediately restores per-sample accuracy.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Allocation-Free Semantic Analysis (ResonanceDetector)
Traditional "smart EQ" products apply machine-learning inference models (Soothe2, iZotope Neutron) — opaque, CPU-heavy, non-deterministic. We introduce a deterministic alternative that adds zero latency and allocates no memory:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Take the 2048-bin log-magnitude spectrum from SpectrumFIFO (UI thread rate).&lt;br&gt;
Re-sample into a 96-bin log-frequency grid (20 Hz → Nyquist).&lt;br&gt;
Estimate local baseline via ±0.5-octave moving average.&lt;br&gt;
Flag peaks where (magnitude − baseline) ≥ 3 dB and peak is local max in ±3-bin neighbourhood.&lt;br&gt;
Score each peak: score = deviation × intentWeight(hz, mode) where intentWeight is a log-frequency Gaussian bump per IntentMode profile.&lt;br&gt;
Return top-4 suggestions: {freqHz, gainDb, q, confidence, label}.&lt;br&gt;
The intentWeight function encodes instrument-specific problem zones:&lt;/p&gt;

&lt;p&gt;Mode    Primary Bump    Zone&lt;br&gt;
VocalClean  ×1.6 at 300 Hz mud&lt;br&gt;
DrumPunch   ×1.5 at 300 Hz boxiness&lt;br&gt;
GuitarSpace ×1.5 at 250 Hz mud&lt;br&gt;
MasterPolish    ×1.3 at 250 Hz low-end buildup&lt;br&gt;
Semantic labels from FrequencyExplainer.h map frequency ranges to strings ("mud", "harshness", "sibilance", "air") enabling explain-on-hover UX.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compact View / Mini-Window (v2.2.3)
Inspired by Ableton Live's EQ Eight compact device view. Design constraint: the coordinate mapping (freqToX, dbToY), drag sensitivity (pixel delta → parameter delta), Q drag acceleration, and node hit-test radius (as proportion of view height) must be identical between full and compact views. Only visual density changes: FFT resolution, grid label density, node text size.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is enforced architecturally: setCompactMode(bool) sets a flag but never modifies the mapping functions. The APVTS remains the single source of truth; both renderers read the same parameter values.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Future Work (v2.5+)
Explicit SIMD vectorisation: group 8 bands into juce::dsp::SIMDRegister, processing 4 bands per SSE instruction or 8 via AVX2.
Cross-instance masking negotiation: via ARC-Core local IPC spine, multiple plugin instances communicate energy peaks and negotiate inverse dynamic notches.
Spectral dynamics mode: per-bin FFT threshold clamping (Soothe2 territory) using the existing overlap-add Match EQ infrastructure.
Dolby Atmos 9.1.6: expand isBusesLayoutSupported for discrete immersive channel arrays with spatial zone linking.
References
[1] A. Simper, "Solving the continuous SVF equations using trapezoidal integration and equivalent currents," Cytomic, 2013. &lt;a href="https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf" rel="noopener noreferrer"&gt;https://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;[2] W. Pirkle, "Designing Audio Effect Plugins in C++," Focal Press, 2019.&lt;/p&gt;

&lt;p&gt;[3] J. Reiss and A. McPherson, "Audio Effects: Theory, Implementation and Application," CRC Press, 2014.&lt;/p&gt;

&lt;p&gt;[4] F. Renn-Giles and D. Rowland, "Real-time 101," ADC 2019. &lt;a href="https://github.com/hogliux/farbot" rel="noopener noreferrer"&gt;https://github.com/hogliux/farbot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] JUCE, "juce::dsp::Oversampling," Articy, 2023. &lt;a href="https://docs.juce.com/master/classjuce_1_1dsp_1_1Oversampling.html" rel="noopener noreferrer"&gt;https://docs.juce.com/master/classjuce_1_1dsp_1_1Oversampling.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[6] R. Bristow-Johnson, "Audio EQ Cookbook," musicdsp.org, 1994. &lt;a href="https://www.musicdsp.org/files/Audio-EQ-Cookbook.txt" rel="noopener noreferrer"&gt;https://www.musicdsp.org/files/Audio-EQ-Cookbook.txt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dsp</category>
      <category>cpp</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>OST: Wraith Eternal</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Sat, 23 May 2026 02:56:39 +0000</pubDate>
      <link>https://dev.to/tizwildin/ost-for-my-game-wraith-eternal-58j</link>
      <guid>https://dev.to/tizwildin/ost-for-my-game-wraith-eternal-58j</guid>
      <description>&lt;p&gt;OST for my game Wraith Eternal that I made - &lt;/p&gt;

&lt;h1&gt;
  
  
  wraiths #wraitheternal #Wraith #wraitheternally #tizwildinentertainment #TizWildin #GareBearProductionz #garebear99 #garydoman #neovectr
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://soundcloud.com/tizwildin/sets/wraith-eternal-ost?si=f52c984f15f6453eac27d93ebb1328c2&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&amp;amp;utm_campaign=social_sharing" rel="noopener noreferrer"&gt;https://soundcloud.com/tizwildin/sets/wraith-eternal-ost?si=f52c984f15f6453eac27d93ebb1328c2&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&amp;amp;utm_campaign=social_sharing&lt;/a&gt; &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://garebear99.github.io/TizWildinEntertainmentHUB/" rel="noopener noreferrer" class="c-link"&gt;
            TizWildin Entertainment HUB — Free Plugins, Sample Packs, Audio Lists &amp;amp; ARC Source Spine
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Free audio plugins, producer kits, sample packs, public discovery lists, and ARC source-spine links from GareBear99 / TizWildin.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          garebear99.github.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/GareBear99" rel="noopener noreferrer"&gt;
        GareBear99
      &lt;/a&gt; / &lt;a href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;
        FreeEQ8
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      FreeEQ8 is a professional-grade, free and open-source 8-band parametric EQ plugin for macOS, Linux, and Windows. Linear phase, dynamic EQ, match EQ, per-band drive, band linking, M/S processing, oversampling, and a real-time spectrum analyzer. FabFilter Pro-Q alternative for $0–$20
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;blockquote&gt;
&lt;p&gt;🎛️ Part of the &lt;a href="https://garebear99.github.io/TizWildinEntertainmentHUB/" rel="nofollow noopener noreferrer"&gt;TizWildin Plugin Ecosystem&lt;/a&gt; — 20+ free audio plugins, creator tools, lists, deconstructed-loop routers, and release surfaces.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;FreeEQ8&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/FreeVox8" rel="noopener noreferrer"&gt;FreeVox8&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/XyloCore" rel="noopener noreferrer"&gt;XyloCore&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/Instrudio" rel="noopener noreferrer"&gt;Instrudio&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/Therum_JUCE-Plugin" rel="noopener noreferrer"&gt;Therum&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/BassMaid" rel="noopener noreferrer"&gt;BassMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/SpaceMaid" rel="noopener noreferrer"&gt;SpaceMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/GlueMaid" rel="noopener noreferrer"&gt;GlueMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/MixMaid" rel="noopener noreferrer"&gt;MixMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/MultiMaid" rel="noopener noreferrer"&gt;MultiMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/MeterMaid" rel="noopener noreferrer"&gt;MeterMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/ChainMaid" rel="noopener noreferrer"&gt;ChainMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/PaintMask_Free-JUCE-Plugin" rel="noopener noreferrer"&gt;PaintMask&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/WURP_Toxic-Motion-Engine_JUCE" rel="noopener noreferrer"&gt;WURP&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/AETHER_Choir-Atmosphere-Designer" rel="noopener noreferrer"&gt;AETHER&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/WhisperGate_Free-JUCE-Plugin" rel="noopener noreferrer"&gt;WhisperGate&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/RiftWaveSuite_RiftSynth_WaveForm_Lite" rel="noopener noreferrer"&gt;RiftWave&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/FreeSampler_v0.3" rel="noopener noreferrer"&gt;FreeSampler&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/VF-PlexLab" rel="noopener noreferrer"&gt;VF-PlexLab&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/PAP-Forge-Audio" rel="noopener noreferrer"&gt;PAP-Forge-Audio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🎧 &lt;strong&gt;SoundCloud:&lt;/strong&gt; &lt;a href="https://soundcloud.com/tizwildin" rel="nofollow noopener noreferrer"&gt;TizWildin on SoundCloud&lt;/a&gt; — original music, remixes, VIP mixes, experimental drops, and underground releases.&lt;/p&gt;
&lt;p&gt;🎁 &lt;a href="https://github.com/GareBear99/FreeEQ8#tizwildin-free-sample-packs" rel="noopener noreferrer"&gt;Free Packs &amp;amp; Samples&lt;/a&gt; — jump to free packs &amp;amp; samples&lt;/p&gt;
&lt;p&gt;🎵 &lt;a href="https://github.com/GareBear99/awesome-audio-plugins-dev" rel="noopener noreferrer"&gt;Awesome Audio&lt;/a&gt; — My (FREE) Awesome Audio Dev List&lt;/p&gt;
&lt;p&gt;▶️ &lt;strong&gt;&lt;a href="https://www.youtube.com/@gfgfvmhj" rel="nofollow noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/strong&gt; — music, visuals, demos, and releases&lt;br&gt;
🌊 &lt;strong&gt;&lt;a href="https://github.com/GareBear99/Voxel_Audio" rel="noopener noreferrer"&gt;Voxel Audio&lt;/a&gt;&lt;/strong&gt; — free RGB waveform visualizer and audio export tool&lt;br&gt;
📘 &lt;strong&gt;&lt;a href="https://www.facebook.com/profile.php?id=61564485196765" rel="nofollow noopener noreferrer"&gt;Facebook Page&lt;/a&gt;&lt;/strong&gt; — TizWildin / GareBearProductionz updates and Media&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;🎧 &lt;a href="https://github.com/GareBear99/awesome-audio-lists" rel="noopener noreferrer"&gt;Awesome Audio Lists&lt;/a&gt; — even more audio lists, submission routes, and promotional directories&lt;/p&gt;
&lt;div&gt;
  &lt;a href="https://github.com/GareBear99/FreeEQ8/docs/FEATURED_ON.md" rel="noopener noreferrer"&gt;&lt;b&gt;⭐ Featured / submitted on&lt;/b&gt; — full tracker →&lt;/a&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>programming</category>
      <category>gamedev</category>
      <category>gamechallenge</category>
    </item>
    <item>
      <title>Neo-VECTR's Rift Ascent</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Sat, 23 May 2026 02:19:50 +0000</pubDate>
      <link>https://dev.to/tizwildin/neo-vectrs-rift-ascent-1ca1</link>
      <guid>https://dev.to/tizwildin/neo-vectrs-rift-ascent-1ca1</guid>
      <description>&lt;h1&gt;
  
  
  Rift Ascent Is Live
&lt;/h1&gt;

&lt;p&gt;Been building systems, tools, audio tech, AI infrastructure, and experimental engines nonstop — but I also wanted to make something people could instantly jump into and experience.&lt;/p&gt;

&lt;p&gt;So here’s Rift Ascent.&lt;/p&gt;

&lt;p&gt;A fast experimental browser game/project built as part of the larger ecosystem I’ve been developing under TizWildin Entertainment.&lt;/p&gt;

&lt;p&gt;Main Hub:&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://garebear99.github.io/TizWildinEntertainmentHUB/" rel="noopener noreferrer" class="c-link"&gt;
            TizWildin Entertainment HUB — Free Plugins, Sample Packs, Audio Lists &amp;amp; ARC Source Spine
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Free audio plugins, producer kits, sample packs, public discovery lists, and ARC source-spine links from GareBear99 / TizWildin.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          garebear99.github.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;━━━━━━━━━━━━━━━━━━&lt;br&gt;
PLAY RIFT ASCENT&lt;br&gt;
━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;Live Demo:&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://garebear99.github.io/RiftAscent/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;garebear99.github.io&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;━━━━━━━━━━━━━━━━━━&lt;br&gt;
SOURCE CODE&lt;br&gt;
━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;GitHub Repo:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/GareBear99" rel="noopener noreferrer"&gt;
        GareBear99
      &lt;/a&gt; / &lt;a href="https://github.com/GareBear99/RiftAscent" rel="noopener noreferrer"&gt;
        RiftAscent
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      GENERATOR: RIFT ASCENT — Infinite Heat. A canvas-based action game with prestige cycles, upgrades, co-op, and procedural audio. Coming to iOS &amp;amp; Android.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;GENERATOR: RIFT ASCENT&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Infinite Heat&lt;/strong&gt; — A canvas-based action game with prestige cycles, upgrades, co-op, and procedural audio.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🔐 &lt;strong&gt;Built on &lt;a href="https://github.com/GareBear99/ARC-Core" rel="noopener noreferrer"&gt;ARC-Core&lt;/a&gt;&lt;/strong&gt; — the authoritative event-and-receipt engine. Every player action, wave, prestige cycle, upgrade, and leaderboard submission is an ARC-Core-shaped event with a SHA-256 receipt. The receipt chain &lt;em&gt;is&lt;/em&gt; the anti-cheat layer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎮 Play Now&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://garebear99.github.io/RiftAscent/" rel="nofollow noopener noreferrer"&gt;https://garebear99.github.io/RiftAscent/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prestige Cycle&lt;/strong&gt; — 100-wave loop with meta progression&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infinite Heat&lt;/strong&gt; — Endless mode with scaling difficulty via wave composition and pressure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade Economy&lt;/strong&gt; — Enemies drop credits; spend at the shop to evolve builds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geo Droids&lt;/strong&gt; — Cube, Prism, Arc, Mine companions with unique abilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Procedural Audio&lt;/strong&gt; — Rift Synthwave engine that reacts to gameplay state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Co-op&lt;/strong&gt; — Local and online multiplayer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily Challenges&lt;/strong&gt; — Seeded runs with leaderboards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1000 Achievements&lt;/strong&gt; — Deep progression tracking&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Controls&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;WASD&lt;/td&gt;
&lt;td&gt;Move&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LMB&lt;/td&gt;
&lt;td&gt;Shoot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RMB&lt;/td&gt;
&lt;td&gt;Fireball&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;Bomb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SHIFT&lt;/td&gt;
&lt;td&gt;Dash (tap)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SPACE&lt;/td&gt;
&lt;td&gt;Overdrive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Shop&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GareBear99/RiftAscent" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Backened: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/GareBear99" rel="noopener noreferrer"&gt;
        GareBear99
      &lt;/a&gt; / &lt;a href="https://github.com/GareBear99/ARC-Core" rel="noopener noreferrer"&gt;
        ARC-Core
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ARC-Core is a signal-intelligence event spine — a deterministic kernel built to host every project its author has ever developed, in tandem and smoothly, through one universal discipline: every state change is an event, every event produces a signed receipt, and every receipt is authority-gated.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ARC-Core&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;ARC-Core is a signal-intelligence event spine — a deterministic kernel built to host every project its author has ever developed, in tandem and smoothly, through one universal discipline: every state change is an event, every event produces a signed receipt, and every receipt is authority-gated.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The design bet is simple and falsifiable: if a system — a game, a simulator, a plugin backend, a governed-AI training loop, an archive manager, a language engine, a binary runtime, a cognition lab — can be modeled as &lt;em&gt;entities, events, authority, and receipts&lt;/em&gt;, then ARC-Core can serve as its spine. In theory the entire author's project ecosystem (games, engines, simulators, audio plugins, governed-AI stack, archives, languages, binary runtimes) can ride on one ARC-Core authority layer without any project owning another's truth. The seven-repo governed-AI ecosystem plus the five active consumer applications (see below) are the current concrete evidence of that bet.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Inspiration&lt;/strong&gt;…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GareBear99/ARC-Core" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Also, this is the Audio Plugin Suite I made to back it..&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/GareBear99" rel="noopener noreferrer"&gt;
        GareBear99
      &lt;/a&gt; / &lt;a href="https://github.com/GareBear99/RiftWaveSuite_RiftSynth_WaveForm_Lite" rel="noopener noreferrer"&gt;
        RiftWaveSuite_RiftSynth_WaveForm_Lite
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This repository contains the shared DSP, analyzer, sequencing, preset, UI, and infrastructure code used by: WaveForm / RiftSynth / Lite Combo (Free)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;blockquote&gt;
&lt;p&gt;🎛️ Part of the &lt;a href="https://garebear99.github.io/TizWildinEntertainmentHUB/" rel="nofollow noopener noreferrer"&gt;TizWildin Plugin Ecosystem&lt;/a&gt; — 19 free audio plugins with a live update dashboard.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/GareBear99/FreeEQ8" rel="noopener noreferrer"&gt;FreeEQ8&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/XyloCore" rel="noopener noreferrer"&gt;XyloCore&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/Instrudio" rel="noopener noreferrer"&gt;Instrudio&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/Therum_JUCE-Plugin" rel="noopener noreferrer"&gt;Therum&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/BassMaid" rel="noopener noreferrer"&gt;BassMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/SpaceMaid" rel="noopener noreferrer"&gt;SpaceMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/GlueMaid" rel="noopener noreferrer"&gt;GlueMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/MixMaid" rel="noopener noreferrer"&gt;MixMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/MultiMaid" rel="noopener noreferrer"&gt;MultiMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/MeterMaid" rel="noopener noreferrer"&gt;MeterMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/ChainMaid" rel="noopener noreferrer"&gt;ChainMaid&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/PaintMask_Free-JUCE-Plugin" rel="noopener noreferrer"&gt;PaintMask&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/WURP_Toxic-Motion-Engine_JUCE" rel="noopener noreferrer"&gt;WURP&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/AETHER_Choir-Atmosphere-Designer" rel="noopener noreferrer"&gt;AETHER&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/WhisperGate_Free-JUCE-Plugin" rel="noopener noreferrer"&gt;WhisperGate&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/RiftWaveSuite_RiftSynth_WaveForm_Lite" rel="noopener noreferrer"&gt;RiftWave&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/FreeSampler_v0.3" rel="noopener noreferrer"&gt;FreeSampler&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/VF-PlexLab" rel="noopener noreferrer"&gt;VF-PlexLab&lt;/a&gt; · &lt;a href="https://github.com/GareBear99/PAP-Forge-Audio" rel="noopener noreferrer"&gt;PAP-Forge-Audio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🎁 &lt;a href="https://github.com/GareBear99/RiftWaveSuite_RiftSynth_WaveForm_Lite#tizwildin-free-sample-packs" rel="noopener noreferrer"&gt;Free Packs &amp;amp; Samples&lt;/a&gt; — jump to free packs &amp;amp; samples&lt;/p&gt;
&lt;p&gt;🎵 &lt;a href="https://github.com/GareBear99/awesome-audio-plugins-dev" rel="noopener noreferrer"&gt;Awesome Audio&lt;/a&gt; — (FREE) Awesome Audio Dev List&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;RiftWaveSuite&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;WaveForm / RiftSynth / Lite Combo (Free)&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;WaveForm / RiftSynth Lite&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Free hybrid audio plugin combining &lt;strong&gt;real-time visualization&lt;/strong&gt; and &lt;strong&gt;seed-based generative synthesis&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;WaveForm / RiftSynth Lite serves as the entry point to the RiftWave plugin ecosystem.&lt;/p&gt;
&lt;p&gt;It includes lightweight versions of two plugins:&lt;/p&gt;
&lt;p&gt;• WaveForm Pro&lt;br&gt;
• RiftSynth Pro&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Features&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;WaveForm Lite&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Real-time audio visualization.&lt;/p&gt;
&lt;p&gt;Includes:&lt;/p&gt;
&lt;p&gt;• waveform display&lt;br&gt;
• spectrum analyzer&lt;br&gt;
• stereo scope&lt;br&gt;
• energy visualization&lt;/p&gt;
&lt;p&gt;Designed to be lightweight and…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GareBear99/RiftWaveSuite_RiftSynth_WaveForm_Lite" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;━━━━━━━━━━━━━━━━━━&lt;br&gt;
WHAT IT IS&lt;br&gt;
━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;Rift Ascent is part gameplay experiment, part rendering sandbox, part rapid-development testbed.&lt;/p&gt;

&lt;p&gt;Built solo while simultaneously developing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI tooling&lt;/li&gt;
&lt;li&gt;music production systems&lt;/li&gt;
&lt;li&gt;JUCE-based audio software&lt;/li&gt;
&lt;li&gt;web infrastructure&lt;/li&gt;
&lt;li&gt;browser-based interactive systems&lt;/li&gt;
&lt;li&gt;cross-domain experimental projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal wasn’t just “make a game.”&lt;/p&gt;

&lt;p&gt;The goal was building a reusable ecosystem where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;visuals&lt;/li&gt;
&lt;li&gt;gameplay&lt;/li&gt;
&lt;li&gt;audio&lt;/li&gt;
&lt;li&gt;tooling&lt;/li&gt;
&lt;li&gt;deployment&lt;/li&gt;
&lt;li&gt;experimentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;can all evolve together.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━&lt;br&gt;
WHY BROWSER-BASED?&lt;br&gt;
━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;Because instant access matters.&lt;/p&gt;

&lt;p&gt;No installs.&lt;br&gt;
No launcher.&lt;br&gt;
No friction.&lt;/p&gt;

&lt;p&gt;Open link → play immediately.&lt;/p&gt;

&lt;p&gt;That philosophy is becoming more important as indie developers compete against massive production pipelines.&lt;/p&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━&lt;br&gt;
FEEDBACK WANTED&lt;br&gt;
━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;I’m actively iterating on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mechanics&lt;/li&gt;
&lt;li&gt;visuals&lt;/li&gt;
&lt;li&gt;movement feel&lt;/li&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;progression systems&lt;/li&gt;
&lt;li&gt;environmental design&lt;/li&gt;
&lt;li&gt;audio integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it, let me know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what feels good&lt;/li&gt;
&lt;li&gt;what feels bad&lt;/li&gt;
&lt;li&gt;what you’d expand&lt;/li&gt;
&lt;li&gt;what you’d remove entirely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;━━━━━━━━━━━━━━━━━━&lt;br&gt;
BIGGER ECOSYSTEM&lt;br&gt;
━━━━━━━━━━━━━━━━━━&lt;/p&gt;

&lt;p&gt;Rift Ascent is connected to a much larger solo-built ecosystem currently in development through:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/GareBear99" rel="noopener noreferrer"&gt;https://github.com/GareBear99&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI infrastructure&lt;/li&gt;
&lt;li&gt;audio tools&lt;/li&gt;
&lt;li&gt;experimental engines&lt;/li&gt;
&lt;li&gt;production utilities&lt;/li&gt;
&lt;li&gt;browser-native systems&lt;/li&gt;
&lt;li&gt;game prototypes&lt;/li&gt;
&lt;li&gt;interactive media experiments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trying to prove you can still build ambitious multi-domain projects independently without a giant studio behind you.&lt;/p&gt;

&lt;p&gt;Would love feedback from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;indie devs&lt;/li&gt;
&lt;li&gt;gameplay programmers&lt;/li&gt;
&lt;li&gt;web engine developers&lt;/li&gt;
&lt;li&gt;audio people&lt;/li&gt;
&lt;li&gt;shader/rendering nerds&lt;/li&gt;
&lt;li&gt;experimental game designers&lt;/li&gt;
&lt;li&gt;anyone interested in browser-native games&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  gamedev
&lt;/h1&gt;

&lt;h1&gt;
  
  
  indiedev
&lt;/h1&gt;

&lt;h1&gt;
  
  
  webdev
&lt;/h1&gt;

&lt;h1&gt;
  
  
  javascript
&lt;/h1&gt;

&lt;h1&gt;
  
  
  github
&lt;/h1&gt;

&lt;h1&gt;
  
  
  opensource
&lt;/h1&gt;

&lt;h1&gt;
  
  
  browsergames
&lt;/h1&gt;

&lt;h1&gt;
  
  
  gamedesign
&lt;/h1&gt;

&lt;h1&gt;
  
  
  indiegame
&lt;/h1&gt;

&lt;h1&gt;
  
  
  programming
&lt;/h1&gt;

&lt;h1&gt;
  
  
  creativecoding
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>gamedev</category>
      <category>gamechallenge</category>
    </item>
    <item>
      <title>Wraith Eternal &amp; The RoadMap to Permanence..</title>
      <dc:creator>Gary Doman/TizWildin</dc:creator>
      <pubDate>Sat, 23 May 2026 02:01:31 +0000</pubDate>
      <link>https://dev.to/tizwildin/wraith-eternal-the-roadmap-to-permanence-40ih</link>
      <guid>https://dev.to/tizwildin/wraith-eternal-the-roadmap-to-permanence-40ih</guid>
      <description>&lt;p&gt;100% has everything to do with game development, geometrical patterning to be exact NEEDS to always equate to flower of life math and be deterministically auditable, otherwise your movie magicking everything.. nothing about my mechanics are fake. All math and code, so this is entirely relevant to a real developer and why it was probably accepted as a post..&lt;/p&gt;

&lt;p&gt;"idk who else needs to hear this, but heres your daily soul pattern recognition target for today - "roman numerals are highly intelligent because they not only count perfectly, they are also perfectly alphabetical, 'I' will always come before 'V' making it a perfect both alphabetical and numerical counting system, we would actually get further as a society counting in roman numerals &amp;amp; not numbers which are one sided"&lt;/p&gt;

&lt;p&gt;Meaning: &lt;/p&gt;

&lt;p&gt;Roman numerals force contextual interpretation instead of pure abstraction. Modern numeric systems optimize computation, but they also flatten symbolic relationships into raw utility. The point wasn’t “Roman numerals are mathematically superior,” it’s that older systems encoded layered meaning, hierarchy, and relational structure differently than modern reductionist systems do.&lt;br&gt;
“Soul pattern recognition target” just means provoking people to think outside deterministic defaults for 5 seconds instead of treating every statement like a spreadsheet problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ffm.bio/no4km87" rel="noopener noreferrer"&gt;https://ffm.bio/no4km87&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  TizWildin #tizwildinentertainment #GareBearProductionz #garebear99 #garydoman #quotes #quotesoftheday"
&lt;/h1&gt;

&lt;p&gt;"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/GareBear99/GareBear99" rel="noopener noreferrer"&gt;https://github.com/GareBear99/GareBear99&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Press / Coverage &lt;br&gt;
&lt;a href="https://rekkerd.org/free-freeeq8-parametric-eq-effect-plugin-by-gary-doman/" rel="noopener noreferrer"&gt;https://rekkerd.org/free-freeeq8-parametric-eq-effect-plugin-by-gary-doman/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wraith Eternal OST &lt;br&gt;
&lt;a href="https://soundcloud.com/tizwildin/sets/wraith-eternal-ost?si=2ef419ad6d5c47c0a341262459f99b01&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&amp;amp;utm_campaign=social_sharing" rel="noopener noreferrer"&gt;https://soundcloud.com/tizwildin/sets/wraith-eternal-ost?si=2ef419ad6d5c47c0a341262459f99b01&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&amp;amp;utm_campaign=social_sharing&lt;/a&gt;&lt;/p&gt;

</description>
      <category>permanence</category>
      <category>ai</category>
      <category>programming</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
