Page 1 of 1

feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 19 Feb 2019, 17:13
by effel
guten abend ahk gemeinde,

kann man mit ahk feststellen ob auf dem lautsprecherausgang sound anliegt?

ich brauche nicht unbedingt eine angabe wie viel db (wie laut) die lautsprecher plärren, es würde mir schon reichen wenn ich nur ein true oder false ergebnis bekomme.

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 20 Feb 2019, 02:17
by LuckyJoe
Hi effel,

eigentlich müsste das feststellbar sein, da beim Klicken auf das Lautsprechersymbol in der Taskleiste der Pegel des Sounds ja als wechselfarbiger kleiner Balken angezeigt wird (zumindest bei meinem Realtec-Treiber). Also muss das Programm (bei mir "sndvol.exe") diese Information ja auch irgendwo abgreifen. Wie man darauf aber mit AutoHotkey zugreift, kann ich dir leider nicht beantworten.

Viel Erfolg.
HG - Lucky Joe

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 20 Feb 2019, 09:31
by songoku
Hallo,
kann dir SoundGet nicht weiter helfen ?
https://ahkde.github.io/docs/commands/SoundGet.htm

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 20 Feb 2019, 09:45
by gregster
Vielleicht eher Lexikos VA.ahk Bibliothek: da gibt es im 'Advanced'-Bereich VA_GetAudioMeter(device_desc)
https://ahkscript.github.io/VistaAudio/#VA_GetAudioMeter (Doku für VA.ahk)
https://autohotkey.com/board/topic/21984-vista-audio-control-functions/ (Dropbox-Link for v2.3 geht)

Im Quelltext des Beispiels für VA_GetAudioMeter(device_desc) les ich:
; "The peak value for each channel is recorded over one device
; period and made available during the subsequent device period."
Da vermute ich, dass es etwas mit der hier genannten Aufgabenstellung zu tun haben könnte. Das Beispiel scheint jedenfalls den Unterschied zwischen Sound und keinem Sound zu erkennen (inkl. Pegelhöhe) - hab es gerade mal ausprobiert...

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 20 Feb 2019, 12:30
by effel
ich bin geblockt und muss ohne anmeldung antworten?!?!

sobald ich code einfüge kommt die meldung das ich geblockt bin, seltsam...

...aber egal, möchte mich bei gregster bedanken, das ist die lösung

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 20 Feb 2019, 12:30
by effel
ok ab und wieder anmelden, dann ging es wieder :-)

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 20 Feb 2019, 15:20
by gregster
effel wrote:
20 Feb 2019, 12:30
ich bin geblockt und muss ohne anmeldung antworten?!?!

sobald ich code einfüge kommt die meldung das ich geblockt bin, seltsam...

...aber egal, möchte mich bei gregster bedanken, das ist die lösung
Freut mich, dass ich helfen konnte.

Ich hab das Problem mit dem Code mal weiter geleitet - du bist jedenfalls nicht der einzige, der Probleme hatte, Code zu posten. Hat wahrscheinlich damit zu tun, dass der irre Spammer wieder ziemlich aktiv war und die Admins an den Gegenmaßnahmen rumschustern und dabei manchmal übers Ziel hinausschießen. Das Feintuning scheint das Problem...

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 02 Mar 2019, 19:12
by effel
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

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 04 Mar 2019, 13:26
by effel
für einen anfang, würde es mir schon sehr helfen, wenn mir jemand zeigen kann wie ich die 6 nullen hinter dem punkt weg bekomme.
2019-03-04 at 19.23.17.jpeg
2019-03-04 at 19.23.17.jpeg (7.38 KiB) Viewed 2905 times

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 04 Mar 2019, 14:45
by KHA

Code: Select all

Null := 00.0000000
NewNull := SubStr(Null, 1,-6)
msgbox, % NewNull

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 04 Mar 2019, 15:03
by effel
super, vielen dank damit kann ich was anfangen :-)
2019-03-04 at 20.51.45.jpeg
2019-03-04 at 20.51.45.jpeg (8.58 KiB) Viewed 2894 times
sorry, ich habe meine frage nicht korrekt gestellt, den punkt möchte ich auch nicht sehen. soll ich ihn mit stringreplace entfernen oder passt das noch in deine zeile?

Code: Select all

kanal1 := SubStr(wort_array[1]/1, 1,-6)
und es stellt sich (nur interessehalber) die frage, wird die erste stelle hinter dem punkt kaufmännisch aufgerundet oder nur abgeschnitten

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 04 Mar 2019, 15:17
by effel
ok, lesen hilft :-)
habe es gefunden

Code: Select all

kanal1 := SubStr(wort_array[1]/1, 1,-7)

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

Posted: 04 Mar 2019, 15:18
by KHA
sorry, ich habe meine frage nicht korrekt gestellt, den punkt möchte ich auch nicht sehen. soll ich ihn mit stringreplace entfernen oder passt das noch in deine zeile?

Code: Select all

kanal1 := SubStr(wort_array[1]/1, 1,-7)

Code: Select all

und es stellt sich (nur interessehalber) die frage, wird die erste stelle hinter dem punkt kaufmännisch aufgerundet oder nur abgeschnitten
nur abgeschnitten