2011-01-12 23 views
6

Tôi có đoạn code folowingC# SpeechSynthesizer làm dịch vụ không đáp ứng

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

và dịch vụ trả về không có gì. Bất kỳ ý tưởng tại sao điều này xảy ra?

+0

Bạn có nghĩa là nó sẽ trả về một mảng byte 0-chiều dài, hoặc null? – MusiGenesis

+0

nó không thực sự trở lại bất cứ điều gì. Mỗi khi tôi sử dụng speechSnythesis không có trở về từ dịch vụ, ngay cả khi tôi thay đổi trở lại một chuỗi ngẫu nhiên ... –

+0

Nó thực sự sẽ không làm tôi ngạc nhiên khi thấy rằng API này yêu cầu một ứng dụng máy tính để bàn. –

Trả lời

0

Bạn đã sửa lỗi và đã kiểm tra giá trị của ms.ToArray()? Bạn có thể có may mắn hơn với ms.ToByteArray().

6

Tôi đã gặp sự cố chính xác tương tự với trang ashx.

Tôi không hiểu chính xác lý do tại sao, nhưng có vẻ như bạn cần phải sử dụng một chuỗi riêng biệt và đợi cho đến khi hoàn tất.

Các mã sau đây làm việc cho tôi:

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; 
} 
Các vấn đề liên quan