初识命令行语音工具 espeak-ng,用它给你的终端加点“声音”!
espeak-ng 是一个轻量级、开源的命令行文本转语音(TTS, Text-to-Speech)工具,支持多语言和 IPA(国际音标)发音,尤其适合快速测试音素发音、语言学习辅助以及嵌入式语音开发场景。
相比大多数 TTS 工具,espeak-ng 有几个独特的优势:
完全本地运行,隐私友好;
可定制音素发音;
支持音标和简易标注;
语速、音调可调;
跨平台:Linux、macOS、Windows 全部支持。
本文将介绍如何在 macOS 上安装 espeak-ng,并通过一个小例子来试试它的发音效果。
在 macOS 上安装 espeak-ng 十分简单,只需使用 Homebrew 包管理器:
brew install espeak-ng
等待几秒,安装完成后你就可以使用 espeak-ng 命令了。
测试一下是否安装成功:
espeak-ng "Hello, world!"
你应该能听到电脑发出英语的“Hello, world!”语音。如果没有声音,请检查:
系统音量是否开启;
是否使用了耳机;
是否有音频设备被禁用。
你可能在某些语境中看到“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 Languages
5 af --/M Afrikaans gmw/af
5 am --/M Amharic sem/am
5 an --/M Aragonese roa/an
5 ar --/M Arabic sem/ar
5 as --/M Assamese inc/as
5 az --/M Azerbaijani trk/az
5 ba --/M Bashkir trk/ba
5 be --/M Belarusian zle/be
5 bg --/M Bulgarian zls/bg
5 bn --/M Bengali inc/bn
5 bpy --/M Bishnupriya_Manipuri inc/bpy
5 bs --/M Bosnian zls/bs
5 ca --/M Catalan roa/ca
5 ca-ba --/M Catalan_(Balearic) roa/ca-ba
5 ca-nw --/M Catalan_(North-western) roa/ca-nw
5 ca-va --/M Catalan_(Valencian) roa/ca-va
5 chr-US-Qaaa-x-west --/M Cherokee_ iro/chr
5 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/cs
5 cv --/M Chuvash trk/cv
5 cy --/M Welsh cel/cy
5 da --/M Danish gmq/da
5 de --/M German gmw/de
5 el --/M Greek grk/el
5 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-Shaw
2 en-us --/M English_(America) gmw/en-US (en 3)
5 en-us-nyc --/M English_(America,_New_York_City) gmw/en-US-nyc
5 eo --/M Esperanto art/eo
5 es --/M Spanish_(Spain) roa/es
5 es-419 --/M Spanish_(Latin_America) roa/es-419 (es-mx 6)
5 et --/M Estonian urj/et
5 eu --/M Basque eu
5 fa --/M Persian ira/fa
5 fa-latn --/M Persian_(Pinglish) ira/fa-Latn
5 fi --/M Finnish urj/fi
5 fo --/M Faroese gmq/fo
5 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/ga
5 gd --/M Gaelic_(Scottish) cel/gd
5 gn --/M Guarani sai/gn
5 grc --/M Greek_(Ancient) grk/grc
5 gu --/M Gujarati inc/gu
5 hak --/M Hakka_Chinese sit/hak
5 haw --/M Hawaiian map/haw
5 he --/M Hebrew sem/he
5 hi --/M Hindi inc/hi
5 hr --/M Croatian zls/hr (hbs 5)
5 ht --/M Haitian_Creole roa/ht
5 hu --/M Hungarian urj/hu
5 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/ia
5 id --/M Indonesian poz/id
5 io --/M Ido art/io
5 is --/M Icelandic gmq/is
5 it --/M Italian roa/it
5 ja --/M Japanese jpx/ja
5 jbo --/M Lojban art/jbo
5 ka --/M Georgian ccs/ka
5 kaa --/M Karakalpak trk/kaa
5 kk --/M Kazakh trk/kk
5 kl --/M Greenlandic esx/kl
5 kn --/M Kannada dra/kn
5 ko --/M Korean ko
5 kok --/M Konkani inc/kok
5 ku --/M Kurdish ira/ku
5 ky --/M Kyrgyz trk/ky
5 la --/M Latin itc/la
5 lb --/M Luxembourgish gmw/lb
5 lfn --/M Lingua_Franca_Nova art/lfn
5 lt --/M Lithuanian bat/lt
5 ltg --/M Latgalian bat/ltg
5 lv --/M Latvian bat/lv
5 mi --/M Māori poz/mi
5 mk --/M Macedonian zls/mk
5 ml --/M Malayalam dra/ml
5 mr --/M Marathi inc/mr
5 ms --/M Malay poz/ms
5 mt --/M Maltese sem/mt
5 mto --/M Totontepec_Mixe miz/mto
5 my --/M Myanmar_(Burmese) sit/my
5 nb --/M Norwegian_Bokmål gmq/nb (no 5)
5 nci --/M Nahuatl_(Classical) azc/nci
5 ne --/M Nepali inc/ne
5 nl --/M Dutch gmw/nl
5 nog --/M Nogai trk/nog
5 om --/M Oromo cus/om
5 or --/M Oriya inc/or
5 pa --/M Punjabi inc/pa
5 pap --/M Papiamento roa/pap
5 piqd --/M Klingon art/piqd
5 pl --/M Polish zlw/pl
5 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/py
5 qdb --/M Lang_Belta art/qdb
5 qu --/M Quechua qu
5 quc --/M K'iche' myn/quc
5 qya --/M Quenya art/qya
5 ro --/M Romanian roa/ro
5 ru --/M Russian zle/ru
5 ru-cl --/M Russian_(Classic) zle/ru-cl
2 ru-lv --/M Russian_(Latvia) zle/ru-LV
5 sd --/M Sindhi inc/sd
5 shn --/M Shan_(Tai_Yai) tai/shn
5 si --/M Sinhala inc/si
5 sjn --/M Sindarin art/sjn
5 sk --/M Slovak zlw/sk
5 sl --/M Slovenian zls/sl
5 smj --/M Lule_Saami urj/smj
5 sq --/M Albanian ine/sq
5 sr --/M Serbian zls/sr
5 sv --/M Swedish gmq/sv
5 sw --/M Swahili bnt/sw
5 ta --/M Tamil dra/ta
5 te --/M Telugu dra/te
5 th --/M Thai tai/th
5 ti --/M Tigrinya sem/ti
5 tk --/M Turkmen trk/tk
5 tn --/M Setswana bnt/tn
5 tr --/M Turkish trk/tr
5 tt --/M Tatar trk/tt
5 ug --/M Uyghur trk/ug
5 uk --/M Ukrainian zle/uk
5 ur --/M Urdu inc/ur
5 uz --/M Uzbek trk/uz
5 vi --/M Vietnamese_(Northern) aav/vi
5 vi-vn-x-central --/M Vietnamese_(Central) aav/vi-VN-x-central
5 vi-vn-x-south --/M Vietnamese_(Southern) aav/vi-VN-x-south
5 xex --/M xextan-test art/xex
5 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)