Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中将文本转换为mp3或.wav转换为mp3(用于验证码音频)_C#_Html_Asp.net_Webforms_Text To Speech - Fatal编程技术网

C# 在C语言中将文本转换为mp3或.wav转换为mp3(用于验证码音频)

C# 在C语言中将文本转换为mp3或.wav转换为mp3(用于验证码音频),c#,html,asp.net,webforms,text-to-speech,C#,Html,Asp.net,Webforms,Text To Speech,我希望从验证码生成的数字,并有一个控制/链接,允许用户播放,如果他们需要听到它。我目前使用System.Speech将其生成wav文件。当试图找到一种允许用户播放的方法时,这是使用一个常规的a href链接打开一个运行.aspx页面的新页面并播放文件,我们在不同浏览器中遇到了各种问题 IE8和10似乎重置了会话,清除了我从验证码中获取字符串的方式,Chrome工作正常,Firefox在超时之前尝试无限加载页面 我的老板想避免使用谷歌验证码,所以我继续搜索 然后我们遇到了音频html标记。但是,由

我希望从验证码生成的数字,并有一个控制/链接,允许用户播放,如果他们需要听到它。我目前使用System.Speech将其生成wav文件。当试图找到一种允许用户播放的方法时,这是使用一个常规的a href链接打开一个运行.aspx页面的新页面并播放文件,我们在不同浏览器中遇到了各种问题

IE8和10似乎重置了会话,清除了我从验证码中获取字符串的方式,Chrome工作正常,Firefox在超时之前尝试无限加载页面

我的老板想避免使用谷歌验证码,所以我继续搜索

然后我们遇到了音频html标记。但是,由于某些原因,IE无法在音频标签中播放.wav文件,这是它的缺点

因此,我所寻求的是一种方法:

将此.wav文件转换为MP3,可在所有浏览器上播放。 一种强制IE在标签中播放.wav文件的方法。 任何关于让所有浏览器对我的.wav文件一视同仁并在触发后播放的建议。 谢谢

这是我创建.wav文件的代码

protected override void OnPreRender(EventArgs e)
{
    Response.ContentType = "audio/wav";
    string captchacode = Session["HologramID"].ToString();
    string[] num = captchacode.Select(c => c.ToString()).ToArray();
    captchacode = string.Join(" ", num);
    MemoryStream mstream = GetAudio(captchacode);
    mstream.Position = 0;
    mstream.CopyTo(Response.OutputStream);
    Response.End(); 
}

public static MemoryStream GetAudio(string input)
{
    MemoryStream mem = new MemoryStream();

    var t = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
    {
        SpeechSynthesizer synth = new SpeechSynthesizer();

        synth.Rate = -5;
        synth.SetOutputToWaveStream(mem);
        synth.Speak(input);

    }));

    t.Start();
    t.Join();

    return mem;
}

您可以使用html5音频播放器播放mp3,使用httphandler ashx播放mp3。然而,旧的浏览器不支持html5播放器。相反,您可以使用flash player解决方案


Craeta ashx处理程序,用于获取验证码文本和流式mp3数据。

这不是一个解决方案,但仔细研究,它可能会让您了解为什么滚动自己的验证码是一个坏主意。