Youtubeの一部のビデオで片耳の音の問題を解決する

少し前まで、次の問題に遭遇しました。YouTubeでいくつかのビデオを見ると、音が左のスピーカーにしか聞こえません。 ヘッドフォンで聞くとき、これはいくつかの不便を引き起こします。



powershellとNAudioサウンドライブラリを使用して、Windows 7用のソフトウェアソリューションが見つかりました。 主なアイデアは、ステレオをモノラルに変換することです。





  1. ライブラリでアーカイブをダウンロードして解凍します
  2. メニューからPowerShell ISEスタートアップを起動します
  3. ライブラリからタイプを接続し、パスを独自のものに置き換えます。

    add-type -path 'C:/Users/xxxxx/Downloads/NAudio-Release/NAudio.dll'
          
          



  4. デフォルトのオーディオ出力デバイスのIDを覚えておいてください:

     $devices = new-object NAudio.CoreAudioApi.MMDeviceEnumerator $defaultDevice = $devices.GetDefaultAudioEndpoint([NAudio.CoreAudioApi.DataFlow]::Render, [NAudio.CoreAudioApi.Role]::Multimedia) $defaultDeviceId = $defaultDevice.ID -replace '{.+}\.{(.+)}$', '$1'
          
          



  5. デバイスを変更して、デフォルトのサウンドを任意の代替手段に出力します(プログラムは変更できません)

    コントロールパネル->ハードウェアとサウンド->サウンド->再生
  6. デバイスIDを独自のものに置き換えた後、次のコードを実行します。

     $waveIn = new-object NAudio.Wave.WasapiLoopbackCapture $waveOut = new-object NAudio.Wave.DirectSoundOut($defaultDeviceId, 100) $waveInProvider = new-object NAudio.Wave.WaveInProvider($waveIn) $waveProvider16 = new-object NAudio.Wave.WaveFloatTo16Provider($waveInProvider) $monoProvider16 = new-object NAudio.Wave.StereoToMonoProvider16($waveProvider16) $monoProvider16.leftVolume = 1 $monoProvider16.rightVolume = 1 $waveOut.init($monoProvider16) $waveOut.play() $waveIn.startRecording()
          
          





    詳細な説明
    デフォルトでは、すべてのサウンド出力を新しいデバイスにキャプチャします。

     $waveIn = new-object NAudio.Wave.WasapiLoopbackCapture
          
          





    デフォルトでは、クリックを防ぐために100msの遅延で前のデバイスにサウンドを出力します(ヘッドフォンはそのコネクタに接続されています)

     $waveOut = new-object NAudio.Wave.DirectSoundOut($defaultDeviceId, 100)
          
          





    ステレオからモノラルへのコンバーターがありますが、16ビット形式でのみ機能します。 適切な形式のコンバーターもあります。 それらを順番に適用すると、望ましい結果が得られます。

     $waveProvider16 = new-object NAudio.Wave.WaveFloatTo16Provider($waveInProvider) $monoProvider16 = new-object NAudio.Wave.StereoToMonoProvider16($waveProvider16)
          
          





    右チャンネルと左チャンネルの音量を設定します。

     $monoProvider16.leftVolume = 1 $monoProvider16.rightVolume = 1
          
          





    出口にバインドします。

     $waveOut.init($monoProvider16)
          
          





    プロセスを開始します。

     $waveOut.play() $waveIn.startRecording()
          
          







  7. YouTubeにアクセスして、ビデオを見る
  8. 次のようにリダイレクトを停止できます。

     $waveIn.stopRecording() $waveOut.stop()
          
          



  9. デフォルトのデバイスを戻すことを忘れないでください。


この方法は理想的ではありません。2番目のオーディオ出力デバイスとグローバルな再構成が必要です。

PS上記のアプローチには代替策がありました。コネクタをヘッドフォンジャックに完全に挿入するのではありません。



All Articles