如何使用C#更改声卡设置

时间:2012-11-15 22:30:42

标签: c# audio

我有一个简单的c#控制台应用程序,可播放wav文件。我想在我的应用程序中将C#中的声卡设置更改为24bit / 48Khz。我如何以程序方式做到这一点?

    static void Main(string[] args)
    {
        SoundPlayer simpleSound = new SoundPlayer(MyProg.Properties.Resources.BOOTLOAD48000);
        simpleSound.Play();

     }

3 个答案:

答案 0 :(得分:1)

采样率,位深度,通道以及其他任何内容都嵌入在wav文件的标头中。

重新采样的直接方式是使用第三方S.A NAudio。搜索stackoverflow以查找更详细的答案。

答案 1 :(得分:1)

音频播放子系统并不像您想象的那么简单。至少,您的播放不会直接转到声卡:它会在某个地方排队到舒适的地方,以便数据在幕后混合其他应用程序的音频(如果有的话),然后转发到设备。

我不知道为什么你想要甚至需要让它在硬件上准确一点,但是如果你真正需要它,那么你需要利用低级独占访问API来获得与音频渲染的紧密联系硬件并将数据直接传送到播放缓冲区,绕过通常在路上发生的任何混音。很可能这些API是原生的,并且在您已经设法将其从文件中取出之后,您肯定需要传递原始数据。它不会像SoundPlayer.Play那么容易。

然而,好消息是,如果硬件真的能够播放这种格式,你很有可能做到这一点。

答案 2 :(得分:0)

要强制Windows使用特定的采样率,您需要在独占模式下使用WASAPI。否则,您将与其他应用程序共享声卡,并且可能需要它采用不同的采样率。 NAudio允许你这样做。您需要将AudioClientShareMode.Exclusive传递给WasapiOut的构造函数。

请注意,WASAPI只能在Windows Vista及更高版本上使用。