ho qualche semplice codice che genera un file wave utilizzando TTS e poi giocare:Lunghezza in tempo di un file 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();
}
}
Tutto sta funzionando benissimo, ma voglio sapere prima di iniziare a suonare l'onda file per quanto tempo continuerà. C'è un modo per calcolarlo o è disponibile da qualche parte?
Se è disponibile da qualche parte, come viene calcolato? Suppongo che sia correlato alla quantità di dati nello stream, ma come?
la domanda simile aveva già una risposta qui http://stackoverflow.com/questions/82319/how-can-i-determine-the-length-of-a-wav-file-in-c –
Ci sarà un modo, niente è impossibile. Questo mi ha incatenato. Pubblicherò quello che mi viene in mente, se mi viene in mente qualcosa - in quell'evento andrò in lontananza con la mia coda tra le mie gambe. – Gabe
Come postato nell'articolo collegato non esiste un modo _reliable_ di farlo prima, tuttavia la soluzione di Genti è un buon modo per raggiungere i risultati. Vedi i commenti alla descrizione di Genti per i dettagli del calcolo della lunghezza. – Gabe