2013-10-16 84 views
0

我正在使用此代碼將&保存文本轉換爲語音使用 * using System.Speech.Synthesis; * 但它拋出 - 異步操作只能在PreRenderComplete事件之前的頁面上啓動。 這是我的代碼:轉換並保存文本爲語音文件

using (Stream ret = new MemoryStream()) 
     using (SpeechSynthesizer synth = new SpeechSynthesizer()) 
     { 
      var mi = synth.GetType().GetMethod("SetOutputStream", BindingFlags.Instance | BindingFlags.NonPublic); 
      var fmt = new SpeechAudioFormatInfo(8000, AudioBitsPerSample.Eight, AudioChannel.Mono); 
      mi.Invoke(synth, new object[] { ret, fmt, true, true }); 
      synth.Speak("Greetings from stack overflow"); 
      // Testing code: 
      using (var fs = new FileStream(@"c:\temp\test.wav", FileMode.Create, FileAccess.Write, FileShare.None)) 
      { 
       ret.Position = 0; 
       byte[] buffer = new byte[4096]; 
       for (; ;) 
       { 
        int len = ret.Read(buffer, 0, buffer.Length); 
        if (len == 0) break; 
        fs.Write(buffer, 0, len); 
       } 
      } 
     } 
+1

在asp.net頁面生命週期中,你在做什麼? –

+0

我用它來轉換文本文件,....... –

+0

這不是我問的;我明白你在做什麼,但在頁面生命週期的哪裏發生這種情況,頁面加載,初始化,預渲染,渲染? –

回答

0

將此加入頁面加載。

protected void Page_Load(object sender, EventArgs e) 
{ 
    System.ComponentModel.AsyncOperationManager.SynchronizationContext = 
     new System.Threading.SynchronizationContext(); 
} 
+2

請解釋如何和爲什麼幫助。 –