2014-05-22 71 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(); 
       } 
      } 
     } 
相關問題