I found a quick fix, not sure if it's worth putting in the final project, but it works for my current needs. I changed the signature of the WaveInStream constructor from:
public WaveInStream(int deviceNumber, WaveFormat desiredFormat, System.Windows.Forms.Control callbackWindow)
public WaveInStream(int deviceNumber, WaveFormat desiredFormat, System.Windows.Forms.Control callbackWindow, float SecondsToRecordBeforeCallback)
The new variabls ONLY apperance in your code is changing:
int bufferSize = desiredFormat.AverageBytesPerSecond;
int bufferSize = (int)(desiredFormat.AverageBytesPerSecond * SecondsToRecordBeforeCallback);
I have to admit that it probably won't be an even division because it's rounding down (truncating the decimal completely). For Example: .1 seconds * AverageBytesPerSecond may actually return enough bytes for .099 seconds or something, but to my best understanding,
it won't drop information.