I am making a class that takes a character array and generates a DTMF tone sequence using NAudio. The tones get generated, each returned as a WaveProvider. My problem is I need to add a gap between each tone, and nothing I've tried has worked.
This is (currently) how I'm generating the sequence:
public static MemoryStream CreateStreamFromDtmfSequence(DtmfTone[] dtmfTones, int toneDuration, int pauseDuration, int sampleRate, double amplitude)
{
WaveFormat waveFormat = Config.getWaveFormat(sampleRate);
MemoryStream memoryStream = new MemoryStream();
//WaveFileWriter waveFileWriter = new WaveFileWriter(new IgnoreDisposeStream(memoryStream), waveFormat);
// Combine tones / sample providers
MixingWaveProvider32 mixer = new MixingWaveProvider32();
int delayValue = 0;
foreach (DtmfTone tone in dtmfTones)
{
OffsetSampleProvider offsetSampleProvider = new OffsetSampleProvider(tone.AsWaveProvider(sampleRate, toneDuration, amplitude, pauseDuration).ToSampleProvider());
offsetSampleProvider.DelayBy = TimeSpan.FromMilliseconds(toneDuration + delayValue);
SampleToWaveProvider samples = new SampleToWaveProvider(offsetSampleProvider);
mixer.AddInputStream(samples);
delayValue += pauseDuration;
}
WaveFileWriter.WriteWavFileToStream(memoryStream, mixer);
//waveFileWriter.Close();
return memoryStream;
}
There's silence at the beginning of the final stream, but not between the tones themselves like there's supposed to be, and I cannot for the hell of me figure out why.
Here are a couple screenshots of the generated waveform in Adobe Audition. For reference, each tone is 300ms long and is supposed to have a 300ms pause following.
Anyone see a mistake I made somewhere? Is there something I'm missing?


