dmitrij_b
Новичок
Проблема:
Два диктора в одном помещении на небольшом (2-3 метра) расстоянии друг от друга. Оба микрофонизированы "ручными" микрофонами расположенными на настольных стойках так, чтобы микрофоны не попадали в кадр. Соответственно расттояние от людей до микрофонов в районе метра или чуть больше. В результате такой диспозиции оба микрофона ловят обоих дикторов. "Своего" лучше, "чужого" хуже. Если говорит один человек и в микс работает только его микрофон то все более менее нормально. Но временами возникает ситуация диалога и тут, при включении обоих микрофонов одновременно, звук становится неприятным.
Возможно фазовые искажения из-за сложения звуков с двух микрофонов до которых звуковая волна приходит с разной задержкой.
Мысль:
Сделать для ситуации "диалог" автоматическую переключалку которая будет выводить в микс только тот микрофон, сигнал с которого сильнее.
То есть автоматически выбирать микрофон говорящего в данный момент диктора. Он же ближе к своему микрофону и сигнал с него сильнее.
Отступление:
Понятно, что по хорошему надо решать проблему иначе. Поставить микрофоны с острой диаграммой направленности, либо петлички...
Но ситуация такая, что работаем с той техникой, что есть на площадке.
В общем-то под эту задачу и был написан скрипт для vMix.
Настройки и подготовка проекта:
- В настройках vMix открывается один из Audio Outputs. Мне, например, удобен "F" (он же BusF) так как я оутпуты F и G пишу в отдельный файл для возможности последующего исправления звуковых огрехов на постпродакшене.
- Создаем два "входных" аудио-инпута для микрофонов. Например с названиями Mic1_in и Mic2_in.
- Mic1_in настраиваем в Channel Matrix так, чтобы сигнал с него уходил на BusF только в левый канал. Mic2_in - соответственно в правый. Остальные зеленые квадратики в Channel Matrix "входных" микрофонных инпутов можно и снять, чтобы звук с этих инпутов куда-то случайно не отправить, но тут дело вкуса. И еще, если снять зеленые квадратики отвечающие за "Master", то индикаторы такого инпута не будут показывать уровень сигнала.
- При необходимости, регулировки gain-ов, навешивание плагинов и т.п. лучше произвести на "входных" микрофонных инпутах. Как и оперативную (в процессе мероприятия) регулировку уровня. Так как уровнем "рабочих" микрофонных входов будет рулить скрипт.
- Автомикс на "входных" микрофонных инпутах отключаем (кнопка со стрелками серая), выход звука разрешаем (кнопка с динамиком зеленая).
- Создаем два "рабочих" аудио-инпута для микрофонов. Названия этих инпутов, например, Mic1_wrk и Mic2_wrk. В качестве источника для обоих выбирается "vMix Audio - Bus F" (с той буквой, которая выбрана в первом пункте настройки м подготовки проекта).
- Mic1_wrk настраиваем в Channel Matrix так, чтобы с него уходил сигнал на все оутпуты кроме BusF и чтобы на правый и на левый каналы брался с первого (левого) входного канала. BusF, imho, лучше вообще отключить в Channel Matrix "рабочих" микрофонных инпутов, во избежание случайной закольцовки по звуку.
- Mic2_wrk - на все отпуты (кроме - смотри выше) подаем со второго (правого) входного канала.
- Создается "регулировочный" audio input. В качестве источника выбирается любой реальный или виртуальный вход компьютера. От этого инпута нужен будет только регулятор и кнопка активности выхода (которая с динамиком). Наличие или отсутствие какого-либо сигнала на этом входе не принципиально. Если дергающийся индикатор этого input-а будет отвлекать, то его можно отключить через отключение в Channel Matrix посылов на Master.
- распределение микрофонных сигналов по выходам (если это необходимо) настраивается в "рабочих" микрофонных инпутах
- временная задержка между Mic*_in и Mic*_wrk по моим замерам составляет 120 милисекунд. Это надо учитывать при синхронизации звука и орфоэпии.
Всего в работе скрипта задействовано пять аудиоинпутов и один аудиооутпут.
Конфигрурационные переменные скрипта:
sampleTime = 10 ' время между замерами уровня (мс)
sampleCount = 15 ' колличество замеров для интеграции
micBus = "busF" ' имя аудиовыхода (шины) с которой снимаются показания уровня микрофонных сигналов
fadeTime = "100" ' время фейда звука при переключении активный\неактиыный микрофон (мс)
lowVolume = "10" ' до какого уровня опускать регулятор неактивного "рабочего" микрофонного инпута (%): 0-минимум, 100-максимум
mic1input = "mic1_wrk" ' - имя первого "рабочего" микрофонного инпута
mic2input = "mic2_wrk" ' - имя второго "рабочего" микрофонного инпута
adjustingInput = "adjusting" ' - имя "регулировочного" инпута
Принцип работы скрипта:
Каждые "sampleTime" снимаются показания с индикаторов уровня сигналов микрофонов "micBus".
"sampleCount" последних показаний суммируются, по каждому микрофону отдельно, после чего итоговые суммы сравниваются, для определения с какого микрофона за последнее время шел более сильный сигнал.
Если sampleTime = 10 (милисекунд) и sampleCount = 15, то в сравнении уровня участвует сумма уровней сигналов с микрофонов за 10 * 15 = 150 милисекунд.
Если суммарный уровень сигнала с первого микрофона сильнее, то регулятор уровня первого "рабочего" микрофонного инпута "mic1input" плавно (за время заданное "fadeTime") выводится на 100%. За это же время регулятор уровня второго "рабочего" микрофонного инпута "mic2input" опускается до уровня "lowVolume".
При смене лидирующего по уровню микрофона происходит плавная смена положений регуляторов (за время заданное "fadeTime").
Этот алгоритм работает только, если на обоих "рабочих" микрофонных инпутах и на "регулировочном" разрешен выход звука (кнопка с динамиком в активном\зеленом положении).
Если один или оба "рабочих" инпута либо "регулировочный" инпут уходят в неактивный режим (кнопка с динамиком серая), то регуляторы уровеня обоих "рабочих" микрофонных инпутов поднимаются до 100% опять-же за время заданное в "fadeTime".
Уровни сигналов ниже границы задаваемой регулятором уровня "регулировочного" инпута "adjustingInput" при расчетах интегрального уровня считаются нулевыми. Такое примитивное отсекание фоновых шумов, чтобы регуляторы "рабочих" микрофонных входов не прыгали хаотически когда оба диктора молчат.
Если в настройках General "регулировочного" инпута стоит Channel = All, то регулятор уровня этого инпута отвечает за "игнор" слабых сигналов обоих микрофонов. Если же Channel = SeparateMono, то левый регулятор отвечает за первый микрофон, а правый за второй.
Дополнительные заметки:
Временной задержкой между "входными" и "рабочими" микрофонными инпутами вполне можно воспользоваться для того, чтобы к моменту когда диктор в кадре начнет говорить его микрофон уже был подан в микс. Правда 120 милисекунд на это маловато на мой взгляд - нужно время на фейд, чтобы резкое переключение микрофонов по ушам не било, да и время для интеграции показаний уровня микрофонов если слишком малое оставить, то будет больше ложных переключений.
На мой взгляд тут можно побаловаться с дополнительной задержкой звука. А с учетом того, что она в vMix-е может быть и отрицательной (до -1 сек) можно существенный резерв времени для реакции скрипта зарезервировать.
В приложенном к сообщению архиве сам скрипт (micSelect.vb), этот текст (micSelect.txt) и тестовый проект для vMix v.25.
Два диктора в одном помещении на небольшом (2-3 метра) расстоянии друг от друга. Оба микрофонизированы "ручными" микрофонами расположенными на настольных стойках так, чтобы микрофоны не попадали в кадр. Соответственно расттояние от людей до микрофонов в районе метра или чуть больше. В результате такой диспозиции оба микрофона ловят обоих дикторов. "Своего" лучше, "чужого" хуже. Если говорит один человек и в микс работает только его микрофон то все более менее нормально. Но временами возникает ситуация диалога и тут, при включении обоих микрофонов одновременно, звук становится неприятным.
Возможно фазовые искажения из-за сложения звуков с двух микрофонов до которых звуковая волна приходит с разной задержкой.
Мысль:
Сделать для ситуации "диалог" автоматическую переключалку которая будет выводить в микс только тот микрофон, сигнал с которого сильнее.
То есть автоматически выбирать микрофон говорящего в данный момент диктора. Он же ближе к своему микрофону и сигнал с него сильнее.
Отступление:
Понятно, что по хорошему надо решать проблему иначе. Поставить микрофоны с острой диаграммой направленности, либо петлички...
Но ситуация такая, что работаем с той техникой, что есть на площадке.
В общем-то под эту задачу и был написан скрипт для vMix.
Настройки и подготовка проекта:
- В настройках vMix открывается один из Audio Outputs. Мне, например, удобен "F" (он же BusF) так как я оутпуты F и G пишу в отдельный файл для возможности последующего исправления звуковых огрехов на постпродакшене.
- Создаем два "входных" аудио-инпута для микрофонов. Например с названиями Mic1_in и Mic2_in.
- Mic1_in настраиваем в Channel Matrix так, чтобы сигнал с него уходил на BusF только в левый канал. Mic2_in - соответственно в правый. Остальные зеленые квадратики в Channel Matrix "входных" микрофонных инпутов можно и снять, чтобы звук с этих инпутов куда-то случайно не отправить, но тут дело вкуса. И еще, если снять зеленые квадратики отвечающие за "Master", то индикаторы такого инпута не будут показывать уровень сигнала.
- При необходимости, регулировки gain-ов, навешивание плагинов и т.п. лучше произвести на "входных" микрофонных инпутах. Как и оперативную (в процессе мероприятия) регулировку уровня. Так как уровнем "рабочих" микрофонных входов будет рулить скрипт.
- Автомикс на "входных" микрофонных инпутах отключаем (кнопка со стрелками серая), выход звука разрешаем (кнопка с динамиком зеленая).
- Создаем два "рабочих" аудио-инпута для микрофонов. Названия этих инпутов, например, Mic1_wrk и Mic2_wrk. В качестве источника для обоих выбирается "vMix Audio - Bus F" (с той буквой, которая выбрана в первом пункте настройки м подготовки проекта).
- Mic1_wrk настраиваем в Channel Matrix так, чтобы с него уходил сигнал на все оутпуты кроме BusF и чтобы на правый и на левый каналы брался с первого (левого) входного канала. BusF, imho, лучше вообще отключить в Channel Matrix "рабочих" микрофонных инпутов, во избежание случайной закольцовки по звуку.
- Mic2_wrk - на все отпуты (кроме - смотри выше) подаем со второго (правого) входного канала.
- Создается "регулировочный" audio input. В качестве источника выбирается любой реальный или виртуальный вход компьютера. От этого инпута нужен будет только регулятор и кнопка активности выхода (которая с динамиком). Наличие или отсутствие какого-либо сигнала на этом входе не принципиально. Если дергающийся индикатор этого input-а будет отвлекать, то его можно отключить через отключение в Channel Matrix посылов на Master.
- распределение микрофонных сигналов по выходам (если это необходимо) настраивается в "рабочих" микрофонных инпутах
- временная задержка между Mic*_in и Mic*_wrk по моим замерам составляет 120 милисекунд. Это надо учитывать при синхронизации звука и орфоэпии.
Всего в работе скрипта задействовано пять аудиоинпутов и один аудиооутпут.
Конфигрурационные переменные скрипта:
sampleTime = 10 ' время между замерами уровня (мс)
sampleCount = 15 ' колличество замеров для интеграции
micBus = "busF" ' имя аудиовыхода (шины) с которой снимаются показания уровня микрофонных сигналов
fadeTime = "100" ' время фейда звука при переключении активный\неактиыный микрофон (мс)
lowVolume = "10" ' до какого уровня опускать регулятор неактивного "рабочего" микрофонного инпута (%): 0-минимум, 100-максимум
mic1input = "mic1_wrk" ' - имя первого "рабочего" микрофонного инпута
mic2input = "mic2_wrk" ' - имя второго "рабочего" микрофонного инпута
adjustingInput = "adjusting" ' - имя "регулировочного" инпута
Принцип работы скрипта:
Каждые "sampleTime" снимаются показания с индикаторов уровня сигналов микрофонов "micBus".
"sampleCount" последних показаний суммируются, по каждому микрофону отдельно, после чего итоговые суммы сравниваются, для определения с какого микрофона за последнее время шел более сильный сигнал.
Если sampleTime = 10 (милисекунд) и sampleCount = 15, то в сравнении уровня участвует сумма уровней сигналов с микрофонов за 10 * 15 = 150 милисекунд.
Если суммарный уровень сигнала с первого микрофона сильнее, то регулятор уровня первого "рабочего" микрофонного инпута "mic1input" плавно (за время заданное "fadeTime") выводится на 100%. За это же время регулятор уровня второго "рабочего" микрофонного инпута "mic2input" опускается до уровня "lowVolume".
При смене лидирующего по уровню микрофона происходит плавная смена положений регуляторов (за время заданное "fadeTime").
Этот алгоритм работает только, если на обоих "рабочих" микрофонных инпутах и на "регулировочном" разрешен выход звука (кнопка с динамиком в активном\зеленом положении).
Если один или оба "рабочих" инпута либо "регулировочный" инпут уходят в неактивный режим (кнопка с динамиком серая), то регуляторы уровеня обоих "рабочих" микрофонных инпутов поднимаются до 100% опять-же за время заданное в "fadeTime".
Уровни сигналов ниже границы задаваемой регулятором уровня "регулировочного" инпута "adjustingInput" при расчетах интегрального уровня считаются нулевыми. Такое примитивное отсекание фоновых шумов, чтобы регуляторы "рабочих" микрофонных входов не прыгали хаотически когда оба диктора молчат.
Если в настройках General "регулировочного" инпута стоит Channel = All, то регулятор уровня этого инпута отвечает за "игнор" слабых сигналов обоих микрофонов. Если же Channel = SeparateMono, то левый регулятор отвечает за первый микрофон, а правый за второй.
Дополнительные заметки:
Временной задержкой между "входными" и "рабочими" микрофонными инпутами вполне можно воспользоваться для того, чтобы к моменту когда диктор в кадре начнет говорить его микрофон уже был подан в микс. Правда 120 милисекунд на это маловато на мой взгляд - нужно время на фейд, чтобы резкое переключение микрофонов по ушам не било, да и время для интеграции показаний уровня микрофонов если слишком малое оставить, то будет больше ложных переключений.
На мой взгляд тут можно побаловаться с дополнительной задержкой звука. А с учетом того, что она в vMix-е может быть и отрицательной (до -1 сек) можно существенный резерв времени для реакции скрипта зарезервировать.
В приложенном к сообщению архиве сам скрипт (micSelect.vb), этот текст (micSelect.txt) и тестовый проект для vMix v.25.
Вложения
-
24 KB Просмотры: 9
Последнее редактирование: