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 1114 by iritscen, Wed Jan 22 14:08:57 2020 UTC vs.
Revision 1126 by geyser, Thu Mar 26 23:11:54 2020 UTC

# Line 13 | Line 13 | namespace Oni.Sound
13  
14          private static readonly byte[] formatTemplate = new byte[50]
15          {
16 <            0x02, 0, 0, 0, 0x22, 0x56, 0, 0, 0, 0, 0, 0, 0, 0x02, 0x04, 0,
17 <            0x20, 0, 0xf4, 0x03, 0x07, 0, 0, 0x01, 0, 0, 0, 0x02, 0, 0xff, 0, 0, 0, 0, 0xc0, 0, 0x40, 0,
18 <            0xf0, 0, 0, 0, 0xcc, 0x01, 0x30, 0xff, 0x88, 0x01, 0x18, 0xff
16 >            0x02, 0,    // format ID (always 2)
17 >            0, 0,       // ChannelCount (overwritten)
18 >            0x22, 0x56, 0, 0, // SampleRate (usually 22050, can be 44100)
19 >            0, 0, 0, 0, // average data rate (computed and overwritten)
20 >            0, 0x02,    // block alignment (default 512, can be 1024)
21 >            0x04, 0,    // bits per sample (always 4)
22 >            0x20, 0,    // size of extended header block
23 >            0xf4, 0x03, // samples per block (usually 1012, can be 2036)
24 >            0x07, 0,    // standard ADPCM coefficient table (always the same)
25 >            0, 0x01, 0, 0,
26 >            0, 0x02, 0, 0xff,
27 >            0, 0, 0, 0,
28 >            0xc0, 0, 0x40, 0,
29 >            0xf0, 0, 0, 0,
30 >            0xcc, 0x01, 0x30, 0xff,
31 >            0x88, 0x01, 0x18, 0xff
32          };
33  
34          #endregion
# Line 34 | Line 47 | namespace Oni.Sound
47              {
48                  var format = (byte[])formatTemplate.Clone();
49  
50 +                var blockAlignment = 512 * sound.ChannelCount * sound.SampleRate / 22050;
51 +                var samplesPerBlock = 2 + (blockAlignment - sound.ChannelCount * 7) * 8 / sound.ChannelCount / 4;
52 +                var averageRate = sound.SampleRate * blockAlignment / samplesPerBlock;
53                  Array.Copy(BitConverter.GetBytes(sound.ChannelCount), 0, format, 2, 2);
54 <                Array.Copy(BitConverter.GetBytes(sound.ChannelCount == 1 ? 11155 : 22311), 0, format, 8, 4);
55 <                Array.Copy(BitConverter.GetBytes(sound.ChannelCount == 1 ? 512 : 1024), 0, format, 12, 2);
54 >                Array.Copy(BitConverter.GetBytes(sound.SampleRate), 0, format, 4, 4);
55 >                Array.Copy(BitConverter.GetBytes(averageRate), 0, format, 8, 4);
56 >                Array.Copy(BitConverter.GetBytes(blockAlignment), 0, format, 12, 2);
57 >                Array.Copy(BitConverter.GetBytes(samplesPerBlock), 0, format, 18, 2);
58  
59                  writer.Write(fcc_RIFF);
60                  writer.Write(8 + format.Length + 8 + sound.Data.Length);

Diff Legend

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