我目前正在努力寻找以编程方式设置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
答案 0 :(得分:1)
看起来你需要探索WASAPI。从我正在阅读的内容来看,除了更改音频文件本身之外,这是以编程方式强制输出采样率的唯一方法。
http://msdn.microsoft.com/en-us/library/windows/desktop/dd371455(v=vs.85).aspx
您可能需要为它搜索C ++ / CLI包装器(或者自己编写)以便在.NET中使用它。