Clever-Excel-Forum

Normale Version: Pausenlänge zwischen 2 Sätzen steuern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebes Forum,

wie schon gepostet erzeugt der beiliegende Code  aus der Stringzeichenfolge str1 eine Audiodatei im wav-Format.
Doch wie steuere ich die Pausenlänge zwischen den beiden Sätzen?

Dies ist der erste Satz. >> Pause nach Satzende << Dies ist der zweite Satz.


Code:
Sub Erzeugen_einer_WaveDatei()
Dim str1 As String, oFileStream, oVoice
str1 = "Dies ist der erste Satz. Dies ist der zweite Satz."
Set oFileStream = CreateObject("SAPI.SpFileStream")
oFileStream.Format.Type = 39
oFileStream.Open "C:\Work\" & "Audio" & ".wav", 3
Set oVoice = CreateObject("SAPI.SpVoice")
'Individuelle Einstellung, je nach vorhandenen Sprachmodulen
Set oVoice.Voice = oVoice.getvoices.Item(1)
Set oVoice.AudioOutputStream = oFileStream
oVoice.Speak str1
oFileStream.Close
End Sub
Hi,

(22.03.2017, 16:30)Josefine Baker schrieb: [ -> ]Doch wie steuere ich die Pausenlänge zwischen den beiden Sätzen?

Dies ist der erste Satz. >> Pause nach Satzende << Dies ist der zweite Satz.

vielleicht, indem du die beiden Sätze als getrennte Strings übergibst und das Makro zwei Mal aufrufst mit einer Wartezeit dazwischen?
Hallöchen,

der Punkt ist eventuell, wie man eine Wartezeit programmiert. Ich habe hier mal meinen Test der Unterschiede von zwei Varianten, Sleep und Application.Wait. Da kann man sich das passende raus nehmen.

Code:
' Auslösung einer Wartezeit,
' Vergleich API und VBA Application
' Deklarierung der API-Funktion
Private Declare Sub Sleep _
       Lib "kernel32" (ByVal dwMS As Long)
'
' Deklarierung der API-Funktion GetTickCount
' zusätzlich im Beispiel zur Prüfung der Dauer !
Private Declare Function GetTickCount _
       Lib "kernel32" () As Long
'
Sub Beispiel2a()
' Argumente der API-Funktion Sleep
' Dauer in Millisekunden
'Variablendeklaration
'Long
Dim loStartTime As Long
 'Startzeit aus System holen
 loStartTime = GetTickCount
 'zwei Sekunden warten
 Sleep 1200
 'Laufzeitmeldung
 MsgBox "Laufzeit Beispiel2a: " & _
         GetTickCount - loStartTime & _
         " Millisekunden"
End Sub
'
Sub Beispiel2b()
' VBA-Funktion Application.Wait
'Variablendeklaration
'Long
Dim loStartTime As Long
 'Startzeit aus System holen
 loStartTime = GetTickCount
 'zwei Sekunden warten
 Application.Wait (Now() + TimeValue("00:00:02"))
 'Laufzeitmeldung
 MsgBox "Laufzeit Beispiel22b: " & _
        GetTickCount - loStartTime & _
        " Millisekunden"
End Sub
Hallo André,

vielen Dank für Dein Interesse an meiner Frage. Die Sleep und die Application-Methode sind mir beide bekannt. Aber ich kann mir beim besten Willen nicht vorstellen, wie es damit funktionieren könnte.
Der Ausgabestream (Sprachausgabe) wird ja sofort in die Sprachaufnahme umgeleitet und dann als wave Datei ausgegeben. Von "außen" sehe ich da keine Möglichkeit, wie ich da etwas anhalten,
stoppen oder verzögern könnte. Ich stelle mir vor, dass eine mögliche Lösung irgendwie mit den Funktionen und Methoden der im Code auftauchenden Objekte gelöst werden könnte.
Leider finde ich dazu im gesamten Netz nichts bzw. nichts was funktioniert (hat). Das Thema ist sehr schwierig.
Hallo Josefine,

das geht, wenn Du die zwei Sätze in zwei Audios tust.
@ André

Zitat:... das geht, wenn Du die zwei Sätze in zwei Audios tust.

Das ist ja gerade nicht möglich! Es geht letztendlich doch darum, eine beliebige Anzahl von Sätzen, die durch eine frei programmierbare
Pausenlänge voneinander getrennt sind, als Sprache  in eine Wav-Datei zu schreiben. Im Gegensatz zu Dateien im MP3-Format kann man Wav-Dateien
ja nicht so einfach aneinanderheften. Da bei den MP3 Dateien in den Headerdaten ja auch die Abspiellänge steht, ist dies bei Wav Dateien doch etwas
anders. Deshalb sollen hier alle Daten bzw. Sätze, samt einer beliebig wählbaren Pausenlänge als Audio in eine Wav-Datei geschrieben werden.

Wie gesagt, es ist schwer.
Hallöchen,

dann würde ich entsprechend lange "Pausenfüller" verwenden...
Hallo André,


Zitat:dann würde ich entsprechend lange "Pausenfüller" verwenden...


Du bist ja ein Genie! Hab ich gemacht. Jetzt funktioniert es perfekt.
Thumbs up und Danke.