FrontLeft

FrontLeft

#Overview

name: FrontLeft

The value of this variable can be defined or overridden in .ini config files. 2 .ini config files referencing this setting variable.

It is referenced in 65 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of FrontLeft is to represent the front left audio channel in Unreal Engine’s audio system. This setting variable is part of the EAudioMixerChannel enumeration, which defines various audio channel types used in spatial audio and multi-channel sound systems.

  1. The FrontLeft variable is primarily used in the audio rendering and mixing systems of Unreal Engine.

  2. Multiple subsystems and modules rely on this variable, including:

    • AudioMixer
    • AudioMixerCore
    • SignalProcessing
    • SoundFieldRendering
    • Various platform-specific audio implementations (e.g., XAudio2, CoreAudio, AudioUnit)
  3. The value of this variable is typically set as part of the audio channel configuration for output devices or when defining speaker layouts for different audio formats.

  4. FrontLeft often interacts with other channel variables like FrontRight, FrontCenter, BackLeft, etc., to create complete channel configurations for various audio setups (e.g., stereo, 5.1, 7.1).

  5. Developers should be aware that:

    • FrontLeft is usually the first channel in most audio configurations.
    • It’s essential for proper spatial audio rendering and channel mapping.
    • Different platforms or audio APIs might have slightly different channel ordering, so proper mapping is crucial.
  6. Best practices when using this variable include:

    • Always consider the target platform’s audio capabilities and channel configurations.
    • Use the appropriate channel mapping functions provided by Unreal Engine when working with multi-channel audio.
    • Ensure proper channel ordering when creating or manipulating audio data to maintain correct spatial positioning.
    • Test audio output on various speaker configurations to ensure correct channel assignment and spatial accuracy.

#Setting Variables

#References In INI files

Location: <Workspace>/Engine/Config/BaseEngine.ini:1572, section: [AudioChannelAzimuthMap]

Location: <Workspace>/Engine/Config/BaseEngine.ini:1585, section: [AudioDefaultChannelOrder]

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Plugins/Experimental/Avalanche/Source/AvalancheShapes/Private/DynamicMeshes/AvaShapeCubeDynMesh.cpp:352

Scope (from outer to inner):

file
function     bool UAvaShapeCubeDynamicMesh::GenerateFrontMeshSections

Source code excerpt:

	const FVector FrontLeftLoc(-SegmentSize.X, -(SegmentSize.Y - BevelSize.Y), SegmentSize.Z - BevelSize.Z);
	// top left
	const FAvaShapeCachedVertex3D FrontLeft = CacheVertexCreate(FrontMesh, FrontLeftLoc * Scale, FrontNormal);
	// bottom right
	const FVector FrontRightLoc(-SegmentSize.X, SegmentSize.Y - BevelSize.Y, -(SegmentSize.Z - BevelSize.Z));
	const FAvaShapeCachedVertex3D FrontRight = CacheVertexCreate(FrontMesh, FrontRightLoc * Scale, FrontNormal);

	AddVertex(FrontMesh, FrontLeft);
	AddVertex(FrontMesh, FrontRight);
	const FVector TopRightLoc = FVector(-SegmentSize.X, SegmentSize.Y - BevelSize.Y, SegmentSize.Z - BevelSize.Z);
	int32 TopRightIdx = AddVertexRaw(FrontMesh, TopRightLoc * Scale, FrontNormal);

	AddVertex(FrontMesh, FrontRight);
	AddVertex(FrontMesh, FrontLeft);
	const FVector BottomLeftLoc = FVector(-SegmentSize.X, -(SegmentSize.Y - BevelSize.Y), -(SegmentSize.Z - BevelSize.Z));
	int32 BottomLeftIdx = AddVertexRaw(FrontMesh, BottomLeftLoc * Scale, FrontNormal);

	if (BevelSizeRatio > 0)
	{
		CreateBevelCorner(FrontMesh, FrontLeftLoc, TopRightLoc, FrontNormal, FrontLeft.Index, TopRightIdx,
			BevelSize, Scale, FVector(-SegmentSize.X, -SegmentSize.Y, SegmentSize.Z), FVector(-SegmentSize.X, SegmentSize.Y, SegmentSize.Z));

		CreateBevelCorner(FrontMesh, TopRightLoc, FrontRightLoc, FrontNormal, TopRightIdx, FrontRight.Index,
			BevelSize, Scale, FVector(-SegmentSize.X, SegmentSize.Y, SegmentSize.Z), FVector(-SegmentSize.X, SegmentSize.Y, -SegmentSize.Z));

		CreateBevelCorner(FrontMesh, FrontRightLoc, BottomLeftLoc, FrontNormal, FrontRight.Index, BottomLeftIdx,
			BevelSize, Scale, FVector(-SegmentSize.X, SegmentSize.Y, -SegmentSize.Z), FVector(-SegmentSize.X, -SegmentSize.Y, -SegmentSize.Z));

		CreateBevelCorner(FrontMesh, BottomLeftLoc, FrontLeftLoc, FrontNormal, BottomLeftIdx, FrontLeft.Index,
			BevelSize, Scale, FVector(-SegmentSize.X, -SegmentSize.Y, -SegmentSize.Z), FVector(-SegmentSize.X, -SegmentSize.Y, SegmentSize.Z));
	}

	return true;
}

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/ConvolutionReverb.cpp:22

Scope (from outer to inner):

file
namespace    Audio
namespace    ConvolutionReverbIntrinsics

Source code excerpt:


			// Two channels (stereo)
			{ EAudioMixerChannel::FrontLeft, EAudioMixerChannel::FrontRight },

			// Three channels (fronts)
			{ EAudioMixerChannel::FrontLeft, EAudioMixerChannel::FrontCenter, EAudioMixerChannel::FrontRight },

			// Four channels (quad)
			{
				EAudioMixerChannel::Type::FrontLeft,
				EAudioMixerChannel::Type::FrontRight,
				EAudioMixerChannel::Type::SideLeft,
				EAudioMixerChannel::Type::SideRight
			},

			// Five channels (5.0)
			{
				EAudioMixerChannel::Type::FrontLeft,
				EAudioMixerChannel::Type::FrontRight,
				EAudioMixerChannel::Type::FrontCenter,
				EAudioMixerChannel::Type::SideLeft,
				EAudioMixerChannel::Type::SideRight
			},

			// Six channels (5.1)
			{
				EAudioMixerChannel::Type::FrontLeft,
				EAudioMixerChannel::Type::FrontRight,
				EAudioMixerChannel::Type::FrontCenter,
				EAudioMixerChannel::Type::LowFrequency,
				EAudioMixerChannel::Type::SideLeft,
				EAudioMixerChannel::Type::SideRight
			},

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/ConvolutionReverb.cpp:56

Scope (from outer to inner):

file
namespace    Audio
namespace    ConvolutionReverbIntrinsics

