在Windows 7中设置采样率

时间:2013-08-07 20:56:34

标签: c# vb.net audio winmm wasapi

我目前正在努力寻找以编程方式设置USB声卡的采样率和比特率的解决方案。我正在努力将我们的测试程序从Windows XP切换到Windows 7,我们的产品就像USB声卡一样。我们的一些测试是通过声卡发送48k信号,并在通过DAC路由后测量信号。我认为测量硬件固件/软件没有将其信号发生器置于独占模式,Windows正在变得混乱并将设备置于共享模式,默认采样率为44.1k / 16bit,我想改变这个值当我们启动单位高达48k / 24bit时。

我希望有人可以把我推向正确的方向,因为我所看到的一切都在告诉我这是不可能的......(另外,我更喜欢.NET解决方案,或者我可以称之为的任何东西/从.NET执行会很好。)

这是我尝试过的一件事,但最终只设置了一个用来播放音频的对象,它没有设置好样本/位深度。

Imports NAudio.Wave

Module ConfigureDevice

    Private Const SAMPLE_RATE As Integer = 48000
    Private Const CHANNELS As Integer = 2

    Sub Main(ByVal args() As String)

        ConfigureDirectSound(args(0))

    End Sub


    Private Sub ConfigureDirectSound(ByVal name As String)

        Dim out As New DirectSoundOut(GetWaveOutDeviceNumber(name))
        Dim waveFormat = New WaveFormat(SAMPLE_RATE, CHANNELS)
        Dim waveProvider = New BufferedWaveProvider(waveFormat)

        out.Init(waveProvider)

    End Sub

    Private Function GetWaveOutDeviceNumber(ByVal name As String) As System.Guid

        Dim devices = DirectSoundOut.Devices

        For Each d In devices
            If d.Description = name Then
                Return d.Guid
            End If
        Next

        Return Nothing

    End Function

End Module

1 个答案:

答案 0 :(得分:1)

看起来你需要探索WASAPI。从我正在阅读的内容来看,除了更改音频文件本身之外,这是以编程方式强制输出采样率的唯一方法。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd371455(v=vs.85).aspx

您可能需要为它搜索C ++ / CLI包装器(或者自己编写)以便在.NET中使用它。