码迷,mamicode.com
首页 > Web开发 > 详细

使用Speech实现js播放音频

时间:2018-09-12 15:11:48      阅读:708      评论:0      收藏:0      [点我收藏+]

标签:tpc   system   技术分享   链接   ons   output   size   dom   public   

环境:

windows10;

IIS 10;

.Net4.5.2;

首先在程序中添加System.Speech的引用

技术分享图片

在控制器中加入以下代码:

 1         public async Task GetSpeek(string context)
 2         {
 3             try
 4             {
 5                 using (SpeechSynthesizer hello = new SpeechSynthesizer())
 6                 {
 7                     var speek = hello.SpeakAsync(context);
 8                     while (!speek.IsCompleted)
 9                     {
10                         System.Threading.Thread.Sleep(100);
11                     }
12                     using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
13                     {
14                         hello.SetOutputToWaveStream(ms);
15 
16                         HttpContext.Response.ClearContent();
17                         HttpContext.Response.ContentType = "audio/mp3";
18                         HttpContext.Response.BinaryWrite(ms.ToArray());
19                         //Dispose
20                         await ms.FlushAsync();
21                         // ms.Dispose();
22                         ms.Close();
23                         
24                         //HttpContext.Response.Close();
25                         HttpContext.Request.Abort();
26                     }
27                 }
28             }
29             catch (Exception ex)
30             {
31 
32             }
33         }

 

注意:这里只能使用异步方法

为什么?异常会告诉你。

最后一句

HttpContext.Request.Abort();

  

可以使用:

HttpContext.Response.Close();

  

这两句,为什么,等会我再解释,先上前端代码:

    function speckText() {
        try {
            var n = new Audio();

            var url = "http://localhost:8211/Home/GetSpeek?context=" + Math.random();
            n.src = url;
            n.loop = false;
            n.play();
        } catch (e) {

        }
    }

 

这里使用html5的audio控件,我这边加了一个

n.loop=false

但是,在测试时候,发现若后台不断开链接,该audio会重复读3遍。而在javascript加这句也没用。所以后台必须给前端一个停止的信息,用来停止这次链接。

这里就有一个不好的地方。

上图!!!

技术分享图片

可以看出由于是后台发送停止的,所以前端这边都是显示链接失败,但是!语音的确是有的。

还有一个点就是,发布到IIS上时

技术分享图片

进程模型=>标识=>修改为LocalSystem。

没了~

若大家有什么更好的可以推荐给我。有什么优化建议也可以交流交流。

灰常感谢

 

使用Speech实现js播放音频

标签:tpc   system   技术分享   链接   ons   output   size   dom   public   

原文地址:https://www.cnblogs.com/FlyStupidBird/p/9634641.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!