static SoundObj GetMainImpulse(out string actualPath) { DateTime dtStart = DateTime.Now; if (_impulsePath == "") _impulsePath = null; if (_impulsePath == "-") _impulsePath = null; if (_matrixFilter == "") _matrixFilter = null; if (_matrixFilter == "-") _matrixFilter = null; if (_bformatFilter == "") _bformatFilter = null; if (_bformatFilter == "-") _bformatFilter = null; Trace.WriteLine("Impulse {0}, matrix {1}", CleanPath(_dataFolder, _impulsePath), CleanPath(_dataFolder, _matrixFilter)); // note: we window the room correction impulse if it's too long WaveReader impulseReader = null; SoundObj impulseObj = null; actualPath = null; if (!String.IsNullOrEmpty(_impulsePath)) { impulseReader = GetAppropriateImpulseReader(_impulsePath, out actualPath); } if (impulseReader != null) { if (impulseReader.Iterations > _maxImpulseLength) { // This impulse is too long. // Trim it to length. int hwid = _maxImpulseLength / 2; int qwid = _maxImpulseLength / 4; SoundBuffer buff = new SoundBuffer(impulseReader); buff.ReadAll(); int center = buff.MaxPos(); BlackmanHarris wind; int startpos; if (center < hwid) { wind = new BlackmanHarris(center, qwid, qwid); startpos = 0; } else { wind = new BlackmanHarris(hwid, qwid, qwid); startpos = center - hwid; } // int startpos = center < hwid ? 0 : (center - hwid); wind.Input = buff.Subset(startpos, _maxImpulseLength); impulseObj = wind; } else { impulseObj = impulseReader; } } if (_debug) { TimeSpan ts = DateTime.Now.Subtract(dtStart); Trace.WriteLine("GetMainImpulse " + ts.TotalMilliseconds); } return impulseObj; }