- Joined
- Apr 11, 2010
- Messages
- 1,050
Maybe all y'all know this already but today I discovered a couple of things I didn't know about foobar2000 and immersive sound formats, that will let us play 7.1.4 wav, .wv, .opus, .opus in .ogg, and probably more. This is interesting because 1) it saves a step and some confusion in my workflow, and 2) Now I can encode for free in ffmpeg, 12 ch. opus, and play it back in foobar2000. Another piece/option for the ecosystem of hobbiest up-remix to immersive formats.
Oh, all of this goes for 32 bit foobar2000 v1.6, as both of the components I'm using haven't been ported to 64bits and/or the source code is lost.
What I thought I knew before today was the only way to get foobar to play more than 8 channels (and in the right order) was to use ffmpeg to add a channel map to a .wav or .wv file.
Raw or "un-mapped" 7.1.4 .wav files look like this, in mediainfo:
No "Channel Layout" metadata. Just the number of channels.
In mediainfo a "mapped" 7.1.4 file looks like this:
Note the "Channel Layout" meta data in the audio section.
So I had to "map" every 12 channel file before playing in foobar2000, and I had my waveform seekbar set to display the normally named 7.1.4 channels.
Here's what a 12 ch 7.1.4 "channel ID" file then looked like in foobar2000:
I also have my waveformseekbar configured to never cache waveforms, as I'm changing the audio in the file of the same name all the time (up-remixing, testing, etc.). But that is a side note for today.
Again the down sides are an extra processing step before you can listen to your 12 channel file, and more versions of files to keep track of. Also I couldn't figure out a way to get other formats, beyond .wav and .wv, to have a Channel Layout Metadata tag that Foobar2000 would respect, resulting in only the first 8 channels being played.
So, today I was researching how foobar2000 processes things (input decoding --> DSP --> Output), and also the fact that it by default "plays" all the channels in a stream, for "all" formats. So I wondered if my all 12 channels were actually playing, but not getting properly routed to my 12 channel output device (and its own channel mapping, again a side note for today's topic).
I went and found a really old component, "Matrix Mixer". Figured out which side of the gui is inputs (the top) and set it up to route the first 12 channels of audio to the proper channels going out of the DSP:
Foobar2000 has this odd channel order on the inputs, by today's standards, but regardless of what foobar2000 calls the first 12 channels at the input to the DSP we need to route them to our "standard" 7.1.4 order (The order that you use for Atmos encoding in MMH atmos helper): LF, RF, C, LFE, LS, RS, BL, BR, TFL, TFR, TBL, TBR.
Another side note; almost no two audio programs use the same abbreviations for channel names. It maddening.
But the good news is after saving that setting as a preset and applying it, all 12 channels played and played in the correct order.
And, even more important this works for .wav, .wv., .opus, and opus in .ogg!
Now while things played in order my waveform seekbar display was all mixed up, so my conclusion is that waveform seekbar takes in input at the same point DSP does, vs. the output of the DSP, so I needed to change its configuration to use the Odd input channel order names, like this:
and; Ta-da! My waveforms are all shown and shown in the correct order.
Hopefully someone (maybe me?) will re-create/refactor these component capabilities for 64 bit v2.x versions of foobar2000.
Don't have a way to get 7.1.4 audio from foobar2000 to your AVR/Soundbar/TV? See here: https://www.quadraphonicquad.com/forums/threads/hdmi-audio-bridge.37188/#post-836709
Oh, all of this goes for 32 bit foobar2000 v1.6, as both of the components I'm using haven't been ported to 64bits and/or the source code is lost.
What I thought I knew before today was the only way to get foobar to play more than 8 channels (and in the right order) was to use ffmpeg to add a channel map to a .wav or .wv file.
Raw or "un-mapped" 7.1.4 .wav files look like this, in mediainfo:

No "Channel Layout" metadata. Just the number of channels.
In mediainfo a "mapped" 7.1.4 file looks like this:

Note the "Channel Layout" meta data in the audio section.
So I had to "map" every 12 channel file before playing in foobar2000, and I had my waveform seekbar set to display the normally named 7.1.4 channels.
Here's what a 12 ch 7.1.4 "channel ID" file then looked like in foobar2000:

I also have my waveformseekbar configured to never cache waveforms, as I'm changing the audio in the file of the same name all the time (up-remixing, testing, etc.). But that is a side note for today.
Again the down sides are an extra processing step before you can listen to your 12 channel file, and more versions of files to keep track of. Also I couldn't figure out a way to get other formats, beyond .wav and .wv, to have a Channel Layout Metadata tag that Foobar2000 would respect, resulting in only the first 8 channels being played.
So, today I was researching how foobar2000 processes things (input decoding --> DSP --> Output), and also the fact that it by default "plays" all the channels in a stream, for "all" formats. So I wondered if my all 12 channels were actually playing, but not getting properly routed to my 12 channel output device (and its own channel mapping, again a side note for today's topic).
I went and found a really old component, "Matrix Mixer". Figured out which side of the gui is inputs (the top) and set it up to route the first 12 channels of audio to the proper channels going out of the DSP:

Foobar2000 has this odd channel order on the inputs, by today's standards, but regardless of what foobar2000 calls the first 12 channels at the input to the DSP we need to route them to our "standard" 7.1.4 order (The order that you use for Atmos encoding in MMH atmos helper): LF, RF, C, LFE, LS, RS, BL, BR, TFL, TFR, TBL, TBR.
Another side note; almost no two audio programs use the same abbreviations for channel names. It maddening.
But the good news is after saving that setting as a preset and applying it, all 12 channels played and played in the correct order.
And, even more important this works for .wav, .wv., .opus, and opus in .ogg!
Now while things played in order my waveform seekbar display was all mixed up, so my conclusion is that waveform seekbar takes in input at the same point DSP does, vs. the output of the DSP, so I needed to change its configuration to use the Odd input channel order names, like this:

and; Ta-da! My waveforms are all shown and shown in the correct order.
Hopefully someone (maybe me?) will re-create/refactor these component capabilities for 64 bit v2.x versions of foobar2000.
Don't have a way to get 7.1.4 audio from foobar2000 to your AVR/Soundbar/TV? See here: https://www.quadraphonicquad.com/forums/threads/hdmi-audio-bridge.37188/#post-836709
Last edited: