static void Main(string[] args) { { byte[] rawData16 = new byte[65536 * 2]; for (int i = 0; i < 65536; ++i) { rawData16[i * 2] = (byte)(i & 0xff); rawData16[i * 2 + 1] = (byte)(i >> 8); } WavData wdOrigI16 = new WavData(); wdOrigI16.CreateHeader(1, 44100, 16, 65536); wdOrigI16.SetRawData(rawData16); { System.Console.WriteLine("I16 ==> I24 ==> I16 test"); WavData wdI24 = wdOrigI16.BitsPerSampleConvertTo(24, ValueRepresentationType.SInt); WavData wdNew = wdI24.BitsPerSampleConvertTo(16, ValueRepresentationType.SInt); byte[] b16to24 = wdI24.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); int iMin = Int32.MaxValue; int iMax = Int32.MinValue; for (int i = 0; i < 65536; ++i) { short vOrig = (short)((int)rawData16[i * 2] + (rawData16[i * 2 + 1] << 8)); int v16to24 = ((int)b16to24[i * 3] << 8) + (b16to24[i * 3 + 1] << 16) + (b16to24[i * 3 + 2] << 24); int vNew24 = v16to24 / 256; if (vNew24 < iMin) { iMin = vNew24; } if (iMax < vNew24) { iMax = vNew24; } short vNew = (short)((int)bNew[i * 2] + (bNew[i * 2 + 1] << 8)); if (0 != (vNew - vOrig)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT! ################", vOrig, vNew, vNew24, vNew - vOrig); } } System.Console.WriteLine(" i24 min={0} max={1}", iMin, iMax); } { System.Console.WriteLine("I16 ==> I32 ==> I16 test"); WavData wdI32 = wdOrigI16.BitsPerSampleConvertTo(32, ValueRepresentationType.SInt); WavData wdNew = wdI32.BitsPerSampleConvertTo(16, ValueRepresentationType.SInt); byte[] b16toI32 = wdI32.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); int iMin = Int32.MaxValue; int iMax = Int32.MinValue; for (int i = 0; i < 65536; ++i) { short vOrig = (short)((int)rawData16[i * 2] + (rawData16[i * 2 + 1] << 8)); int vI32 = BitConverter.ToInt32(b16toI32, i * 4); if (vI32 < iMin) { iMin = vI32; } if (iMax < vI32) { iMax = vI32; } short vNew = (short)((int)bNew[i * 2] + (bNew[i * 2 + 1] << 8)); if (0 != (vNew - vOrig)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT!", vOrig, vNew, vI32, vNew - vOrig); } } System.Console.WriteLine(" i32 min={0} max={1}", iMin, iMax); } { System.Console.WriteLine("I16 ==> F32 ==> I16 test"); WavData wdF32 = wdOrigI16.BitsPerSampleConvertTo(32, ValueRepresentationType.SFloat); WavData wdNew = wdF32.BitsPerSampleConvertTo(16, ValueRepresentationType.SInt); byte[] b16toF32 = wdF32.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); float fMin = float.MaxValue; float fMax = float.MinValue; for (int i = 0; i < 65536; ++i) { short vOrig = (short)((int)rawData16[i * 2] + (rawData16[i * 2 + 1] << 8)); float vF32 = BitConverter.ToSingle(b16toF32, i * 4); if (vF32 < fMin) { fMin = vF32; } if (fMax < vF32) { fMax = vF32; } short vNew = (short)((int)bNew[i * 2] + (bNew[i * 2 + 1] << 8)); if (0 != (vNew - vOrig)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT!", vOrig, vNew, vF32, vNew - vOrig); } } System.Console.WriteLine(" fMin={0} fMax={1}", fMin, fMax); } } { byte[] rawData24 = new byte[16777216 * 3]; for (int i = 0; i < 16777216; ++i) { rawData24[i * 3] = (byte)(i & 0xff); rawData24[i * 3 + 1] = (byte)(i >> 8); rawData24[i * 3 + 2] = (byte)(i >> 16); } WavData wdOrigI24 = new WavData(); wdOrigI24.CreateHeader(1, 44100, 24, 16777216); wdOrigI24.SetRawData(rawData24); { System.Console.WriteLine("I24 ==> I32 ==> I24 test"); WavData wdI32 = wdOrigI24.BitsPerSampleConvertTo(32, ValueRepresentationType.SInt); WavData wdNew = wdI32.BitsPerSampleConvertTo(24, ValueRepresentationType.SInt); byte[] b24to32 = wdI32.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); int iMin = Int32.MaxValue; int iMax = Int32.MinValue; for (int i = 0; i < 16777216; ++i) { int vOrig32 = ((int)rawData24[i * 3] << 8) + (rawData24[i * 3 + 1] << 16) + (rawData24[i * 3 + 2] << 24); int vOrig24 = vOrig32 / 256; int v24to32 = BitConverter.ToInt32(b24to32, i * 4); if (v24to32 < iMin) { iMin = v24to32; } if (iMax < v24to32) { iMax = v24to32; } int vNew32 = ((int)bNew[i * 3] << 8) + (bNew[i * 3 + 1] << 16) + (bNew[i * 3 + 2] << 24); int vNew24 = vNew32 / 256; if (0 != (vNew24 - vOrig24)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT! ################", vOrig24, vNew24, v24to32, vNew24 - vOrig24); } } System.Console.WriteLine(" i32 min={0} max={1}", iMin, iMax); } { System.Console.WriteLine("I24 ==> F32 ==> I24 test"); WavData wdF32 = wdOrigI24.BitsPerSampleConvertTo(32, ValueRepresentationType.SFloat); WavData wdNew = wdF32.BitsPerSampleConvertTo(24, ValueRepresentationType.SInt); byte[] b24toF32 = wdF32.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); float fMin = float.MaxValue; float fMax = float.MinValue; for (int i = 0; i < 16777216; ++i) { int vOrig32 = ((int)rawData24[i * 3] << 8) + (rawData24[i * 3 + 1] << 16) + (rawData24[i * 3 + 2] << 24); int vOrig24 = vOrig32 / 256; float vF32 = BitConverter.ToSingle(b24toF32, i * 4); if (vF32 < fMin) { fMin = vF32; } if (fMax < vF32) { fMax = vF32; } int vNew32 = ((int)bNew[i * 3] << 8) + (bNew[i * 3 + 1] << 16) + (bNew[i * 3 + 2] << 24); int vNew24 = vNew32 / 256; if (0 != (vNew24 - vOrig24)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT! ################", vOrig24, vNew24, vF32, vNew24 - vOrig24); } } System.Console.WriteLine(" fMin={0} fMax={1}", fMin, fMax); } } System.Console.WriteLine("done."); }
static void Main(string[] args) { { byte[] rawData16 = new byte[65536 * 2]; for (int i = 0; i < 65536; ++i) { rawData16[i * 2] = (byte)(i & 0xff); rawData16[i * 2 + 1] = (byte)(i >> 8); } WavData wdOrigI16 = new WavData(); wdOrigI16.CreateHeader(1, 44100, 16, 65536); wdOrigI16.SetRawData(rawData16); { System.Console.WriteLine("I16 ==> I24 ==> I16 test"); WavData wdI24 = wdOrigI16.BitsPerSampleConvertTo(24, ValueRepresentationType.SInt); WavData wdNew = wdI24.BitsPerSampleConvertTo(16, ValueRepresentationType.SInt); byte[] b16to24 = wdI24.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); int iMin = Int32.MaxValue; int iMax = Int32.MinValue; for (int i = 0; i < 65536; ++i) { short vOrig = (short)((int)rawData16[i * 2] + (rawData16[i * 2 + 1] << 8)); int v16to24 = ((int)b16to24[i * 3] << 8) + (b16to24[i * 3 + 1] << 16) + (b16to24[i * 3 + 2] << 24); int vNew24 = v16to24 / 256; if (vNew24 < iMin) { iMin = vNew24; } if (iMax < vNew24) { iMax = vNew24; } short vNew = (short)((int)bNew[i * 2] + (bNew[i * 2 + 1] << 8)); if (0 != (vNew - vOrig)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT! ################", vOrig, vNew, vNew24, vNew - vOrig); } } System.Console.WriteLine(" i24 min={0} max={1}", iMin, iMax); } { System.Console.WriteLine("I16 ==> I32 ==> I16 test"); WavData wdI32 = wdOrigI16.BitsPerSampleConvertTo(32, ValueRepresentationType.SInt); WavData wdNew = wdI32.BitsPerSampleConvertTo(16, ValueRepresentationType.SInt); byte[] b16toI32 = wdI32.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); int iMin = Int32.MaxValue; int iMax = Int32.MinValue; for (int i = 0; i < 65536; ++i) { short vOrig = (short)((int)rawData16[i * 2] + (rawData16[i * 2 + 1] << 8)); int vI32 = BitConverter.ToInt32(b16toI32, i * 4); if (vI32 < iMin) { iMin = vI32; } if (iMax < vI32) { iMax = vI32; } short vNew = (short)((int)bNew[i * 2] + (bNew[i * 2 + 1] << 8)); if (0 != (vNew - vOrig)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT!", vOrig, vNew, vI32, vNew - vOrig); } } System.Console.WriteLine(" i32 min={0} max={1}", iMin, iMax); } { System.Console.WriteLine("I16 ==> F32 ==> I16 test"); WavData wdF32 = wdOrigI16.BitsPerSampleConvertTo(32, ValueRepresentationType.SFloat); WavData wdNew = wdF32.BitsPerSampleConvertTo(16, ValueRepresentationType.SInt); byte[] b16toF32 = wdF32.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); float fMin = float.MaxValue; float fMax = float.MinValue; for (int i = 0; i < 65536; ++i) { short vOrig = (short)((int)rawData16[i * 2] + (rawData16[i * 2 + 1] << 8)); float vF32 = BitConverter.ToSingle(b16toF32, i * 4); if (vF32 < fMin) { fMin = vF32; } if (fMax < vF32) { fMax = vF32; } short vNew = (short)((int)bNew[i * 2] + (bNew[i * 2 + 1] << 8)); if (0 != (vNew - vOrig)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT!", vOrig, vNew, vF32, vNew - vOrig); } } System.Console.WriteLine(" fMin={0} fMax={1}", fMin, fMax); } } { byte[] rawData24 = new byte[16777216 * 3]; for (int i = 0; i < 16777216; ++i) { rawData24[i * 3] = (byte)(i & 0xff); rawData24[i * 3 + 1] = (byte)(i >> 8); rawData24[i * 3 + 2] = (byte)(i >> 16); } WavData wdOrigI24 = new WavData(); wdOrigI24.CreateHeader(1, 44100, 24, 16777216); wdOrigI24.SetRawData(rawData24); { System.Console.WriteLine("I24 ==> I32 ==> I24 test"); WavData wdI32 = wdOrigI24.BitsPerSampleConvertTo(32, ValueRepresentationType.SInt); WavData wdNew = wdI32.BitsPerSampleConvertTo(24, ValueRepresentationType.SInt); byte[] b24to32 = wdI32.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); int iMin = Int32.MaxValue; int iMax = Int32.MinValue; for (int i = 0; i < 16777216; ++i) { int vOrig32 = ((int)rawData24[i * 3]<<8) + (rawData24[i * 3 + 1] << 16) + (rawData24[i * 3 + 2] << 24); int vOrig24 = vOrig32 / 256; int v24to32 = BitConverter.ToInt32(b24to32, i * 4); if (v24to32 < iMin) { iMin = v24to32; } if (iMax < v24to32) { iMax = v24to32; } int vNew32 = ((int)bNew[i * 3] << 8) + (bNew[i * 3 + 1] << 16) + (bNew[i * 3 + 2] << 24); int vNew24 = vNew32 / 256; if (0 != (vNew24 - vOrig24)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT! ################", vOrig24, vNew24, v24to32, vNew24 - vOrig24); } } System.Console.WriteLine(" i32 min={0} max={1}", iMin, iMax); } { System.Console.WriteLine("I24 ==> F32 ==> I24 test"); WavData wdF32 = wdOrigI24.BitsPerSampleConvertTo(32, ValueRepresentationType.SFloat); WavData wdNew = wdF32.BitsPerSampleConvertTo(24, ValueRepresentationType.SInt); byte[] b24toF32 = wdF32.SampleRawGet(); byte[] bNew = wdNew.SampleRawGet(); float fMin = float.MaxValue; float fMax = float.MinValue; for (int i = 0; i < 16777216; ++i) { int vOrig32 = ((int)rawData24[i * 3] << 8) + (rawData24[i * 3 + 1] << 16) + (rawData24[i * 3 + 2] << 24); int vOrig24 = vOrig32 / 256; float vF32 = BitConverter.ToSingle(b24toF32, i * 4); if (vF32 < fMin) { fMin = vF32; } if (fMax < vF32) { fMax = vF32; } int vNew32 = ((int)bNew[i * 3] << 8) + (bNew[i * 3 + 1] << 16) + (bNew[i * 3 + 2] << 24); int vNew24 = vNew32 / 256; if (0 != (vNew24 - vOrig24)) { System.Console.WriteLine("{0} ==> {1} via {2} diff={3} DIFFERENT! ################", vOrig24, vNew24, vF32, vNew24 - vOrig24); } } System.Console.WriteLine(" fMin={0} fMax={1}", fMin, fMax); } } System.Console.WriteLine("done."); }