【问题标题】:How to mute the microphone c#如何使麦克风静音c#
【发布时间】:2010-01-16 21:31:47
【问题描述】:

我想知道,如果我想切换麦克风的静音/取消静音,编码会是什么。我正在制作一个可以在后台运行并拾取按键事件并切换麦克风静音/取消静音的程序。对任何编码的任何帮助都会非常有帮助。我对 C# 很陌生,这只是我想做的一个非常简单的程序。这就是它所做的一切,它是否会监听空格键的按键,即使程序在后台,然后当按下空格键时,它会将麦克风静音/取消静音。

感谢您的所有帮助!

【问题讨论】:

  • P.S.它还可以使单个设备静音,因为我正在“收听”麦克风,或者通过计算机的扬声器播放它,因此 Windows Vista 和 7 将使用音量混合器显示各个程序,所以如果有一种编程方式静音/取消静音单个程序,该方法也可以。

标签: c# keypress microphone mute


【解决方案1】:

对于 Windows Vista 和更新版本,您不能再使用媒体控制接口,Microsoft 有一个新的Core Audio API,您必须访问它才能与这些较新操作系统中的音频硬件接口。

Ray Molenkamp 在这里编写了一个很好的托管包装器,用于与 Core Audio API 交互: Vista Core Audio API Master Volume Control

由于我需要能够在 XP、Vista 和 Windows 7 上使麦克风静音,所以我写了一点 Windows Microphone Mute Library,它在较新的操作系统上使用 Ray 的库,在 Windows XP 和更早版本上使用 Gustavo Franco's MixerNative library 的部分内容。

【讨论】:

【解决方案2】:

您可以下载整个应用程序的源代码,包括静音麦克风、选择它作为录音设备等。

http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931/

【讨论】:

    【解决方案3】:

    您可以使用 MCI (Media Control Interface) 访问麦克风并明智地更改其音量系统。检查下面的代码,它应该将所有系统麦克风的音量设置为 0。代码在c中;查看pinvoke了解如何将此代码转换为c#的详细信息

    #include "mmsystem.h"
    ...
    void MuteAllMics()
    {
        HMIXER hmx; 
        mixerOpen(&hmx, 0, 0, 0, 0); 
    
        // Get the line info for the wave in destination line 
        MIXERLINE mxl; 
        mxl.cbStruct = sizeof(mxl); 
        mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN; 
        mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE); 
    
        // find the microphone source line connected to this wave in destination 
        DWORD cConnections = mxl.cConnections; 
        for (DWORD j=0; j<cConnections; j++)
        { 
            mxl.dwSource = j; 
            mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_SOURCE); 
    
            if (MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE == mxl.dwComponentType) 
            {
                // Find a volume control, if any, of the microphone line 
                LPMIXERCONTROL pmxctrl = (LPMIXERCONTROL)malloc(sizeof MIXERCONTROL); 
                MIXERLINECONTROLS mxlctrl = 
                {
                    sizeof mxlctrl, 
                    mxl.dwLineID, 
                    MIXERCONTROL_CONTROLTYPE_VOLUME, 
                    1, 
                    sizeof MIXERCONTROL, 
                    pmxctrl
                }; 
                if (!mixerGetLineControls((HMIXEROBJ) hmx, &mxlctrl, MIXER_GETLINECONTROLSF_ONEBYTYPE))
                { 
                    DWORD cChannels = mxl.cChannels; 
                    if (MIXERCONTROL_CONTROLF_UNIFORM & pmxctrl->fdwControl) 
                        cChannels = 1; 
    
                    LPMIXERCONTROLDETAILS_UNSIGNED pUnsigned = (LPMIXERCONTROLDETAILS_UNSIGNED) 
                    malloc(cChannels * sizeof MIXERCONTROLDETAILS_UNSIGNED); 
                    MIXERCONTROLDETAILS mxcd = 
                    {
                        sizeof(mxcd), 
                        pmxctrl->dwControlID, 
                        cChannels, 
                        (HWND)0, 
                        sizeof MIXERCONTROLDETAILS_UNSIGNED,
                        (LPVOID) pUnsigned
                    }; 
                    mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE); 
    
                    // Set the volume to the middle (for both channels as needed) 
                    //pUnsigned[0].dwValue = pUnsigned[cChannels - 1].dwValue = (pmxctrl->Bounds.dwMinimum+pmxctrl->Bounds.dwMaximum)/2; 
                    // Mute 
                    pUnsigned[0].dwValue = pUnsigned[cChannels - 1].dwValue = 0;
                    mixerSetControlDetails((HMIXEROBJ)hmx, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE); 
    
                    free(pmxctrl); 
                    free(pUnsigned); 
                } 
                else 
                {
                    free(pmxctrl); 
                }
            }
        } 
        mixerClose(hmx); 
    }
    

    here你可以找到更多关于这个主题的代码

    希望这会有所帮助,问候

    【讨论】:

      【解决方案4】:

      我在 win7 中有几个麦克风,在这种情况下,WindowsMicrophoneMuteLibrary.CoreAudioMicMute 类不正确。

      所以我更改了代码并且效果很好,因为现在他的杯子 Whistle 所有麦克风,而不仅仅是 win7 识别的最后一个。

      我正在附加新课程以落实到位。

      http://www.developpez.net/forums/d1145354/dotnet/langages/csharp/couper-micro-sous-win7/

      【讨论】:

      • 这如何帮助使麦克风静音?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      相关资源
      最近更新 更多