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;
}