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

Comparing OniSplit/Sound/WavImporter.cs (file contents):
Revision 1114 by iritscen, Wed Jan 22 14:08:57 2020 UTC vs.
Revision 1154 by geyser, Mon May 3 15:22:15 2021 UTC

# Line 5 | Line 5 | namespace Oni.Sound
5   {
6      internal class WavImporter : Importer
7      {
8 +        private readonly bool convertToDemo;
9 +
10 +        public WavImporter(bool toDemo)
11 +            : base(toDemo?InstanceFileHeader.OniMacTemplateChecksum:InstanceFileHeader.OniPCTemplateChecksum)
12 +        {
13 +            convertToDemo = toDemo;
14 +        }
15 +
16          public override void Import(string filePath, string outputDirPath)
17          {
18              var wav = WavFile.FromFile(filePath);
# Line 43 | Line 51 | namespace Oni.Sound
51              duration *= 60.0f;
52  
53              var sndd = CreateInstance(TemplateTag.SNDD, name);
54 <
55 <            using (var writer = sndd.OpenWrite(8))
54 >            if (convertToDemo)
55 >            {
56 >                // TODO: also validate other ADPCM parameters (coefficient table)?
57 >                if (wav.Format != WavFormat.Adpcm) // Or is PCM supported, actually?
58 >                    Console.WriteLine("Cannot convert to PC demo: ADPCM format required!");
59 >                if (wav.SampleRate != 22050)
60 >                    Console.WriteLine("Cannot convert to PC demo: 22050 kHz required!");
61 >                if (wav.BlockAlign != 512 * wav.ChannelCount)
62 >                    Console.WriteLine("Cannot convert to PC demo: wrong block alignment!");
63 >                if (wav.BitsPerSample != 4)
64 >                    Console.WriteLine("Cannot convert to PC demo: wrong bits per sample!");
65 >
66 >                using (var writer = sndd.OpenWrite())
67 >                {
68 >                    if (wav.ChannelCount == 2)
69 >                        writer.WriteInt16(3);
70 >                    else
71 >                        writer.WriteInt16(1);
72 >                    writer.WriteInt16(0);
73 >                    writer.Write((int)duration);
74 >                    writer.Write(wav.SoundData.Length);
75 >                    writer.Write(WriteRawPart(wav.SoundData));
76 >                }
77 >            }
78 >            else
79              {
80 <                writer.Write((short)wav.Format);
81 <                writer.WriteInt16(wav.ChannelCount);
82 <                writer.Write(wav.SampleRate);
83 <                writer.Write(wav.AverageBytesPerSecond);
84 <                writer.WriteInt16(wav.BlockAlign);
85 <                writer.WriteInt16(wav.BitsPerSample);
86 <                writer.WriteInt16(wav.ExtraData.Length);
87 <                writer.Write(wav.ExtraData);
88 <                writer.Skip(32 - wav.ExtraData.Length);
89 <                writer.Write((short)duration);
90 <                writer.Write(wav.SoundData.Length);
91 <                writer.Write(WriteRawPart(wav.SoundData));
80 >                using (var writer = sndd.OpenWrite())
81 >                {
82 >                    if (wav.Format == WavFormat.Adpcm)
83 >                        writer.WriteInt16(8);
84 >                    else
85 >                        writer.WriteInt16(0);
86 >                    writer.WriteInt16(0);
87 >                    writer.Write((short)wav.Format);
88 >                    writer.WriteInt16(wav.ChannelCount);
89 >                    writer.Write(wav.SampleRate);
90 >                    writer.Write(wav.AverageBytesPerSecond);
91 >                    writer.WriteInt16(wav.BlockAlign);
92 >                    writer.WriteInt16(wav.BitsPerSample);
93 >                    writer.WriteInt16(wav.ExtraData.Length);
94 >                    writer.Write(wav.ExtraData);
95 >                    writer.Skip(32 - wav.ExtraData.Length);
96 >                    writer.Write((short)duration);
97 >                    writer.Write(wav.SoundData.Length);
98 >                    writer.Write(WriteRawPart(wav.SoundData));
99 >                }
100              }
101          }
102      }

Diff Legend

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