Ich habe einigen einfachen Code eine Wave-Datei mit TTS zu erzeugen und spielt es dann:Länge in der Zeit eine Wave-Datei
public void TestSpeech()
{
SpeechSynthesizer synth = new SpeechSynthesizer();
using (MemoryStream stream = new MemoryStream())
{
synth.SetOutputToWaveStream(stream);
synth.Speak("Hello world");
stream.Seek(0, SeekOrigin.Begin);
IWaveSource source = new WaveFileReader(stream);
EventWaitHandle waitHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
var soundOut = new WasapiOut();
soundOut.Initialize(source);
soundOut.Stopped += (s, e) => waitHandle.Set();
soundOut.Play();
waitHandle.WaitOne();
soundOut.Dispose();
source.Dispose();
}
}
Alles funktioniert gut, aber ich mag wissen, bevor ich die Welle zu spielen beginnen Datei, wie lange es dauern wird. Gibt es eine Möglichkeit, dies zu berechnen, oder ist es irgendwo verfügbar?
Wenn es irgendwo verfügbar ist, wie wird es berechnet? Ich nehme an, dass es sich auf die Menge der Daten im Stream bezieht, aber wie?
ähnliche Frage wurde bereits hier beantwortet http://stackoverflow.com/questions/82319/how-can-i-determine-the-length-of-a-wav-file-in-c –
Es wird einen Weg geben, nichts ist unmöglich. Dieser hat mich süchtig. Ich poste, was mir einfällt, wenn mir etwas einfällt - bei diesem Ereignis werde ich mit meinem Schwanz zwischen meinen Beinen in die Ferne gehen. – Gabe
Wie in dem verlinkten Artikel gepostet, gibt es keine _reliable_ Art und Weise, dies zu tun, jedoch ist die Lösung von Genti ein guter Weg, um Ihre Ergebnisse zu erzielen. Siehe Kommentare von Genti's Beschreibung für Details zur Längenberechnung. – Gabe