Как да заглушите микрофона c#

Исках да знам какво би било кодирането, ако исках да превключвам заглушаване/включване на звука на моя микрофон. Създавам програма, която може да работи във фонов режим и да улавя събитие за натискане на клавиш и да превключва заглушаване/включване на микрофона. Всяка помощ с това кодиране би била много полезна. Аз съм доста нов в C# и това е просто една наистина проста програма, която исках да направя. Това е всичко, което прави, е, че ще слуша за натискане на клавиша за интервал, дори когато програмата е във фонов режим, след което при натискане на интервала ще заглуши/включи микрофона.

Благодаря ви за всяка помощ!


person Sean    schedule 16.01.2010    source източник
comment
P.S. Може също така да заглуши едно устройство, защото слушам микрофона или го възпроизвеждам през високоговорителите на компютъра си, така че Windows Vista и 7 ще покажат отделните програми с помощта на Volume Mixer, така че ако има начин за програмно заглушаване/ включване на звука на една програма, този метод също ще работи.   -  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, която използва библиотеката на Ray в по-новите операционни системи и части от Библиотеката 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. CoreAudio/ - 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