/// <summary> /// パラメータを指定して新しい OverSampling クラスのインスタンスを初期化します。 /// </summary> /// <param name="samplingRate">サンプリング周波数。これはオーバーサンプリング後の周波数となります。</param> /// <param name="magnification">サンプリング倍率。</param> /// <param name="stereo">ステレオである場合は true、モノラルである場合は false。</param> /// <param name="filterSize">フィルタサイズ。</param> public OverSampling(double samplingRate, int magnification, bool stereo, int filterSize) { if (samplingRate <= 0.0) { throw new ArgumentOutOfRangeException("samplingRate"); } if (magnification <= 0) { throw new ArgumentOutOfRangeException("magnification"); } if (filterSize <= 0) { throw new ArgumentOutOfRangeException("filterSize"); } if (filterSize % 2 != 0) { throw new ArgumentException(); } this.samplingRate = samplingRate; this.magnification = magnification; this.stereo = stereo; this.filterSize = filterSize; this.filter = new SoundFilter(stereo, filterSize); var filterGenerator = new LowPassFilter() { SamplingRate = samplingRate * magnification, CutoffFrequency = samplingRate / 2 - FiniteImpulseResponse.GetDelta(samplingRate * magnification, filterSize) }; double[] impulse = filterGenerator.Generate(filterSize / 2); Window.Blackman(impulse); filter.SetFilter(impulse); }