ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/OniSplit/Sound/WavExporter.cs
(Generate patch)

Comparing OniSplit/Sound/WavExporter.cs (file contents):
Revision 1154 by geyser, Mon May 3 15:22:15 2021 UTC vs.
Revision 1156 by geyser, Sat May 8 01:44:24 2021 UTC

# Line 153 | Line 153 | namespace Oni.Sound
153              using (var stream = File.Create(Path.Combine(OutputDirPath, descriptor.FullName + ".wav")))
154              using (var writer = new BinaryWriter(stream))
155              {
156 <                var blockSizeADPCM = sound.BlockAlignment;
157 <                
158 <                int wholeBlocks = sound.Data.Length / blockSizeADPCM;
159 <                int leftoverBytes = sound.Data.Length - (wholeBlocks * blockSizeADPCM);
160 <                int leftoverSamples = 0;
161 <                if(leftoverBytes > 14)
162 <                    leftoverSamples = 2 + (leftoverBytes - 7 * sound.ChannelCount)
163 <                                    * 8 / sound.BitsPerSample / sound.ChannelCount;
164 <                int paddingBytes = 0;
165 <                if (leftoverBytes > 0) // incomplete trailing block
166 <                    paddingBytes = blockSizeADPCM - leftoverBytes;
167 <                var samplesPerBlock = 2 + (blockSizeADPCM - sound.ChannelCount * 7) * 8 / sound.ChannelCount / sound.BitsPerSample;
168 <
169 <                Int32 sampleCount = wholeBlocks * samplesPerBlock + leftoverSamples;
170 <
156 >                int blockSizeADPCM, samplesPerBlock, sampleCount, paddingBytes = 0;
157                  if (sound.IsIMA4) // IMA4 ADPCM format
158                  {
159                      blockSizeADPCM = 34 * sound.ChannelCount;
160                      samplesPerBlock = 64;
161                      sampleCount = (sound.Data.Length / blockSizeADPCM) * samplesPerBlock;
162                  }
163 +                else
164 +                {
165 +                    blockSizeADPCM = sound.BlockAlignment;
166 +                    int wholeBlocks = sound.Data.Length / blockSizeADPCM;
167 +                    int leftoverBytes = sound.Data.Length - (wholeBlocks * blockSizeADPCM);
168 +                    int leftoverSamples = 0;
169 +                    if (leftoverBytes > 7 * sound.ChannelCount)
170 +                        leftoverSamples = 2 + (leftoverBytes - 7 * sound.ChannelCount)
171 +                                        * 8 / sound.BitsPerSample / sound.ChannelCount;
172 +                    else
173 +                        Console.Error.WriteLine("Improper trailing bytes/samples!");
174 +                    if (leftoverBytes > 0) // incomplete trailing block
175 +                        paddingBytes = blockSizeADPCM - leftoverBytes;
176 +                    samplesPerBlock = 2 + (blockSizeADPCM - sound.ChannelCount * 7) * 8 / sound.ChannelCount / sound.BitsPerSample;
177 +                    sampleCount = wholeBlocks * samplesPerBlock + leftoverSamples;
178 +                }
179                  if (!convert_to_PCM)
180                  {
181                      if (sound.IsIMA4)

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)