使用 WasapiOut Naudio 更改声卡的采样率
Change sample rate of audiocard with WasapiOut Naudio
我想在 C# 中使用 Naudio 以编程方式为我的声卡选择特定的采样率。
我的输出是独占模式下的 WasapiOut。
我已经尝试了很多东西,但没有任何效果,我到处搜索,只找到了这个:
但是他们并没有真正找到合适的解决方案。
这是我的 WasapiOut:
var enumerator = new MMDeviceEnumerator();
MMDevice device = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).FirstOrDefault(d => d.DeviceFriendlyName == name);
outputDevice = new WasapiOut(device, AudioClientShareMode.Exclusive, false,200);
我不明白的是这里:
https://github.com/naudio/NAudio/blob/master/Docs/WasapiOut.md
它说:
"If you choose AudioClientShareMode.Exclusive then you are requesting exclusive access to the sound card. The benefits of this approach are that you can specify the exact sample rate you want"
而且我在任何地方都找不到如何指定采样率。
如果这里有人知道答案就太好了,谢谢!
编辑:
我想我通过这样做找到了一个方法:
var waveFormat5 = WaveFormat.CreateIeeeFloatWaveFormat(Int32.Parse(comboBox1.Text), 2);
var test2 = new MixingSampleProvider(waveFormat5);
var audioFile = new AudioFileReader("test.wav");
var input = audioFile;
test2.ReadFully = true;
test2.AddMixerInput(new AutoDisposeFileReader(input,waveFormat5));
outputDevice.Init(test2);
使用 "outputDevice" 作为我的 WasapiOut。
因此,我将 ouputDevice 采样率设置为我使用 Mixing Sample Provider 选择的采样率,然后将音频文件发送到该混音器,这是正确的方法吗?
因为我的音频文件采样率为44100,我选择将我的outputDevice采样率也设置为44100,但是当我制作outputDevice.Play()时,我听到的声音比原来的更快。
创建 WasapiOut
的实例后,调用 Init
传递要播放的音频。假设声卡支持,它将尝试直接使用该音频的采样率(和 WaveFormat
)。我们
我解决了我的问题,我使用了带有 MixingSampleProvider 的 AudioPlaybackEngine (https://markheath.net/post/fire-and-forget-audio-playback-with),以及 try/catch 来处理 "the inputs are not a the same sample rate" 的消息错误。
我想在 C# 中使用 Naudio 以编程方式为我的声卡选择特定的采样率。 我的输出是独占模式下的 WasapiOut。
我已经尝试了很多东西,但没有任何效果,我到处搜索,只找到了这个:
这是我的 WasapiOut:
var enumerator = new MMDeviceEnumerator();
MMDevice device = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).FirstOrDefault(d => d.DeviceFriendlyName == name);
outputDevice = new WasapiOut(device, AudioClientShareMode.Exclusive, false,200);
我不明白的是这里: https://github.com/naudio/NAudio/blob/master/Docs/WasapiOut.md 它说: "If you choose AudioClientShareMode.Exclusive then you are requesting exclusive access to the sound card. The benefits of this approach are that you can specify the exact sample rate you want" 而且我在任何地方都找不到如何指定采样率。
如果这里有人知道答案就太好了,谢谢!
编辑:
我想我通过这样做找到了一个方法:
var waveFormat5 = WaveFormat.CreateIeeeFloatWaveFormat(Int32.Parse(comboBox1.Text), 2);
var test2 = new MixingSampleProvider(waveFormat5);
var audioFile = new AudioFileReader("test.wav");
var input = audioFile;
test2.ReadFully = true;
test2.AddMixerInput(new AutoDisposeFileReader(input,waveFormat5));
outputDevice.Init(test2);
使用 "outputDevice" 作为我的 WasapiOut。 因此,我将 ouputDevice 采样率设置为我使用 Mixing Sample Provider 选择的采样率,然后将音频文件发送到该混音器,这是正确的方法吗? 因为我的音频文件采样率为44100,我选择将我的outputDevice采样率也设置为44100,但是当我制作outputDevice.Play()时,我听到的声音比原来的更快。
创建 WasapiOut
的实例后,调用 Init
传递要播放的音频。假设声卡支持,它将尝试直接使用该音频的采样率(和 WaveFormat
)。我们
我解决了我的问题,我使用了带有 MixingSampleProvider 的 AudioPlaybackEngine (https://markheath.net/post/fire-and-forget-audio-playback-with),以及 try/catch 来处理 "the inputs are not a the same sample rate" 的消息错误。