2011-01-12 3 views
6

ich habe den Folowing CodeC# macht Speechsynthesizer Dienst nicht mehr reagiert

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

und der Service gibt nichts zurück. Irgendeine Idee, warum das passiert?

+0

Haben Sie meinen es gibt einen 0-Längen-Byte-Array oder null? – MusiGenesis

+0

es gibt wirklich nichts zurück. Jedes Mal wenn ich redeSnythesis benutze, gibt es keine Rückkehr vom Service, selbst wenn ich Rückkehr zu einer zufälligen Zeichenkette ändere ... –

+0

Es würde mich wirklich nicht überraschen zu finden, dass diese API eine Desktop-Anwendung erfordert. –

Antwort

0

Haben Sie Fehler behoben und den Wert von ms.ToArray() überprüft? Vielleicht haben Sie mehr Glück mit ms.ToByteArray().

6

Ich stieß auf das gleiche genaue Problem mit einer Aschx-Seite.

Ich verstehe nicht genau, warum, aber es scheint, dass Sie einen separaten Thread verwenden müssen und warten, bis es abgeschlossen ist.

Der folgende Code für mich gearbeitet:

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; 
}