表題のような問題を解決したいわけですが、最低限左chの日本語音声と右chの英語音声が混ざっているのが不快ですが、PowerDVD Ultra側では切り替えができません。サウンド->スピーカーのプロパティー->レベル->バランス
のLやRを0にしたり、100にしたりすればいいのですが、ダイアログを辿るのが面倒なので、プログラムダブルクリック一発で所望の設定をしたいわけです。で、
restore.cpp
#include <windows.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <stdio.h>
int main(int argc, char** argv) {
HRESULT hr;
IMMDeviceEnumerator* pEnum = NULL;
IMMDevice* pEndpoint = NULL;
IAudioEndpointVolume* pAudioEndVol = NULL;
hr = CoInitializeEx(0, COINIT_MULTITHREADED);// Coおまじない
// MMDevice インターフェースを取得
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, IID_PPV_ARGS(&pEnum));
if (FAILED(hr)) {
CoUninitialize();
return 1;
}
// defaultのオーディオエンドポイントを取得
hr = pEnum->GetDefaultAudioEndpoint(eRender, eConsole, &pEndpoint);
if (FAILED(hr)) {
if (pEnum)
pEnum->Release();
CoUninitialize();
return 2;
}
// ボリュームオブジェクトを作成
hr = pEndpoint->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void**)&pAudioEndVol);
if (FAILED(hr)) {
if (pEndpoint)
pEndpoint->Release();
if (pEnum)
pEnum->Release();
CoUninitialize();
return 3;
}
// 左右のチャンネルの音量をセット
char* pfile;
pfile = argv[0] + strlen(argv[0]);
for (; pfile > argv[0]; pfile--)
{
if ((*pfile == '\\') || (*pfile == '/'))
{
pfile++;
break;
}
}
if (!_stricmp(pfile, "left.exe")) {
pAudioEndVol->SetChannelVolumeLevelScalar(0, 1.0, &GUID_NULL); // Left
pAudioEndVol->SetChannelVolumeLevelScalar(1, 0.0, &GUID_NULL); // right
}
else if (!_stricmp(pfile, "right.exe")) {
pAudioEndVol->SetChannelVolumeLevelScalar(0, 0.0, &GUID_NULL); // Left
pAudioEndVol->SetChannelVolumeLevelScalar(1, 1.0, &GUID_NULL); // right
}
else {
pAudioEndVol->SetChannelVolumeLevelScalar(0, 1.0, &GUID_NULL); // Left
pAudioEndVol->SetChannelVolumeLevelScalar(1, 1.0, &GUID_NULL); // right
}
if (pAudioEndVol)
pAudioEndVol->Release();
if (pEndpoint)
pEndpoint->Release();
if (pEnum)
pEnum->Release();
CoUninitialize();
return 0;
}
build済みのバイナリの名前を変更して、
left.exeにするとダブルクリックでleft ch 100%,right ch 0%へ、
right.exeにすると同じく left ch 0%,right ch 100%へ、
それ以外の名前ではleft chも right chも100%になります。
これらのプログラムで2カ国語混線は回避できますが、音量低下とバランス悪化が気になる方は、apo equalizer等で、
japanese.txt
Copy: L=L R=L
なるスクリプトを末端に置けばいいです。普通の状態に戻すのは、このスクリプトをremoveすればいいです。(意外に面倒ですけど。)