Source code excerpt:

			// Seven channels (7.0)
			{
				EAudioMixerChannel::Type::FrontLeft,
				EAudioMixerChannel::Type::FrontRight,
				EAudioMixerChannel::Type::FrontCenter,
				EAudioMixerChannel::Type::BackLeft,
				EAudioMixerChannel::Type::BackRight,
				EAudioMixerChannel::Type::SideLeft,
				EAudioMixerChannel::Type::SideRight

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/ConvolutionReverb.cpp:67

Scope (from outer to inner):

file
namespace    Audio
namespace    ConvolutionReverbIntrinsics

Source code excerpt:

			// Eight channels (7.1)
			{
				EAudioMixerChannel::Type::FrontLeft,
				EAudioMixerChannel::Type::FrontRight,
				EAudioMixerChannel::Type::FrontCenter,
				EAudioMixerChannel::Type::LowFrequency,
				EAudioMixerChannel::Type::BackLeft,
				EAudioMixerChannel::Type::BackRight,
				EAudioMixerChannel::Type::SideLeft,

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:12

Scope (from outer to inner):

file
namespace    Audio
namespace    SubmixChannelFormatConverterPrivate

Source code excerpt:

		static const TSet<EAudioMixerChannel::Type> FrontChannels(
			{
				EAudioMixerChannel::FrontLeft,
				EAudioMixerChannel::FrontRight,
				EAudioMixerChannel::FrontCenter,
				EAudioMixerChannel::FrontLeftOfCenter,
				EAudioMixerChannel::FrontRightOfCenter,
				EAudioMixerChannel::TopFrontLeft,
				EAudioMixerChannel::TopFrontRight,

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:27

Scope (from outer to inner):

file
namespace    Audio
namespace    SubmixChannelFormatConverterPrivate

Source code excerpt:

		static const TMap<EAudioMixerChannel::Type, TArray<EAudioMixerChannel::Type>> PairedRearChannelTypes =
		{
			{ EAudioMixerChannel::FrontLeft, { EAudioMixerChannel::BackLeft, EAudioMixerChannel::SideLeft, EAudioMixerChannel::TopBackLeft } },
			{ EAudioMixerChannel::FrontRight, { EAudioMixerChannel::BackRight, EAudioMixerChannel::SideRight, EAudioMixerChannel::TopBackRight } },
			{ EAudioMixerChannel::FrontCenter, { EAudioMixerChannel::BackCenter, EAudioMixerChannel::TopCenter, EAudioMixerChannel::TopBackCenter } },
			{ EAudioMixerChannel::FrontLeftOfCenter, { EAudioMixerChannel::BackLeft, EAudioMixerChannel::SideLeft, EAudioMixerChannel::TopBackLeft } },
			{ EAudioMixerChannel::FrontRightOfCenter, { EAudioMixerChannel::BackRight, EAudioMixerChannel::SideRight, EAudioMixerChannel::TopBackRight } },
			{ EAudioMixerChannel::TopFrontLeft, { EAudioMixerChannel::BackLeft, EAudioMixerChannel::SideLeft, EAudioMixerChannel::TopBackLeft } },
			{ EAudioMixerChannel::TopFrontRight, { EAudioMixerChannel::BackRight, EAudioMixerChannel::SideRight, EAudioMixerChannel::TopBackRight } },

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:41

Scope (from outer to inner):

file
namespace    Audio
namespace    SubmixChannelFormatConverterPrivate

Source code excerpt:

		static const TMap<EAudioMixerChannel::Type, TArray<EAudioMixerChannel::Type>> PairedFlippedRearChannelTypes =
		{
			{ EAudioMixerChannel::FrontLeft, PairedRearChannelTypes[EAudioMixerChannel::FrontRight] },
			{ EAudioMixerChannel::FrontRight, PairedRearChannelTypes[EAudioMixerChannel::FrontLeft] },
			{ EAudioMixerChannel::FrontCenter, PairedRearChannelTypes[EAudioMixerChannel::FrontCenter] },
			{ EAudioMixerChannel::FrontLeftOfCenter, PairedRearChannelTypes[EAudioMixerChannel::FrontRightOfCenter] },
			{ EAudioMixerChannel::FrontRightOfCenter, PairedRearChannelTypes[EAudioMixerChannel::FrontLeftOfCenter] },
			{ EAudioMixerChannel::TopFrontLeft, PairedRearChannelTypes[EAudioMixerChannel::TopFrontRight] },
			{ EAudioMixerChannel::TopFrontRight, PairedRearChannelTypes[EAudioMixerChannel::TopFrontLeft] },
			{ EAudioMixerChannel::TopFrontCenter, PairedRearChannelTypes[EAudioMixerChannel::TopFrontCenter] }

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:69

Scope (from outer to inner):

file
namespace    Audio
function     bool GetSubmixChannelOrderForNumChannels

Source code excerpt:


				// Stereo
				OutChannelOrder.Append({EAudioMixerChannel::Type::FrontLeft, EAudioMixerChannel::Type::FrontRight});
				return true;

			case 4:

				// Quad
				OutChannelOrder.Append(
					{
						EAudioMixerChannel::Type::FrontLeft,
						EAudioMixerChannel::Type::FrontRight,
						EAudioMixerChannel::Type::SideLeft,
						EAudioMixerChannel::Type::SideRight
					}
				);

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:91

Scope (from outer to inner):

file
namespace    Audio
function     bool GetSubmixChannelOrderForNumChannels

Source code excerpt:

				OutChannelOrder.Append(
					{
						EAudioMixerChannel::Type::FrontLeft,
						EAudioMixerChannel::Type::FrontRight,
						EAudioMixerChannel::Type::FrontCenter,
						EAudioMixerChannel::Type::LowFrequency,
						EAudioMixerChannel::Type::SideLeft,
						EAudioMixerChannel::Type::SideRight
					}

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:107

Scope (from outer to inner):

file
namespace    Audio
function     bool GetSubmixChannelOrderForNumChannels

Source code excerpt:

				OutChannelOrder.Append(
					{
						EAudioMixerChannel::Type::FrontLeft,
						EAudioMixerChannel::Type::FrontRight,
						EAudioMixerChannel::Type::FrontCenter,
						EAudioMixerChannel::Type::LowFrequency,
						EAudioMixerChannel::Type::BackLeft,
						EAudioMixerChannel::Type::BackRight,
						EAudioMixerChannel::Type::SideLeft,

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:287

Scope (from outer to inner):

file
namespace    Audio
function     FSimpleRouter::FSimpleRouter

Source code excerpt:

		const bool bIsInputMono = (InInputChannelTypes.Num() == 1) && (InInputChannelTypes[0] == EAudioMixerChannel::FrontCenter);
		const bool bIsFrontCenterInOutput = InOutputChannelTypes.Find(EAudioMixerChannel::FrontCenter) != INDEX_NONE;
		const bool bIsFrontLeftInOutput = InOutputChannelTypes.Find(EAudioMixerChannel::FrontLeft) != INDEX_NONE;

		const bool bMapInputFrontCenterToOutputFrontLeft = bIsInputMono && bIsFrontLeftInOutput && !bIsFrontCenterInOutput;

		if (bMapInputFrontCenterToOutputFrontLeft)
		{
			ChannelPairs.Emplace(InInputChannelTypes.Find(EAudioMixerChannel::FrontCenter), InOutputChannelTypes.Find(EAudioMixerChannel::FrontLeft));
		}
	}

	void FSimpleUpmixer::SetRearChannelBleed(float InGain, bool bFadeToGain)
	{
		for (int32 InputChannelIndex : FrontChannelIndices)

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:380

Scope (from outer to inner):

file
namespace    Audio
function     bool FSimpleUpmixer::GetSimpleUpmixerStaticMixEntries

Source code excerpt:


		// Query which input channels exist
		const int32 InputFrontLeftIndex = InInputChannelTypes.Find(EAudioMixerChannel::Type::FrontLeft);
		const int32 InputFrontRightIndex = InInputChannelTypes.Find(EAudioMixerChannel::Type::FrontRight);
		const int32 InputSideLeftIndex = InInputChannelTypes.Find(EAudioMixerChannel::Type::SideLeft);
		const int32 InputSideRightIndex = InInputChannelTypes.Find(EAudioMixerChannel::Type::SideRight);
		const int32 InputBackLeftIndex = InInputChannelTypes.Find(EAudioMixerChannel::Type::BackLeft);
		const int32 InputBackRightIndex = InInputChannelTypes.Find(EAudioMixerChannel::Type::BackRight);

		// Query which output channels exist
		const int32 OutputFrontLeftIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::FrontLeft);
		const int32 OutputFrontRightIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::FrontRight);
		const int32 OutputSideLeftIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::SideLeft);
		const int32 OutputSideRightIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::SideRight);
		const int32 OutputBackLeftIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::BackLeft);
		const int32 OutputBackRightIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::BackRight);

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:516

Scope (from outer to inner):

file
namespace    Audio
function     bool FSimpleUpmixer::GetSimpleUpmixerStaticMixEntries

Source code excerpt:


				MonoToFrontLeft.InputChannelIndex = 0;
				MonoToFrontLeft.OutputChannelIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::FrontLeft);
				MonoToFrontLeft.Gain = 0.707f; // Equal power

				FChannelMixEntry& MonoToFrontRight = OutEntries.AddDefaulted_GetRef();

				MonoToFrontRight.InputChannelIndex = 0;
				MonoToFrontRight.OutputChannelIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::FrontRight);

#Loc: <Workspace>/Engine/Plugins/Runtime/Synthesis/Source/Synthesis/Private/SubmixChannelFormatConverter.cpp:535

Scope (from outer to inner):

file
namespace    Audio
function     bool FSimpleUpmixer::GetSimpleUpmixerStaticMixEntries

Source code excerpt:

				if (bOutputHasFrontLeft)
				{
					MonoToFront.OutputChannelIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::FrontLeft);
				}
				else
				{
					MonoToFront.OutputChannelIndex = InOutputChannelTypes.Find(EAudioMixerChannel::Type::FrontRight);
				}
			}

