/// <summary> /// Raw Wav Data に対してフィルタリングする。 /// ステレオ版。 /// </summary> /// <param name="data">Raw Data</param> /// <param name="filter">フィルタ</param> /// <param name="is16bit">Raw Data の形式が16ビットか8ビットか。</param> public static void FilteringRawData(byte[] data, Stereo1SampleFilter filter, bool is16bit) { unsafe { fixed(byte *begin = data) { if (is16bit) { short *end = (short *)(begin + (data.Length & (~3))); for (short *p = (short *)begin; p != (short *)end; p += 2) { filter(ref *p, ref *(p + 1)); } } else { byte *end = begin + (data.Length & (~1)); for (byte *p = begin; p != end; p += 2) { short l = BiasedByteToShort(*p); short r = BiasedByteToShort(*(p + 1)); filter(ref l, ref r); *p = ClipToByte(l); *(p + 1) = ClipToByte(r); } } } } }
/// <summary> /// Raw Wav Data に対してフィルタリングする。 /// ステレオ版。 /// </summary> /// <param name="data">Raw Data</param> /// <param name="filter">フィルタ</param> /// <param name="is16bit">Raw Data の形式が16ビットか8ビットか。</param> public static void FilteringRawData(byte[] data, Stereo1SampleFilter filter, bool is16bit) { unsafe { fixed(byte* begin = data) { if(is16bit) { short* end = (short*)(begin + (data.Length & (~3))); for(short* p = (short*)begin; p != (short*)end; p += 2) { filter(ref *p, ref *(p + 1)); } } else { byte* end = begin + (data.Length & (~1)); for(byte* p = begin; p != end; p += 2) { short l = BiasedByteToShort(*p); short r = BiasedByteToShort(*(p + 1)); filter(ref l, ref r); *p = ClipToByte(l); *(p + 1) = ClipToByte(r); } } } } }