Dieser Artikel stellt vor, wie man eine einfache Timer-App mit WSL Bash und PowerShell erstellt.
Es ist ein Timer, der Sie mit Sprache benachrichtigt. Er zeigt die verstrichene Zeit an, wenn der Timer abläuft.
z.B. ttstimer "15m" "cooking" benachrichtigt Sie nach 15 Minuten mit Sprache und sagt cooking timer fired. 15 m passed.
Dieses Programm setzt einen Timer für ein angegebenes Zeitintervall, und wenn der Timer endet, liest es den angegebenen Text mit Sprachsynthese vor. Es benachrichtigt auch über die verstrichene Zeit. Unten füge ich Kommentare zu jeder Zeile hinzu und erkläre dann die Funktionsweise des Programms Schritt für Schritt.
ttstimer(){
# Beginn der Funktion zum Setzen des Timers
: e.g. ttstimer "15m" "cooking"
# Beispiel-Funktionsaufruf: Rufe diese Funktion mit Argumenten wie ttstimer "15m" "cooking" auf
json=
ttstimer_d=
ttstimer_w=
# Initialisiere json-Variable, ttstimer_d-Variable, ttstimer_w-Variable
[ -z "${1}" ] && return 1
# Wenn das erste Argument leer ist, beende Funktion als Fehler
json="$(python3 - $@ <<EOF
# -*- coding: utf-8 -*-
import sys
args = sys.argv
import re
import json
text = """${1}"""
result = re.match(r'(\d+)([a-z]{1})', text, re.M)
print (json.dumps(list(result.groups())))
EOF
)"
# Führe Python-Skript aus und speichere Ergebnis in json-Variable
[ -z "${json}" ] && return 1
# Wenn json-Variable leer ist, beende Funktion als Fehler
ttstimer_d="$( echo $json | parsejson '[0]' )"
ttstimer_w="$( echo $json | parsejson '[1]' )"
# Parse json-Inhalt und speichere in ttstimer_d und ttstimer_w
# sleep ${1} && tts "${2} timer fired. ${ttstimer_d} ${ttstimer_w} passed." && termdown
sleep ${1} && ( tts "${2} timer fired. ${ttstimer_d} ${ttstimer_w} passed." & termdown )
# Warte für angegebene Zeit, lies angegebenen Text mit Sprachsynthese vor und benachrichtige verstrichene Zeit
# Führe im Hintergrund mit & aus
}
Die Hauptarbeitsschritte dieses Programms sind wie folgt:
-
Die
ttstimer-Funktion startet. -
Die Funktion empfängt ein Zeitintervall (z.B. “15m”) und Text (z.B. “cooking”) als Argumente.
-
Initialisiere die Variablen
json,ttstimer_dundttstimer_w. -
Wenn das erste Argument leer ist, beende die Funktion als Fehler.
-
Ein Python-Skript wird ausgeführt, das angegebene Zeitintervall (z.B. “15m”) wird mit regulären Ausdrücken aufgelöst und das Ergebnis wird im JSON-Format in der
json-Variable gespeichert. -
Wenn die
json-Variable leer ist, beende die Funktion als Fehler. -
Der Inhalt der
json-Variable wird geparst und in den Variablenttstimer_dundttstimer_wgespeichert. Dies sind Werte, die das Zeitintervall in Zahl und Einheit aufteilen. -
Schlafe für das angegebene Zeitintervall (z.B. “15m”), dann lies den angegebenen Text (z.B. “cooking”) mit Sprachsynthese vor. Es benachrichtigt auch über die verstrichene Zeit. Diese Verarbeitung wird im Hintergrund ausgeführt.
Es begann als nur 3 Zeilen, aber wuchs, bevor ich es wusste.
Anderer Code
Der Zweck der folgenden Skripte ist, JSON-Daten mit der parsejson-Funktion in .bashrc zu parsen und die geparsten Daten mit Sprachsynthese mittels der tts-Funktion vorzulesen. Die tts-Funktion im PowerShell-Skript wird für denselben Zweck verwendet, führt aber Sprachsynthese innerhalb von PowerShell aus.
// .bashrc
parsejson(){
: e.g. parsejson '[0]["title"]'
python3 -c "import json,sys;print(json.load(sys.stdin)${1})"
}
tts(){
powershell.exe - <<EOF
tts "${1}"
EOF
}
// Microsoft.PowerShell_profile.ps1
function tts(){
Add-Type -AssemblyName System.speech
$tts = New-Object System.Speech.Synthesis.SpeechSynthesizer
$Phrase = @"
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
xml:lang="en-US">
<voice xml:lang="en-US">
<prosody rate="1">
<p>$($args[0])</p>
</prosody>
</voice>
</speak>
"@
$tts.SpeakSsml($Phrase)
}
.bashrc-Datei:
-
parsejson-Funktion: Eine Funktion zum Extrahieren bestimmter Werte aus JSON-Daten. Zum Beispiel extrahiert der Aufrufparsejson '[0]["title"]'den Wert an der angegebenen Stelle in den JSON-Daten. Verwendet Python zum Parsen der JSON-Daten. -
tts-Funktion: Ruft PowerShell auf, um den angegebenen Text mit Sprachsynthese vorzulesen.
Microsoft.PowerShell_profile.ps1-Datei:
tts-Funktion: Eine Funktion zum Ausführen von Sprachsynthese innerhalb von PowerShell. Verwendet die KlasseSystem.Speech.Synthesis.SpeechSynthesizer, um den angegebenen Text mit Sprachsynthese vorzulesen. Der Text wird im SSML-Format (Speech Synthesis Markup Language) bereitgestellt, und Spracheigenschaften (rate usw.) können konfiguriert werden.