using System; using System.IO; // This file is part of the ANX.Framework and originally taken from // the AC.AL OpenAL library, released under the MIT License. // For details see: http://acal.codeplex.com/license namespace WaveUtils { public static class IEEEFloat { public static void ConvertToPcm(WaveInfo data, int resultChannelCount) { bool is64BitFloat = data.BitsPerSample == 64; using (BinaryReader sourceReader = new BinaryReader(new MemoryStream(data.Data))) { MemoryStream destStream = new MemoryStream(); BinaryWriter destWriter = new BinaryWriter(destStream); int length = data.Data.Length / (is64BitFloat ? 8 : 4); int increment = 1; if (data.Channels == 2 && resultChannelCount == 1) increment = 2; data.Channels = resultChannelCount; data.ALFormat = data.Channels == 1 ? ALFormat.Mono16 : ALFormat.Stereo16; for (int index = 0; index < length; index += increment) { double value = is64BitFloat ? sourceReader.ReadDouble() : sourceReader.ReadSingle(); destWriter.Write((short)(value * 32767)); } data.Data = destStream.ToArray(); } } } }