2011-01-12 2 views
6

J'ai le code folowingC# SpeechSynthesizer rend le service ne répond

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

et le retour de service rien. Une idée de pourquoi cela arrive?

+0

Voulez-vous dire qu'il retourne un tableau d'octets 0 longueur, ou null? – MusiGenesis

+0

il ne retourne vraiment rien. Chaque fois que j'utilise speechSnythesis il n'y a pas de retour de service, même si je change de retour à une chaîne aléatoire ... –

+0

Cela ne m'étonnerait pas vraiment de constater que cette API nécessite une application de bureau. –

Répondre

0

Avez-vous débogué et vérifié la valeur de ms.ToArray()? Vous pourriez avoir plus de chance avec ms.ToByteArray().

6

J'ai rencontré le même problème avec une page ashx.

Je ne comprends pas exactement pourquoi, mais il semble que vous deviez utiliser un thread séparé et attendre qu'il se termine.

Le code suivant a fonctionné pour moi:

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