My question: is there a way to test if there is actual sound in the channel? If not, it would be quite a useful feature to add.
Details:
I have an X-Fi Titanium card, with bass redirection enabled in the card's driver.
Quite an overwhelming number of my Windows applications seem to output 6 channel sound on paper, but they actually do not place anything into the SUB channel. This includes all the browsers I have tried (who are outputting stereo) and most games (who are doing 5.0). Creative's driver has an upmix option, but it again seems to not output anything into LFE if there was nothing in the first place.
However, the Netflix app, or media players (VLC, Kodi) do output to LFE properly with 5.1 media files, and some are upmixing stereo sources correctly, like AIMP with DirectSound 5.1 output. So LFE works - just some apps decided not to output anything into it.
So I am using EqAPO to mix channels into SUB for these apps. This works, but it is inconvenient to switch between mixing and no mixing, depending on the app. I would like to always redirect if there is no incoming sound in LFE, but do not redirect if there is something coming in.
I know that the inputChannelCount variable is available, but it seems to be always 6, disregarding if there is actual input data in SUB or not. I would rather need a variable that measures the true sound level of a channel in an If: statement.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
SUB is not the same as LFE (although Equalizer APO just uses both channel names for the LFE signal).
Your sound card might come with a connection port named SUB or SBW but that has nothing to do with LFE! Let me explain this with an example: You have a 5.1 speaker set, 5 typical satellite speakers and one subwoofer. Now, if you play a stereo file (that's "2.0") with your browser, then the X-Fi will do bass redirection – low frequencies are cut off and send to the front left and right speakers as they can't handle those frequencies, and a mono mix of only the low frequencies is sent through SUB to your subwoofer. This is how it should be and you shouldn't think you need to manually filter for any bass because it would be wrong to put this into the LFE track.
Talking about LFE (Low Frequency Enhancement): As the name suggests, it is only an enhancement and you don't loose anything too important by dropping this channel (recommened on lower end systems). This channel is meant to carry additional low frequency signals (the other 5 channels still contain lower frequencies as well) and was invented for analog audio in movies, as exteme bass volumes in the same channel would lead to problems. However, this is not a problem anymore with digital audio nowadays, so it wouldn't be a big deal (in most cases) to just spread the LFE channel into the other 5 or 7 channels. But back to our example: If you would want to play a 5.1 audio file on this 5.1 system, you couldn't just map each channel of the input to one speaker. Instead, the bass redirection would again remove the bass from the 5 main channels and put it together with the LFE signal out the SUB.
So as summary: .1 can mean LFE or SUB, they typically carry bass, but they are not identical! It's also totally fine to have a 5.1 file which uses a silent LFE track as there are are no frequency limitations on the other channels. 5.1 is just more know and has a wider compatability than 5.0.
Back to the main question: You can use inputChannelCount in the pre-mix stage and it should report 2 for something like your browser. However, most games, even if they are stereo, will output 6 channels because they fill up the rest with silent channels.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thanks for highlighting the difference. In short, what you say in my understanding is that LFE should be used as the name of a kind of dedicated content for the subwoofer (an input), while SUB is the name of the channel going into the subwoofer (an output). I was using the "LFE" abbreviation as in the EqAPO reference:
Whatever the nomenclature is, my problem - and I believe a fairly large user base's - is that I want my subwoofer to produce sound at all times. So if sloppy apps report 6 channel output, but do not care to put something into SUB, EqAPO could be the perfect tool to fix this, by switching SUB to be a mix of the other channels automatically. It just needs a feature to detect this situation.
An alternative solution could be to add a feature that allows configurations based on the app's name that is producing the sound. Maybe it is already possible somehow? From the wiki, it seems to me that currently the pre-mix stage can be made app-specific only in the extent of the inputChannelCount variable.
One could surely make wrappers around each executable, that re-configure EqAPO each time the app is launched, but apart from the inconvenience, even that would not allow different pre-mix stages per application.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I should have added this example: If you would have 5 large full-spectrum speakers then the LFE of 5.1 content would be split up between all of those 5 speakers. So the LFE doesn't have to be exclusive to the subwoofer, nor does the subwoofer only have to play LFE.
Yes, the documentation is a bit inaccurate, but if you know that no bass redirection happens afterwards, then you could just redirect inside EQ APO and "make" the LFE a Sub channel – after all, they are just made up names we give to channels.
But this shouldn't be necessary in your case. What you describe sounds like the bass redirection of your X-Fi Titanium card isn't working/wrongly set up. So check if this is correctly configured. Should this not work, you can do this with EQ APO. It shouldn't be made dynamically, because even when you have an LFE channel, the bass of the other 5 channels should still be redirected. Here is how it would look:
What I have found is that the empty subwoofer channel was a consequence that all of my speakers were set to full-range. Windows allows setting speaker "size" for the L/R and C/RL/RR separately. If any of the speakers are marked as non full-range, sound starts appearing in the subwoofer in games and browsers too.
Sadly, the system also seems to apply a HP filter to the satellites if they are set to small, and the subwoofer starts to dominate the sound stage, while upper ranges sound more tinny. I have also observed that the X-Fi driver's cross frequency setting still have an impact on the subwoofer. Also, if I turn off the X-Fi crossover, the amount of higher bass Windows tries to push into subwoofer is terrible.
I can only theoretise at this point, but possibly a double crossover is in play here. X-Fi's crossover operates on the output what is given by the (non-adjustable) Windows crossover. X-Fi cannot reverse the HP filter on the satellites, and the range that is just right over the cross filter gets suppressed in the satellites.
My satellites are not particularly bad to output low freq, but they are lacking in the <100Hz department for my taste. I have settled with a final solution to set speakers to full range, and feed in a 5-channel mix into SUB with EqAPO. This nicely augments the poorer low freq range, and also makes my bass spread out more evenly over the room.
Matt thank you for your help in tracking this down.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
My question: is there a way to test if there is actual sound in the channel? If not, it would be quite a useful feature to add.
Details:
I have an X-Fi Titanium card, with bass redirection enabled in the card's driver.
Quite an overwhelming number of my Windows applications seem to output 6 channel sound on paper, but they actually do not place anything into the SUB channel. This includes all the browsers I have tried (who are outputting stereo) and most games (who are doing 5.0). Creative's driver has an upmix option, but it again seems to not output anything into LFE if there was nothing in the first place.
However, the Netflix app, or media players (VLC, Kodi) do output to LFE properly with 5.1 media files, and some are upmixing stereo sources correctly, like AIMP with DirectSound 5.1 output. So LFE works - just some apps decided not to output anything into it.
So I am using EqAPO to mix channels into SUB for these apps. This works, but it is inconvenient to switch between mixing and no mixing, depending on the app. I would like to always redirect if there is no incoming sound in LFE, but do not redirect if there is something coming in.
I know that the inputChannelCount variable is available, but it seems to be always 6, disregarding if there is actual input data in SUB or not. I would rather need a variable that measures the true sound level of a channel in an If: statement.
SUB is not the same as LFE (although Equalizer APO just uses both channel names for the LFE signal).
Your sound card might come with a connection port named SUB or SBW but that has nothing to do with LFE! Let me explain this with an example: You have a 5.1 speaker set, 5 typical satellite speakers and one subwoofer. Now, if you play a stereo file (that's "2.0") with your browser, then the X-Fi will do bass redirection – low frequencies are cut off and send to the front left and right speakers as they can't handle those frequencies, and a mono mix of only the low frequencies is sent through SUB to your subwoofer. This is how it should be and you shouldn't think you need to manually filter for any bass because it would be wrong to put this into the LFE track.
Talking about LFE (Low Frequency Enhancement): As the name suggests, it is only an enhancement and you don't loose anything too important by dropping this channel (recommened on lower end systems). This channel is meant to carry additional low frequency signals (the other 5 channels still contain lower frequencies as well) and was invented for analog audio in movies, as exteme bass volumes in the same channel would lead to problems. However, this is not a problem anymore with digital audio nowadays, so it wouldn't be a big deal (in most cases) to just spread the LFE channel into the other 5 or 7 channels. But back to our example: If you would want to play a 5.1 audio file on this 5.1 system, you couldn't just map each channel of the input to one speaker. Instead, the bass redirection would again remove the bass from the 5 main channels and put it together with the LFE signal out the SUB.
So as summary: .1 can mean LFE or SUB, they typically carry bass, but they are not identical! It's also totally fine to have a 5.1 file which uses a silent LFE track as there are are no frequency limitations on the other channels. 5.1 is just more know and has a wider compatability than 5.0.
Back to the main question: You can use inputChannelCount in the pre-mix stage and it should report 2 for something like your browser. However, most games, even if they are stereo, will output 6 channels because they fill up the rest with silent channels.
Thanks for highlighting the difference. In short, what you say in my understanding is that LFE should be used as the name of a kind of dedicated content for the subwoofer (an input), while SUB is the name of the channel going into the subwoofer (an output). I was using the "LFE" abbreviation as in the EqAPO reference:
https://sourceforge.net/p/equalizerapo/wiki/Configuration%20reference/#channel-since-version-08
So that should be fixed in your opinion I guess.
Whatever the nomenclature is, my problem - and I believe a fairly large user base's - is that I want my subwoofer to produce sound at all times. So if sloppy apps report 6 channel output, but do not care to put something into SUB, EqAPO could be the perfect tool to fix this, by switching SUB to be a mix of the other channels automatically. It just needs a feature to detect this situation.
An alternative solution could be to add a feature that allows configurations based on the app's name that is producing the sound. Maybe it is already possible somehow? From the wiki, it seems to me that currently the pre-mix stage can be made app-specific only in the extent of the inputChannelCount variable.
One could surely make wrappers around each executable, that re-configure EqAPO each time the app is launched, but apart from the inconvenience, even that would not allow different pre-mix stages per application.
I should have added this example: If you would have 5 large full-spectrum speakers then the LFE of 5.1 content would be split up between all of those 5 speakers. So the LFE doesn't have to be exclusive to the subwoofer, nor does the subwoofer only have to play LFE.
Yes, the documentation is a bit inaccurate, but if you know that no bass redirection happens afterwards, then you could just redirect inside EQ APO and "make" the LFE a Sub channel – after all, they are just made up names we give to channels.
But this shouldn't be necessary in your case. What you describe sounds like the bass redirection of your X-Fi Titanium card isn't working/wrongly set up. So check if this is correctly configured. Should this not work, you can do this with EQ APO. It shouldn't be made dynamically, because even when you have an LFE channel, the bass of the other 5 channels should still be redirected. Here is how it would look:
What I have found is that the empty subwoofer channel was a consequence that all of my speakers were set to full-range. Windows allows setting speaker "size" for the L/R and C/RL/RR separately. If any of the speakers are marked as non full-range, sound starts appearing in the subwoofer in games and browsers too.
Sadly, the system also seems to apply a HP filter to the satellites if they are set to small, and the subwoofer starts to dominate the sound stage, while upper ranges sound more tinny. I have also observed that the X-Fi driver's cross frequency setting still have an impact on the subwoofer. Also, if I turn off the X-Fi crossover, the amount of higher bass Windows tries to push into subwoofer is terrible.
I can only theoretise at this point, but possibly a double crossover is in play here. X-Fi's crossover operates on the output what is given by the (non-adjustable) Windows crossover. X-Fi cannot reverse the HP filter on the satellites, and the range that is just right over the cross filter gets suppressed in the satellites.
My satellites are not particularly bad to output low freq, but they are lacking in the <100Hz department for my taste. I have settled with a final solution to set speakers to full range, and feed in a 5-channel mix into SUB with EqAPO. This nicely augments the poorer low freq range, and also makes my bass spread out more evenly over the room.
Matt thank you for your help in tracking this down.