154 stream.Position = dataStart;
155 SoundData soundData =
new(fmtHeader.ChannelsCount, fmtHeader.SamplingFrequency, dataHeader.DataSize);
156 byte[] array =
new byte[dataHeader.DataSize];
157 if (stream.Read(array, 0, array.Length) != array.Length) {
158 throw new InvalidOperationException(
"Truncated WAV data.");
160 Buffer.BlockCopy(array, 0, soundData.
Data, 0, array.Length);
165 ArgumentNullException.ThrowIfNull(soundData);
166 ArgumentNullException.ThrowIfNull(stream);
173 + soundData.
Data.Length;
175 engineBinaryWriter.WriteStruct(structure);
178 structure2.FormatSize = 16;
182 structure2.BytesPerSecond = soundData.ChannelsCount * 2 * soundData.
SamplingFrequency;
183 structure2.BytesPerSample = (short)(soundData.
ChannelsCount * 2);
184 structure2.BitsPerChannel = 16;
185 engineBinaryWriter.WriteStruct(structure2);
188 structure3.DataSize = soundData.Data.Length * 2;
189 engineBinaryWriter.WriteStruct(structure3);
190 byte[] array =
new byte[soundData.Data.Length * 2];
191 Buffer.BlockCopy(soundData.
Data, 0, array, 0, array.Length);
192 stream.Write(array, 0, array.Length);
196 ArgumentNullException.ThrowIfNull(stream);
197 if (!BitConverter.IsLittleEndian) {
198 throw new InvalidOperationException(
"Unsupported system endianness.");
201 throw new InvalidOperationException(
"Invalid WAV header.");
205 dataHeader =
default;
207 stream.Position += 12L;
212 int num = engineBinaryReader.ReadInt32();
214 stream.Position -= 4L;
215 fmtHeader = engineBinaryReader.ReadStruct<
FmtHeader>();
219 stream.Position -= 4L;
220 dataHeader = engineBinaryReader.ReadStruct<
DataHeader>();
221 dataStart = stream.Position;
225 int num2 = engineBinaryReader.ReadInt32();
226 stream.Position += num2;
229 if (fmtHeader.Type != 1
230 || fmtHeader.ChannelsCount < 1
231 || fmtHeader.ChannelsCount > 2
232 || fmtHeader.SamplingFrequency < 8000
233 || fmtHeader.SamplingFrequency > 48000
234 || fmtHeader.BitsPerChannel != 16) {
235 throw new InvalidOperationException(
"Unsupported WAV format.");