2017-03-08 2 views
0

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

Antwort

0

Werfen Sie einen Blick auf die Equalizer Klasse in der Demo NAudio WPF, um zu sehen, wie Sie die BiQuadFilter Klasse verwenden könnte einen Filter anwenden.