Cайдчейн в vMix – автоматическое регулирование громкости музыки или интершума | vMix Sidechain
Cайдчейн в vMix – автоматическое регулирование громкости музыки или интершума
Видеоверсия:
Огромное спасибо Кириллу Кудрявцеву @kin0shkin из https://sbtg.ru/ за скрипт! Автоматически регулирует громкость музыки или интершума при наличии голоса в микрофоне.
Скрипт:
‘—–НАСТРОЙКИ—–
dim translateInput as string = “Rus Translate” ‘Имя инпута с Переводчиком
dim origInput as string = “Orig Program L” ‘Имя инпута с Оригинальной звуковой дорожкой
dim volumeStandart as string = “100” ‘Громкость Ориг. инпута, когда Переводчик молчит
dim fadeTimeStandart as string = “1200” ‘Длит. увеличения громкости Ориг., когда Переводчик молчит
dim volumeSpeaking as string = “60” ‘Громкость Оригинального инпута, когда Переводчик говорит
dim fadeTimeSpeaking as string = “200” ‘Длит. затихания Ориг., когда Переводчик говорит
dim voicethreshold as string = “0.05” ‘Порог реагирования на сигнал переводчика, от 0 до 1 (лог. шкала)
‘ Соответствует значениям (не длине) на ползунке громкости: 0.5=50%~=-6dB, 0.1=10%~=-20dB…
‘ Реагирование может не отработать при одиночном импульсе сигнала, но хорошо работает с сигналом типа голоса или музыки
dim checkingIter as integer = 10 ‘Кол-во итераций проверки молчания переводчика перед срабатыванием
dim checkingIterTime as integer = 200 ‘ Интервал (миллисек) между итерациями проверки (рекомменд. от 100, по-умолч. 200)
‘ Значит длит. проверки того, что перевод замолчал и можно включить Ориг. = checkingIter * checkingIterTime (миллисек)
‘—–Конец настроек—–
dim voicemeter as string = “”
dim speaking as boolean = false
dim silence as boolean = false
dim silencechecking as integer = 0
dim muted as boolean = false
do while true
dim xml as string = API.XML()
dim x as new system.xml.xmldocument
x.loadxml(xml)
voicemeter = (x.SelectSingleNode(“//input[@title='”& translateInput &”‘]/@meterF1”).Value)
if (x.SelectSingleNode(“//input[@title='”& translateInput &”‘]/@meterF2”).Value) > voicemeter
voicemeter = (x.SelectSingleNode(“//input[@title='”& translateInput &”‘]/@meterF2”).Value)
end if
muted = (x.SelectSingleNode(“//input[@title='”& translateInput &”‘]/@muted”).Value)
‘API.Function(“SetText”,Input:=”TextInput”,SelectedName:=”Timer.Text” ,Value:=voicemeter)
‘console.writeline(voicemeter)
if voicemeter > voicethreshold And voicemeter.IndexOfAny(“[E]”.ToCharArray) = -1 And Not muted
if silencechecking >= checkingIter ‘<> 0 ‘!=
‘console.writeline(“Speaking”)
silencechecking = 0
‘API.Function(“SetTextColour”,Input:=”TextInput”,SelectedName:=”Timer.Text”,Value:=”yellow”)
‘API.Function(“SetText”,Input:=”TextInput”,SelectedName:=”Timer.Text” ,Value:=”Перевод говорит! ” + voicemeter)
Input.Find(origInput).Function(“SetVolumeFade”, volumeSpeaking + “,” + fadeTimeSpeaking)
end if
‘console.writeline(silencechecking)
else
if silencechecking < checkingIter
silencechecking += 1
end if
if silencechecking = checkingIter
‘console.writeline(“Silence”)
‘API.Function(“SetTextColour”,Input:=”TextInput”,SelectedName:=”Timer.Text”,Value:=”white”)
‘API.Function(“SetText”,Input:=”TextInput”,SelectedName:=”Timer.Text” ,Value:=”Перевод молчит! ” + voicemeter)
Input.Find(origInput).Function(“SetVolumeFade”, volumeStandart + “,” + fadeTimeStandart)
silencechecking = checkingIter + 1
end if
‘console.writeline(silencechecking)
end if
sleep(checkingIterTime)
Loop