Problem mit SoundPlay Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Luke_Scriptwalker
Posts: 12
Joined: 07 Mar 2019, 08:26

Problem mit SoundPlay

Post by Luke_Scriptwalker » 04 Jan 2021, 05:39

Hallo,


ich habe ein AutoHotkey-Script geschrieben (AutoHotkey Unicode 32-Bit, 1.1.33.2), das den freien Platz eines Laufwerkes ermittelt und einen Alarmsound abspielt, wenn der Mindestwert unterschritten wird. Das Script habe ich kompiliert, damit es auch eingesetzt werden kann, wenn AutoHotkey nicht installiert ist.

Die Sounddatei wird aber nicht abgespielt, wenn ich die Funktion "SoundPlay" innerhalb des Scripts aufrufe. Nur wenn ich sie innerhalb eines zweiten Scriptes aufrufe, dem der Name der Sounddatei übergeben worden ist, ertönt der Sound.

Was habe ich falsch gemacht oder woran liegt es?

DiskSpaceAlarm.ahk:

Code: Select all

;Checks the free diskspace and plays alarmsound if space is low

IfNotEqual, 0, 3
{
	MsgBox, 0, DiskSpaceAlarm 1.2, DiskSpaceAlarm 1.2`n`nWarnt wenn auf dem ueberwachten Laufwerk der freie Speicherplatz`neinen Mindestwert unterschreitet`n`nAufruf: DiskSpaceAlarm [Laufwerksbuchstabe:\] [Alarmwert in MB] [Sounddatei]`nAngaben mit Leerzeichen muessen mit Anfuehrungszeichen eingeschlossen werden.`n`nBeispiel: DiskSpaceAlarm D:\ 9000 "C:\Program Files\DVBViewer\Alarmsound.mp3"
	exit (3)
}


MinSpace = %2%
AlarmSound = %3%


