Качество звука васапи

Я новичок в использовании Wasapi в Naudio, и у меня проблемы с качеством звука. Примерно в 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();
    }

person user3666795    schedule 22.05.2014    source источник


Ответы (3)


Прежде всего. Как уже сказал Марк, ваш код не похож на 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();
                }
            }
        }
person Florian    schedule 23.05.2014

Проблема оказалась в том, что xbox music или windows media player работает в фоновом режиме, видимо они жрут все ресурсы звуковой карты.

person user3666795    schedule 13.08.2014

Несколько комментариев к вашему коду:

Во-первых, вы как-то модифицировали WasapiLoopbackCapture? WaveInEventArgs на DataAvailable не имеет свойств, показанных в вашем коде. Я ожидаю, что у вас есть какая-то ошибка выравнивания блоков, так что ваш нечеткий звук не читается на точных границах сэмпла. Также в NAudio нет класса с именем WaveWriter — это WaveFileWriter. Вы уверены, что используете NAudio?

Во-вторых, нет необходимости начинать новый поток в StartRecording. WasapiLoopbackCapture уже будет использовать фоновый поток.

person Mark Heath    schedule 22.05.2014