2011-01-12 15 views
6

Ho il codice folowingC# SpeechSynthesizer rende il servizio non risponde

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

e il servizio non restituisce nulla. Qualche idea del perché accada questo?

+0

Vuoi dire che restituisce un array di byte 0 di lunghezza, o null? – MusiGenesis

+0

in realtà non restituisce nulla. Ogni volta che uso speechSnythesis non c'è ritorno dal servizio, anche se cambio ritorno a una stringa casuale ... –

+0

Non mi sorprenderebbe davvero scoprire che questa API richiede un'applicazione desktop. –

risposta

0

Avete eseguito il debug e controllato il valore di ms.ToArray()? Potresti avere più fortuna con ms.ToByteArray().

6

Mi sono imbattuto nello stesso identico problema con una pagina ashx.

Non capisco esattamente il motivo, ma sembra che sia necessario utilizzare un thread separato e attendere il completamento.

Il seguente codice ha funzionato per me:

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