- Offizieller Beitrag
Hi,
auch von mir eine kleine Spielerei mit TextToSpeech - eine Zeitansage.
Voraussetzung ist also ein installiertes TextToSpeech mit deutschem Sprachpaket.
Die Zeit wird standardmäßig angegeben in der Form: "12 Uhr und 15 Minuten"
In der Slang-Variante heißt dieselbe Zeit dann: "Viertel 1"
Ich habe in der Slang-Variante die in unserer Region üblichen Zeitregeln verwendet:
1 - 14 min = Minuten nach Stunde
15 = Viertel der Folgestunde
16 - 29 = Minuten bis Halb der Folgestunde (z.B. "10 Minuten vor Halb 1")
30 = Halb der Folgestunde
31 - 44 = Minuten nach Halb der Folgestunde (z.B. "5 Minuten nach Halb 3")
45 = DreiViertel der Folgestunde
46 - 59 = Minuten bis zur Folgestunde
Das könnt ihr ja bei Bedarf eurem Regionalen Gusto anpassen.
_SpeakingClock
_SpeakingClock()
;~ _SpeakingClock(1)
;===============================================================================
; Function Name...: _SpeakingClock
; Description.....: Ansage der aktuellen Zeit in Stunde:Minute (Standard) od. Slang
; Parameter(s)....: $fSlang 0-Aus (Standard), Umgangssprachliche Zeitansage, regional jedoch sehr verschieden
; Requirements....: TextToSpeech muß installiert sein mit einer deutschen Stimme
; Return Value(s).: Erfolg 1 (und Zeitansage)
; Fehler 0 und @error
; Author(s).......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _SpeakingClock($fSlang=0)
Local $hour = @HOUR, $min = @MIN, $time, $speak1 = '', $speak2 = ' Minuten'
Local $oTalk = ObjCreate('SAPI.SpVoice')
If @error Then Return SetError(@error,0,0)
If Not $fSlang Then
If StringLeft($hour,1) = '0' Then $hour = StringTrimLeft($hour,1)
Select
Case $min = '00'
$speak2 = ''
Case StringLeft($min,1) = '0'
$min = StringTrimLeft($min,1)
If $min = 1 Then
$speak1 = 'und Eine'
$speak2 = ' Minute'
Else
$speak1 = 'und ' & $min
EndIf
Case Else
$speak1 = 'und ' & $min
EndSelect
$time = $hour & ' Uhr ' & $speak1 & $speak2
Else
; Stundenwert verweist auf nächste Stunde, da fast alle Zeitansagen dieses verwenden
$hour += 1
If $hour > 12 Then $hour -= 12
Switch $min
Case 46 To 59
$min = 60 - $min
$speak1 = $min
$speak2 = ' vor ' & $hour
Case 45
$speak1 = -1
$speak2 = 'Drei Viertel ' & $hour
Case 31 To 44
$min = $min -30
$speak1 = $min
$speak2 = ' nach Halb ' & $hour
Case 30
$speak1 = -1
$speak2 = 'Halb ' & $hour
Case 16 To 29
$min = 30 - $min
$speak1 = $min
$speak2 = ' vor Halb ' & $hour
Case 15
$speak1 = -1
$speak2 = 'Viertel ' & $hour
Case 1 To 14
$hour -= 1 ; hier wieder Bezug zur tatsächlichen Stunde
If $hour = -1 then $hour = 12
$speak1 = $min
$speak2 = ' nach ' & $hour
Case 0
$hour -= 1 ; hier wieder Bezug zur tatsächlichen Stunde
If $hour = -1 Then $hour = 12
$speak1 = -1
$speak2 = $hour & ' Uhr'
EndSwitch
Switch $speak1
Case -1
$speak1 = ''
Case 1
$speak1 = 'Eine Minute'
Case Else
$speak1 &= ' Minuten'
EndSwitch
$time = $speak1 & $speak2
EndIf
$oTalk.Speak('Die Zeit: ' & $time)
Return 1
EndFunc ;==>_SpeakingClock