HTML5 之音频合成(Speech Synthesis)

H5 让我们的 Web 交互更加生动有趣,但浏览器的多样性以及挥之不去的兼容问题,却阻碍了技术发展。这并不是我们拒绝的理由,恰恰相反,它应该成为动力。

一、语音场景

文章标题为了严谨,所以叫音频合成。如果用大白话来解释,那就是「文字转语音」。语音的场景就太多了:

  • 点读机:哪里不会点哪里
  • 有声小说:看着太累,听起来不错
  • Web 页面警示用户的操作
  • 闹钟,提醒,小秘书
  • 残疾人支持

这些都是随处可见的例子,但真正燃起我激情的是这个场景,简直酷炫到爆。原来动画和语音结合起来才是最佳的用户体验。

二、技术核心

看完上面的动画,按捺不住内心的好奇,随手就翻起了源码。Oh~原来如此,把你揪出来:

1
2
let sayhello = new window.SpeechSynthesisUtterance('你好,欢迎来到 Jartto 的博客!');
window.speechSynthesis.speak(sayhello);

事情的真相就是简单如此,短短两行,就实现了语音播报。

三、兼容性

如此有趣的 API,突然想到了一万个应用场景。别忙,先来看看 SpeechSynthesis 的兼容性吧:
SpeechSynthesis

看起来各大浏览器支持的还不错,那就试试呗!

四、API 文档

SpeechSynthesis 接口是语音服务的控制接口,属于网页语音 API,它可以用于获取设备上关于可用的合成声音的信息,开始、暂停语音,或除此之外的其他命令。

既然浏览器已经普遍支持了,那么我们不妨打印出来看看。

console

下面我们来适当的解释一下:

  • SpeechSynthesis.paused: 当 SpeechSynthesis 处于暂停状态时, Boolean 值返回 true
  • SpeechSynthesis.pending: 当语音播放队列到目前为止保持没有说完的语音时, Boolean 值返回 true
  • SpeechSynthesis.speaking: 当语音谈话正在进行的时候,即使 SpeechSynthesis 处于暂停状态, Boolean 返回 true
  • SpeechSynthesis.onvoiceschanged: 当由 SpeechSynthesis.getVoices() 方法返回的SpeechSynthesisVoice 列表改变时触发。

此外,还有几个非常实用的方法:

  • SpeechSynthesis.cancel(): 移除所有语音谈话队列中的谈话。
  • SpeechSynthesis.getVoices(): 返回当前设备所有可用声音的 SpeechSynthesisVoice 列表。
  • SpeechSynthesis.pause(): 把 SpeechSynthesis 对象置为暂停状态。
  • SpeechSynthesis.resume(): 把 SpeechSynthesis 对象置为一个非暂停状态:如果已经暂停了则继续。
  • SpeechSynthesis.speak(): 添加一个 utterance 到语音谈话队列;它将会在其他语音谈话播放完之后播放。

API 很简单,这里就不赘述了,来个例子尝尝鲜。

五、代码演示

MDN Web Docs上面有个很形象的例子,我们拿过来学习学习:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var synth = window.speechSynthesis;
var voices = synth.getVoices();

if (synth.speaking) {
console.error('Speaking');
return;
}

var sayThis = new SpeechSynthesisUtterance('你好,欢迎来到 Jartto 的博客!');
sayThis.onend =
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C#中使用Speech.Synthesis播放音频,你可以按照以下步骤进行操作: 1. 首先,确保你已经添加了命名空间`System.Speech.Synthesis`。 2. 创建一个SpeechSynthesizer对象,并设置所需的输出。 3. 使用`SetOutputToWaveFile`方法将输出设置为音频文件,并指定保存路径。例如:`sy.SetOutputToWaveFile("D:\\record.wav");` 4. 使用`Speak`方法将文本转换为语音并输出。例如:`sy.Speak("大家好");` 5. 如果你之后需要将输出设置回默认的音频设备,可以使用`SetOutputToDefaultAudioDevice`方法。例如:`sy.SetOutputToDefaultAudioDevice();` 以下是一个示例代码,展示了如何在C#中使用Speech.Synthesis播放音频: ```csharp using System.Speech.Synthesis; public static void PlayAudio() { SpeechSynthesizer synth = new SpeechSynthesizer(); synth.SetOutputToWaveFile("D:\\record.wav"); synth.Speak("大家好"); synth.SetOutputToDefaultAudioDevice(); } ``` 你可以根据自己的需求修改保存路径和要转换的文本。希望这可以帮助到你! [2<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [System.Speech.Synthesis 保存合成语音](https://blog.csdn.net/qq_36051316/article/details/84961786)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C#朗读语音无法引用System.Speech解决方法](https://blog.csdn.net/huanghai231/article/details/117304191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [RPiSpeechSynthesis:Raspberry Pi上的Windows 10 IoT核心语音合成](https://download.csdn.net/download/weixin_42139042/18760047)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值