4

マイクのミュート/ミュート解除を切り替えたい場合、コーディングはどうなるか知りたかったのです。バックグラウンドで実行してキープレスイベントをピックアップし、マイクのミュート/ミュート解除を切り替えるプログラムを作成しています。そのコーディングの助けは非常に役に立ちます。私は C# にかなり慣れていませんが、これは私が作りたかった本当に単純なプログラムです。プログラムがバックグラウンドにある場合でもスペースバーのキープレスをリッスンし、スペースバーが押されるとマイクをミュート/ミュート解除します。

助けてくれてありがとう!

4

4 に答える 4

5

Windows Vista以降では、メディアコントロールインターフェイスを使用できなくなりました。Microsoftには、これらの新しいオペレーティングシステムのオーディオハードウェアとのインターフェイスにアクセスする必要がある新しいCoreAudioAPIがあります。

Ray Molenkampは、Core Audio APIとインターフェイスするための優れたマネージラッパーをここに作成しました: Vista CoreAudioAPIマスターボリュームコントロール

XP、Vista、およびWindows 7からマイクをミュートできるようにする必要があったため、新しいオペレーティングシステムでRayのライブラリを使用し、WindowsXP以前のGustavoFrancoのMixerNativeライブラリの一部を使用する小さなWindowsMicrophoneMuteLibraryを作成しました。

于 2010-11-12T20:59:06.407 に答える
0

私はwin7にいくつかのマイクを持っていますが、この場合、クラスWindowsMicrophoneMuteLibrary.CoreAudioMicMuteは正しくありません。

だから私はコードを変更してうまく機能します。なぜなら、彼のカップは、win7によって最後に認識されたものだけでなく、すべてのマイクをホイッスルするからです。

新しいクラスを追加して配置します。

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

于 2011-10-30T12:11:51.240 に答える
0

MCI ( Media Control Interface ) を使用してマイクにアクセスし、システムごとに音量を変更できます。以下のコードを確認して、すべてのシステム マイクの音量を 0 に設定する必要があります。コードは c です。このコードを C# に変換する方法の詳細については、pinvokeを確認してください。

#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); 
}

ここで、このトピックに関するその他のコードを見つけることができます

これが役に立てば幸いです、よろしく

于 2010-01-16T23:47:31.420 に答える
0

マイクをミュートしたり、録音デバイスとして選択したりするアプリケーション全体のソースをダウンロードできます。

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

于 2010-01-16T23:20:35.580 に答える