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) |