mam jakiś prosty kod generujący plik wave za pomocą TTS, a następnie odtwarzanie go:Długość w czasie plik wave
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();
}
}
Wszystko działa bez zarzutu, ale chcę wiedzieć, zanim zacznę grać na fali plik, jak długo to potrwa. Czy jest jakiś sposób na obliczenie tego, czy jest on gdzieś dostępny?
Jeśli jest on gdzieś dostępny, w jaki sposób jest obliczany? Zakładam, że jest to związane z ilością danych w strumieniu, ale w jaki sposób?
podobne pytanie zostało już udzielone tutaj http://stackoverflow.com/questions/82319/how-can-i-determine-the-length-of-a-wav-file-in-c –
Nie będzie sposobu, nic jest niemożliwe. Ten ma mnie uzależniony. Wezmę to, co wymyślę, jeśli coś wymyślę - na to wydarzenie odejdę w dal z moim ogonem między nogami. – Gabe
Zgodnie z zamieszczonym w tym artykule artykułem nie ma _realizowanego_ sposobu, jednak rozwiązanie Genti jest dobrym sposobem na osiągnięcie twoich wyników. Zobacz opis komentarzy Genti dla szczegółów obliczania długości. – Gabe