我使用以下方法初始化了设备:
static IWavePlayer waveOut;
static WaveFormat waveFormat;
static BufferedWaveProvider waveProvider;
private static int AudioDeviceInit()
{
waveOut = new DirectSoundOut();
waveFormat = new WaveFormat(44100, 2);
waveProvider = new BufferedWaveProvider(waveFormat);
waveOut.Init(waveProvider);
waveOut.Play();
return 0;
}
我使用以下方法添加pcm流:
waveProvider.AddSamples(samples, 0, size);
只要流数据具有相同的配置,上面的方法就可以正常工作。
我还有另一个接收采样率和通道数的功能,我想重新配置waveprovider以使用新提供的配置。这是我正在使用的代码:
private static void AudioConfigCallback(int rate, int channel)
{
waveFormat = new WaveFormat(rate, channel);
waveProvider = new BufferedWaveProvider(waveFormat);
waveOut.Init(waveProvider);
return;
}
这是行不通的,我相信这也不是正确的方法。知道如何重新配置设备以使用新的sample_rate和num_channels
谢谢。
最佳答案
这是不可能的。当您打开输出设备时,无论是WaveOut,Direct Sound,WASAPI还是ASIO,都必须指定工作格式。您必须关闭输出设备,然后使用新的WaveFormat重新打开它。
一种替代方法是始终转换为固定的WaveFormat,并在输入格式发生更改时使用WaveFormatConversionStream转换为正确的格式。这样可以避免打开和关闭输出设备。