社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

软工系的学生居然利用Python把文本转语音!系主任跑来围观!哈哈

Python学习交流 • 7 年前 • 588 次点击  

使用Speech API

原理

我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相关的接口。所以我们需要安装pywin32来帮助我们完成这一个底层的交互。

示例代码

语音引擎工厂

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

pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine

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

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

  • sapi5 - SAPI5 on Windows

  • nsss - NSSpeechSynthesizer on Mac OS X

  • espeak - eSpeak on every other platform

  • debug: 这第二个参数是指定要不要以调试状态输出,建议开发阶段设置为True

    引擎接口

    要想很好的运用一个库,不了解其API是不行的。下面来看看pyttsx。engine.Engine的引擎API。

    方法签名参数列表返回值简单释义
    connect(topic : string, cb : callable)topic:要描述的事件名称;cb:回调函数→ dict 在给定的topic上添加回调通知
    disconnect(token : dict)token:回调失联的返回标记Void结束连接
    endLoop()None→ None简单来说就是结束事件循环
    getProperty(name : string)name有这些枚举值“rate, vioce,vioces,volumn→ object获取当前引擎实例的属性值
    setProperty(name : string)name有这些枚举值“rate, vioce,vioces,volumn→ object设置当前引擎实例的属性值
    say(text : unicode, name : string)text:要进行朗读的文本数据; name: 关联发音人,一般用不到→ None预设要朗读的文本数据,这也是“万事俱备,只欠东风”中的“万事俱备”
    runAndWait()None→ None这个方法就是“东风”了。当事件队列中事件全部清空的时候返回
    startLoop([useDriverLoop : bool])useDriverLoop:是否启用驱动循环→ None开启事件队列

    更多测试

    朗读文本

    事件监听

    打断发音

    更换发音人声音

    语速控制

    音量控制

    执行一个事件驱动循环

    使用一个外部的驱动循环



    今天看啥 - 高品质阅读平台
    本文地址:http://www.jintiankansha.me/t/g5ufmbjUK3
    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/8544
     
    588 次点击