#Loc: <Workspace>/Engine/Source/Runtime/Android/AudioMixerAndroid/Private/AudioMixerPlatformAndroid.cpp:196

Scope (from outer to inner):

file
namespace    Audio
function     bool FMixerPlatformAndroid::GetOutputDeviceInfo

Source code excerpt:

		OutInfo.Format = EAudioMixerStreamDataFormat::Int16;
		OutInfo.OutputChannelArray.SetNum(2);
		OutInfo.OutputChannelArray[0] = EAudioMixerChannel::FrontLeft;
		OutInfo.OutputChannelArray[1] = EAudioMixerChannel::FrontRight;
		return true;
#else
		// @todo Lumin: implement this function
		return false;
#endif

#Loc: <Workspace>/Engine/Source/Runtime/Apple/AudioMixerAudioUnit/Private/AudioMixerPlatformAudioUnit.cpp:371

Scope (from outer to inner):

file
namespace    Audio
function     FAudioPlatformDeviceInfo FMixerPlatformAudioUnit::GetPlatformDeviceInfo

Source code excerpt:

		DeviceInfo.Format = EAudioMixerStreamDataFormat::Float;
		DeviceInfo.OutputChannelArray.SetNum(2);
		DeviceInfo.OutputChannelArray[0] = EAudioMixerChannel::FrontLeft;
		DeviceInfo.OutputChannelArray[1] = EAudioMixerChannel::FrontRight;
		DeviceInfo.bIsSystemDefault = true;
		
		return DeviceInfo;
	}
	

#Loc: <Workspace>/Engine/Source/Runtime/Apple/AudioMixerCoreAudio/Private/AudioMixerPlatformCoreAudio.cpp:343

Scope (from outer to inner):

file
namespace    Audio
function     FAudioPlatformDeviceInfo FMixerPlatformCoreAudio::GetPlatformDeviceInfo

Source code excerpt:

		DeviceInfo.Format = EAudioMixerStreamDataFormat::Float;
		DeviceInfo.OutputChannelArray.SetNum(2);
		DeviceInfo.OutputChannelArray[0] = EAudioMixerChannel::FrontLeft;
		DeviceInfo.OutputChannelArray[1] = EAudioMixerChannel::FrontRight;
		DeviceInfo.bIsSystemDefault = true;

		return DeviceInfo;
	}

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerChannelMaps.cpp:18

Scope (from outer to inner):

file
namespace    Audio

Source code excerpt:

		// ESubmixChannelFormat::Stereo
		{
			EAudioMixerChannel::FrontLeft,
			EAudioMixerChannel::FrontRight
		},

		// ESubmixChannelFormat::Quad
		{
			EAudioMixerChannel::FrontLeft,
			EAudioMixerChannel::FrontRight,
			EAudioMixerChannel::SideLeft,
			EAudioMixerChannel::SideRight
		},

		// ESubmixChannelFormat::FiveDotOne
		{
			EAudioMixerChannel::FrontLeft,
			EAudioMixerChannel::FrontRight,
			EAudioMixerChannel::FrontCenter,
			EAudioMixerChannel::LowFrequency,
			EAudioMixerChannel::SideLeft,
			EAudioMixerChannel::SideRight
		},

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerChannelMaps.cpp:42

Scope (from outer to inner):

file
namespace    Audio

