dank eurer hilfe konnte ich den code auf meine bedürfnisse anpassen, hierfür vielen dank
ich kann damit steuerbefehle an programme übergeben, wenn kein signal am audio ausgang anliegt.
nun stellt sich die frage, wie kann ich die daten nutzen, um ein
automatic gain control zu coden.
jeder kennt die heftigen lautstärke unterschiede, wenn z.b. werbung eingespielt wird.
plötzlich ist je nach sender eine erhebliche anhebung der lautstärke zu vernehmen.
in der variable "kanal1" ist der maximale peak beider kanäle.
wie ihr sicher wisst, sind meine fähigkeiten begrenzt, daher frage ich mal nach einem heftigen denkanstoss
ziel meiner anfrage ist, wie kann ich die lautstärke dynamisch herunter regeln wenn sie ein gewisses lautstärke level erreicht
hier gibt es die va.ahk
https://github.com/Drugoy/Autohotkey-scripts-.ahk/blob/master/Libraries/VA.ahk
Code: Select all
; https://www.autohotkey.com/boards/viewtopic.php?f=9&t=62175
; https://github.com/Drugoy/Autohotkey-scripts-.ahk/blob/master/Libraries/VA.ahk
; https://autohotkey.com/board/topic/21984-vista-audio-control-functions/
; https://ahkscript.github.io/VistaAudio/#VA_GetAudioMeter
#include VA.ahk
#SingleInstance, Force
SetWorkingDir, %A_Scriptdir%
MeterLength = 30
; MeterLength = 100
audioMeter := VA_GetAudioMeter()
; ALTkanal1 := ""
VA_IAudioMeterInformation_GetMeteringChannelCount(audioMeter, channelCount)
VA_GetDevicePeriod("capture", devicePeriod)
Loop
{
; Holt sich den Spitzenwert über alle Kanäle
VA_IAudioMeterInformation_GetPeakValue(audioMeter, peakValue)
meter := MakeMeter(peakValue, MeterLength)
; Get the peak values of all channels.
VarSetCapacity(peakValues, channelCount*4)
VA_IAudioMeterInformation_GetChannelsPeakValues(audioMeter, channelCount, &peakValues)
Loop %channelCount%
meter .= "`n" MakeMeter(NumGet(peakValues, A_Index*4-4, "float"), MeterLength)
String := leaveOnlyNumbers(meter)
wort_array := StrSplit(String, "-")
kanal1 := wort_array[1]/1
kanal2 := wort_array[2]/1
kanal3 := wort_array[3]/1
; KanalQuer := ((kanal1+kanal2+kanal3)/3)
KanalQuer := ((kanal2+kanal3)/2)
Startzeit := A_TickCount
; if String = 000000000000000000000
if String contains 00000
{
Sleep, 10
VerstricheneZeit += (A_TickCount - Startzeit) ; countdown
ToolTip, %meter%`nSignal: OFF`nCountdown: %VerstricheneZeit%`n%kanal1%`n%kanal2%`n%kanal3%`n%KanalQuer%
Sleep, %devicePeriod%
if (VerstricheneZeit > 10000) ; wenn 10 sekunden kein ton anliegt
{
reload ; test
SoundBeep, 750, 500
WinWait, VAVOO,
IfWinNotActive, VAVOO, , WinActivate, VAVOO,
WinWaitActive, VAVOO,
Sleep, 200
Send, {DOWN}
SoundBeep, 750, 500
tooltip, Sleep 5 sekunden
Sleep, 5000
Send, {ENTER}
SoundBeep, 750, 500
tooltip, Sleep 5 sekunden
Sleep, 5000
Send, {ENTER}
SoundBeep, 750, 500
tooltip, Sleep 30 sekunden
Sleep, 30000
Send, {ENTER}
SoundBeep, 750, 500
tooltip, Sleep 60 sekunden
Sleep, 60000
}}
else{
Sleep, 10
VerstricheneZeit := ""
ToolTip, %meter%`nSignal: ON`nCountdown: %VerstricheneZeit%`n%kanal1%`n%kanal2%`n%kanal3%`n%KanalQuer%
Sleep, %devicePeriod%
}}
MakeMeter(fraction, size)
{
global MeterLength
Loop % fraction*size
meter .= "|"
Loop % (1-fraction)*size
meter .= "."
meter .= " " fraction
return meter
}
LeaveOnlyNumbers(String)
{
counter := 0
Loop, Parse, String
{
if A_LoopField is integer
{
counter++
NewString = %NewString%%A_LoopField%
if counter = 7
NewString = %NewString%-
if counter = 14
NewString = %NewString%-
}
}
Return %NewString%
}
Return
esc::pause
;esc::reload