From 8eb139704352c35a97000f608110f5a1a096dc59 Mon Sep 17 00:00:00 2001 From: mynameisdeleted Date: Fri, 4 Sep 2026 11:43:52 -0400 Subject: [PATCH] feat: apply Option A linear forward path topology with wlim and tlim as final output stages --- graph.json | 91 +++++++++---------------- laptop-configs/apple/mbp15_1/graph.json | 77 ++++++++------------- 2 files changed, 61 insertions(+), 107 deletions(-) diff --git a/graph.json b/graph.json index a5904dc..0db560e 100644 --- a/graph.json +++ b/graph.json @@ -28,9 +28,6 @@ "mode": 0, "g_in": 1.0, "g_out": 1.5, - "__comment__":"(for f>100) g_N = g_ref * (f_ref / f_N) ^ log2(sqrt(1.5))", - "__comment3__":"note the excessive bass gains require a solid multiband compressor", - "__comment4__":" macbook speakers dont pass f_N<80, thus these frequences are 100% virtualbass", "ft_0": 2, "f_0": 20.0, "g_0": 2.5637, "q_0": 1.41, "s_0": 3, "xm_0": 0, "fm_0": 0, "ft_1": 1, "f_1": 31.5, "g_1": 2.2448, "q_1": 1.41, "s_1": 0, "xm_1": 0, "fm_1": 0, "ft_2": 1, "f_2": 50.0, "g_2": 1.9610, "q_2": 1.41, "s_2": 0, "xm_2": 0, "fm_2": 0, @@ -81,18 +78,14 @@ "cbe_5": 1, "sf_5": 120.0, "cbe_6": 1, "sf_6": 200.0, "cbe_7": 1, "sf_7": 500.0, - "cbe_8": 1, "sf_8": 1000.0, - "cbe_9": 1, "sf_9": 2000.0, - "ce_0": 1, "at_0": 5.0, "rt_0": 100.0, "cr_0": 30.0, "kn_0": 0.10, "al_0": 0.014, "mk_0": 1.0, "bth_0": 1.0, "bsa_0": 1.0, "scm_0": 0, - "ce_1": 1, "at_1": 6.0, "rt_1": 110.0, "cr_1": 30.0, "kn_1": 0.10, "al_1": 0.060, "mk_1": 1.0, "bth_1": 1.0, "bsa_1": 1.0, "scm_1": 0, - "ce_2": 1, "at_2": 6.0, "rt_2": 100.0, "cr_2": 25.0, "kn_2": 0.12, "al_2": 0.080, "mk_2": 1.1, "bth_2": 1.0, "bsa_2": 1.0, "scm_2": 0, - "ce_3": 1, "at_3": 5.0, "rt_3": 90.0, "cr_3": 20.0, "kn_3": 0.12, "al_3": 0.100, "mk_3": 1.2, "bth_3": 1.0, "bsa_3": 1.0, "scm_3": 0, - "ce_4": 1, "at_4": 4.5, "rt_4": 80.0, "cr_4": 16.0, "kn_4": 0.15, "al_4": 0.130, "mk_4": 1.3, "bth_4": 1.0, "bsa_4": 1.0, "scm_4": 0, - "ce_5": 1, "at_5": 4.0, "rt_5": 60.0, "cr_5": 10.0, "kn_5": 0.20, "al_5": 0.200, "mk_5": 1.5, "bth_5": 1.0, "bsa_5": 1.0, "scm_5": 0, + "ce_0": 1, "at_0": 5.0, "rt_0": 100.0, "cr_0": 30.0, "kn_0": 0.10, "al_0": 0.025, "mk_0": 1.0, "bth_0": 1.0, "bsa_0": 1.0, "scm_0": 0, + "ce_1": 1, "at_1": 6.0, "rt_1": 110.0, "cr_1": 30.0, "kn_1": 0.10, "al_1": 0.050, "mk_1": 1.0, "bth_1": 1.0, "bsa_1": 1.0, "scm_1": 0, + "ce_2": 1, "at_2": 6.0, "rt_2": 100.0, "cr_2": 25.0, "kn_2": 0.12, "al_2": 0.070, "mk_2": 1.1, "bth_2": 1.0, "bsa_2": 1.0, "scm_2": 0, + "ce_3": 1, "at_3": 5.0, "rt_3": 90.0, "cr_3": 20.0, "kn_3": 0.12, "al_3": 0.090, "mk_3": 1.2, "bth_3": 1.0, "bsa_3": 1.0, "scm_3": 0, + "ce_4": 1, "at_4": 4.5, "rt_4": 80.0, "cr_4": 16.0, "kn_4": 0.15, "al_4": 0.120, "mk_4": 1.3, "bth_4": 1.0, "bsa_4": 1.0, "scm_4": 0, + "ce_5": 1, "at_5": 4.0, "rt_5": 60.0, "cr_5": 10.0, "kn_5": 0.20, "al_5": 0.250, "mk_5": 1.5, "bth_5": 1.0, "bsa_5": 1.0, "scm_5": 0, "ce_6": 1, "at_6": 3.0, "rt_6": 40.0, "cr_6": 6.0, "kn_6": 0.30, "al_6": 0.300, "mk_6": 1.4, "bth_6": 1.0, "bsa_6": 1.0, "scm_6": 0, - "ce_7": 1, "at_7": 2.5, "rt_7": 30.0, "cr_7": 4.0, "kn_7": 0.40, "al_7": 0.300, "mk_7": 1.2, "bth_7": 1.0, "bsa_7": 1.0, "scm_7": 0, - "ce_8": 1, "at_8": 2.0, "rt_8": 20.0, "cr_8": 2.0, "kn_8": 0.50, "al_8": 0.300, "mk_8": 1.0, "bth_8": 1.0, "bsa_8": 1.0, "scm_8": 0, - "ce_9": 1, "at_9": 1.5, "rt_9": 10.0, "cr_9": 1.0, "kn_9": 0.60, "al_9": 0.300, "mk_9": 1.0, "bth_9": 1.0, "bsa_9": 1.0, "scm_9": 0 + "ce_7": 1, "at_7": 2.5, "rt_7": 30.0, "cr_7": 4.0, "kn_7": 0.40, "al_7": 0.300, "mk_7": 1.2, "bth_7": 1.0, "bsa_7": 1.0, "scm_7": 0 } }, { @@ -179,6 +172,23 @@ "gain": 1.2 } }, + { + "type": "lv2", + "name": "thermal_guard", + "plugin": "http://lsp-plug.in/plugins/lv2/sc_compressor_stereo", + "control": { + "enabled": 1, + "g_in": 1.0, + "g_out": 1.0, + "at": 2500.0, + "rt": 5000.0, + "al": 0.4, + "cr": 4.0, + "kn": 0.5, + "scp": 0, + "scm": 1 + } + }, { "type": "lv2", "name": "wlim", @@ -189,50 +199,21 @@ "release": 0.25 } }, - { - "type": "lv2", - "name": "thermal_guard", - "plugin": "http://lsp-plug.in/plugins/lv2/sc_compressor_stereo", - "control": { - "enabled": 1, - "mode": 1, - "g_in": 1.0, - "g_out": 1.0, - "at": 2500.0, - "rt": 5000.0, - "al": 0.4, - "cr": 4.0, - "kn": 0.5, - "scp": 1, - "scm": 1, - "__comment_thermal__": "VIRTUAL VOICE-COIL WOOFER THERMAL GUARD (500mW Rating)", - "__comment_power__": "P_peak = V_peak^2 / R_vc = 5.0^2 / 4.0 = 6.25W Peak per Channel", - "__comment_threshold__": "Linear RMS Threshold: al = sqrt(P_continuous / P_peak) = sqrt(1.0W / 6.25W) = sqrt(0.16) = 0.4 (-7.96 dBFS)", - "__comment_timing__": "Thermal Integration (at): 2500ms (2.5s heating tau), Thermal Cooling (rt): 5000ms (5.0s exponential decay into air gap)", - "__comment_instructions__": "TO RECALIBRATE: Set al = sqrt(P_target_watts / 6.25W). Set at = tau_heat_ms, rt = tau_cool_ms." - } - }, { "type": "lv2", "name": "tweeter_thermal_guard", "plugin": "http://lsp-plug.in/plugins/lv2/sc_compressor_stereo", "control": { "enabled": 1, - "mode": 1, "g_in": 1.0, "g_out": 1.0, "at": 1000.0, - "rt": 2500.0, - "al": 0.109545, + "rt": 2000.0, + "al": 0.126491, "cr": 4.0, "kn": 0.5, - "scp": 1, - "scm": 1, - "__comment_thermal__": "ULTRA-SAFE VIRTUAL VOICE-COIL TWEETER THERMAL GUARD (75mW Rating)", - "__comment_power__": "P_peak = V_peak^2 / R_vc = 5.0^2 / 4.0 = 6.25W Peak per Channel", - "__comment_threshold__": "Linear RMS Threshold: al = sqrt(P_continuous / P_peak) = sqrt(0.075W / 6.25W) = sqrt(0.012) = 0.109545 (-19.21 dBFS)", - "__comment_timing__": "Thermal Integration (at): 1000ms (1.0s heating tau), Thermal Cooling (rt): 2500ms (2.5s exponential decay into air gap)", - "__comment_instructions__": "TO RECALIBRATE: Set al = sqrt(P_target_watts / 6.25W). Set at = tau_heat_ms, rt = tau_cool_ms." + "scp": 0, + "scm": 1 } }, { @@ -261,16 +242,12 @@ {"output": "copyL:Out", "input": "convLW:In"}, {"output": "copyR:Out", "input": "convRT:In"}, {"output": "copyR:Out", "input": "convRW:In"}, - {"output": "convLW:Out", "input": "wlim:in_1"}, - {"output": "convRW:Out", "input": "wlim:in_2"}, - {"output": "wlim:out_1", "input": "thermal_guard:in_l"}, - {"output": "wlim:out_2", "input": "thermal_guard:in_r"}, - {"output": "wlim:out_1", "input": "thermal_guard:sc_l"}, - {"output": "wlim:out_2", "input": "thermal_guard:sc_r"}, + {"output": "convLW:Out", "input": "thermal_guard:in_l"}, + {"output": "convRW:Out", "input": "thermal_guard:in_r"}, + {"output": "thermal_guard:out_l", "input": "wlim:in_1"}, + {"output": "thermal_guard:out_r", "input": "wlim:in_2"}, {"output": "convLT:Out", "input": "tweeter_thermal_guard:in_l"}, {"output": "convRT:Out", "input": "tweeter_thermal_guard:in_r"}, - {"output": "convLT:Out", "input": "tweeter_thermal_guard:sc_l"}, - {"output": "convRT:Out", "input": "tweeter_thermal_guard:sc_r"}, {"output": "tweeter_thermal_guard:out_l", "input": "tlim:in_1"}, {"output": "tweeter_thermal_guard:out_r", "input": "tlim:in_2"} ], @@ -279,8 +256,8 @@ "user_eq:in_r" ], "outputs": [ - "thermal_guard:out_l", - "thermal_guard:out_r", + "wlim:out_1", + "wlim:out_2", "tlim:out_1", "tlim:out_2" ], diff --git a/laptop-configs/apple/mbp15_1/graph.json b/laptop-configs/apple/mbp15_1/graph.json index fff7a3c..0db560e 100644 --- a/laptop-configs/apple/mbp15_1/graph.json +++ b/laptop-configs/apple/mbp15_1/graph.json @@ -28,9 +28,6 @@ "mode": 0, "g_in": 1.0, "g_out": 1.5, - "__comment__":"(for f>100) g_N = g_ref * (f_ref / f_N) ^ log2(sqrt(1.5))", - "__comment3__":"note the excessive bass gains require a solid multiband compressor", - "__comment4__":" macbook speakers dont pass f_N<80, thus these frequences are 100% virtualbass", "ft_0": 2, "f_0": 20.0, "g_0": 2.5637, "q_0": 1.41, "s_0": 3, "xm_0": 0, "fm_0": 0, "ft_1": 1, "f_1": 31.5, "g_1": 2.2448, "q_1": 1.41, "s_1": 0, "xm_1": 0, "fm_1": 0, "ft_2": 1, "f_2": 50.0, "g_2": 1.9610, "q_2": 1.41, "s_2": 0, "xm_2": 0, "fm_2": 0, @@ -81,8 +78,6 @@ "cbe_5": 1, "sf_5": 120.0, "cbe_6": 1, "sf_6": 200.0, "cbe_7": 1, "sf_7": 500.0, - "cbe_8": 1, "sf_8": 1000.0, - "cbe_9": 1, "sf_9": 2000.0, "ce_0": 1, "at_0": 5.0, "rt_0": 100.0, "cr_0": 30.0, "kn_0": 0.10, "al_0": 0.025, "mk_0": 1.0, "bth_0": 1.0, "bsa_0": 1.0, "scm_0": 0, "ce_1": 1, "at_1": 6.0, "rt_1": 110.0, "cr_1": 30.0, "kn_1": 0.10, "al_1": 0.050, "mk_1": 1.0, "bth_1": 1.0, "bsa_1": 1.0, "scm_1": 0, "ce_2": 1, "at_2": 6.0, "rt_2": 100.0, "cr_2": 25.0, "kn_2": 0.12, "al_2": 0.070, "mk_2": 1.1, "bth_2": 1.0, "bsa_2": 1.0, "scm_2": 0, @@ -90,9 +85,7 @@ "ce_4": 1, "at_4": 4.5, "rt_4": 80.0, "cr_4": 16.0, "kn_4": 0.15, "al_4": 0.120, "mk_4": 1.3, "bth_4": 1.0, "bsa_4": 1.0, "scm_4": 0, "ce_5": 1, "at_5": 4.0, "rt_5": 60.0, "cr_5": 10.0, "kn_5": 0.20, "al_5": 0.250, "mk_5": 1.5, "bth_5": 1.0, "bsa_5": 1.0, "scm_5": 0, "ce_6": 1, "at_6": 3.0, "rt_6": 40.0, "cr_6": 6.0, "kn_6": 0.30, "al_6": 0.300, "mk_6": 1.4, "bth_6": 1.0, "bsa_6": 1.0, "scm_6": 0, - "ce_7": 1, "at_7": 2.5, "rt_7": 30.0, "cr_7": 4.0, "kn_7": 0.40, "al_7": 0.300, "mk_7": 1.2, "bth_7": 1.0, "bsa_7": 1.0, "scm_7": 0, - "ce_8": 1, "at_8": 2.0, "rt_8": 20.0, "cr_8": 2.0, "kn_8": 0.50, "al_8": 0.300, "mk_8": 1.0, "bth_8": 1.0, "bsa_8": 1.0, "scm_8": 0, - "ce_9": 1, "at_9": 1.5, "rt_9": 10.0, "cr_9": 1.0, "kn_9": 0.60, "al_9": 0.300, "mk_9": 1.0, "bth_9": 1.0, "bsa_9": 1.0, "scm_9": 0 + "ce_7": 1, "at_7": 2.5, "rt_7": 30.0, "cr_7": 4.0, "kn_7": 0.40, "al_7": 0.300, "mk_7": 1.2, "bth_7": 1.0, "bsa_7": 1.0, "scm_7": 0 } }, { @@ -179,23 +172,12 @@ "gain": 1.2 } }, - { - "type": "lv2", - "name": "wlim", - "plugin": "http://plugin.org.uk/swh-plugins/fastLookaheadLimiter", - "control": { - "ingain": 0, - "limit": -0.5, - "release": 0.25 - } - }, { "type": "lv2", "name": "thermal_guard", "plugin": "http://lsp-plug.in/plugins/lv2/sc_compressor_stereo", "control": { "enabled": 1, - "mode": 1, "g_in": 1.0, "g_out": 1.0, "at": 2500.0, @@ -203,13 +185,18 @@ "al": 0.4, "cr": 4.0, "kn": 0.5, - "scp": 1, - "scm": 1, - "__comment_thermal__": "VIRTUAL VOICE-COIL WOOFER THERMAL GUARD (1.0W Rating)", - "__comment_power__": "P_peak = V_peak^2 / R_vc = 5.0^2 / 4.0 = 6.25W Peak per Channel", - "__comment_threshold__": "Linear RMS Threshold: al = sqrt(P_continuous / P_peak) = sqrt(1.0W / 6.25W) = sqrt(0.16) = 0.4 (-7.96 dBFS)", - "__comment_timing__": "Thermal Integration (at): 2500ms (2.5s heating tau), Thermal Cooling (rt): 5000ms (5.0s exponential decay into air gap)", - "__comment_instructions__": "TO RECALIBRATE: Set al = sqrt(P_target_watts / 6.25W). Set at = tau_heat_ms, rt = tau_cool_ms." + "scp": 0, + "scm": 1 + } + }, + { + "type": "lv2", + "name": "wlim", + "plugin": "http://plugin.org.uk/swh-plugins/fastLookaheadLimiter", + "control": { + "ingain": 0, + "limit": 0, + "release": 0.25 } }, { @@ -218,7 +205,6 @@ "plugin": "http://lsp-plug.in/plugins/lv2/sc_compressor_stereo", "control": { "enabled": 1, - "mode": 1, "g_in": 1.0, "g_out": 1.0, "at": 1000.0, @@ -226,13 +212,8 @@ "al": 0.126491, "cr": 4.0, "kn": 0.5, - "scp": 1, - "scm": 1, - "__comment_thermal__": "VIRTUAL VOICE-COIL TWEETER THERMAL GUARD (100mW Rating)", - "__comment_power__": "P_peak = V_peak^2 / R_vc = 5.0^2 / 4.0 = 6.25W Peak per Channel", - "__comment_threshold__": "Linear RMS Threshold: al = sqrt(P_continuous / P_peak) = sqrt(0.100W / 6.25W) = sqrt(0.016) = 0.126491 (-17.96 dBFS)", - "__comment_timing__": "Thermal Integration (at): 1000ms (1.0s heating tau), Thermal Cooling (rt): 2000ms (2.0s exponential decay into air gap)", - "__comment_instructions__": "TO RECALIBRATE: Set al = sqrt(P_target_watts / 6.25W). Set at = tau_heat_ms, rt = tau_cool_ms." + "scp": 0, + "scm": 1 } }, { @@ -247,12 +228,12 @@ } ], "links": [ - {"output": "user_eq:out_l", "input": "virtualbass:in_l"}, - {"output": "user_eq:out_r", "input": "virtualbass:in_r"}, - {"output": "virtualbass:out_l", "input": "equalizer:in_l"}, - {"output": "virtualbass:out_r", "input": "equalizer:in_r"}, - {"output": "equalizer:out_l", "input": "multiband_compressor:in_l"}, - {"output": "equalizer:out_r", "input": "multiband_compressor:in_r"}, + {"output": "user_eq:out_l", "input": "equalizer:in_l"}, + {"output": "user_eq:out_r", "input": "equalizer:in_r"}, + {"output": "equalizer:out_l", "input": "virtualbass:in_l"}, + {"output": "equalizer:out_r", "input": "virtualbass:in_r"}, + {"output": "virtualbass:out_l", "input": "multiband_compressor:in_l"}, + {"output": "virtualbass:out_r", "input": "multiband_compressor:in_r"}, {"output": "multiband_compressor:out_l", "input": "ell:in"}, {"output": "multiband_compressor:out_r", "input": "elr:in"}, {"output": "ell:out", "input": "copyL:In"}, @@ -261,16 +242,12 @@ {"output": "copyL:Out", "input": "convLW:In"}, {"output": "copyR:Out", "input": "convRT:In"}, {"output": "copyR:Out", "input": "convRW:In"}, - {"output": "convLW:Out", "input": "wlim:in_1"}, - {"output": "convRW:Out", "input": "wlim:in_2"}, - {"output": "wlim:out_1", "input": "thermal_guard:in_l"}, - {"output": "wlim:out_2", "input": "thermal_guard:in_r"}, - {"output": "wlim:out_1", "input": "thermal_guard:sc_l"}, - {"output": "wlim:out_2", "input": "thermal_guard:sc_r"}, + {"output": "convLW:Out", "input": "thermal_guard:in_l"}, + {"output": "convRW:Out", "input": "thermal_guard:in_r"}, + {"output": "thermal_guard:out_l", "input": "wlim:in_1"}, + {"output": "thermal_guard:out_r", "input": "wlim:in_2"}, {"output": "convLT:Out", "input": "tweeter_thermal_guard:in_l"}, {"output": "convRT:Out", "input": "tweeter_thermal_guard:in_r"}, - {"output": "convLT:Out", "input": "tweeter_thermal_guard:sc_l"}, - {"output": "convRT:Out", "input": "tweeter_thermal_guard:sc_r"}, {"output": "tweeter_thermal_guard:out_l", "input": "tlim:in_1"}, {"output": "tweeter_thermal_guard:out_r", "input": "tlim:in_2"} ], @@ -279,8 +256,8 @@ "user_eq:in_r" ], "outputs": [ - "thermal_guard:out_l", - "thermal_guard:out_r", + "wlim:out_1", + "wlim:out_2", "tlim:out_1", "tlim:out_2" ],