超过2个通道的NAudio WASAPI记录设备抛出不支持的格式错误
本文关键字:不支持 格式 错误 记录 通道 2个 NAudio WASAPI 超过 | 更新日期: 2023-09-27 18:10:09
我在使用NAdio库记录具有6或8个通道的WASAPI环回设备时遇到了一个问题。例如,设备具有以下波形格式:32位PCM: 44kHz 6通道wBitsPerSample:32
public MMDevice Device;
private WasapiCapture _waveIn;
...
_waveIn = IsLoopback ? new WasapiLoopbackCapture(Device) : new WasapiCapture(Device);
_waveIn.DataAvailable += OnDataAvailable;
_waveIn.RecordingStopped += OnRecordingStopped;
_waveIn.StartRecording();
在StartRecording出现&"不支持的波格式&"错误时崩溃错误来自WasapiCapture.InitializeCaptureDevice(),当它调用
if (!audioClient.IsFormatSupported(ShareMode, WaveFormat))
throw new ArgumentException("Unsupported Wave Format");
如果我使用windows->控制面板_>声音设置将设备切换到2通道,代码工作正常这个问题有什么解决办法吗?我能以某种方式改变设备混合格式在飞行
我知道是怎么回事了。在NAudio库中有一个WasapiCapture类的构造函数
public WasapiCapture(MMDevice captureDevice)
{
syncContext = SynchronizationContext.Current;
audioClient = captureDevice.AudioClient;
ShareMode = AudioClientShareMode.Shared;
waveFormat = audioClient.MixFormat;
if (waveFormat is WaveFormatExtensible wfe)
try
{
waveFormat = wfe.ToStandardWaveFormat();
}
catch (InvalidOperationException)
{
// couldn't convert to a standard format
}
}
它正在使用WaveFormat.ToStandardWaveFormat()。我试图注释掉将格式更改为标准格式的部分
// if (waveFormat is WaveFormatExtensible wfe)
// try
// {
// waveFormat = wfe.ToStandardWaveFormat();
// }
// catch (InvalidOperationException)
// {
// // couldn't convert to a standard format
// }
在我的情况下,我只是离开原来的[NAudio.Wave。WaveFormatExtensible] ={32位PCM: 44kHz 6通道wBitsPerSample:32 dwChannelMask:1551 subFormat:00000003-0000-0010-8000-00aa00389b71 extraSize:22}
现在WasapiCapture.InitializeCaptureDevice()运行成功,我正在获取数据。
- 我创建了MyWasapiCapture类,它是原始WasapiCapture的副本,除了注释掉的代码
- 将数据保存到缓冲区
- 通过NAudio.Wave传递。MediaFoundationResampler,它允许重新采样和改变通道的数量。最后,我有我需要的格式和我需要的通道数量。