Не очень давно столкнулся со следующей проблемой: при просмотре некоторых видео на YouTube звук идет только на левый динамик.
Это доставляет некоторые неудобства при прослушивании через наушники.
Было найдено программное решение для Windows 7 с использованием powershell и библиотеки для работы со звуком НАудио .
Основная идея заключается в преобразовании стерео в моно.
- Скачайте и распакуйте архив с библиотекой
- Запустите PowerShell ISE из меню «Пуск».
- Подключите типы из библиотеки, заменив путь на свой:
add-type -path 'C:/Users/xxxxx/Downloads/NAudio-Release/NAudio.dll'
- Запомните идентификатор устройства вывода звука по умолчанию:
$devices = new-object NAudio.CoreAudioApi.MMDeviceEnumerator $defaultDevice = $devices.GetDefaultAudioEndpoint([NAudio.CoreAudioApi.DataFlow]::Render, [NAudio.CoreAudioApi.Role]::Multimedia) $defaultDeviceId = $defaultDevice.ID -replace '{.
+}\.
{(.
+)}$', '$1'
- Измените устройство вывода звука по умолчанию на любое альтернативное (программы не должны иметь возможность его изменить): Панель управления-> Оборудование и звук-> Звук-> Воспроизведение
- Запустите следующий код, сначала заменив идентификатор устройства на свой:
$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()
- Зайди на ютуб и посмотри видео
- Вы можете остановить перенаправление следующим образом:
$waveIn.stopRecording() $waveOut.stop()
- Не забудьте вернуть устройство к настройкам по умолчанию.
P.S. Описанный выше подход имел альтернативу: частично вставить разъем в разъем для наушников.
Теги: #PowerShell #youtube #NAudio #аудио #Ненормальное программирование
-
Опасная Уязвимость В Icq6
19 Oct, 24 -
Ответы По Ипотеке.
19 Oct, 24 -
Д3?
19 Oct, 24