Browse Source

Added quick and dirty upmixing for 1.0, 2.0, and 4.0 to 5.1.

improved_timing
Ian Burgmyer 6 years ago
parent
commit
5c22b52a12
  1. 31
      DotSDL/Audio/FormatConverter.cs

31
DotSDL/Audio/FormatConverter.cs

@ -168,13 +168,38 @@ namespace DotSDL.Audio {
var ch = (int)ChannelCount.FiveOne;
samples = new double[buffer.Length * (int)ChannelCount.Quadraphonic];
// TODO: Improve upmixing.
switch(buffer.Channels) {
case ChannelCount.Mono:
throw new NotImplementedException();
for(var i = 0; i < buffer.Length; i++) {
samples[i * ch] = buffer.Samples[Channel.Mono][i];
samples[i * ch + 1] = buffer.Samples[Channel.Mono][i];
samples[i * ch + 2] = 0; // Center channel.
samples[i * ch + 3] = 0; // LFE.
samples[i * ch + 4] = buffer.Samples[Channel.Mono][i];
samples[i * ch + 5] = buffer.Samples[Channel.Mono][i];
}
break;
case ChannelCount.Stereo:
throw new NotImplementedException();
for(var i = 0; i < buffer.Length; i++) {
samples[i * ch] = buffer.Samples[Channel.StereoLeft][i];
samples[i * ch + 1] = buffer.Samples[Channel.StereoRight][i];
samples[i * ch + 2] = 0; // Center channel.
samples[i * ch + 3] = 0; // LFE.
samples[i * ch + 4] = buffer.Samples[Channel.StereoLeft][i];
samples[i * ch + 5] = buffer.Samples[Channel.StereoRight][i];
}
break;
case ChannelCount.Quadraphonic:
throw new NotImplementedException();
for(var i = 0; i < buffer.Length; i++) {
samples[i * ch] = buffer.Samples[Channel.QuadFrontLeft][i];
samples[i * ch + 1] = buffer.Samples[Channel.QuadFrontRight][i];
samples[i * ch + 2] = 0; // Center channel.
samples[i * ch + 3] = 0; // LFE.
samples[i * ch + 4] = buffer.Samples[Channel.QuadRearLeft][i];
samples[i * ch + 5] = buffer.Samples[Channel.QuadRearRight][i];
}
break;
case ChannelCount.FiveOne:
for(var i = 0; i < buffer.Length; i++) {
samples[i * ch] = buffer.Samples[Channel.FiveOneFrontLeft][i];

Loading…
Cancel
Save