Source code excerpt:

		// ESubmixChannelFormat::SevenDotOne
		{
			EAudioMixerChannel::FrontLeft,
			EAudioMixerChannel::FrontRight,
			EAudioMixerChannel::FrontCenter,
			EAudioMixerChannel::LowFrequency,
			EAudioMixerChannel::BackLeft,
			EAudioMixerChannel::BackRight,
			EAudioMixerChannel::SideLeft,

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerChannelMaps.cpp:57

Scope (from outer to inner):

file
namespace    Audio

Source code excerpt:

		// Ambisonics_W/X/Y/Z alias values.
		{
			EAudioMixerChannel::FrontLeft,
			EAudioMixerChannel::FrontRight,
			EAudioMixerChannel::FrontCenter,
			EAudioMixerChannel::LowFrequency,
			EAudioMixerChannel::BackLeft,
			EAudioMixerChannel::BackRight,
			EAudioMixerChannel::SideLeft,

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerChannelMaps.cpp:212

Scope (from outer to inner):

file
namespace    Audio
function     void FMixerDevice::InitializeChannelAzimuthMap

Source code excerpt:

		if (NumChannels == 2)
		{
			DefaultChannelAzimuthPositions[EAudioMixerChannel::FrontLeft] = { EAudioMixerChannel::FrontLeft, 270 };
			DefaultChannelAzimuthPositions[EAudioMixerChannel::FrontRight] = { EAudioMixerChannel::FrontRight, 90 };
		}
		else
		{
			DefaultChannelAzimuthPositions[EAudioMixerChannel::FrontLeft] = { EAudioMixerChannel::FrontLeft, 330 };
			DefaultChannelAzimuthPositions[EAudioMixerChannel::FrontRight] = { EAudioMixerChannel::FrontRight, 30 };
		}

		if (bAllowCenterChannel3DPanning)
		{
			// Allow center channel for azimuth computations

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerDevice.cpp:421

Scope (from outer to inner):

file
namespace    Audio
function     TArray<Audio::FChannelPositionInfo>* FMixerDevice::GetDefaultPositionMap

Source code excerpt:

			case 2:
			{
				static TArray<Audio::FChannelPositionInfo> StereoMap = { SpeakerPositions[EAudioMixerChannel::FrontLeft], SpeakerPositions[EAudioMixerChannel::FrontRight] };
				return &StereoMap;
			}

			// Quadrophonic speakers at each corner.
			case 4:
			{
				static TArray<Audio::FChannelPositionInfo> QuadMap = {
														 SpeakerPositions[EAudioMixerChannel::FrontLeft] //left
														,SpeakerPositions[EAudioMixerChannel::FrontRight] // right
														,SpeakerPositions[EAudioMixerChannel::SideLeft] //Left Surround
														,SpeakerPositions[EAudioMixerChannel::SideRight] //Right Surround
				};
				return &QuadMap;
			}

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerDevice.cpp:441

Scope (from outer to inner):

file
namespace    Audio
function     TArray<Audio::FChannelPositionInfo>* FMixerDevice::GetDefaultPositionMap

Source code excerpt:

			{
				static TArray<Audio::FChannelPositionInfo> FiveDotOneMap = {
														 SpeakerPositions[EAudioMixerChannel::FrontLeft] //left
														,SpeakerPositions[EAudioMixerChannel::FrontRight] // right
														,SpeakerPositions[EAudioMixerChannel::FrontCenter] //center
														,SpeakerPositions[EAudioMixerChannel::LowFrequency] //LFE
														,SpeakerPositions[EAudioMixerChannel::SideLeft] //Left Rear
														,SpeakerPositions[EAudioMixerChannel::SideRight] //Right Rear
				};

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerDevice.cpp:455

Scope (from outer to inner):

file
namespace    Audio
function     TArray<Audio::FChannelPositionInfo>* FMixerDevice::GetDefaultPositionMap

Source code excerpt:

			{
				static TArray<Audio::FChannelPositionInfo> SevenDotOneMap = {
														 SpeakerPositions[EAudioMixerChannel::FrontLeft] // left
														,SpeakerPositions[EAudioMixerChannel::FrontRight] // right
														,SpeakerPositions[EAudioMixerChannel::FrontCenter] //center
														,SpeakerPositions[EAudioMixerChannel::LowFrequency] //LFE
														,SpeakerPositions[EAudioMixerChannel::BackLeft] // Left Rear
														,SpeakerPositions[EAudioMixerChannel::BackRight] // Right Rear
														,SpeakerPositions[EAudioMixerChannel::SideLeft] // Left Surround

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerSource.cpp:2142

Scope (from outer to inner):

file
namespace    Audio
function     bool FMixerSource::ComputeStereoChannelMap
lambda-function

Source code excerpt:

					{
						TMap<EAudioMixerChannel::Type, float> LeftOmniMap;
						LeftOmniMap.Add(EAudioMixerChannel::FrontLeft, 1.0f);
						return LeftOmniMap;
					};

					auto CreateRightOmniMap = []() -> TMap<EAudioMixerChannel::Type, float>
					{
						TMap<EAudioMixerChannel::Type, float> RightOmniMap;

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerSource.cpp:2168

Scope (from outer to inner):

file
lambda-function

Source code excerpt:

						{
							TMap<EAudioMixerChannel::Type, float> LeftOmniMap;
							LeftOmniMap.Add(EAudioMixerChannel::FrontLeft, 1.0f);
							LeftOmniMap.Add(EAudioMixerChannel::SideLeft, 1.0f);

							return LeftOmniMap;
						};

						auto CreateRightOmniMap = []() -> TMap<EAudioMixerChannel::Type, float>

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerSource.cpp:2197

Scope (from outer to inner):

file
lambda-function

Source code excerpt:

						{
							TMap<EAudioMixerChannel::Type, float> LeftOmniMap;
							LeftOmniMap.Add(EAudioMixerChannel::FrontLeft, 1.0f);
							LeftOmniMap.Add(EAudioMixerChannel::BackLeft, 1.0f);

							return LeftOmniMap;
						};

						auto CreateRightOmniMap = []() -> TMap<EAudioMixerChannel::Type, float>

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Private/AudioMixerSourceOutputBuffer.cpp:407

Scope (from outer to inner):

file
namespace    Audio
function     void FMixerSourceSubmixOutputBuffer::EncodeToSoundfieldFormats

Source code excerpt:

			{
				FChannelPositionInfo LeftChannelPosition;
				LeftChannelPosition.Channel = EAudioMixerChannel::FrontLeft;
				ConvertCartesianToSpherical(InSpatParams.LeftChannelPosition, LeftChannelPosition.Azimuth, LeftChannelPosition.Elevation, LeftChannelPosition.Radius);

				InputChannelPositions.Add(LeftChannelPosition);

				FChannelPositionInfo RightChannelPosition;
				LeftChannelPosition.Channel = EAudioMixerChannel::FrontRight;

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Public/AudioMixerBlueprintLibrary.h:57

Scope: file

Source code excerpt:

enum class EAudioMixerChannelType : uint8
{
	FrontLeft,
	FrontRight,
	FrontCenter,
	LowFrequency,
	BackLeft,
	BackRight,
	FrontLeftOfCenter,

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixer/Public/AudioMixerBlueprintLibrary.h:77

Scope: file

Source code excerpt:

	Unknown,
	ChannelTypeCount,
	DefaultChannel = FrontLeft
};

inline const TCHAR* ToString(EAudioMixerChannelType InType)
{
	switch (InType)
	{
		case EAudioMixerChannelType::FrontLeft:				return TEXT("FrontLeft");
		case EAudioMixerChannelType::FrontRight:			return TEXT("FrontRight");
		case EAudioMixerChannelType::FrontCenter:			return TEXT("FrontCenter");
		case EAudioMixerChannelType::LowFrequency:			return TEXT("LowFrequency");
		case EAudioMixerChannelType::BackLeft:				return TEXT("BackLeft");
		case EAudioMixerChannelType::BackRight:				return TEXT("BackRight");
		case EAudioMixerChannelType::FrontLeftOfCenter:		return TEXT("FrontLeftOfCenter");

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixerCore/Private/AudioMixer.cpp:809

Scope (from outer to inner):

file
namespace    Audio
function     static void InitializeDefaultChannelOrder

Source code excerpt:

		// Create a hard-coded default channel order
		check(UE_ARRAY_COUNT(DefaultChannelOrder) == AUDIO_MIXER_MAX_OUTPUT_CHANNELS);
		DefaultChannelOrder[0] = EAudioMixerChannel::FrontLeft;
		DefaultChannelOrder[1] = EAudioMixerChannel::FrontRight;
		DefaultChannelOrder[2] = EAudioMixerChannel::FrontCenter;
		DefaultChannelOrder[3] = EAudioMixerChannel::LowFrequency;
		DefaultChannelOrder[4] = EAudioMixerChannel::SideLeft;
		DefaultChannelOrder[5] = EAudioMixerChannel::SideRight;
		DefaultChannelOrder[6] = EAudioMixerChannel::BackLeft;

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixerCore/Public/AudioMixer.h:79

Scope (from outer to inner):

file
namespace    EAudioMixerChannel

Source code excerpt:

	enum Type
	{
		FrontLeft,
		FrontRight,
		FrontCenter,
		LowFrequency,
		BackLeft,
		BackRight,
		FrontLeftOfCenter,

#Loc: <Workspace>/Engine/Source/Runtime/AudioMixerCore/Public/AudioMixer.h:99

Scope (from outer to inner):

file
namespace    EAudioMixerChannel

Source code excerpt:

		Unknown,
		ChannelTypeCount,
		DefaultChannel = FrontLeft
	};

	static const int32 MaxSupportedChannel = EAudioMixerChannel::TopCenter;

	inline const TCHAR* ToString(EAudioMixerChannel::Type InType)
	{
		switch (InType)
		{
		case FrontLeft:				return TEXT("FrontLeft");
		case FrontRight:			return TEXT("FrontRight");
		case FrontCenter:			return TEXT("FrontCenter");
		case LowFrequency:			return TEXT("LowFrequency");
		case BackLeft:				return TEXT("BackLeft");
		case BackRight:				return TEXT("BackRight");
		case FrontLeftOfCenter:		return TEXT("FrontLeftOfCenter");

#Loc: <Workspace>/Engine/Source/Runtime/Linux/AudioMixerSDL/Private/AudioMixerPlatformSDL.cpp:249

Scope (from outer to inner):

file
namespace    Audio
function     bool FMixerPlatformSDL::OpenAudioStream

Source code excerpt:

		{
			// No devices available, Switch to NULL (Silent) Output.
			AudioStreamInfo.DeviceInfo.OutputChannelArray = { EAudioMixerChannel::FrontLeft, EAudioMixerChannel::FrontRight };
			AudioStreamInfo.DeviceInfo.NumChannels = 2;			
			AudioStreamInfo.DeviceInfo.Format = EAudioMixerStreamDataFormat::Float;
		}
		
		AudioStreamInfo.StreamState = EAudioOutputStreamState::Open;

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:33

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:


	static const float Matrix_4_1[] = {
		// FrontLeft	FrontRight	SideLeft	SideRight
		0.707f,			0.707f,		0.5f,		0.5f,		// Mono
	};

	static const float Matrix_5_1[] = {
		// FrontLeft	FrontRight	Center		SideLeft	SideRight
		0.707f,			0.707f,		0.5f,		0.5f,		0.5f,		// Mono
	};

	static const float Matrix_6_1[] = {
		// FrontLeft	FrontRight	Center		LowFreq		SideLeft	SideRight
		0.707f,			0.707f,		0.5f,		0.0f,		0.5f,		0.5f,		// Mono
	};

	static const float Matrix_7_1[] = {
		// FrontLeft	FrontRight	BackLeft	LFE			BackRight	SideLeft	SideRight
		0.707f,			0.707f,		0.5f,		0.0f,		0.5f,		0.5f,		0.5f,		// Mono
	};

	static const float Matrix_8_1[] = {
		// FrontLeft	FrontRight	Center		LowFreq		SideLeft	SideRight	BackLeft	BackRight
		0.707f,			0.707f,		1.0f,		0.0f,		0.5f,		0.5f,		0.5f,		0.5f,		// Mono
	};

	static const float* ToMono[8] = {
		Matrix_1_1,
		Matrix_2_1,

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:89

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:


	static const float Matrix_4_2[] = {
		// FrontLeft	FrontRight	SideLeft	SideRight
		1.0f,			0.0f,		0.707f,		0.0f,		// Left
		0.0f,			1.0f,		0.0f,		0.707f,		// Right
	};

	static const float Matrix_5_2[] = {
		// FrontLeft	FrontRight	Center		SideLeft	SideRight
		1.0f,			0.0f,		0.707f,		0.707f,		0.0f,		// Left
		0.0f,			1.0f,		0.707f,		0.0f,		0.707f,		// Right
	};

	static const float Matrix_6_2[] = {
		// FrontLeft	FrontRight	Center		LowFreq		SideLeft	SideRight
		1.0f,			0.0f,		0.707f,		0.0f,		0.707f,		0.0f,		// Left
		0.0f,			1.0f,		0.707f,		0.0f,		0.0f,		0.707f,		// Right
	};

	static const float Matrix_7_2[] = {
		// FrontLeft	FrontRight	BackLeft	LFE			BackRight	SideLeft	SideRight
		1.0f,			0.0f,		0.707f,		0.0f,		0.0f,		0.707f,		0.0f,		// Left
		0.0f,			1.0f,		0.0f,		0.0f,		0.707f,		0.0f,		0.707f,		// Right
	};

	static const float Matrix_8_2[] = {
		// FrontLeft	FrontRight	Center		LowFreq		SideLeft	SideRight	BackLeft	BackRight
		1.0f,			0.0f,		0.707f,		0.0f,		0.707f,		0.0f,		0.707f,		0.0f,		// Left
		0.0f,			1.0f,		0.707f,		0.0f,		0.0f,		0.707f,		0.0f,		0.707f,		// Right
	};

	static const float* ToStereo[8] = {
		Matrix_1_2,

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:134

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:

	static const float Matrix_1_8[] = {
		// Mono
		0.0f,		// FrontLeft
		0.0f,		// FrontRight
		1.0f,		// Center
		0.0f,		// LowFrequency
		0.0f,		// SideLeft
		0.0f,		// SideRight
		0.0f,		// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:145

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:


	static const float Matrix_2_8[] = {
		// FrontLeft	FrontRight
		1.0f,			0.0f,			// FrontLeft
		0.0f,			1.0f,			// FrontRight
		0.0f,			0.0f,			// Center
		0.0f,			0.0f,			// LowFrequency
		0.0f,			0.0f,			// SideLeft
		0.0f,			0.0f,			// SideRight
		0.0f,			0.0f,			// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:157

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:


	static const float Matrix_3_8[] = {
		// FrontLeft	FrontRight	Center
		1.0f,			0.0f,		0.0f,	// FrontLeft
		0.0f,			1.0f,		0.0f,	// FrontRight
		0.0f,			0.0f,		1.0f,	// Center
		0.0f,			0.0f,		0.0f,	// LowFrequency
		0.0f,			0.0f,		0.0f,	// SideLeft
		0.0f,			0.0f,		0.0f,	// SideRight
		0.0f,			0.0f,		0.0f,	// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:169

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:


	static const float Matrix_4_8[] = {
		// FrontLeft	FrontRight	SideLeft	SideRight
		1.0f,			0.0f,		0.0f,		0.0f,		// FrontLeft
		0.0f,			1.0f,		0.0f,		0.0f,		// FrontRight
		0.0f,			0.0f,		0.0f,		0.0f,		// Center
		0.0f,			0.0f,		0.0f,		0.0f,		// LowFrequency
		0.0f,			0.0f,		1.0f,		0.0f,		// SideLeft
		0.0f,			0.0f,		0.0f,		1.0f,		// SideRight
		0.0f,			0.0f,		0.0f,		0.0f,		// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:181

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:


	static const float Matrix_5_8[] = {
		// FrontLeft	FrontRight	Center		SideLeft	SideRight
		1.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
		0.0f,			1.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
		0.0f,			0.0f,		1.0f,		0.0f,		0.0f,		// Center
		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// LowFrequency
		0.0f,			0.0f,		0.0f,		1.0f,		0.0f,		// SideLeft
		0.0f,			0.0f,		0.0f,		0.0f,		1.0f,		// SideRight
		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:193

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:


	static const float Matrix_6_8[] = {
		// FrontLeft	FrontRight	Center		LowFreq		SideLeft	SideRight
		1.0f,			0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
		0.0f,			1.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
		0.0f,			0.0f,		1.0f,		0.0f,		0.0f,		0.0f,		// Center
		0.0f,			0.0f,		0.0f,		1.0f,		0.0f,		0.0f,		// LowFrequency
		0.0f,			0.0f,		0.0f,		0.0f,		1.0f,		0.0f,		// SideLeft
		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		1.0f,		// SideRight
		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:205

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:


	static const float Matrix_7_8[] = {
		// FrontLeft	FrontRight	BackLeft	LFE			BackRight	SideLeft	SideRight
		1.0f,			0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
		0.0f,			1.0f,		0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// Center
		0.0f,			0.0f,		0.0f,		1.0f,		0.0f,		0.0f,		0.0f,		// LowFrequency
		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		1.0f,		0.0f,		// SideLeft
		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		1.0f,		// SideRight
		0.0f,			0.0f,		1.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/MediaUtils/Private/MediaAudioResampler.cpp:217

Scope (from outer to inner):

file
namespace    MediaAudioResampler

Source code excerpt:


	static const float Matrix_8_8[] = {
		// FrontLeft	FrontRight	Center		LowFreq		SideLeft	SideRight	BackLeft	BackRight
		1.0f,			0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
		0.0f,			1.0f,		0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
		0.0f,			0.0f,		1.0f,		0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// Center
		0.0f,			0.0f,		0.0f,		1.0f,		0.0f,		0.0f,		0.0f,		0.0f,		// LowFrequency
		0.0f,			0.0f,		0.0f,		0.0f,		1.0f,		0.0f,		0.0f,		0.0f,		// SideLeft
		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		1.0f,		0.0f,		0.0f,		// SideRight
		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		0.0f,		1.0f,		0.0f,		// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/NonRealtimeAudioRenderer/Private/AudioMixerPlatformNonRealtime.cpp:164

Scope (from outer to inner):

file
namespace    Audio
function     bool FMixerPlatformNonRealtime::GetOutputDeviceInfo

Source code excerpt:

		OutInfo.NumChannels = NumChannels;

		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::FrontLeft);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::FrontRight);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::FrontCenter);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::LowFrequency);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::BackLeft);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::BackRight);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::SideLeft);

#Loc: <Workspace>/Engine/Source/Runtime/SignalProcessing/Private/ChannelMap.cpp:12

Scope (from outer to inner):

file
namespace    Audio
namespace    ChannelMapPrivate

Source code excerpt:

		static constexpr float ToMonoMatrix[ChannelMapMaxNumChannels * 1] =
		{
			// FrontLeft	FrontRight	Center		LowFrequency	SideLeft	SideRight	BackLeft	BackRight  
			0.707f,			0.707f,		1.0f,		0.0f,			0.5f,		0.5f,		0.5f,		0.5f,		// FrontLeft
		};

		static constexpr float VorbisToMonoMatrix[ChannelMapVorbisNumChannels * 1] =
		{
			// FrontLeft	Center		FrontRight	SideLeft		SideRight	LowFrequency		
			0.707f,			1.0f,		0.707f,		0.5f,			0.5f,		0.0f,		// FrontLeft
		};

		static constexpr float ToStereoMatrix[ChannelMapMaxNumChannels * 2] =
		{
			// FrontLeft	FrontRight	Center		LowFrequency	SideLeft	SideRight	BackLeft	BackRight  
			1.0f,			0.0f,		0.707f,		0.0f,			0.707f,		0.0f,		0.707f,		0.0f,		// FrontLeft
			0.0f,			1.0f,		0.707f,		0.0f,			0.0f,		0.707f,		0.0f,		0.707f,		// FrontRight
		};

		static constexpr float VorbisToStereoMatrix[ChannelMapVorbisNumChannels * 2] =
		{
			// FrontLeft	Center		FrontRight	SideLeft		SideRight	LowFrequency		
			1.0f,			0.707f,		0.0f,		0.707f,			0.0f,		0.0f,		// FrontLeft
			0.0f,			0.707f,		1.0f,		0.0f,			0.707f,		0.0f,		// FrontRight
		};

		static constexpr float ToTriMatrix[ChannelMapMaxNumChannels * 3] =
		{
			// FrontLeft	FrontRight	Center		LowFrequency	SideLeft	SideRight	BackLeft	BackRight  
			1.0f,			0.0f,		0.0f,		0.0f,			0.707f,		0.0f,		0.707f,		0.0f,		// FrontLeft
			0.0f,			1.0f,		0.0f,		0.0f,			0.0f,		0.707f,		0.0f,		0.707f,		// FrontRight
			0.0f,			0.0f,		1.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// Center
		};

		static constexpr float VorbisToTriMatrix[ChannelMapVorbisNumChannels * 3] =
		{
			// FrontLeft	Center		FrontRight	SideLeft		SideRight	LowFrequency		
			1.0f,			0.0f,		0.0f,		0.707f,			0.0f,		0.0f,		// FrontLeft
			0.0f,			0.0f,		1.0f,		0.0f,			0.707f,		0.0f,		// FrontRight
			0.0f,			1.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// Center
		};

		static constexpr float ToQuadMatrix[ChannelMapMaxNumChannels * 4] =
		{
			// FrontLeft	FrontRight	Center		LowFrequency	SideLeft	SideRight	BackLeft	BackRight	
			1.0f,			0.0f,		0.707f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
			0.0f,			1.0f,		0.707f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		1.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		1.0f,		0.0f,		1.0f,		// SideRight
		};

		static constexpr float VorbisToQuadMatrix[ChannelMapVorbisNumChannels * 4] =
		{
			// FrontLeft	Center		FrontRight	SideLeft		SideRight	LowFrequency		
			1.0f,			0.707f,		0.0f,		0.0f,			0.0f,		0.0f,		// FrontLeft
			0.0f,			0.707f,		1.0f,		0.0f,			0.0f,		0.0f,		// FrontRight
			0.0f,			0.0f,		0.0f,		1.0f,			0.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		// SideRight
		};

		static constexpr float To5Matrix[ChannelMapMaxNumChannels * 5] =
		{
			// FrontLeft	FrontRight	Center		LowFrequency	SideLeft	SideRight	BackLeft	BackRight	
			1.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
			0.0f,			1.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
			0.0f,			0.0f,		1.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// Center
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		1.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		1.0f,		0.0f,		1.0f,		// SideRight
		};

		static constexpr float VorbisTo5Matrix[ChannelMapVorbisNumChannels * 5] =
		{
			// FrontLeft	Center		FrontRight	SideLeft		SideRight	LowFrequency		
			1.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// FrontLeft
			0.0f,			0.0f,		1.0f,		0.0f,			0.0f,		0.0f,		// FrontRight
			0.0f,			1.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// Center
			0.0f,			0.0f,		0.0f,		1.0f,			0.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		// SideRight
		};

		static constexpr float To5Point1Matrix[ChannelMapMaxNumChannels * 6] =
		{
			// FrontLeft	FrontRight	Center		LowFrequency	SideLeft	SideRight	BackLeft	BackRight	
			1.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
			0.0f,			1.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
			0.0f,			0.0f,		1.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// Center
			0.0f,			0.0f,		0.0f,		1.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// LowFrequency
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		1.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		1.0f,		0.0f,		1.0f,		// SideRight
		};

#Loc: <Workspace>/Engine/Source/Runtime/SignalProcessing/Private/ChannelMap.cpp:103

Scope (from outer to inner):

file
namespace    Audio
namespace    ChannelMapPrivate

Source code excerpt:

		static constexpr float VorbisTo5Point1Matrix[ChannelMapVorbisNumChannels * 6] =
		{
			// FrontLeft	Center		FrontRight	SideLeft		SideRight	LowFrequency	
			1.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// FrontLeft
			0.0f,			0.0f,		1.0f,		0.0f,			0.0f,		0.0f,		// FrontRight
			0.0f,			1.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// Center
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		1.0f,		// LowFrequency
			0.0f,			0.0f,		0.0f,		1.0f,			0.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		// SideRight
		};

#Loc: <Workspace>/Engine/Source/Runtime/SignalProcessing/Private/ChannelMap.cpp:114

Scope (from outer to inner):

file
namespace    Audio
namespace    ChannelMapPrivate

Source code excerpt:

		static constexpr float ToHexMatrix[ChannelMapMaxNumChannels * 7] =
		{
			// FrontLeft	FrontRight	Center		LowFrequency	SideLeft	SideRight	BackLeft	BackRight	
			1.0f,			0.0f,		0.707f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
			0.0f,			1.0f,		0.707f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		1.0f,		0.0f,		// BackLeft
			0.0f,			0.0f,		0.0f,		1.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// LFE
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		1.0f,		// BackRight
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		0.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		1.0f,		0.0f,		0.0f,		// SideRight

#Loc: <Workspace>/Engine/Source/Runtime/SignalProcessing/Private/ChannelMap.cpp:126

Scope (from outer to inner):

file
namespace    Audio
namespace    ChannelMapPrivate

Source code excerpt:

		static constexpr float VorbisToHexMatrix[ChannelMapVorbisNumChannels * 7] =
		{
			// FrontLeft	Center		FrontRight	SideLeft		SideRight	LowFrequency	
			1.0f,			0.707f,		0.0f,		0.0f,			0.0f,		0.0f,		// FrontLeft
			0.0f,			0.707f,		1.0f,		0.0f,			0.0f,		0.0f,		// FrontRight
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// BackLeft
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		1.0f,		// LFE
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// BackRight
			0.0f,			0.0f,		0.0f,		1.0f,			0.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		// SideRight

#Loc: <Workspace>/Engine/Source/Runtime/SignalProcessing/Private/ChannelMap.cpp:140

Scope (from outer to inner):

file
namespace    Audio
namespace    ChannelMapPrivate

Source code excerpt:

		static constexpr float To7Point1Matrix[ChannelMapMaxNumChannels * 8] =
		{
			// FrontLeft	FrontRight	Center		LowFrequency	SideLeft	SideRight	BackLeft	BackRight
			1.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
			0.0f,			1.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
			0.0f,			0.0f,		1.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontCenter
			0.0f,			0.0f,		0.0f,		1.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// LowFrequency
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		0.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		1.0f,		0.0f,		0.0f,		// SideRight
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		1.0f,		0.0f,		// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/SignalProcessing/Private/ChannelMap.cpp:156

Scope (from outer to inner):

file
namespace    Audio
namespace    ChannelMapPrivate

Source code excerpt:

		static constexpr float To7Point1Matrix[ChannelMapMaxNumChannels * 8] =
		{
			// FrontLeft	FrontRight	Center		LowFrequency	SideLeft	SideRight	BackLeft	BackRight
			1.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontLeft
			0.0f,			1.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontRight
			0.0f,			0.0f,		1.0f,		0.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// FrontCenter
			0.0f,			0.0f,		0.0f,		1.0f,			0.0f,		0.0f,		0.0f,		0.0f,		// LowFrequency
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		1.0f,		0.0f,		// BackLeft
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		0.0f,		1.0f,		// BackRight
			0.0f,			0.0f,		0.0f,		0.0f,			1.0f,		0.0f,		0.0f,		0.0f,		// SideLeft

#Loc: <Workspace>/Engine/Source/Runtime/SignalProcessing/Private/ChannelMap.cpp:171

Scope (from outer to inner):

file
namespace    Audio
namespace    ChannelMapPrivate

Source code excerpt:

		static constexpr float VorbisTo7Point1Matrix[ChannelMapVorbisNumChannels * 8] =
		{
			// FrontLeft	Center		FrontRight	SideLeft		SideRight	LowFrequency		
			1.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// FrontLeft
			0.0f,			0.0f,		1.0f,		0.0f,			0.0f,		0.0f,		// FrontRight
			0.0f,			1.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// FrontCenter
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		1.0f,		// LowFrequency
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// SideLeft
			0.0f,			0.0f,		0.0f,		0.0f,			0.0f,		0.0f,		// SideRight
			0.0f,			0.0f,		0.0f,		1.0f,			0.0f,		0.0f,		// BackLeft

#Loc: <Workspace>/Engine/Source/Runtime/SignalProcessing/Private/ReverbFast.cpp:188

Scope (from outer to inner):

file
namespace    Audio
function     void FPlateReverbFast::InterleaveAndMixOutput

Source code excerpt:

				for (int32 i = 0; i < InNumFrames; i++, OutPos += OutNumChannels)
				{
					OutSampleData[OutPos + EAudioMixerChannel::FrontLeft] = LeftSampleData[i];
					OutSampleData[OutPos + EAudioMixerChannel::FrontRight] = RightSampleData[i];
				}
			}
			else
			{
				// There are 5 or more output channels and quad mapping is enabled.

#Loc: <Workspace>/Engine/Source/Runtime/SignalProcessing/Private/ReverbFast.cpp:233

Scope (from outer to inner):

file
namespace    Audio
function     void FPlateReverbFast::InterleaveAndMixOutput

Source code excerpt:

				for (int32 i = 0; i < InNumFrames; i++, OutPos += OutNumChannels)
				{
					OutSampleData[OutPos + EAudioMixerChannel::FrontLeft] = FrontLeftSampleData[i];
					OutSampleData[OutPos + EAudioMixerChannel::FrontRight] = FrontRightSampleData[i];
					OutSampleData[OutPos + EAudioMixerChannel::BackLeft] = BackLeftSampleData[i];
					OutSampleData[OutPos + EAudioMixerChannel::BackRight] = BackRightSampleData[i];
				}
			}
		}

#Loc: <Workspace>/Engine/Source/Runtime/SoundFieldRendering/Private/SoundFieldRendering.cpp:684

Scope: file

Source code excerpt:


TArray<Audio::FChannelPositionInfo> FSoundFieldDecoder::VirtualSpeakerLocationsHorzOnly = {
	{EAudioMixerChannel::FrontLeft, 330, 0}
	,{EAudioMixerChannel::FrontRight, 30, 0}
	,{EAudioMixerChannel::FrontCenter, 0, 0}
	,{EAudioMixerChannel::LowFrequency, -1, 0}
	,{EAudioMixerChannel::BackLeft, 210, 0} 
	,{EAudioMixerChannel::BackRight, 150, 0}
	,{EAudioMixerChannel::SideLeft, 250, 0}

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/AudioMixerPlatformXAudio2.cpp:854

Scope (from outer to inner):

file
namespace    Audio
function     static bool GetMMDeviceInfo

Source code excerpt:


				static EAudioMixerChannel::Type DefaultChannelOrdering[] = {
					EAudioMixerChannel::FrontLeft,
					EAudioMixerChannel::FrontRight,
					EAudioMixerChannel::FrontCenter,
					EAudioMixerChannel::LowFrequency,
					EAudioMixerChannel::SideLeft,
					EAudioMixerChannel::SideRight,
					EAudioMixerChannel::BackLeft,

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/AudioMixerPlatformXAudio2.cpp:870

Scope (from outer to inner):

file
namespace    Audio
function     static bool GetMMDeviceInfo

Source code excerpt:

				{
					static EAudioMixerChannel::Type DefaultChannelOrderingQuad[] = {
						EAudioMixerChannel::FrontLeft,
						EAudioMixerChannel::FrontRight,
						EAudioMixerChannel::BackLeft,
						EAudioMixerChannel::BackRight,
					};

					ChannelOrdering = DefaultChannelOrderingQuad;

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/AudioMixerPlatformXAudio2.cpp:881

Scope (from outer to inner):

file
namespace    Audio
function     static bool GetMMDeviceInfo

Source code excerpt:

				{
					static EAudioMixerChannel::Type DefaultChannelOrdering51[] = {
						EAudioMixerChannel::FrontLeft,
						EAudioMixerChannel::FrontRight,
						EAudioMixerChannel::FrontCenter,
						EAudioMixerChannel::LowFrequency,
						EAudioMixerChannel::BackLeft,
						EAudioMixerChannel::BackRight,
					};

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/AudioMixerPlatformXAudio2.cpp:902

Scope (from outer to inner):

file
namespace    Audio
function     static bool GetMMDeviceInfo

Source code excerpt:

		{
			// Non-extensible formats only support mono or stereo channel output
			OutInfo.OutputChannelArray.Add(EAudioMixerChannel::FrontLeft);
			if (OutInfo.NumChannels == 2)
			{
				OutInfo.OutputChannelArray.Add(EAudioMixerChannel::FrontRight);
			}
		}

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/AudioMixerPlatformXAudio2.cpp:1032

Scope (from outer to inner):

file
namespace    Audio
function     bool FMixerPlatformXAudio2::GetOutputDeviceInfo

Source code excerpt:

		OutInfo.NumChannels = 8;

		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::FrontLeft);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::FrontRight);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::FrontCenter);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::LowFrequency);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::BackLeft);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::BackRight);
		OutInfo.OutputChannelArray.Add(EAudioMixerChannel::SideLeft);

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/AudioMixerPlatformXAudio2.cpp:1149

Scope (from outer to inner):

file
namespace    Audio
function     bool FMixerPlatformXAudio2::OpenAudioStream

Source code excerpt:

			// Setup for running null device.
			AudioStreamInfo.NumOutputFrames = OpenStreamParams.NumFrames;
			AudioStreamInfo.DeviceInfo.OutputChannelArray = { EAudioMixerChannel::FrontLeft, EAudioMixerChannel::FrontRight };
			AudioStreamInfo.DeviceInfo.NumChannels = 2;
			AudioStreamInfo.DeviceInfo.SampleRate = OpenStreamParams.SampleRate;
			AudioStreamInfo.DeviceInfo.Format = EAudioMixerStreamDataFormat::Float;
		}

#if PLATFORM_WINDOWS

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/WindowsMMDeviceInfoCache.cpp:130

Scope (from outer to inner):

file
namespace    Audio
function     bool FWindowsMMDeviceCache::EnumerateChannelMask

Source code excerpt:


		static const EAudioMixerChannel::Type DefaultChannelOrdering[] = {
			EAudioMixerChannel::FrontLeft,
			EAudioMixerChannel::FrontRight,
			EAudioMixerChannel::FrontCenter,
			EAudioMixerChannel::LowFrequency,
			EAudioMixerChannel::SideLeft,
			EAudioMixerChannel::SideRight,
			EAudioMixerChannel::BackLeft,

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/WindowsMMDeviceInfoCache.cpp:146

Scope (from outer to inner):

file
namespace    Audio
function     bool FWindowsMMDeviceCache::EnumerateChannelMask

Source code excerpt:

		{
			static EAudioMixerChannel::Type DefaultChannelOrderingQuad[] = {
				EAudioMixerChannel::FrontLeft,
				EAudioMixerChannel::FrontRight,
				EAudioMixerChannel::BackLeft,
				EAudioMixerChannel::BackRight,
			};

			ChannelOrdering = DefaultChannelOrderingQuad;

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/WindowsMMDeviceInfoCache.cpp:157

Scope (from outer to inner):

file
namespace    Audio
function     bool FWindowsMMDeviceCache::EnumerateChannelMask

Source code excerpt:

		{
			static const EAudioMixerChannel::Type DefaultChannelOrdering51[] = {
				EAudioMixerChannel::FrontLeft,
				EAudioMixerChannel::FrontRight,
				EAudioMixerChannel::FrontCenter,
				EAudioMixerChannel::LowFrequency,
				EAudioMixerChannel::BackLeft,
				EAudioMixerChannel::BackRight,
			};

#Loc: <Workspace>/Engine/Source/Runtime/Windows/AudioMixerXAudio2/Private/WindowsMMDeviceInfoCache.cpp:191

Scope (from outer to inner):

file
namespace    Audio
function     bool FWindowsMMDeviceCache::EnumerateChannelFormat

Source code excerpt:

	{
		// Non-extensible formats only support mono or stereo channel output
		OutInfo.OutputChannels.Add(EAudioMixerChannel::FrontLeft);
		if (OutInfo.NumChannels == 2)
		{
			OutInfo.OutputChannels.Add(EAudioMixerChannel::FrontRight);
		}
	}