LoginSignup
0
1

More than 3 years have passed since last update.

PowerDVD Ultra 18等で『DLNA TV 二か国語放送主福切り替え』がブロークンなのを対策してみる

Posted at

表題のような問題を解決したいわけですが、最低限左chの日本語音声と右chの英語音声が混ざっているのが不快ですが、PowerDVD Ultra側では切り替えができません。サウンド->スピーカーのプロパティー->レベル->バランス

image.png

の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すればいいです。(意外に面倒ですけど。)

image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1