2011-01-12 21 views
6

que tiene el código folowingC# SpeechSynthesizer hace que el servicio no responde

[WebMethod] 
public byte[] stringToWav(string text) 
{ 
    SpeechSynthesizer ss = new SpeechSynthesizer(); 
    MemoryStream ms = new MemoryStream(); 
    ss.SetOutputToWaveStream(ms); 
    ss.Speak(text); 
    return ms.ToArray(); 
} 

y el servicio no devuelve nada. ¿Alguna idea de por qué sucede esto?

+0

Cómo que devuelve una matriz de bytes de longitud 0 o un valor nulo? – MusiGenesis

+0

realmente no devuelve nada. Cada vez que uso speechSnythesis no hay devolución del servicio, incluso si cambio el retorno a una cadena aleatoria ... –

+0

Realmente no me sorprendería encontrar que esta API requiere una aplicación de escritorio. –

Respuesta

0

¿Ha depurado y comprobado el valor de ms.ToArray()? Puede tener mejor suerte con ms.ToByteArray().

6

Me encontré con el mismo problema exacto con una página de ashx.

No entiendo exactamente por qué, pero parece que necesita usar un hilo por separado y esperar a que se complete.

El siguiente código que funcionó para mí:

public byte[] TextToBytes(string textToSpeak) 
{ 
    byte[] byteArr = null; 

    var t = new System.Threading.Thread(() => 
    { 
     SpeechSynthesizer ss = new SpeechSynthesizer(); 
     using (MemoryStream memoryStream = new MemoryStream()) 
     { 
      ss.SetOutputToWaveStream(memoryStream); 
      ss.Speak(textToSpeak); 
      byteArr = memoryStream.ToArray(); 
     } 
    }); 
    t.Start(); 
    t.Join(); 
    return byteArr; 
} 
Cuestiones relacionadas