0

我是在 Nadio 中使用 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();
    }
4

3 回答 3

1

首先。正如马克已经说过的那样,您的代码看起来不像 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();
                }
            }
        }
于 2014-05-23T12:08:08.803 回答
1

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

于 2014-08-13T16:30:36.647 回答
0

对您的代码的一些评论:

首先,您是否WasapiLoopbackCapture以某种方式进行了修改?WaveInEventArgsonDataAvailable没有代码中显示的属性。我希望您遇到某种块对齐错误,因此您的模糊声音不会在准确的样本边界上读取。NAudio 也没有一个名为WaveWriter- 它的类WaveFileWriter。你确定你使用的是NAudio吗?

其次,不需要在StartRecording. WasapiLoopbackCapture 已经在使用后台线程。

于 2014-05-22T22:09:10.280 回答