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)的主要内容,如果未能解决你的问题,请参考以下文章