Как отключить микрофон С#

Я хотел знать, какой будет кодировка, если я захочу включить/выключить звук моего микрофона. Я делаю программу, которая может работать в фоновом режиме, фиксировать событие нажатия клавиши и включать/выключать звук микрофона. Любая помощь с любым кодированием будет очень полезна. Я новичок в C#, и это всего лишь очень простая программа, которую я хотел сделать. Это все, что он делает, он будет прослушивать нажатие клавиши пробела, даже когда программа находится в фоновом режиме, а затем при нажатии клавиши пробела он отключает/включает звук микрофона.

Спасибо за любую помощь!


person Sean    schedule 16.01.2010    source источник
comment
P.S. Он также может отключить звук на одном устройстве, потому что я слушаю микрофон или воспроизводю его через динамики своего компьютера, поэтому Windows Vista и 7 будут отображать отдельные программы с помощью микшера громкости, поэтому, если есть способ программно отключить звук / включить звук одной программы, этот метод тоже сработает.   -  person Sean    schedule 17.01.2010


Ответы (4)


Для Windows Vista и более поздних версий вы больше не можете использовать интерфейс управления мультимедиа, у Microsoft есть новый Core Audio API, доступ к которому необходим для взаимодействия с аудиооборудованием в этих новых операционных системах.

Рэй Моленкамп написал хорошую управляемую оболочку для взаимодействия с Core Audio API здесь: Vista Core Audio API Master Volume. Управление

Так как мне нужно было отключить микрофон в XP, Vista и Windows 7, я написал немного Библиотека отключения микрофона Windows, которая использует библиотеку Рэя в более новых операционных системах и части Библиотека MixerNative Густаво Франко для Windows XP и более ранних версий.

person Matt Palmerlee    schedule 12.11.2010
comment
Спасибо за вашу библиотеку, именно то, что мне было нужно. :) - person Anders Arpi; 18.08.2012
comment
Ссылка не работает - person ickydime; 24.03.2016
comment
Вы можете использовать этот nuget.org/packages/AudioSwitcher.AudioApi. КореАудио/ - person Konstantin Vdovkin; 06.02.2017

Вы можете скачать исходник целого приложения, в котором есть отключение микрофона, выбор его в качестве записывающего устройства и т.д.

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

person Yevhen    schedule 16.01.2010

вы можете использовать MCI (интерфейс управления мультимедиа) для доступа к микрофонам и системного изменения их громкости. Проверьте приведенный ниже код, он должен установить громкость на 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); 
}

здесь вы можете найти больше кода по этой теме

надеюсь, это поможет, с уважением

person serge_gubenko    schedule 16.01.2010

У меня несколько микрофонов в win7 и класс WindowsMicrophoneMuteLibrary.CoreAudioMicMute в данном случае некорректен.

поэтому я меняю код и прекрасно работает, потому что теперь его чашка свистит во все микрофоны, а не только в последний, распознаваемый win7.

Я прикрепляю новый класс, чтобы поставить его на место.

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

person zan974    schedule 30.10.2011
comment
как это поможет отключить микрофон? - person Michael; 08.11.2012