【问题标题】:Detecting when a microphone is unplugged检测麦克风何时拔出
【发布时间】:2013-07-16 14:41:03
【问题描述】:

我有一个 Windows 窗体应用程序,其中有一个 Start 和一个 Stop 按钮。当我单击 Start 按钮时,应该开始录制,当我单击 Stop 按钮时,应该停止录制。它工作正常,但我的要求是当我开始录音时,如果我拔下麦克风,录音应该停止。但是,我当前的代码并没有这样做。这是我当前的代码:

uint hr = MFRecWrapper.StartRecording(microPhoneName.Trim(), this.fileName.Trim(), this.bitSamplingBitrate, this.avgBytesWrittenPerSecond, this.Handle);
uint hr = MFRecWrapper.StopRecording();

我怎样才能使它达到这种效果?谢谢。

【问题讨论】:

    标签: c# windows winforms


    【解决方案1】:

    我猜你将不得不通过非托管代码和挂钩到 Windows 事件来做到这一点。 WM_DEVICECHANGE

    例子

       using System.Runtime.InteropServices;
        const int WM_DEVICECHANGE = 0x0219;
         // new device is pluggedin
         const int DBT_DEVICEARRIVAL = 0x8000; 
         //device is removed 
        const int DBT_DEVICEREMOVECOMPLETE = 0x8004; 
         //device is changed
        const int DBT_DEVNODES_CHANGED = 0x0007; 
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_DEVICECHANGE
             {
                  //Your code here.
             }
           base.WndProc(ref m);
        }
    

    【讨论】:

    • 什么是0x0219??我应该硬编码这个值吗?我是这个 Windows 程序的新手,您能否通过提供所有代码来解决我的问题...谢谢您的关注
    • 是硬编码这个值。请参阅我提供的链接以阅读详细信息。
    • @sree 很高兴它对您有所帮助。顺便看看其他常量。它们也可能对您有用。
    • @EhsanUllah 我还需要你的帮助,现在我想在没有人说话时停止录音。有可能吗?
    • 或发布另一个问题,也许有人可以帮助您。
    【解决方案2】:

    我引用: 在非托管代码中,您将在顶级 windowproc 中侦听 WM_DEVICECHANGE

    这似乎也是在托管代码中执行此操作的唯一方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2011-09-05
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      相关资源
      最近更新 更多