Решение Проблемы Со Звуком В Одном Ухе Для Некоторых Видео На Youtube

Не очень давно столкнулся со следующей проблемой: при просмотре некоторых видео на YouTube звук идет только на левый динамик.

Это доставляет некоторые неудобства при прослушивании через наушники.

Было найдено программное решение для Windows 7 с использованием powershell и библиотеки для работы со звуком НАудио .

Основная идея заключается в преобразовании стерео в моно.

  1. Скачайте и распакуйте архив с библиотекой
  2. Запустите PowerShell ISE из меню «Пуск».

  3. Подключите типы из библиотеки, заменив путь на свой:
      
      
      
      
      
      
      
      
      
       

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

  4. Запомните идентификатор устройства вывода звука по умолчанию:

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

    +}\.

    {(.

    +)}$', '$1'

  5. Измените устройство вывода звука по умолчанию на любое альтернативное (программы не должны иметь возможность его изменить): Панель управления-> Оборудование и звук-> Звук-> Воспроизведение
  6. Запустите следующий код, сначала заменив идентификатор устройства на свой:

    $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

    На предыдущее устройство звук выводим по умолчанию (к его разъему подключены наушники) с задержкой 100мс для предотвращения щелчков:

    $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. Зайди на ютуб и посмотри видео
  8. Вы можете остановить перенаправление следующим образом:

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

  9. Не забудьте вернуть устройство к настройкам по умолчанию.

Способ не идеален: требует второго устройства вывода звука и глобальной перенастройки.

P.S. Описанный выше подход имел альтернативу: частично вставить разъем в разъем для наушников.

Теги: #PowerShell #youtube #NAudio #аудио #Ненормальное программирование

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.