IAudioClient::Initialize 返回 (E_InvalidArg,0x80070057,-2147024809)
Posted
技术标签:
【中文标题】IAudioClient::Initialize 返回 (E_InvalidArg,0x80070057,-2147024809)【英文标题】:IAudioClient::Initialize returns (E_InvalidArg,0x80070057,-2147024809) 【发布时间】:2017-09-18 14:17:24 【问题描述】:我使用 NAudio lib 来创建 Windows 服务,从声卡捕获音频,抛出 Wasapi。但是在其中一台计算机上,当我调用 audioClientInterface.Initialize 时,我得到 hresult = -2147024809 这是我用来捕获的代码。
public partial class TestRecorder : ServiceBase
private static readonly Logger _logger = LogManager.GetLogger("ServiceLogger");
public TestRecorder()
InitializeComponent();
protected override void OnStart(string[] args)
ThreadPool.QueueUserWorkItem(x =>
using (var rec = new Recorder())
rec.Start();
Thread.Sleep(10000);
rec.Stop();
);
protected override void OnStop()
internal void TestStartupAndStop(string[] args)
this.OnStart(args);
Console.ReadLine();
this.OnStop();
Here is code of Recorder.
public class Recorder : IDisposable
private static readonly Logger _logger = LogManager.GetLogger("ServiceLogger");
private WasapiCapture MicroCapture get; set;
private WaveFileWriter Writer get; set;
public Recorder()
var deviceEnum = new MMDeviceEnumerator();
MMDevice micro = deviceEnum.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Communications);
MicroCapture = new WasapiCapture(micro);
MicroCapture.DataAvailable += OnDataAvailible;
Writer = new WaveFileWriter(@"C:\Temp\test.wav", MicroCapture.WaveFormat);
_logger.Trace("Recorder is initialized");
private void OnDataAvailible(object sender, WaveInEventArgs e)
if (e.BytesRecorded > 0)
Writer.Write(e.Buffer, 0, e.BytesRecorded);
public void Start()
try
MicroCapture.StartRecording();
_logger.Trace("Recorder started");
catch (Exception ex)
_logger.Fatal(ex);
public void Stop()
try
MicroCapture.StopRecording();
_logger.Trace("Recorder stopped");
catch (Exception ex)
_logger.Fatal(ex);
public void Dispose()
MicroCapture.Dispose();
Writer.Dispose();
_logger.Trace("Capture and writer disposed");
尝试安装 3 个不同的驱动程序。 尝试使用不同的格式。 NAudio 发送下一个参数 audioClientInterface.Initialize 发送下一个参数。
shareMode = Shared,
streamFlags = None,
bufferDuration = 1000000,
periodicity = 0,
waveFormat = 32 bit PCM: 48kHz 2 channels wBitsPerSample:32 dwChannelMask:3 subFormat:00000003-0000-0010-8000-00aa00389b71 extraSize:22,
audiosessionGuid = 00000000-0000-0000-0000-000000000000
在扬声器和麦克风设置中,我选择48000 hz 16 bit
。
请给我一些提示来解决这个问题,我该如何调试或解决这个问题。声卡型号为VIA vt1708s
,主板型号为Asus P8H61-M LX3 R2.0
IAudioClient::IsFormatSuproted 返回S_OK。
【问题讨论】:
【参考方案1】:我通过将我的 Windows 服务添加到 Kaspersky Antivirus 应用程序的例外来决定它并且它起作用了。
【讨论】:
以上是关于IAudioClient::Initialize 返回 (E_InvalidArg,0x80070057,-2147024809)的主要内容,如果未能解决你的问题,请参考以下文章