使用 espeak-ng 实现文本转语音
初识命令行语音工具 espeak-ng,用它给你的终端加点“声音”!
🧠 为什么选择 espeak-ng?
espeak-ng 是一个轻量级、开源的命令行文本转语音(TTS, Text-to-Speech)工具,支持多语言和 IPA(国际音标)发音,尤其适合快速测试音素发音、语言学习辅助以及嵌入式语音开发场景。
相比大多数 TTS 工具,espeak-ng 有几个独特的优势:
-
完全本地运行,隐私友好;
-
可定制音素发音;
-
支持音标和简易标注;
-
语速、音调可调;
-
跨平台:Linux、macOS、Windows 全部支持。
本文将介绍如何在 macOS 上安装 espeak-ng,并通过一个小例子来试试它的发音效果。
🛠 安装 espeak-ng(macOS)
在 macOS 上安装 espeak-ng 十分简单,只需使用 Homebrew 包管理器:
brew install espeak-ng
等待几秒,安装完成后你就可以使用 espeak-ng 命令了。
测试一下是否安装成功:
espeak-ng "Hello, world!"
你应该能听到电脑发出英语的“Hello, world!”语音。如果没有声音,请检查:
-
系统音量是否开启;
-
是否使用了耳机;
-
是否有音频设备被禁用。
📢 示例:让电脑说“madahtou”
你可能在某些语境中看到“madahtou”这样的词,它看起来像某种语言的音译拼写。那么我们让电脑尝试读一下这个词:
espeak-ng "madahtou"
你会听到类似 “ma-da-to” 的发音。这里有几个点值得思考:
-
espeak-ng 默认使用英语音素对拼写进行语音合成;
-
所以“madahtou”会按照英文发音规则处理;
-
若你希望它发成日语或其他语言的发音风格,需要指定语言或者用音素拼写。
🧪 拓展:使用音素标注精确控制发音
如果你对发音有更高的要求,可以使用 -x 参数查看音素,或者直接传入音素序列。例如:
espeak-ng -x "madahtou"
输出类似:
m@d@tU:
然后你可以直接用这些音素作为输入,更精确地控制:
espeak-ng -v en -x "m@d@tU:"
或者指定使用日语模型(注意:默认安装的 espeak-ng 有时不包含日语语音模型,需要自行编译或启用):
espeak-ng -v jp "まだとう"
注:标准的 espeak-ng 对于非拉丁语言(如日语、中文)的支持有限,通常只是以“拼音风格”朗读,无法媲美深度神经网络语音模型的自然度,但其调试和学习价值极高。
🔧 常用参数速查表
参数 | 功能 |
---|---|
-v | 指定语音语言,如 -v en、-v fr、-v jp |
-s | 语速(默认 175),例如 -s 120 更慢 |
-p | 音高(默认 50) |
-x | 输出音素而非朗读 |
-w file.wav | 输出为音频文件 |
示例:
espeak-ng -v en -s 120 -p 70 "madahtou"
🎯 结语
espeak-ng 是一个极具玩味的小工具。它不仅可以帮你测试拼音音素,还能作为开发语言学习工具或嵌入式语音功能的调试助手。尽管发音自然度不如现代的 AI TTS,但它胜在轻巧、可定制、跨平台,是你工具箱中值得收藏的一员。
下次试试让它朗读自己的名字,或者配合脚本给你的自动化程序“说话”吧!
🔗 参考链接
-
espeak-ng GitHub
-
Homebrew espeak-ng formula
-
IPA(国际音标)学习
附,语言列表
➜ ~ espeak-ng --voices
Pty Language Age/Gender VoiceName File Other Languages5 af --/M Afrikaans gmw/af5 am --/M Amharic sem/am5 an --/M Aragonese roa/an5 ar --/M Arabic sem/ar5 as --/M Assamese inc/as5 az --/M Azerbaijani trk/az5 ba --/M Bashkir trk/ba5 be --/M Belarusian zle/be5 bg --/M Bulgarian zls/bg5 bn --/M Bengali inc/bn5 bpy --/M Bishnupriya_Manipuri inc/bpy5 bs --/M Bosnian zls/bs5 ca --/M Catalan roa/ca5 ca-ba --/M Catalan_(Balearic) roa/ca-ba5 ca-nw --/M Catalan_(North-western) roa/ca-nw5 ca-va --/M Catalan_(Valencian) roa/ca-va5 chr-US-Qaaa-x-west --/M Cherokee_ iro/chr5 cmn --/M Chinese_(Mandarin,_latin_as_English) sit/cmn (zh-cmn 5)(zh 5)5 cmn-latn-pinyin --/M Chinese_(Mandarin,_latin_as_Pinyin) sit/cmn-Latn-pinyin (zh-cmn 5)(zh 5)5 cs --/M Czech zlw/cs5 cv --/M Chuvash trk/cv5 cy --/M Welsh cel/cy5 da --/M Danish gmq/da5 de --/M German gmw/de5 el --/M Greek grk/el5 en-029 --/M English_(Caribbean) gmw/en-029 (en 10)2 en-gb --/M English_(Great_Britain) gmw/en (en 2)5 en-gb-scotland --/M English_(Scotland) gmw/en-GB-scotland (en 4)5 en-gb-x-gbclan --/M English_(Lancaster) gmw/en-GB-x-gbclan (en-gb 3)(en 5)5 en-gb-x-gbcwmd --/M English_(West_Midlands) gmw/en-GB-x-gbcwmd (en-gb 9)(en 9)5 en-gb-x-rp --/M English_(Received_Pronunciation) gmw/en-GB-x-rp (en-gb 4)(en 5)5 en-shaw --/M English_(Shavian_alphabet) gmw/en-Shaw2 en-us --/M English_(America) gmw/en-US (en 3)5 en-us-nyc --/M English_(America,_New_York_City) gmw/en-US-nyc5 eo --/M Esperanto art/eo5 es --/M Spanish_(Spain) roa/es5 es-419 --/M Spanish_(Latin_America) roa/es-419 (es-mx 6)5 et --/M Estonian urj/et5 eu --/M Basque eu5 fa --/M Persian ira/fa5 fa-latn --/M Persian_(Pinglish) ira/fa-Latn5 fi --/M Finnish urj/fi5 fo --/M Faroese gmq/fo5 fr-be --/M French_(Belgium) roa/fr-BE (fr 8)5 fr-ch --/M French_(Switzerland) roa/fr-CH (fr 8)5 fr-fr --/M French_(France) roa/fr (fr 5)5 ga --/M Gaelic_(Irish) cel/ga5 gd --/M Gaelic_(Scottish) cel/gd5 gn --/M Guarani sai/gn5 grc --/M Greek_(Ancient) grk/grc5 gu --/M Gujarati inc/gu5 hak --/M Hakka_Chinese sit/hak5 haw --/M Hawaiian map/haw5 he --/M Hebrew sem/he5 hi --/M Hindi inc/hi5 hr --/M Croatian zls/hr (hbs 5)5 ht --/M Haitian_Creole roa/ht5 hu --/M Hungarian urj/hu5 hy --/M Armenian_(East_Armenia) ine/hy (hy-arevela 5)5 hyw --/M Armenian_(West_Armenia) ine/hyw (hy-arevmda 5)(hy 8)5 ia --/M Interlingua art/ia5 id --/M Indonesian poz/id5 io --/M Ido art/io5 is --/M Icelandic gmq/is5 it --/M Italian roa/it5 ja --/M Japanese jpx/ja5 jbo --/M Lojban art/jbo5 ka --/M Georgian ccs/ka5 kaa --/M Karakalpak trk/kaa5 kk --/M Kazakh trk/kk5 kl --/M Greenlandic esx/kl5 kn --/M Kannada dra/kn5 ko --/M Korean ko5 kok --/M Konkani inc/kok5 ku --/M Kurdish ira/ku5 ky --/M Kyrgyz trk/ky5 la --/M Latin itc/la5 lb --/M Luxembourgish gmw/lb5 lfn --/M Lingua_Franca_Nova art/lfn5 lt --/M Lithuanian bat/lt5 ltg --/M Latgalian bat/ltg5 lv --/M Latvian bat/lv5 mi --/M Māori poz/mi5 mk --/M Macedonian zls/mk5 ml --/M Malayalam dra/ml5 mr --/M Marathi inc/mr5 ms --/M Malay poz/ms5 mt --/M Maltese sem/mt5 mto --/M Totontepec_Mixe miz/mto5 my --/M Myanmar_(Burmese) sit/my5 nb --/M Norwegian_Bokmål gmq/nb (no 5)5 nci --/M Nahuatl_(Classical) azc/nci5 ne --/M Nepali inc/ne5 nl --/M Dutch gmw/nl5 nog --/M Nogai trk/nog5 om --/M Oromo cus/om5 or --/M Oriya inc/or5 pa --/M Punjabi inc/pa5 pap --/M Papiamento roa/pap5 piqd --/M Klingon art/piqd5 pl --/M Polish zlw/pl5 pt --/M Portuguese_(Portugal) roa/pt (pt-pt 5)5 pt-br --/M Portuguese_(Brazil) roa/pt-BR (pt 6)5 py --/M Pyash art/py5 qdb --/M Lang_Belta art/qdb5 qu --/M Quechua qu5 quc --/M K'iche' myn/quc5 qya --/M Quenya art/qya5 ro --/M Romanian roa/ro5 ru --/M Russian zle/ru5 ru-cl --/M Russian_(Classic) zle/ru-cl2 ru-lv --/M Russian_(Latvia) zle/ru-LV5 sd --/M Sindhi inc/sd5 shn --/M Shan_(Tai_Yai) tai/shn5 si --/M Sinhala inc/si5 sjn --/M Sindarin art/sjn5 sk --/M Slovak zlw/sk5 sl --/M Slovenian zls/sl5 smj --/M Lule_Saami urj/smj5 sq --/M Albanian ine/sq5 sr --/M Serbian zls/sr5 sv --/M Swedish gmq/sv5 sw --/M Swahili bnt/sw5 ta --/M Tamil dra/ta5 te --/M Telugu dra/te5 th --/M Thai tai/th5 ti --/M Tigrinya sem/ti5 tk --/M Turkmen trk/tk5 tn --/M Setswana bnt/tn5 tr --/M Turkish trk/tr5 tt --/M Tatar trk/tt5 ug --/M Uyghur trk/ug5 uk --/M Ukrainian zle/uk5 ur --/M Urdu inc/ur5 uz --/M Uzbek trk/uz5 vi --/M Vietnamese_(Northern) aav/vi5 vi-vn-x-central --/M Vietnamese_(Central) aav/vi-VN-x-central5 vi-vn-x-south --/M Vietnamese_(Southern) aav/vi-VN-x-south5 xex --/M xextan-test art/xex5 yue --/M Chinese_(Cantonese) sit/yue (zh-yue 5)(zh 8)5 yue --/M Chinese_(Cantonese,_latin_as_Jyutping) sit/yue-Latn-jyutping (zh-yue 5)(zh 8)