使用Speech实现js播放音频

经再次测试发现第一次调用时候语音播放多遍,请待我继续完善。

环境:

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                         hello.Dispose();
25                         HttpContext.Response.Close();
26                     }
27                 }
28             }
29             catch (Exception ex)
30             {
31 
32             }
33         }

 

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

为什么?异常会告诉你。

最后一句

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。

没了~

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

最新处理方案

 

 1       var messageArray = new Array();//用于存储数据信息
 2 
 3       startSpeech();
 4          function startSpeech() {
 5          //定时器读取数据内容,并移除已读数据,由于不熟悉js所以直接用获取    
 6          //第一个数据信息,然后再移除第一个数据信息,作为一个队列来处理
 7             window.setInterval(function () {
 8                 if (messageArray.length != 0) {
 9                     var item = messageArray[0];
10                     getAudio(item);
11                     console.log(item);
12                     messageArray.splice(0, 1);
13                 }
14             }, 5000);
15          }
16 
17          function getAudio(item) {
18          //使用异步链接地址
19                 $.ajax({
20                     url: "http://localhost:64441/StatsShow/GetSpeek?context=" + item,
21                     type: "get",
22                 })
}

神异步...

灰常感谢

 

转载于:https://www.cnblogs.com/FlyStupidBird/p/9634641.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用DeepSpeechJavaScript中进行语音识别的步骤如下: 1. 下载DeepSpeechJavaScript库。 2. 下载DeepSpeech的模型文件,并将其放置在合适的位置。 3. 创建一个语音识别器对象,可以使用以下代码: ```javascript const modelPath = 'path/to/model'; const model = new DeepSpeech.Model(modelPath); const desiredSampleRate = model.sampleRate(); const scorerPath = 'path/to/scorer'; if (scorerPath) { const scorer = new DeepSpeech.Scorer(scorerPath); model.enableExternalScorer(scorer); } const stream = model.createStream(); ``` 4. 获取音频流,并将其传递给语音识别器对象: ```javascript const audioContext = new AudioContext(); const mediaStream = await navigator.mediaDevices.getUserMedia({audio: true}); const source = audioContext.createMediaStreamSource(mediaStream); const processor = audioContext.createScriptProcessor(2048, 1, 1); source.connect(processor); processor.connect(audioContext.destination); processor.onaudioprocess = async (event) => { const inputBuffer = event.inputBuffer; const inputData = inputBuffer.getChannelData(0); const result = stream.feedAudioContent(inputData, inputBuffer.length); if (result) { const transcript = result.transcript; console.log(transcript); } }; ``` 在这个示例中,我们使用Web Audio API来获取音频流,并将其传递给语音识别器对象进行处理。一旦处理完成,语音识别器对象将返回一个包含识别结果的对象,可以将其打印到控制台或以其他方式使用。 需要注意的是,此示例仅提供了一个简单的框架,需要根据具体情况进行修改和优化,以达到更好的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值