ページ 11

マイクのミュート状態

Posted: 2017年11月10日(金) 15:06
by にこよん
C言語ないしDXライブラリの関数でマイクがミュート状態か否かを取得できる関数は存在しますか?
調べても音量操作等しかなかったため、ここで質問させていただきました

関数名や使い方、関数の説明がされているサイトをご教示ください

Re: マイクのミュート状態

Posted: 2017年11月10日(金) 15:10
by にこよん
環境はWindows全般、visualC++2017です

Re: マイクのミュート状態

Posted: 2017年11月12日(日) 22:46
by にこよん
追記:
もし難しいようでしたら無いと言ってくれるだけでもありがたいのですが...

Re: マイクのミュート状態

Posted: 2017年11月13日(月) 09:40
by Bull
あまり詳しくないのですが、回答がないようなので。

ちょっと検索してみたら以下のページが見付かりました。
内容は確認していませんが、ご参考までに。

Windowsの音量(ミキサー)を制御したい

Re: マイクのミュート状態

Posted: 2017年11月16日(木) 19:17
by にこよん
Bullさんありがとうございます。

ただ以下サイトはスピーカーのミュート状態だと思われます。
スピーカーはそれなりに見つかるのですがマイクはなかなかなくて...

Re: マイクのミュート状態

Posted: 2017年11月17日(金) 09:36
by Bull
そのページにあるリンクをたどった先でMMDeviceに少しだけ触れています。
Vista以降はマルチメディア関数に替わりMMDeviceが使われるようです。

英文のサイトですが、Audio Endpoint Devices (Windows)はどうでしょうか。

Re: マイクのミュート状態

Posted: 2017年11月17日(金) 17:29
by ISLe
No.4のリンク先にあるサンプルコードの中の
eRender

eCapture
に変更すればマイク入力(既定の録音デバイス)のミュート状態を取得できました。

Re: マイクのミュート状態

Posted: 2017年11月18日(土) 13:33
by にこよん
確認不足でした
すみません

サンプルコードからのミュート取得関数にへの変換に苦しんでます
初心者なもので少し時間がかかりそうです
まだ動くかどうかの確認は行えてませんが仮にこのスレッドは解決とします
ありがとうございました(__)

コードができ次第ここに貼ろうと思います
(その時にスレッドに解決を付けます)

Re: マイクのミュート状態

Posted: 2018年3月20日(火) 17:11
by にこよん
遅くなりましたが、一応完成したのでここに貼っておきます

コード:

bool GetMuteFlag() {
	HRESULT hr;
	HRESULT mute;
	BOOL muted = false;

	CoInitialize(NULL);
	IMMDeviceEnumerator *deviceEnumerator = NULL;
	hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
	IMMDevice *defaultDevice = NULL;

	//hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
	hr = deviceEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &defaultDevice);

	deviceEnumerator->Release();
	deviceEnumerator = NULL;

	IAudioEndpointVolume *endpointVolume = NULL;
	hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);

	mute = endpointVolume->GetMute(&muted);
	//endpointVolume->SetMute(TRUE, NULL);

	endpointVolume->Release();
	CoUninitialize();

	return muted;
}

Re: マイクのミュート状態

Posted: 2018年3月20日(火) 18:33
by にこよん

コード:

//マイクのミュートフラグを取得する
bool GetMuteFlag() {
	HRESULT hr;
	HRESULT mute;
	BOOL muted = false;

	CoInitialize(NULL);
	IMMDeviceEnumerator *deviceEnumerator = NULL;
	hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
	IMMDevice *defaultDevice = NULL;

	//hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
	hr = deviceEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &defaultDevice);

	deviceEnumerator->Release();
	deviceEnumerator = NULL;

	IAudioEndpointVolume *endpointVolume = NULL;
	hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);

	mute = endpointVolume->GetMute(&muted);
	//endpointVolume->SetMute(TRUE, NULL);

	endpointVolume->Release();
	CoUninitialize();

	return muted;
}