Commit 61bc5580ee6c

Vincent Demeester <vincent@sbr.pm>
2026-02-16 11:49:38
feat(okinawa): fixed audio and added JamesDSP
Fixed asus-g14-audio-fix service that failed due to wrong card name and mixer controls. Added JamesDSP as Dolby DSP replacement with G14-specific presets from asus-jamesdsp. Removed unused ALSA soft-mixer WirePlumber config. JamesDSP auto-starts via niri.
1 parent 4614463
dots/config/jamesdsp/liveprog/msCentreBoostFixed.eel
@@ -0,0 +1,29 @@
+desc: MS centre boost
+
+midBoostDB:0.00<-15,15>Mid boost (dB)
+sideBoostDB:2.00<-15,15>Side boost (dB)
+
+
+@init
+midBoostDB = -0.48;
+sideBoostDB = 3.00;
+
+function db2mag(db)
+(
+  pow(10, db / 20);
+);
+function mag2db(mag)
+(
+  20 * log10(mag);
+);
+
+midBoost=db2mag(midBoostDB);
+sideBoost=db2mag(sideBoostDB);
+
+@sample
+mid= (spl0 + spl1) * 0.5;
+side= (spl0 - spl1) * 0.5;
+mid = mid * midBoost;
+side = side * sideBoost;
+spl0 = mid - side;
+spl1 = mid + side;
dots/config/jamesdsp/liveprog/stereoWidenFixed.eel
@@ -0,0 +1,15 @@
+desc: Stereo Widener
+//width:3<0,6,0.1>Stereo Width
+//reimplemented from: https://www.musicdsp.org/en/latest/Effects/256-stereo-width-control-obtained-via-transfromation-matrix.html
+
+@init
+width = 2.10;
+
+@sample
+coef_S = width * 0.5;
+
+m = (spl0 + spl1) * 0.5;
+s = (spl1 - spl0) * coef_S;
+
+spl0 = m - s;
+spl1 = m + s;
dots/config/jamesdsp/liveprog/stftCentreBoostFixed.eel
@@ -0,0 +1,68 @@
+desc: CentreCut
+
+gaindb:3<-15,15>Boost gain (dB)
+
+@init
+gaindb = -0.72;
+
+function db2mag(db)
+(
+  pow(10, db / 20);
+);
+function mag2db(mag)
+(
+  20 * log10(mag);
+);
+fftsize = 4096;
+bufpos = idx = 0;
+stftIndexLeft = 2;
+stftIndexRight = 50;
+memreq = stftCheckMemoryRequirement(stftIndexLeft, fftsize, 4, 2);
+memreq = stftCheckMemoryRequirement(stftIndexRight, fftsize, 4, 2);
+stftStructLeft = 120;
+stftStructRight = stftStructLeft + memreq;
+requiredSamples = stftInit(stftIndexLeft, stftStructLeft);
+requiredSamples = stftInit(stftIndexRight, stftStructRight);
+inBufLeft = stftStructRight + memreq + 10; // Pointer to memory
+outBufLeft = inBufLeft + fftsize + 10; // Pointer to memory plus safe zone
+inBufRight = outBufLeft + fftsize + 10; // ...
+outBufRight = inBufRight + fftsize + 10; // ...
+gain=db2mag(gaindb) - 1; // Boost 3 dB
+
+@sample
+inBufLeft[bufpos] = spl0;
+spl0 = outBufLeft[bufpos];
+inBufRight[bufpos] = spl1;
+spl1 = outBufRight[bufpos];
+bufpos += 1;
+bufpos >= requiredSamples ?
+(
+  error1 = stftForward(inBufLeft, stftIndexLeft, stftStructLeft, 1);
+  error2 = stftForward(inBufRight, stftIndexRight, stftStructRight, 1);
+  idx=0;
+
+  loop(error1 / 2, 
+  sumR = inBufLeft[idx] + inBufRight[idx];
+  sumI = inBufLeft[idx + 1] + inBufRight[idx + 1];
+  diffR = inBufLeft[idx] - inBufRight[idx];
+  diffI = inBufLeft[idx + 1] - inBufRight[idx + 1];
+  sumSq = sumR*sumR + sumI*sumI;
+  diffSq = diffR*diffR + diffI*diffI;
+  alpha = 0.0;
+  sumSq > $EPS ? (alpha = 0.5 - sqrt(diffSq / sumSq) * 0.5;);
+  cR = sumR * alpha;
+  cI = sumI * alpha;
+  inBufLeft[idx] = inBufLeft[idx] + cR * gain;
+  inBufLeft[idx + 1] = inBufLeft[idx + 1] + cI * gain;
+  inBufRight[idx] = inBufRight[idx] + cR * gain;
+  inBufRight[idx + 1] = inBufRight[idx + 1] + cI * gain;
+  idx+=2);
+  error = stftBackward(inBufLeft, stftIndexLeft, stftStructLeft, 1);
+  error = stftBackward(inBufRight, stftIndexRight, stftStructRight, 1);
+  idx = 0;
+  loop(requiredSamples,
+  outBufLeft[idx] = inBufLeft[idx];
+  outBufRight[idx] = inBufRight[idx];
+  idx+=1);
+  bufpos = 0;
+);
dots/config/jamesdsp/presets/Clear (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=3
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=false
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Crossfeed.wav"
+convolver_optimization_mode=2
+convolver_waveform_edit="-80;-100;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/msCentreBoost.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.25000
+reverb_decay=2.08000
+reverb_delay=0.00000
+reverb_enable=false
+reverb_finaldry=-7.00000
+reverb_finalwet=-65.40000
+reverb_lfo_spin=0.70000
+reverb_lfo_wander=0.30000
+reverb_lpf_bass=600
+reverb_lpf_damp=9000
+reverb_lpf_input=18000
+reverb_lpf_output=17000
+reverb_osf=1
+reverb_reflection_amount=0.30000
+reverb_reflection_factor=1.00000
+reverb_reflection_width=0.70000
+reverb_wet=-8.00000
+reverb_width=1.00000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;94.4;160.9;245.6;341.9;484.7;593.3;888.9;1433.3;2677.1;4161.1;6349.8;10053;18777;-12.6;-5.5;-2.9;-7.1;-6;-8.5;-10.1;-12.4;-12.7;-13.2;-12.5;-8.6;-10.1;-7.7;-10.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Concert (high CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=5
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=true
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Surround1.wav"
+convolver_optimization_mode=0
+convolver_waveform_edit="0;0;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=true
+ddc_file="/home/vincent/.config/jamesdsp/vdc/FrontRearContrast.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/stereoWidenFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.00000
+reverb_decay=4.25000
+reverb_delay=244.60001
+reverb_enable=true
+reverb_finaldry=-6.00000
+reverb_finalwet=-40.00000
+reverb_lfo_spin=2.30000
+reverb_lfo_wander=0.24000
+reverb_lpf_bass=500
+reverb_lpf_damp=18000
+reverb_lpf_input=18000
+reverb_lpf_output=14090
+reverb_osf=4
+reverb_reflection_amount=0.42000
+reverb_reflection_factor=2.00000
+reverb_reflection_width=0.63000
+reverb_wet=-39.00000
+reverb_width=0.57000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;94.4;160.9;245.6;341.9;484.7;593.3;888.9;1433.3;2677.1;4316.9;6349.8;10053;18777;-11.6;-4.5;-2.9;-8.1;-5;-7.5;-10.1;-12.4;-14.7;-14.2;-14.5;-12.9;-12.1;-12.2;-16.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=250
dots/config/jamesdsp/presets/Flat (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=5
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=true
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Surround1.wav"
+convolver_optimization_mode=0
+convolver_waveform_edit="0;0;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/FrontRearContrast.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/stereoWidenFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.00000
+reverb_decay=1.20000
+reverb_delay=7.50000
+reverb_enable=false
+reverb_finaldry=-6.00000
+reverb_finalwet=-70.00000
+reverb_lfo_spin=2.30000
+reverb_lfo_wander=0.18000
+reverb_lpf_bass=470
+reverb_lpf_damp=18000
+reverb_lpf_input=18000
+reverb_lpf_output=15000
+reverb_osf=4
+reverb_reflection_amount=0.70000
+reverb_reflection_factor=0.70000
+reverb_reflection_width=0.40000
+reverb_wet=-70.00000
+reverb_width=0.75000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;94.4;160.9;245.6;341.9;467.2;593.3;888.9;1433.3;2677.1;4316.9;6349.8;10053;18777;-11.6;-4.5;-2.9;-8.1;-5;-7.5;-10.6;-13.4;-17.1;-13.2;-11.5;-11.9;-12.1;-14.2;-18.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Full (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=5
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=true
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Surround1.wav"
+convolver_optimization_mode=0
+convolver_waveform_edit="0;0;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=false
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/msCentreBoostFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.30000
+reverb_decay=0.50000
+reverb_delay=0.00000
+reverb_enable=false
+reverb_finaldry=-4.00000
+reverb_finalwet=-70.00000
+reverb_lfo_spin=1.60000
+reverb_lfo_wander=0.20000
+reverb_lpf_bass=1000
+reverb_lpf_damp=18000
+reverb_lpf_input=18000
+reverb_lpf_output=18000
+reverb_osf=1
+reverb_reflection_amount=0.70000
+reverb_reflection_factor=0.70000
+reverb_reflection_width=-0.40000
+reverb_wet=-37.40000
+reverb_width=0.80000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;94.4;160.9;245.6;341.9;484.7;593.3;888.9;1433.3;2677.1;4316.9;6349.8;10053;18777;-11.6;-4.5;-2.9;-8.1;-5;-7.5;-9.1;-11.4;-11.7;-12.2;-11.5;-8.4;-9.1;-8.3;-15.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Full Natural Forward (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=5
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=true
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Surround1.wav"
+convolver_optimization_mode=0
+convolver_waveform_edit="0;0;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/stereoWidenFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.00000
+reverb_decay=0.50000
+reverb_delay=0.00000
+reverb_enable=false
+reverb_finaldry=-6.00000
+reverb_finalwet=-61.60000
+reverb_lfo_spin=1.60000
+reverb_lfo_wander=0.20000
+reverb_lpf_bass=1000
+reverb_lpf_damp=18000
+reverb_lpf_input=18000
+reverb_lpf_output=18000
+reverb_osf=1
+reverb_reflection_amount=0.70000
+reverb_reflection_factor=0.70000
+reverb_reflection_width=-0.40000
+reverb_wet=-40.00000
+reverb_width=0.80000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;94.4;160.9;245.6;341.9;484.7;593.3;888.9;1433.3;2677.1;4316.9;6349.8;10053;18777;-11.6;-4.5;-2.9;-8.1;-5;-7.5;-9.1;-11.4;-11.7;-12.2;-11.5;-8.4;-9.1;-8.9;-13.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Full Natural Stage (high CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=5
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=true
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Surround1.wav"
+convolver_optimization_mode=0
+convolver_waveform_edit="0;0;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=true
+ddc_file="/home/vincent/.config/jamesdsp/vdc/FrontRearContrast.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/stereoWidenFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.00000
+reverb_decay=5.25000
+reverb_delay=244.60001
+reverb_enable=false
+reverb_finaldry=-6.00000
+reverb_finalwet=-48.00000
+reverb_lfo_spin=2.30000
+reverb_lfo_wander=0.24000
+reverb_lpf_bass=500
+reverb_lpf_damp=18000
+reverb_lpf_input=18000
+reverb_lpf_output=14090
+reverb_osf=4
+reverb_reflection_amount=0.50000
+reverb_reflection_factor=2.00000
+reverb_reflection_width=0.63000
+reverb_wet=-33.10000
+reverb_width=0.57000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;94.4;160.9;245.6;341.9;484.7;593.3;888.9;1433.3;2677.1;4316.9;6234.2;10053;18777;-10.6;-3.5;-1.8;-7.1;-4;-6.6;-9.1;-10.3;-12.7;-13.2;-13.5;-12.8;-10.1;-11.2;-16.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Headphones Basic Crossfeed (lowest CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=false
+bass_maxgain=4
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=false
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Crossfeed.wav"
+convolver_optimization_mode=2
+convolver_waveform_edit="-80;-100;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=true
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/stftCentreBoostFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.25000
+reverb_decay=2.08000
+reverb_delay=0.00000
+reverb_enable=false
+reverb_finaldry=-4.00000
+reverb_finalwet=-65.40000
+reverb_lfo_spin=0.70000
+reverb_lfo_wander=0.30000
+reverb_lpf_bass=600
+reverb_lpf_damp=9000
+reverb_lpf_input=18000
+reverb_lpf_output=17000
+reverb_osf=1
+reverb_reflection_amount=0.30000
+reverb_reflection_factor=1.00000
+reverb_reflection_width=0.70000
+reverb_wet=-8.00000
+reverb_width=1.00000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=false
+tone_eq="25;40;63;100;160;250;400;630;1000;1600;2500;4000;6300;10000;16000;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Headphones Simulated Treated Room (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=false
+bass_maxgain=4
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=false
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Crossfeed.wav"
+convolver_optimization_mode=2
+convolver_waveform_edit="-80;-100;0;0;0;0"
+crossfeed_bs2b_fcut=700
+crossfeed_bs2b_feed=60
+crossfeed_enable=true
+crossfeed_mode=0
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=false
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/msCentreBoostFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.00000
+reverb_decay=0.10000
+reverb_delay=0.00000
+reverb_enable=true
+reverb_finaldry=-6.00000
+reverb_finalwet=-34.00000
+reverb_lfo_spin=0.00000
+reverb_lfo_wander=0.10000
+reverb_lpf_bass=400
+reverb_lpf_damp=790
+reverb_lpf_input=18000
+reverb_lpf_output=18000
+reverb_osf=1
+reverb_reflection_amount=0.43000
+reverb_reflection_factor=0.70000
+reverb_reflection_width=0.48000
+reverb_wet=-70.00000
+reverb_width=0.00000
+stereowide_enable=false
+stereowide_level=34
+tone_enable=false
+tone_eq="25;40;64.2;100;160;250;400;630;1000;1600;2500;4000;6300;10000;16000;0;0;-2.8;0;0;-1;0;0;0;0;0;0;0;0;0"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Headphones Simulated Untreated Room (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=false
+bass_maxgain=4
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=false
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Crossfeed.wav"
+convolver_optimization_mode=2
+convolver_waveform_edit="-80;-100;0;0;0;0"
+crossfeed_bs2b_fcut=700
+crossfeed_bs2b_feed=60
+crossfeed_enable=true
+crossfeed_mode=0
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=false
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/msCentreBoostFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.00000
+reverb_decay=0.10000
+reverb_delay=0.00000
+reverb_enable=true
+reverb_finaldry=-6.00000
+reverb_finalwet=-33.00000
+reverb_lfo_spin=0.00000
+reverb_lfo_wander=0.10000
+reverb_lpf_bass=50
+reverb_lpf_damp=200
+reverb_lpf_input=18000
+reverb_lpf_output=18000
+reverb_osf=1
+reverb_reflection_amount=0.72000
+reverb_reflection_factor=0.71000
+reverb_reflection_width=0.70000
+reverb_wet=-63.30000
+reverb_width=0.00000
+stereowide_enable=false
+stereowide_level=34
+tone_enable=false
+tone_eq="25;40;64.2;100;160;250;400;630;1000;1600;2500;4000;6300;10000;16000;0;0;-2.8;0;0;-1;0;0;0;0;0;0;0;0;0"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Movie (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=false
+bass_maxgain=4
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=false
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Crossfeed.wav"
+convolver_optimization_mode=2
+convolver_waveform_edit="-80;-100;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/msCentreBoostFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.25000
+reverb_decay=2.08000
+reverb_delay=0.00000
+reverb_enable=false
+reverb_finaldry=-7.00000
+reverb_finalwet=-65.40000
+reverb_lfo_spin=0.70000
+reverb_lfo_wander=0.30000
+reverb_lpf_bass=600
+reverb_lpf_damp=9000
+reverb_lpf_input=18000
+reverb_lpf_output=17000
+reverb_osf=1
+reverb_reflection_amount=0.30000
+reverb_reflection_factor=1.00000
+reverb_reflection_width=0.70000
+reverb_wet=-8.00000
+reverb_width=1.00000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;94.4;160.9;245.6;341.9;484.7;582.5;726.2;905.3;2677.1;4161.1;6349.8;10053;16510;-6.6;0.5;2.1;0.9;-1;-3.5;-6.1;-10.7;-8;-10;-9.5;-6.6;-7.1;-7.7;-9.7"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Movie2 (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=false
+bass_maxgain=4
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=false
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Crossfeed.wav"
+convolver_optimization_mode=2
+convolver_waveform_edit="-80;-100;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/msCentreBoostFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.25000
+reverb_decay=2.08000
+reverb_delay=0.00000
+reverb_enable=false
+reverb_finaldry=-7.00000
+reverb_finalwet=-65.40000
+reverb_lfo_spin=0.70000
+reverb_lfo_wander=0.30000
+reverb_lpf_bass=600
+reverb_lpf_damp=9000
+reverb_lpf_input=18000
+reverb_lpf_output=17000
+reverb_osf=1
+reverb_reflection_amount=0.30000
+reverb_reflection_factor=1.00000
+reverb_reflection_width=0.70000
+reverb_wet=-8.00000
+reverb_width=1.00000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;94.4;160.9;179.7;341.9;484.7;582.5;726.2;905.3;2677.1;4161.1;6349.8;10053;16510;-6.6;0.5;2.1;0.9;-3.9;-3.5;-6.1;-10.7;-8;-10;-9.5;-6.6;-7.1;-7.7;-9.7"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Open (low CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=3
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=false
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Crossfeed.wav"
+convolver_optimization_mode=2
+convolver_waveform_edit="-80;-100;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=false
+liveprog_file=""
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=3
+reverb_bassboost=0.25000
+reverb_decay=2.08000
+reverb_delay=0.00000
+reverb_enable=false
+reverb_finaldry=-7.00000
+reverb_finalwet=-9.00000
+reverb_lfo_spin=0.70000
+reverb_lfo_wander=0.30000
+reverb_lpf_bass=600
+reverb_lpf_damp=9000
+reverb_lpf_input=18000
+reverb_lpf_output=17000
+reverb_osf=1
+reverb_reflection_amount=0.30000
+reverb_reflection_factor=1.00000
+reverb_reflection_width=0.70000
+reverb_wet=-8.00000
+reverb_width=1.00000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="24.7;53.4;89.4;132.9;186.4;323.5;484.7;650.4;1068.2;1486.9;2487.4;4238.2;6349.8;10819;18777;-15.7;-6.5;-6.1;-7.6;-8.2;-12.1;-12.5;-15.4;-13.6;-15;-12.2;-10.8;-10.1;-11.1;-12.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Sony MDR-7506 Headphones (lowest CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=false
+bass_maxgain=4
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=false
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Crossfeed.wav"
+convolver_optimization_mode=2
+convolver_waveform_edit="-80;-100;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=true
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=false
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/msCentreBoostFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.00000
+reverb_decay=7.54000
+reverb_delay=35.20000
+reverb_enable=false
+reverb_finaldry=-7.00000
+reverb_finalwet=-70.00000
+reverb_lfo_spin=0.50000
+reverb_lfo_wander=0.14000
+reverb_lpf_bass=457
+reverb_lpf_damp=626
+reverb_lpf_input=18000
+reverb_lpf_output=11925
+reverb_osf=1
+reverb_reflection_amount=0.43000
+reverb_reflection_factor=1.20000
+reverb_reflection_width=0.76000
+reverb_wet=-66.60000
+reverb_width=0.92000
+stereowide_enable=false
+stereowide_level=34
+tone_enable=false
+tone_eq="25;40;64.2;100;160;250;400;630;1000;1600;2500;4000;6300;10000;16000;0;0;-2.8;0;0;-1;0;0;0;0;0;0;0;0;0"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Wide Close (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=3
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=true
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Surround2.wav"
+convolver_optimization_mode=0
+convolver_waveform_edit="0;0;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=false
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/swapChannels.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.00000
+reverb_decay=1.90000
+reverb_delay=0.00000
+reverb_enable=true
+reverb_finaldry=-4.70000
+reverb_finalwet=-34.20000
+reverb_lfo_spin=0.40000
+reverb_lfo_wander=0.30000
+reverb_lpf_bass=500
+reverb_lpf_damp=389
+reverb_lpf_input=577
+reverb_lpf_output=18000
+reverb_osf=2
+reverb_reflection_amount=0.00000
+reverb_reflection_factor=1.00000
+reverb_reflection_width=1.00000
+reverb_wet=-33.00000
+reverb_width=1.00000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;96.2;124.4;208.1;295.1;418.4;593.3;922.1;1433.3;2677.1;4161.1;6349.8;10239;18777;-13.6;-6.5;-2.2;-9.1;-5.4;-6.1;-11.8;-11.4;-12.4;-10.2;-9.5;-7.6;-8.1;-7.8;-12.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=true
+tube_pregain=129
dots/config/jamesdsp/presets/Wide Open (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=3
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=true
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Surround2.wav"
+convolver_optimization_mode=0
+convolver_waveform_edit="0;0;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file="/home/vincent/.config/jamesdsp/vdc/Butterworth.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/msCentreBoostFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.30000
+reverb_decay=0.50000
+reverb_delay=0.00000
+reverb_enable=false
+reverb_finaldry=-4.00000
+reverb_finalwet=-70.00000
+reverb_lfo_spin=1.60000
+reverb_lfo_wander=0.20000
+reverb_lpf_bass=1000
+reverb_lpf_damp=18000
+reverb_lpf_input=18000
+reverb_lpf_output=18000
+reverb_osf=1
+reverb_reflection_amount=0.70000
+reverb_reflection_factor=0.70000
+reverb_reflection_width=-0.40000
+reverb_wet=-37.40000
+reverb_width=0.80000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;109.4;160.9;208.1;311.8;396;593.3;888.9;1433.3;2677.1;4161.1;6349.8;10053;18777;-10.6;-5.5;0.7;-7.1;-2.4;-4.6;-8.2;-9.4;-11.7;-9.2;-8.5;-5.9;-6.1;-6.7;-11.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/presets/Wide Open 4 Speaker (mid CPU).conf
@@ -0,0 +1,50 @@
+bass_enable=true
+bass_maxgain=3
+compression_aggressiveness=800
+compression_enable=false
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=true
+convolver_file="/home/vincent/.config/jamesdsp/irs/CorredHRTF_Surround2.wav"
+convolver_optimization_mode=0
+convolver_waveform_edit="0;0;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=true
+ddc_file="/home/vincent/.config/jamesdsp/vdc/FrontRearContrast.vdc"
+graphiceq_enable=false
+graphiceq_param="GraphicEQ: 25 0; 40 0; 63 0; 100 0; 160 0; 250 0; 400 0; 630 0; 1000 0; 1600 0; 2500 0; 4000 0; 6300 0; 10000 0; 16000 0"
+liveprog_enable=true
+liveprog_file="/home/vincent/.config/jamesdsp/liveprog/msCentreBoostFixed.eel"
+master_enable=true
+master_limrelease=30
+master_limthreshold=0
+master_postgain=0
+reverb_bassboost=0.30000
+reverb_decay=0.50000
+reverb_delay=0.00000
+reverb_enable=false
+reverb_finaldry=-4.00000
+reverb_finalwet=-70.00000
+reverb_lfo_spin=1.60000
+reverb_lfo_wander=0.20000
+reverb_lpf_bass=1000
+reverb_lpf_damp=18000
+reverb_lpf_input=18000
+reverb_lpf_output=18000
+reverb_osf=1
+reverb_reflection_amount=0.70000
+reverb_reflection_factor=0.70000
+reverb_reflection_width=-0.40000
+reverb_wet=-37.40000
+reverb_width=0.80000
+stereowide_enable=false
+stereowide_level=55
+tone_enable=true
+tone_eq="45.3;54.4;109.4;144.1;208.1;311.8;396;593.3;888.9;1433.3;2677.1;4161.1;6349.8;9003.1;18777;-9.6;-4.5;1.7;-4.7;-1.4;-3.6;-6.2;-9.4;-11.7;-10.2;-10.5;-7.9;-7.1;-8.5;-12.4"
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/jamesdsp/audio.conf
@@ -0,0 +1,33 @@
+bass_enable=true
+bass_maxgain=8
+compression_aggressiveness=800
+compression_enable=true
+compression_maxatk=30
+compression_maxrel=200
+convolver_enable=false
+convolver_file=""
+convolver_optimization_mode=0
+convolver_waveform_edit="0;0;0;0;0;0"
+crossfeed_bs2b_fcut=650
+crossfeed_bs2b_feed=95
+crossfeed_enable=false
+crossfeed_mode=1
+ddc_enable=false
+ddc_file=""
+graphiceq_enable=true
+graphiceq_param="GraphicEQ: 25 8; 40 8; 63 7; 100 6; 160 4; 250 2; 400 1; 630 1; 1000 2; 1600 3; 2500 3; 4000 3; 6300 2; 10000 1; 16000 0"
+liveprog_enable=false
+liveprog_file=""
+master_enable=true
+master_limrelease=30
+master_limthreshold=-1
+master_postgain=10
+reverb_enable=false
+stereowide_enable=false
+stereowide_level=55
+tone_enable=false
+tone_eq=""
+tone_filtertype=0
+tone_interpolation=0
+tube_enable=false
+tube_pregain=200
dots/config/niri/config.kdl
@@ -91,6 +91,7 @@ spawn-at-startup "waybar"
 // Disabled - using FIDO2 keys with ssh-agent instead of PIV with yubikey-agent
 // spawn-at-startup "yubikey-agent" "-l" "/run/user/1000/yubikey-agent/yubikey-agent.sock"
 spawn-at-startup "swaybg" "-i" "/home/vincent/desktop/pictures/lockscreen"
+spawn-at-startup "jamesdsp" "-t"
 
 prefer-no-csd
 
systems/common/services/pipewire.nix
@@ -22,23 +22,6 @@
             ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]"
           }
         '')
-        # ALSA soft-mixer support for proper hardware mixer control
-        # Fixes issues with ASUS laptops where hardware amplifiers aren't
-        # properly controlled by PipeWire (e.g., G14 AMP1/AMP2)
-        (pkgs.writeTextDir "share/wireplumber/wireplumber.conf.d/99-alsasoftvol.conf" ''
-          monitor.alsa.rules = [
-            {
-              matches = [
-                { device.name = "~alsa_card.*" }
-              ]
-              actions = {
-                update-props = {
-                  api.alsa.soft-mixer = true
-                }
-              }
-            }
-          ]
-        '')
       ];
     };
   };
systems/okinawa/extra.nix
@@ -202,8 +202,9 @@
     python3
     uv
 
-    # Audio utilities for G14 fix
+    # Audio utilities for G14
     alsa-utils # amixer, alsactl for AMP control
+    jamesdsp # DSP/EQ to replace Dolby Atmos (use with asus-jamesdsp presets)
   ];
 
   # Prometheus node exporter (configured in common module)
@@ -217,8 +218,7 @@
   };
 
   # ASUS G14 2022 Audio Fix
-  # Fixes subwoofer/speaker volume sync issues where hardware amplifiers
-  # (AMP1/AMP2) don't follow system volume controls
+  # Sets ALSA mixer levels at boot and after resume
   systemd.services.asus-g14-audio-fix = {
     description = "ASUS G14 Audio Amplifier Initialization";
     after = [
@@ -234,28 +234,27 @@
       Type = "oneshot";
       RemainAfterExit = true;
       ExecStart = pkgs.writeShellScript "g14-audio-init" ''
-        # Find the correct card (Ryzen HD Audio Controller)
-        CARD=$(${pkgs.alsa-utils}/bin/aplay -l | grep "Ryzen HD Audio Controller" | head -1 | sed 's/card \([0-9]\).*/\1/')
+        # Find the ALC285 audio card (internal speakers)
+        CARD=$(${pkgs.alsa-utils}/bin/aplay -l | grep "ALC285" | head -1 | sed 's/card \([0-9]\).*/\1/')
 
         if [ -z "$CARD" ]; then
-          echo "ERROR: Could not find Ryzen HD Audio Controller card"
+          echo "ERROR: Could not find ALC285 audio card"
           exit 1
         fi
 
         echo "Initializing G14 audio on card $CARD"
 
-        # Set Master volume
-        ${pkgs.alsa-utils}/bin/amixer -c "$CARD" sset Master 80% unmute || true
+        # Set Master volume to 100% and unmute
+        ${pkgs.alsa-utils}/bin/amixer -c "$CARD" sset Master 100% unmute || true
 
-        # Set AMP1 Speaker (subwoofer control)
-        ${pkgs.alsa-utils}/bin/amixer -c "$CARD" sset 'AMP1 Speaker' 100% unmute || true
-
-        # Set AMP2 Speaker (subwoofer control)
-        ${pkgs.alsa-utils}/bin/amixer -c "$CARD" sset 'AMP2 Speaker' 100% unmute || true
-
-        # Additional common controls
+        # Set Speaker volume (tweeters)
         ${pkgs.alsa-utils}/bin/amixer -c "$CARD" sset Speaker 100% unmute || true
-        ${pkgs.alsa-utils}/bin/amixer -c "$CARD" sset Headphone 80% unmute || true
+
+        # Set Bass Speaker (subwoofers)
+        ${pkgs.alsa-utils}/bin/amixer -c "$CARD" sset 'Bass Speaker' unmute || true
+
+        # Set Headphone volume
+        ${pkgs.alsa-utils}/bin/amixer -c "$CARD" sset Headphone 100% unmute || true
 
         echo "G14 audio initialization complete"
       '';