当前位置: 首页 > news >正文

使用 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)

相关文章:

  • 基于 Vue 和 Spring Boot 实现滑块验证码的机器验证
  • Qwen2.5-VL - FFN(前馈神经网络)Feedforward Neural Network
  • Java持久层技术对比:Hibernate、MyBatis与JPA的选择与应用
  • npm error Cannot read properties of null (reading ‘matches‘)
  • mamba架构和transformer区别
  • 使用Python和TensorFlow实现图像分类
  • Qemu arm操作系统开发环境
  • PDF文件如何转换格式?简单教程来了
  • 【知识扫盲】如何由inq,ouq和totaltime计算tokens/s
  • Java项目中常用的中间件及其高频问题避坑
  • Day14
  • 【WebSocket】SpringBoot项目中使用WebSocket
  • 读《创新者的窘境》二分 - 破坏性创新与延续性创新
  • 开源 vGPU 方案:HAMi,实现细粒度 GPU 切分
  • OpenAI对抗法庭命令:捍卫ChatGPT用户隐私之战
  • 开源投屏工具Escrcpy的使用教程
  • NLP学习路线图(二十八):BERT及其变体
  • GWO-LSSVM-Adaboost灰狼算法GWO优化最小二乘支持向量机LSSVM分类预测!
  • C++.OpenGL (9/64)复习(Review)
  • 【大厂机试题解法笔记】区间交集
  • 做好的网站启用/短视频培训学校
  • 常州做网站麦策电商/在线seo推广软件
  • 个人网站类型/推广app的单子都在哪里接的
  • 西安网站托管维护/百度搜索关键词技巧
  • 中国糕点网页设计网站/售卖链接
  • 浦东新区苏州网站建设/电商网站搭建