Changeset 1126 for OniSplit/Sound/WavExporter.cs
- Timestamp:
- Mar 27, 2020, 12:11:54 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
OniSplit/Sound/WavExporter.cs
r1114 r1126 14 14 private static readonly byte[] formatTemplate = new byte[50] 15 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 19 32 }; 20 33 … … 35 48 var format = (byte[])formatTemplate.Clone(); 36 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; 37 53 Array.Copy(BitConverter.GetBytes(sound.ChannelCount), 0, format, 2, 2); 38 Array.Copy(BitConverter.GetBytes(sound.ChannelCount == 1 ? 11155 : 22311), 0, format, 8, 4); 39 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); 40 58 41 59 writer.Write(fcc_RIFF);
Note:
See TracChangeset
for help on using the changeset viewer.