2014-05-22 135 views
0

Im在Naudio和Im中使用Wasapi的新手问题与音质有关。当我录音时,大约音频的1/10会听起来很完美,而其他9次音频会很模糊。我想知道是否有任何理由。Wasapi音频质量

这里是我的代码,我使用的录制的声音:

public void CaptureAudio(String Name) 
    { 
     capture = new WasapiLoopbackCapture(); 
     capture.Initialize(); 
     w = new WaveWriter(Name, capture.WaveFormat); 
     capture.DataAvailable += (s, capData) => 
     { 
      w.Write(capData.Data, capData.Offset, capData.ByteCount); 
     }; 

     capture.Start(); 

    } 

    public void StartRecording(String Name) 
    { 
     new Thread(delegate(){CaptureAudio(Name); }).Start(); 
    } 

    public void StopCapture() 
    { 
     capture.Stop(); 
     capture.Dispose(); 
     w.Dispose(); 
    } 

回答

1

问题原来是在后台运行的xbox音乐或windows媒体播放器,显然他们占用了所有的声卡资源。

0

您的代码需要注意几点:

首先,你有没有修改以某种方式WasapiLoopbackCaptureDataAvailable上的WaveInEventArgs没有代码中显示的属性。我期望你有某种块对齐错误在进行,这样你的模糊声音就不会在确切的样本边界上读取。此外NAudio没有称为WaveWriter的类 - 它是WaveFileWriter。你确定你在使用NAudio吗?

其次,不需要在StartRecording开始一个新的线程。 WasapiLoopbackCapture将会使用后台线程。

1

首先。正如Mark所说的,你的代码看起来不像NAudio。它看起来像CSCore。如果您使用的是CSCore,请创建一个新的控制台应用程序并复制粘贴以下代码(我修改了您的代码)。我只是在三个不同的系统上试过这个代码,没有任何错误,所有的20个文件都没有问题。

 private static void Main(string[] args) 
     { 
      for (int i = 0; i < 20; i++) 
      { 
       Console.WriteLine(i); 
       Capture(i); 
      } 
     } 

     private static void Capture(int index) 
     { 
      string Name = String.Format("dump-{0}.wav", index); 

      using (WasapiCapture capture = new WasapiLoopbackCapture()) 
      { 
       capture.Initialize(); 
       using (var w = new WaveWriter(Name, capture.WaveFormat)) 
       { 
        capture.DataAvailable += (s, capData) => w.Write(capData.Data, capData.Offset, capData.ByteCount); 
        capture.Start(); 

        Thread.Sleep(10000); 

        capture.Stop(); 
       } 
      } 
     } 
相关问题