Wasapi音频质量

本文关键字:音频 Wasapi | 更新日期: 2023-09-27 18:04:45

我刚开始在Naudio中使用Wasapi,我对音质没有任何问题。当我录制时,大约有1/10的音频听起来很完美,而其他9次则会很模糊。我想知道这是否有什么原因。

这是我的代码,我用来记录音频:

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

Wasapi音频质量

首先。正如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();
                }
            }
        }

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

对代码的一些注释:

首先,您是否以某种方式修改了WasapiLoopbackCapture ?DataAvailable上的WaveInEventArgs没有代码中显示的属性。我希望你有某种块对齐错误,这样你的模糊声音就不会在精确的样本边界上读取。NAudio也没有一个叫做WaveWriter的类-它是WaveFileWriter。你确定你在使用NAudio吗?

第二,不需要在StartRecording中启动一个新线程。WasapiLoopbackCapture将会使用一个后台线程