While (1)
{


	DriveSpaceFree, FreeSpace, %1%
 

	if (FreeSpace < MinSpace)
	{ 	
		TrayTip, DriveFreepace, Freier Speicherplatz %1%: %FreeSpace%, 10, 1

;This doesn't work:
		SoundPlay, "%3%", WAIT
;This doesn't work too:
		AlarmFanfare(AlarmSound)
;Only this works:
		RunWait, Alarm_Trumpet "%3%"

		MsgBox, 308, Disk Full Warning, Das Laufwerk %1% ist gleich voll!`nEs sind nur noch %FreeSpace% MB frei`nBitte Dateien verschieben`nAlarm aussetzen? (j/N), 15
		IfMsgBox Yes
		{
			InputBox, UserInput, Voruebergehend pausieren, Zeit in Minuten eigeben (1-60 Default 15), , , , , 60, 15
			if ErrorLevel
			{
    				MsgBox, 0, ,  CANCEL wurde gewaehlt., 15
			}
			else
			{
    				MsgBox, 0, , Eingabe "%UserInput%", 15
				if (UserInput < 1 or UserInput > 60)
					MsgBox, 48, , Eingabefehler!, 30
				else
					Sleep, UserInput * 60000
			}
		}	
		else
		{
    			MsgBox, 0, ,  Es wurde No gewaehlt., 15
			sleep, 60000
		}		
	}
	else
	{
		Sleep, 300000
	}

}

exit (0)

;This function doesn't work, separately compiled as Alarm_Trumpet it works
AlarmFanfare(sound)
{

	SoundGet, master_volume
	SoundGet, master_mute
	SoundSet, OFF, , mute
	SoundSet, 100
	SoundPlay, %1%, WAIT
	SoundSet, mute, master , mute
	SoundSet, master_volume

}
Alarm_Trumpet

Code: Select all

;Play alarmsound with sound on an volume 100 and restore the old volume and mute afterwards

SoundGet, master_volume
SoundGet, master_mute
SoundSet, OFF, , mute
SoundSet, 100
SoundPlay, %1%, WAIT
SoundSet, mute, master , mute
SoundSet, master_volume
Beispiel für den Aufruf: DiskSpaceAlarm d:\ 30000 "Fanfare.mp3" (d:\ war ein USB-Stick mit ca. 1,5 GB freiem Speicher)


Viele Grüße

Luke_Scriptwalker
Last edited by Luke_Scriptwalker on 04 Jan 2021, 11:34, edited 1 time in total.
just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Problem mit SoundPlay

Post by just me » 04 Jan 2021, 06:18

Moin,

Code: Select all

;This doesn't work:
		SoundPlay, "%3%", WAIT
Hier würde ich denken, dass sich SoundPlay an den Anführungszeichen stört. In Alarm_Trumpet.ahk benutzt Du die nicht.

Code: Select all

;This doesn't work too:
		AlarmFanfare(AlarmSound)
Das liegt wohl daran, dass Du in AlarmFanfare() nicht die in sound übergebene Datei abspielst, sondern

Code: Select all

	SoundPlay, %1%, WAIT

Code: Select all

;Only this works:
		RunWait, Alarm_Trumpet "%3%"
Ja, bei Run/RunWait dürfen Parameter mit Anführungszeichen umschlossen werden.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Problem mit SoundPlay

Post by BoBo » 04 Jan 2021, 06:51

Mal rein konzeptionell, ein AlarmSound schreit nach anschließend manuellen Eingreifen, und kann bei Abwesenheit/Umgebungsgeräuschpegel auch leicht überhört werden.
Was soll denn die Konsequenz aus dem Speicherplatzmangelerfassungsevent sein?? :think:
Luke_Scriptwalker
Posts: 12
Joined: 07 Mar 2019, 08:26

Re: Problem mit SoundPlay

Post by Luke_Scriptwalker » 04 Jan 2021, 07:12

Hallo,

die Anführungszeichen sind wegen eventueller Leerzeichen im Pfad/Dateinamen. Bei "Kavallerie Trompetensignal (Attacke) als MP3-Download.mp3" als Argument gäbe es sonst wohl Probleme. Leerzeichen können ja auch im Dateipfad auftreten. Was soll man dann bei SoundPlay in solchen Fällen als Parameter angeben?

Der Alarm soll darauf hinweisen, daß die Gefahr besteht, daß das Aufnahme-Laufwerk für den DVBViewer (Software zum Aufnehmen von digitalem TV (Sat- oder DVB-T2 HD) vollläuft und Aufnahmen deshalb misslingen. Man kann dann alte Aufnahmen löschen oder auf ein externes Laufwerk verschieben. Geht natürlich nur, wenn man anwesend ist. Es ist mir aber schon mal passiert, daß der DVBViewer scheinbar lustig aufgenommen hat, in Wirklichkeit aber die Aufnehman wegen "Disk full" abgebrochen worden waren, ohne daß man es bemerkt hat. :o

Ich persönlich verwende die Urform des Skriptes als AHK-Datei, das neben dem Notebook auch Laufwerke anderer Rechner im WLAN überwacht. Dabei wird ja auch der Ton eingeschaltet und die Lautstärke auf 100 (maximum) eingestellt damit man die Kavallerie heranreiten hört. Damit man das Gemetzel danach nicht mehr so laut hört, werden danach die alten Werte wieder eingestellt.


Viele Grüße

Luke_Scriptwalker
just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Problem mit SoundPlay

Post by just me » 04 Jan 2021, 07:25

Bei SoundPlay werden die Parameter mit einem Komma getrennt. Alles hinter dem ersten Komma ist deshalb ein Dateiname - auch mit Leerzeichen.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Problem mit SoundPlay

Post by BoBo » 04 Jan 2021, 07:30

Der Alarm soll darauf hinweisen, daß die Gefahr besteht, daß das Aufnahme-Laufwerk für den DVBViewer (Software zum Aufnehmen von digitalem TV (Sat- oder DVB-T2 HD) vollläuft und Aufnahmen deshalb misslingen.
Wäre da nicht die (berühmt berüchtigte Deutsche) Vorsorge vorteilhafter? Über die Länge/Dauer einer potentiellen Aufnahme lässt sich bei bekannter/gewünschter Auflösung die Dateigröße errechnen - und so im Vorfeld mit dem verfügbaren Speicherplatz abgleichen (mit etwaigem 'Überziehungskredit'). Videorekorder mit Anwesenheitspflicht wg Fanfare finde ich eher, meh.
Btw, im worst case lassen sich für öffentlich-rechtliche Sender verpasste Sendungen noch im Nachgang auf vavideo.de suchen, sichten und sichern.
Weiterhin frohes Gelingen :)
Luke_Scriptwalker
Posts: 12
Joined: 07 Mar 2019, 08:26

Re: Problem mit SoundPlay

Post by Luke_Scriptwalker » 04 Jan 2021, 10:07

Hallo,

gerade an langen Feiertagen wird es etwas unübersichtlich und für Streamen fehlt mir ein Internetzugang mit entsprechendem Datenvolumen. Ich bin gerade mit einem ALDI Talk WLAN Hotspot unterwegs.

Ich habe es mit SoundPlay ohne " probiert. Bei SoundPlay, %3%, WAIT funktioniert es auch mit Namen mit Leerzeichen. Bei der Funktion AlarmFanfare(sound) funktiniert es überhaupt nicht. Wie müßte denn dabei das Argument übergeben werden?


Viele Grüße

Luke_Scriptwalker

P.S. Auch bei den Privatsendern gibt es auch ein kostenloses Streaming-Angebot, fragt sich nur, ob gerade das gewünschte dabei ist.
just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Problem mit SoundPlay  Topic is solved

Post by just me » 04 Jan 2021, 10:56

Code: Select all

;This doesn't work too:
		AlarmFanfare(AlarmSound)
...
;This function doesn't work, separately compiled as Alarm_Trumpet it works
AlarmFanfare(sound)
{
Der Funktionsaufruf ist korrekt. Der Dateinamme wird der Funktion im Parameter sound übergeben. Der muss dann aber auch genutzt werden, um den Sound abzuspielen:

Code: Select all

; Statt
	SoundPlay, %1%, WAIT
; sollte es
	SoundPlay, %sound%, WAIT
; sein
Luke_Scriptwalker
Posts: 12
Joined: 07 Mar 2019, 08:26

Re: Problem mit SoundPlay

Post by Luke_Scriptwalker » 04 Jan 2021, 11:32

Hallo,

vielen Dank! Jetzt läuft es bei allen drei Möglichkeiten. Wobei die erste ergänzt um die Einstellungen für Volume und Mute die einfachste wäre.

Mit den Variablen hatte ich bei AutoHotkey schon immer Probleme. Bei C wars einfacher bzw. eindeutigen. Auüßerdem gab es bei Turbo C einen Debugger in der Entwiklungsumgebung mit dem man das Programm zeilenweise durchsteppen und den Inhalt der Variablen verfolgen konnte.

Aber mit den hilfreichen Forumsmitgliedern ging es genau so gut.


Viele Grüße

Luke_Scriptwalker
Post Reply

Return to “Ich brauche Hilfe”