# \[DictTango\] 玩转DictTango之通用TTS发音 (语音合成）

**URL:** <https://forum.freemdict.com/t/topic/10285>\
**Category:** DictTango\
**Tags:** dicttango, 玩转dicttango\
**Created:** [2022 年1 月 1 日 13:54 UTC](https://forum.freemdict.com/t/topic/10285 "2022-01-01T13:54:15Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![glacierlee](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/glacierlee/32/74595_2.png) [@glacierlee](https://forum.freemdict.com/u/glacierlee)\
**Post date:** [2022 年1 月 1 日 13:54 UTC](https://forum.freemdict.com/t/topic/10285/1 "2022-01-01T13:54:15Z")

</div>

# 概述

最新版的[DictTango](https://forum.freemdict.com/t/topic/2354) 提供了几个内置javascript函数，可以让用户在不重新打包mdx的情况加上例句的TTS发音功能, 显示效果为在例句的后面加上发音的喇叭，点击喇叭后进行 TTS发音，并且可以指定发音的语言。

这几个内置函数分别是\_\_addTTS\_ByName, \_\_addTTS\_ByTag, \_\_addTTS\_ByCssClass, 和 \_\_addTTS\_BySelector,

# 使用方法

1）查看MDX的html源内容，找出要进行发音的html元素  
_小技巧: 去设置-\>词典设置里打开调试模式，然后用词典查一个词，相关的html会在sdcard里DictTango/Logs目录里生成，直接打开html就可以看到里面的内容了_  
2）在词典管理里，编辑相关的词典，然后添加相关函数及其参数到词典的内联脚本就可以了

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/1/b/1b5af813cebdad16e3d1f6ac14571e898b016d25.png)

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/a/f/afe6844c9d5140203e3fbe42af0e79ff493e9fd2.png)

# 根据网页元素的名字量添加TTS发音

**函数名** ：\_\_addTTS\_ByCssClass(elementName, locale)

**参数-\>elementName** ：网页元素的名字  
**参数-\>locale** ：指定发音的语言代码，可参考后面的语言列表

**适用情况**

```auto
 <span name="pg_en">I am a boy</span>
 <span name="pg_cn">我是一个男生</span>

 <span name="pg_en">I am a girl</span>
 <span name="pg_cn">我是一个女生</span>

```

**示例代码**

```auto
__addTTS_ByName('pg_en'， 'en_US');
__addTTS_ByName('pg_cn'， 'zh_CN');

```

# 根据网页元素的css样式class批量添加TTS发音

**函数名** ：\_\_addTTS\_ByCssClass(className, locale)

**参数-\>className** ：网页元素的css样式class  
**参数-\>locale** ：指定发音的语言代码，可参考后面的语言列表

**适用情况**

```auto
 <span class="pg_en">I am a boy</span>
 <span class="pg_cn">我是一个男生</span>

 <span class="pg_en">I am a girl</span>
 <span class="pg_cn">我是一个女生</span>

```

**示例代码**

```auto
__addTTS_ByCssClass('pg_en'， 'en_US');
__addTTS_ByCssClass('pg_cn'， 'zh_CN');

```

# 根据网页元素的标记批量添加TTS发音

**函数名** ：\_\_addTTS\_ByTag(tagName, locale)

**参数-\>tagName** ：网页元素标记，例如span, div及其它定义的标记  
**参数-\>locale** ：指定发音的语言代码，可参考后面的语言列表

**适用情况**

```auto
 <en>I am a boy</en>
 <cn>我是一个男生</cn>

 <en>I am a girl</en>
 <cn>我是一个女生</cn>

```

**示例代码**

```auto
__addTTS_ByTag('en'， 'en_US');
__addTTS_ByTag('cn'， 'zh_CN');

```

# 高级用法：根据指定的选择器组匹配的网页中的元素批量添加TTS发音

**函数名** ：\_\_addTTS\_BySelector(selector, locale)

**参数-\>selector** ： 一个DOMString包含一个或多个匹配的选择器，例如span[data-lang=‘en’]。更多选择器详情，请参考以下网址：

> **[Document.querySelectorAll - Web API | MDN](https://developer.mozilla.org/zh-CN/docs/Web/API/Document/querySelectorAll)**
>
> 返回与指定的选择器组匹配的文档中的元素列表 (使用深度优先的先序遍历文档的节点)。返回的对象是 NodeList 。

**参数-\>locale** ：指定发音的语言代码，可参考后面的语言列表

**适用情况**

```auto
 <span data-lang="en">I am a boy</span >
 <span data-lang="cn">我是一个男生</span>

 <span data-lang="en">I am a girl</span>
 <span data-lang="cn">我是一个女生</span>

```

**示例代码**

```auto
__addTTS_BySelector("span[data-lang='en']","en_US");
__addTTS_BySelector("span[data-lang='cn']","zh_CN");

```

# 可引用的语言列表
 以下是一些常用的语言代码，大家也可以参考后面的语言列表网址

| 语言代码 | 描述 |
| --- | --- |
| en\_GB | 英式英語 |
| en\_US | 美式英語 |
| zh\_CN | 中文 |
| yue\_HK | 中文(粵語) |
| fr | 法語 |
| de | 德語 |
| it | 意大利語 |
| spa | 西班牙語 |
| ja\_JP | 日語 |

[https://programmer.help/blogs/what-is-the-list-of-supported-languages-locales-on-android.html](https://programmer.help/blogs/what-is-the-list-of-supported-languages-locales-on-android.html)

---

<div class="post-metadata">

**Author:** ![mdictnofan](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/m/7ab992/32.png) [@mdictnofan](https://forum.freemdict.com/u/mdictnofan)\
**Post date:** [2022 年1 月 1 日 23:39 UTC](https://forum.freemdict.com/t/topic/10285/2 "2022-01-01T23:39:33Z")

</div>

感谢大神的指导！

我给几个常用的辞典添加的css，效果非常不错！

感恩，感谢！

Tango是我用过的最好的辞典软件了！

---

<div class="post-metadata">

**Author:** ![豆豆师兄](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/%E8%B1%86%E8%B1%86%E5%B8%88%E5%85%84/32/25903_2.png) [@豆豆师兄](https://forum.freemdict.com/u/%E8%B1%86%E8%B1%86%E5%B8%88%E5%85%84)\
**Post date:** [2022 年1 月 2 日 00:48 UTC](https://forum.freemdict.com/t/topic/10285/3 "2022-01-02T00:48:28Z")

</div>

哥！没看懂！………真的…

---

<div class="post-metadata">

**Author:** ![glacierlee](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/glacierlee/32/74595_2.png) [@glacierlee](https://forum.freemdict.com/u/glacierlee)\
**Post date:** [2022 年1 月 2 日 01:19 UTC](https://forum.freemdict.com/t/topic/10285/4 "2022-01-02T01:19:43Z")

</div>

这些函数需要配合[Dict Tango](https://forum.freemdict.com/t/topic/2354) 使用的，如果你没有使用此应用，可以跳过

---

<div class="post-metadata">

**Author:** ![DawnTanges](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/d/dec6dc/32.png) [@DawnTanges](https://forum.freemdict.com/u/DawnTanges)\
**Post date:** [2022 年4 月 4 日 08:56 UTC](https://forum.freemdict.com/t/topic/10285/5 "2022-04-04T08:56:36Z")

</div>

![capture-2022-04-04-16-39-02](https://forumcdn.freemdict.com/uploads/default/original/3X/d/3/d3364e3731e4a8d3094a3e38b0c77f779fbd3df0.jpeg)  
大佬，请问有没有在后续开发中加入文字长按选项开关的可能性，这些选项有些是不需要的，看起来有点累赘。

---

<div class="post-metadata">

**Author:** ![glacierlee](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/glacierlee/32/74595_2.png) [@glacierlee](https://forum.freemdict.com/u/glacierlee)\
**Post date:** [2022 年4 月 4 日 14:17 UTC](https://forum.freemdict.com/t/topic/10285/6 "2022-04-04T14:17:21Z")

</div>

不好意思，这个菜单项是不能通过开关来隐藏的

---

<div class="post-metadata">

**Author:** ![anonymous218](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/a/d07c76/32.png) [@anonymous218](https://forum.freemdict.com/u/anonymous218)\
**Post date:** [2024 年8 月 12 日 10:18 UTC](https://forum.freemdict.com/t/topic/10285/7 "2024-08-12T10:18:03Z")

</div>

可以不依赖手机系统TTS，使用Luvvoice来发音吗？

---

<div class="post-metadata">

**Author:** ![glacierlee](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/glacierlee/32/74595_2.png) [@glacierlee](https://forum.freemdict.com/u/glacierlee)\
**Post date:** [2024 年8 月 12 日 10:40 UTC](https://forum.freemdict.com/t/topic/10285/8 "2024-08-12T10:40:25Z")

</div>

最新版在“设置”-\>“词典设置”里开启Luvvoice就可以切换了，暂时只支持中英日韩及粤语。但普通查词的单词发音还是用系统内置的，只有用AI Prompt或者外部分享长文给DictTango TTS才会采用Luvvoice。  
目前来说，还存在一些问题：  
1）语言识别有时不太准确 （下版本解决）  
2）如果文字太多，有时候会出现卡死的现象
