Ich habe einen Code geschrieben, der Mikrofon-Audio aufnimmt und dann den Ton über Lautsprecher abspielt. Ich würde gerne ein Tiefpassfilter auf dem e.Buffer-Byte [] implementieren, um das Rauschen vom Mikrofon zu reduzieren.NAudio Tiefpassfilter
Einige Hintergrund: Ich beabsichtige, diesen Code zu verwenden, um ein VOIP-Programm zu erstellen. Der Client sendet das gefilterte e.Buffer-Array an einen anderen Client, der dann das Audio abspielen würde.
class Program
{
public static int inputdevicenumber;
public static WaveFormat waveformat = new WaveFormat(44100, 16, 1);
static BufferedWaveProvider bufferedWaveProvider = new BufferedWaveProvider(waveformat);
static WaveOutEvent waveOut = new WaveOutEvent();
static void Main(string[] args)
{
WaveInEvent waveIn = new WaveInEvent();
int waveInDevices = WaveIn.DeviceCount;
for (int waveInDevice = 0; waveInDevice < waveInDevices; waveInDevice++)
{
WaveInCapabilities deviceInfo = WaveIn.GetCapabilities(waveInDevice);
Console.WriteLine("Device {0}: {1}, {2} channels", waveInDevice, deviceInfo.ProductName, deviceInfo.Channels);
}
string Reply = Console.ReadLine();
inputdevicenumber = Convert.ToInt32(Reply);
NAUDIO_Capture();
NAudio_Play();
Console.ReadKey();
}
static void NAUDIO_Capture()
{
WaveInEvent waveIn = new WaveInEvent();
waveIn.BufferMilliseconds = 20;
waveIn.DeviceNumber = inputdevicenumber;
waveIn.WaveFormat = waveformat;
waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(waveIn_DataAvailable);
waveIn.StartRecording();
}
static void NAudio_Play()
{
bufferedWaveProvider.DiscardOnBufferOverflow = true;
waveOut.Init(bufferedWaveProvider);
waveOut.Play();
}
static void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
bufferedWaveProvider.AddSamples(e.Buffer, 0, e.BytesRecorded);
}
}