This is what I have so far, but it's only causing some sort of noise. I also don't see a way to control how often "DataAvailable" is called. I would rather like to record like 100ms and then play it at half volume to create the echo effect.
WasapiLoopbackCapture waveIn = new WasapiLoopbackCapture();
waveIn.DataAvailable += delegate(object sender, WaveInEventArgs e)
{
try
{
byte[] bytes;
using (MemoryStream mem = new MemoryStream())
{
using (WaveFileWriter file = new WaveFileWriter(mem, new WaveFormat(44000, 2)))
{
file.Write(e.Buffer, 0, e.BytesRecorded);
}
bytes = mem.ToArray();
}
WaveOut waveOut = new WaveOut();
waveOut.Init(new WaveFileReader(new MemoryStream(bytes)));
waveOut.Play();
}
catch (Exception ex)
{
}
};
waveIn.StartRecording();
Application.Run();