feststellen ob auf dem lautsprecherausgang sound anliegt

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

effel
Posts: 270
Joined: 16 Jan 2018, 13:34

feststellen ob auf dem lautsprecherausgang sound anliegt

19 Feb 2019, 17:13

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.
User avatar
LuckyJoe
Posts: 282
Joined: 02 Oct 2013, 09:52

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

20 Feb 2019, 02:17

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
Herzliche Grüße aus dem Rheinland
Lucky Joe
gregster
Posts: 5553
Joined: 30 Sep 2013, 06:48

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

20 Feb 2019, 09:45

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...
effel
Posts: 270
Joined: 16 Jan 2018, 13:34

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

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
effel
Posts: 270
Joined: 16 Jan 2018, 13:34

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

20 Feb 2019, 12:30

ok ab und wieder anmelden, dann ging es wieder :-)
gregster
Posts: 5553
Joined: 30 Sep 2013, 06:48

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

20 Feb 2019, 15:20

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...
effel
Posts: 270
Joined: 16 Jan 2018, 13:34

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

02 Mar 2019, 19:12

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
effel
Posts: 270
Joined: 16 Jan 2018, 13:34

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

04 Mar 2019, 13:26

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 2334 times
KHA
Posts: 263
Joined: 21 Aug 2018, 11:11

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

04 Mar 2019, 14:45

Code: Select all

Null := 00.0000000
NewNull := SubStr(Null, 1,-6)
msgbox, % NewNull
effel
Posts: 270
Joined: 16 Jan 2018, 13:34

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

04 Mar 2019, 15:03

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 2323 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
effel
Posts: 270
Joined: 16 Jan 2018, 13:34

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

04 Mar 2019, 15:17

ok, lesen hilft :-)
habe es gefunden

Code: Select all

kanal1 := SubStr(wort_array[1]/1, 1,-7)
KHA
Posts: 263
Joined: 21 Aug 2018, 11:11

Re: feststellen ob auf dem lautsprecherausgang sound anliegt

04 Mar 2019, 15:18

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

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: samwise and 4 guests