- Offizieller Beitrag
Vor laaanger Zeit hatten wir mal intensiv mit TextToSpeech gespielt. Dabei war übrigens dieses Skript entstanden.
Das war mir jetzt in die Hände gefallen und ich habe es mal überarbeitet. Neben der Ausgabe der Zeit im offiziellen Modus sind 3 regionale Varianten wählbar. Variante 'A' (meine Heimat) ist schon etwas schräg und sicherlich für den einen oder anderen schwer verdaulich.
Skript und Bsp. sagen eigentlich alles notwendige.
SayTheTime.au3
C++
;-- TIME_STAMP 2020-02-20 21:49:32 v 0.1
Opt('MustDeclareVars', 1)
#cs
Deutsche Stimme für Sprachausgabe herunterladen: http://ulrichhanke.de/26/StimmeSteffi.html
und installieren.
Uhrzeitangaben, Stunden von 0 bis 23
$_sType '' (Standard) , Uhzeitangabe im offiziellen Sprachgebrauch
12:00 zwölf Uhr
12:01 bis 12:59 zwölf Uhr und n Minute/n
13:00 dreizehn Uhr
Uhrzeitangaben, Stunden von 1 bis 12 , verbreitete regionale Angaben
$_sType 'A' , very crazy :=) , Region: Magdeburger Börde/Altmark
12:00 zwölf Uhr STUNDE
12:01 bis 12:10 1 bis 10 Minuten NACH zwölf MINUTEN nach STUNDE
12:11 bis 12:14 4 bis 1 Minuten VOR VIERTEL eins MINUTEN vor VIERTEL angefangene STUNDE
12:15 VIERTEL eins VIERTEL angefangene STUNDE
12:16 bis 12:19 1 bis 4 Minuten NACH VIERTEL eins MINUTEN nach VIERTEL angefangene STUNDE
12:20 bis 12:29 10 bis 1 Minuten VOR HALB eins MINUTEN vor HALB angefangene STUNDE
12:30 HALB eins HALB angefangene STUNDE
12:31 bis 12:40 1 bis 10 Minuten NACH HALB eins MINUTEN nach HALB angefangene STUNDE
12:41 bis 12:44 4 bis 1 Minuten VOR DREIVIERTEL eins MINUTEN vor DREIVIERTEL angefangene STUNDE
12:45 DREIVIERTEL eins DREIVIERTEL angefangene STUNDE
12:46 bis 12:49 1 bis 4 Minuten NACH DREIVIERTEL eins MINUTEN nach DREIVIERTEL angefangene STUNDE
12:50 bis 12:59 10 bis 1 Minuten VOR eins MINUTEN vor angefangene STUNDE
$_sType 'B' , Region vorwiegend: Mittel-/Norddeutschland
12:00 zwölf Uhr STUNDE
12:01 bis 12:14 1 bis 14 Minuten NACH zwölf MINUTEN nach STUNDE
12:15 VIERTEL eins VIERTEL angefangene STUNDE
12:16 bis 12:29 14 bis 1 Minuten VOR HALB eins MINUTEN vor HALB angefangene STUNDE
12:30 HALB eins HALB angefangene STUNDE
12:31 bis 12:44 1 bis 14 Minuten NACH HALB eins MINUTEN nach HALB angefangene STUNDE
12:45 DREIVIERTEL eins DREIVIERTEL angefangene STUNDE
12:46 bis 12:59 14 bis 1 Minuten VOR eins MINUTEN vor angefangene STUNDE
$_sType 'C' , Region vorwiegend: Süddeutschland
12:00 zwölf Uhr STUNDE
12:01 bis 12:14 1 bis 14 Minuten NACH zwölf MINUTEN nach STUNDE
12:15 VIERTEL NACH zwölf VIERTEL nach STUNDE
12:16 bis 12:19 16 bis 19 Minuten nach zwölf MINUTEN nach STUNDE
12:20 bis 12:29 10 bis 1 Minuten VOR HALB eins MINUTEN vor HALB angefangene STUNDE
12:30 HALB eins HALB angefangene STUNDE
12:31 bis 12:40 1 bis 10 Minuten NACH HALB eins MINUTEN nach HALB angefangene STUNDE
12:41 bis 12:44 19 bis 16 Minuten VOR eins MINUTEN vor angefangene STUNDE
12:45 VIERTEL VOR eins VIERTEL vor angefangene STUNDE
12:46 bis 12:59 14 bis 1 Minuten VOR eins MINUTEN vor angefangene STUNDE
#ce
; #FUNCTION# ====================================================================================================================
; Name ..........: _SayTheTime
; Description ...: Use TextToSpeech with the passed time string.
; Syntax ........: _SayTheTime([$_sTime = ''])
; Parameters ....: $_sTime - [optional] The time string. Default is '', current time.
; ...............: Pass a defined time with the function "_GetTime".
; Return values .: None
; Author ........: BugFix
; ===============================================================================================================================
Func _SayTheTime($_sTime='')
$_sTime = $_sTime = '' ? _GetTime() : $_sTime
Local Static $bInit = False
Local Static $oTalk
If Not $bInit Then $bInit = __InitSAPI($oTalk)
If $bInit Then $oTalk.Speak($_sTime)
EndFunc
; #FUNCTION# ====================================================================================================================
; Name ..........: _GetTime
; Description ...: Creates a time string for a passed or (by default) the current time with a selected type.
; Syntax ........: _GetTime([$_hr = -1[, $_min = -1[, $_sType = '']]])
; Parameters ....: $_hr - [optional] The hour. Default is -1, current hour.
; $_min - [optional] The minute. Default is -1, current minute.
; $_sType - [optional] The way of speaking. Default is '', the official kind.
; Return values .: The time string.
; Author ........: BugFix
; ===============================================================================================================================
Func _GetTime($_hr=-1, $_min=-1, $_sType='')
$_hr = $_hr = -1 ? Int(@HOUR) : $_hr
$_min = $_min = -1 ? Int(@MIN) : $_min
Local Static $aHour[] = ['Zwölf','Eins','Zwei','Drei','Vier','Fünf','Sechs','Sieben','Acht','Neun','Zehn','Elf','Zwölf', _
'Eins','Zwei','Drei','Vier','Fünf','Sechs','Sieben','Acht','Neun','Zehn','Elf']
Local Static $aMin[] = ['','Eine','Zwei','Drei','Vier','Fünf','Sechs','Sieben','Acht','Neun','Zehn','Elf','Zwölf', _
'Dreizehn','Vierzehn','','Sechzehn','Siebzehn','Achtzehn','Neunzehn']
Local $sMin = '', $sConnect = '', $sQuart = '', $sHour = $aHour[$_hr], $sUnit = 'Minuten '
If $_sType = '' Then ; offizielle Zeit
Switch $_min
Case 0
$sMin = ''
Case 1
$sMin = ' und eine Minute'
Case Else
$sMin = ' und ' & $_min & ' Minuten'
EndSwitch
Return StringFormat('%s Uhr%s', $_hr, $sMin)
EndIf
Local $bNextHour = $_min = 0 ? False : True
Switch $_min
Case 1 To 10
$sMin = $aMin[$_min]
$sConnect = 'Nach'
$bNextHour = False
Case 11 To 14
$sMin = $_sType='A' ? $aMin[15-$_min] : $aMin[$_min]
$sConnect = $_sType='A' ? 'Vor' : 'Nach'
$sQuart = $_sType='A' ? 'Viertel' : ''
$bNextHour = $_sType='A' ? True : False
Case 15
$sMin = $_sType='C' ? 'Viertel' : ''
$sConnect = $_sType='C' ? 'Nach' : ''
$sQuart = $_sType='C' ? '' : 'Viertel'
$bNextHour = $_sType='C' ? False : True
Case 16 To 19
$sMin = $_sType='A' ? $aMin[$_min-15] : ($_sType='C' ? $aMin[$_min] : $aMin[30-$_min])
$sConnect = StringInStr('AC',$_sType) ? 'Nach' : 'Vor'
$sQuart = $_sType='A' ? 'Viertel' : ($_sType='C' ? '' : 'Halb')
$bNextHour = $_sType='C' ? False : True
Case 20 To 29
$sMin = $aMin[30-$_min]
$sConnect = 'Vor'
$sQuart = 'Halb'
Case 30
$sMin = ''
$sConnect = ''
$sQuart = 'Halb'
Case 31 To 40
$sMin = $aMin[$_min-30]
$sConnect = 'Nach'
$sQuart = 'Halb'
Case 41 To 44
$sMin = $_sType='A' ? $aMin[45-$_min] : ($_sType='C' ? $aMin[60-$_min] : $aMin[$_min-30])
$sConnect = StringInStr('AC',$_sType) ? 'Vor' : 'Nach'
$sQuart = $_sType='A' ? 'Dreiviertel' : ($_sType='C' ? '' : 'Halb')
Case 45
$sMin = $_sType='C' ? 'Viertel' : ''
$sConnect = $_sType='C' ? 'Vor' : ''
$sQuart = $_sType='C' ? '' : 'Dreiviertel'
Case 46 To 49
$sMin = $_sType='A' ? $aMin[$_min-45] : $aMin[60-$_min]
$sConnect = $_sType='A' ? 'Nach' : 'Vor'
$sQuart = $_sType='A' ? 'Dreiviertel' : ''
Case 50 To 59
$sMin = $aMin[60-$_min]
$sConnect = 'Vor'
$sQuart = ''
EndSwitch
$sUnit = $_min > 1 ? (($_min=15 Or $_min=45) ? '' : $sUnit) : 'Minute '
If $bNextHour Then ; Zeitangabe als Teil der folgenden Stunde
$_hr = $_hr = 23 ? 0 : $_hr +1
$sHour = $aHour[$_hr]
EndIf
Return StringFormat('%s%s%s%s%s%s%s%s', $sMin, ($sMin=''?'':' '), ($sMin=''?'':$sUnit), _
$sConnect, ($sConnect=''?'':' '), $sQuart, ($sQuart=''?'':' '), $sHour)
EndFunc
; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __InitSAPI
; Description ...: Creates the SAPI.SpVoice-Object and select the german voice.
; ===============================================================================================================================
Func __InitSAPI(ByRef $_oTalk)
$_oTalk = ObjCreate('SAPI.SpVoice')
If Not IsObj($_oTalk) Then
MsgBox(16, 'FEHLER', '"SAPI.SpVoice" ist nicht installiert')
Return False
EndIf
Local $oVoices = $_oTalk.GetVoices("Language=407")
If $oVoices.Count < 1 Then
MsgBox(16, 'FEHLER', 'Keine deutsche Stimme installiert')
Return False
EndIf
$_oTalk.Voice = $oVoices.Item(0)
Return True
EndFunc
Alles anzeigen
Bsp.
C++
;-- TIME_STAMP 2020-02-20 21:52:11
Opt('MustDeclareVars', 1)
#include 'SayTheTime.au3'
; "Offizielle Zeit" (jetzt)
_SayTheTime()
Sleep(1000)
; Regionale Variante 'A' (jetzt)
_SayTheTime(_GetTime(-1, -1, 'A'))
Sleep(1000)
; Regionale Variante 'B' (jetzt)
_SayTheTime(_GetTime(-1, -1, 'B'))
Sleep(1000)
; Regionale Variante 'C' (jetzt)
_SayTheTime(_GetTime(-1, -1, 'C'))
Sleep(1000)
; jetzt alle 4 Varianten mit vorgegebener Zeit (17:19)
Local $hh = 17, $mm = 19
; "Offizielle Zeit"
_SayTheTime(_GetTime($hh, $mm))
Sleep(1000)
; Regionale Variante 'A'
_SayTheTime(_GetTime($hh, $mm, 'A'))
Sleep(1000)
; Regionale Variante 'B'
_SayTheTime(_GetTime($hh, $mm, 'B'))
Sleep(1000)
; Regionale Variante 'C'
_SayTheTime(_GetTime($hh, $mm, 'C'))
Alles anzeigen