今天小编给大家介绍一个有趣的事情,让代码开口说话,简单点说就是python利用pyttsx3实现文字转语音。感觉还是蛮有趣的,并且支持中文哦。

  • 首先我们先安装pyttsx3

    pip install pyttsx3
  • 如果是windows操作系统,并且未安装pywin32, 需要安装pywin32

    pip install pywin32
  • 我们首先让代码说句Hello World,然后再说句中文

    import pyttsx3 
     
    # 模块初始化
    engine = pyttsx3.init() 
    print('准备开始语音播报...')
    engine.say('Hello World')
    engine.say('孙肖宁')
    # 等待语音播报完毕, 不写这个是不可以的哦
    engine.runAndWait()

    是不是很简单呢

  • 我们还可以进行语速控制、音量控制、更换发音人声音

    import pyttsx3
    
    # 模块初始化
    engine = pyttsx3.init()
    print('准备开始语音播报...')
    
    # 语速控制,默认值为200
    rate = engine.getProperty('rate')
    engine.setProperty('rate', rate - 50)
    # 音量控制,范围为0.0-1.0
    volume = engine.getProperty('volume')
    engine.setProperty('volume', 0.6)
    # 添加朗读文本
    engine.say('窗前明月光,疑是地上霜。')
    
    # 等待语音播报完毕
    engine.runAndWait()
  • 我们再来说下更换发音人的声音,目前中文仅支持3种

    • 普通话: com.apple.speech.synthesis.voice.ting-ting.premium
    • 粤语 :com.apple.speech.synthesis.voice.ting-ting.premium
    • 台湾女生普通话: com.apple.speech.synthesis.voice.mei-jia
    import pyttsx3
    
    # 模块初始化
    engine = pyttsx3.init()
    volume = engine.getProperty('volume')
    
    # 普通话发音
    voices = engine.setProperty(
        'voice', "com.apple.speech.synthesis.voice.ting-ting.premium")
    
    # 标准的粤语发音
    # voices = engine.setProperty(
    #       'voice', "com.apple.speech.synthesis.voice.sin-ji")
    
    # 台湾女生普通话发音
    # voices = engine.setProperty(  
    #     'voice', "com.apple.speech.synthesis.voice.mei-jia")
    print('准备开始语音播报...')
    # 输入语音播报词语
    engine.setProperty('volume', 3)
    engine.say("窗前明月光,疑是地上霜。举头望明月,低头思故乡。")
    
    engine.runAndWait()
    engine.stop()

    另外你可以尝试查看内置的其他声音,遍历下面的voices即可
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[0].id)

python利用pyttsx3实现文字转语音   .jpg
详解

  • 语音引擎工厂类似于设计模式中的“工厂模式”,pyttsx3通过初始化来获取语音引擎。当我们第一次调用init操作的时候,会返回一个pyttsx3的engine对象,再次调用的时候,如果存在engine对象实例,就会使用现有的,否则再重新创建一个。
    pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine

从方法声明上来看,第一个参数指定的是语音驱动的名称,这个在底层适合操作系统密切相关的。如下:

  • drivename:由pyttsx3.driver模块根据操作系统类型来调用,默认使用当前操作系统可以使用的最好的驱动。

    • sapi5 - SAPI5 on Windows
    • nsss - NSSpeechSynthesizer on Mac OS X
    • espeak - eSpeak on every other platform
  • debug: 要不要以调试状态输出,开发阶段可以设置为True。

函数说明

  • connect()在给定的topic上添加回调通知

    • 参数:

      • topic(string):要描述的事件名称;
      • cb(callable):回调函数。
    • 返回值: dict
  • disconnect()结束连接

    • 参数:

      • token(dict):回调失联的返回标记
    • 返回值: Void
  • endLoop()简单来说就是结束事件循环
  • getProperty()获取当前引擎实例的属性值

    • 参数:

      • name(string):rate: 每分钟字数的语音速率,默认为每分钟200个。
      • name(string):voice: 语音的字符串标识符。
      • name(string):voices: pyttsx3.voice.Voice描述符对象列表。
      • name(string):volume:音量的大小。
    • 返回值: Object
  • setProperty()获取当前引擎实例的属性值

    • 参数:

      • name(string):rate: 每分钟字数的语音速率,默认为每分钟200个。
      • name(string):voice: 语音的字符串标识符。
      • name(string):volume:音量的大小。
      • value(int):rate: 设置每分钟读的字数。
      • value:voice:设置发音,后文中会再讲到。
      • valu(float):volume:设置音量大小,0.0-1.0之间;默认1.0。
    • 返回值: Object
  • say()预设要朗读的文本数据

    • 参数:

      • text(unicode):要进行朗读的文本数据。
      • name(strin):关联发音人(一般用不到)
  • runAndWait()当事件队列中事件全部清空的时候返回
  • startLoop()开启事件队列

    • 参数:

      • [useDriverLoop(bool)]:是否启用驱动循环。
  • stop()停止当前讲话并清除命令队列。
Last modification:October 12th, 2020 at 11:40 am
If you think my article is useful to you, please feel free to appreciate