0

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

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

     }
4

3 回答 3

1

采样率、位深度、通道和其他任何内容都嵌入在 wav 文件的标题中。

重新采样的直接方法是使用第 3 方 SA NAudio。搜索 stackoverflow 以找到更详细的答案。

于 2012-11-15T22:45:55.813 回答
1

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

我不知道你为什么想要甚至需要在硬件上让它有点准确,但是如果这是你真正需要的,那么你需要利用低级别的独占访问 API 来与音频渲染硬件建立密切联系并交付绕过通常在途中发生的任何混合,直接进入播放缓冲区的数据。这些 API 很可能是本机的,在您设法将原始数据从文件中取出后,您肯定需要交付原始数据。这不会像SoundPlayer.Play.

然而,好消息是,如果硬件真的能够播放这种格式,那么您就有很好的机会进行上述操作。

于 2012-11-15T23:57:49.203 回答
0

要强制 Windows 使用特定的采样率,您需要在独占模式下使用 WASAPI。否则,您将与其他应用程序共享声卡,他们可能需要它具有不同的采样率。NAudio 允许您执行此操作。您需要AudioClientShareMode.ExclusiveWasapiOut.

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

于 2012-11-16T10:42:41.257 回答