Fix playing 6-channel audio with XAudio2 backend
This commit is contained in:
@@ -160,18 +160,8 @@ public:
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
default: // TODO: implement multi-channel support (eg. 5.1, 7.1)
|
default: // TODO: implement multi-channel support (eg. 5.1, 7.1)
|
||||||
if (sourceChannels == 1)
|
outputMatrix[0] = channels[FrontLeft];
|
||||||
{
|
outputMatrix[sourceChannels + 1] = channels[FrontRight];
|
||||||
outputMatrix[0] = channels[FrontLeft];
|
|
||||||
outputMatrix[1] = channels[FrontRight];
|
|
||||||
}
|
|
||||||
else if (sourceChannels == 2)
|
|
||||||
{
|
|
||||||
outputMatrix[0] = channels[FrontLeft];
|
|
||||||
outputMatrix[1] = 0.0f;
|
|
||||||
outputMatrix[2] = 0.0f;
|
|
||||||
outputMatrix[3] = channels[FrontRight];
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -498,7 +498,7 @@ void AudioBackendOAL::Buffer_Write(uint32 bufferID, byte* samples, const AudioDa
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG(Warning, "OpenAL doesn't support bit depth larger than 16. Your audio data will be truncated.");
|
LOG(Warning, "OpenAL doesn't support bit depth larger than 16. Audio data will be truncated.");
|
||||||
const uint32 bufferSize = info.NumSamples * 2;
|
const uint32 bufferSize = info.NumSamples * 2;
|
||||||
byte* sampleBuffer16 = (byte*)Allocator::Allocate(bufferSize);
|
byte* sampleBuffer16 = (byte*)Allocator::Allocate(bufferSize);
|
||||||
AudioTool::ConvertBitDepth(samples, info.BitDepth, sampleBuffer16, 16, info.NumSamples);
|
AudioTool::ConvertBitDepth(samples, info.BitDepth, sampleBuffer16, 16, info.NumSamples);
|
||||||
|
|||||||
@@ -19,11 +19,9 @@
|
|||||||
// Include XAudio library
|
// Include XAudio library
|
||||||
// Documentation: https://docs.microsoft.com/en-us/windows/desktop/xaudio2/xaudio2-apis-portal
|
// Documentation: https://docs.microsoft.com/en-us/windows/desktop/xaudio2/xaudio2-apis-portal
|
||||||
#include <xaudio2.h>
|
#include <xaudio2.h>
|
||||||
//#include <xaudio2fx.h>
|
|
||||||
//#include <x3daudio.h>
|
|
||||||
|
|
||||||
// TODO: implement multi-channel support (eg. 5.1, 7.1)
|
// TODO: implement multi-channel support (eg. 5.1, 7.1)
|
||||||
#define MAX_INPUT_CHANNELS 2
|
#define MAX_INPUT_CHANNELS 6
|
||||||
#define MAX_OUTPUT_CHANNELS 2
|
#define MAX_OUTPUT_CHANNELS 2
|
||||||
#define MAX_CHANNELS_MATRIX_SIZE (MAX_INPUT_CHANNELS*MAX_OUTPUT_CHANNELS)
|
#define MAX_CHANNELS_MATRIX_SIZE (MAX_INPUT_CHANNELS*MAX_OUTPUT_CHANNELS)
|
||||||
#if ENABLE_ASSERTION
|
#if ENABLE_ASSERTION
|
||||||
@@ -151,6 +149,7 @@ namespace XAudio2
|
|||||||
IXAudio2* Instance = nullptr;
|
IXAudio2* Instance = nullptr;
|
||||||
IXAudio2MasteringVoice* MasteringVoice = nullptr;
|
IXAudio2MasteringVoice* MasteringVoice = nullptr;
|
||||||
int32 Channels;
|
int32 Channels;
|
||||||
|
DWORD ChannelMask;
|
||||||
bool ForceDirty = true;
|
bool ForceDirty = true;
|
||||||
AudioBackendTools::Settings Settings;
|
AudioBackendTools::Settings Settings;
|
||||||
Listener Listener;
|
Listener Listener;
|
||||||
@@ -683,7 +682,7 @@ bool AudioBackendXAudio2::Base_Init()
|
|||||||
}
|
}
|
||||||
XAUDIO2_VOICE_DETAILS details;
|
XAUDIO2_VOICE_DETAILS details;
|
||||||
XAudio2::MasteringVoice->GetVoiceDetails(&details);
|
XAudio2::MasteringVoice->GetVoiceDetails(&details);
|
||||||
#if 0
|
#if MAX_OUTPUT_CHANNELS > 2
|
||||||
// TODO: implement multi-channel support (eg. 5.1, 7.1)
|
// TODO: implement multi-channel support (eg. 5.1, 7.1)
|
||||||
XAudio2::Channels = details.InputChannels;
|
XAudio2::Channels = details.InputChannels;
|
||||||
hr = XAudio2::MasteringVoice->GetChannelMask(&XAudio2::ChannelMask);
|
hr = XAudio2::MasteringVoice->GetChannelMask(&XAudio2::ChannelMask);
|
||||||
@@ -694,6 +693,7 @@ bool AudioBackendXAudio2::Base_Init()
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
XAudio2::Channels = 2;
|
XAudio2::Channels = 2;
|
||||||
|
XAudio2::ChannelMask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT;
|
||||||
#endif
|
#endif
|
||||||
LOG(Info, "XAudio2: {0} channels at {1} kHz", XAudio2::Channels, details.InputSampleRate / 1000.0f);
|
LOG(Info, "XAudio2: {0} channels at {1} kHz", XAudio2::Channels, details.InputSampleRate / 1000.0f);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user