如何使用SpeechSynthesizer C#将音频流写入响应

时间:2014-03-05 01:54:51

标签: c# audio text-to-speech

我在C#asp.net应用程序中使用SpeechSynthesizer类尝试将一些文本转换为语音,然后将该音频内存流写入响应,以便最终用户将其作为.wav下载。 / p>

我可以将内存流保存到文件流中并且wav播放正常(在单独的函数中进行测试)但是当尝试将内存流发送到响应时(下面的代码),看起来IE表示正在下载.wav文件然而,它几乎就像悬挂在物体上的东西,并且不会让它完成下载。结果.wav无法打开播放声音。

有关如何正确执行此操作的任何想法?以下是我的代码。

        SpeechSynthesizer synth = new SpeechSynthesizer();
        MemoryStream streamAudio = new MemoryStream();

        // Configure the synthesizer to output to an audio stream.
        synth.SetOutputToWaveStream(streamAudio);

        // Speak a phrase.
        synth.Speak("This is sample text-to-speech output.");

        // Set audio stream to beginning
        streamAudio.Position = 0;

        // Send the memory steam bytes out to the response/
        Response.Clear();
        Response.ContentType = "audio/wav";
        Response.AppendHeader("Content-Disposition", "attachment; filename=mergedoutput.wav");
        streamAudio.CopyTo(Response.OutputStream);
        Response.Flush();
        Response.End();

1 个答案:

答案 0 :(得分:0)

找到解决方案...... speak方法需要在自己的线程中运行,然后返回可以响应的字节数组。

在这篇文章中找到解决方案

C# SpeechSynthesizer makes service unresponsive