I have a “Corsair Void Elite” headset.

For the last few years, I have been using an HRTF alone to apply 7.1 Audio to my headset. But now I want to apply equalization from AutoEq.

Do I apply the equalization before or after the HRTF transformation?

Notes:

  • I am using a PipeWire filter chain on Fedora Atomic
Filter Chain Conflig
# Corsair VOID Elite DSP
# Applies 7.1 Audio transformation via HRTF

context.modules = [
	{
		name = libpipewire-module-filter-chain
		flags = [ nofail ]
		args = {
			node.description	= "Corsair VOID Elite DSP"
			media.name		= "Virtual Surround Sink"
			media.role		= "DSP"
			filter.graph = {
				nodes = [
					# duplicate inputs
					# This creates the 7.1 Audio Input
					{ type = builtin label = copy name = copyFL}
					{ type = builtin label = copy name = copyFR}
					{ type = builtin label = copy name = copyFC}
					{ type = builtin label = copy name = copyRL}
					{ type = builtin label = copy name = copyRR}
					{ type = builtin label = copy name = copySL}
					{ type = builtin label = copy name = copySR}
					{ type = builtin label = copy name = copyLFE }

					# Apply HRTF WAV
					{ type = builtin label = convolver name = convFL_L config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =0 } }
					{ type = builtin label = convolver name = convFL_R config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =1 } }
					{ type = builtin label = convolver name = convSL_L config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =2 } }
					{ type = builtin label = convolver name = convSL_R config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =3 } }
					{ type = builtin label = convolver name = convRL_L config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =4 } }
					{ type = builtin label = convolver name = convRL_R config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =5 } }
					{ type = builtin label = convolver name = convFC_L config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =6 } }
					{ type = builtin label = convolver name = convFR_R config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =7 } }
					{ type = builtin label = convolver name = convFR_L config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =8 } }
					{ type = builtin label = convolver name = convSR_R config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =9 } }
					{ type = builtin label = convolver name = convSR_L config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel = 10 } }
					{ type = builtin label = convolver name = convRR_R config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel = 11 } }
					{ type = builtin label = convolver name = convRR_L config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel = 12 } }
					{ type = builtin label = convolver name = convFC_R config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel = 13 } }

					# treat LFE as FC
					{ type = builtin label = convolver name = convLFE_L config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel =6 } }
					{ type = builtin label = convolver name = convLFE_R config = { filename = "/home/doomsdayrs/.local/share/pipewire/Dolby-CorsairHeasetGamingSoftware.wav" channel = 13 } }

					# stereo output
					{ type = builtin label = mixer name = mixL }
					{ type = builtin label = mixer name = mixR }
				]
				links = [
					# input
					{ output = "copyFL:Out"input="convFL_L:In"}
					{ output = "copyFL:Out"input="convFL_R:In"}
					{ output = "copySL:Out"input="convSL_L:In"}
					{ output = "copySL:Out"input="convSL_R:In"}
					{ output = "copyRL:Out"input="convRL_L:In"}
					{ output = "copyRL:Out"input="convRL_R:In"}
					{ output = "copyFC:Out"input="convFC_L:In"}
					{ output = "copyFR:Out"input="convFR_R:In"}
					{ output = "copyFR:Out"input="convFR_L:In"}
					{ output = "copySR:Out"input="convSR_R:In"}
					{ output = "copySR:Out"input="convSR_L:In"}
					{ output = "copyRR:Out"input="convRR_R:In"}
					{ output = "copyRR:Out"input="convRR_L:In"}
					{ output = "copyFC:Out"input="convFC_R:In"}
					{ output = "copyLFE:Out" input="convLFE_L:In" }
					{ output = "copyLFE:Out" input="convLFE_R:In" }

					# output
					{ output = "convFL_L:Out"input="mixL:In 1" }
					{ output = "convFL_R:Out"input="mixR:In 1" }
					{ output = "convSL_L:Out"input="mixL:In 2" }
					{ output = "convSL_R:Out"input="mixR:In 2" }
					{ output = "convRL_L:Out"input="mixL:In 3" }
					{ output = "convRL_R:Out"input="mixR:In 3" }
					{ output = "convFC_L:Out"input="mixL:In 4" }
					{ output = "convFC_R:Out"input="mixR:In 4" }
					{ output = "convFR_R:Out"input="mixR:In 5" }
					{ output = "convFR_L:Out"input="mixL:In 5" }
					{ output = "convSR_R:Out"input="mixR:In 6" }
					{ output = "convSR_L:Out"input="mixL:In 6" }
					{ output = "convRR_R:Out"input="mixR:In 7" }
					{ output = "convRR_L:Out"input="mixL:In 7" }
					{ output = "convLFE_R:Out" input="mixR:In 8" }
					{ output = "convLFE_L:Out" input="mixL:In 8" }
				]
				# Define the input
				inputs= [ "copyFL:In" "copyFR:In" "copyFC:In" "copyLFE:In" "copyRL:In" "copyRR:In", "copySL:In", "copySR:In" ]

				# Define the output
				outputs = [ "mixL:Out" "mixR:Out" ]
			}
			capture.props = {
				node.name= "effect_input.virtual-surround-7.1-hesuvi"
				media.class= Audio/Sink
				audio.channels = 8
				audio.position = [ FL FR FC LFE RL RR SL SR ]
			}
			playback.props = {
				node.name= "effect_output.virtual-surround-7.1-hesuvi"
				node.passive = true
				audio.channels = 2
				audio.position = [ FL FR ]
			}
		}
	}
]
  • otacon239@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    4 days ago

    I don’t know that I’ve come across anything official for this case, but from my experience in audio engineering, you typically want to put the most “artistic” effects early in the stack and the most “utility” effects toward the end. So in this case, if I were you, I’d put the 7.1 effect at the end since it’s not likely to change often or be adjusted.

    At the end of the day, test both and if one sounds better than the other to you, go with that one.