【NLP】用python实现文本转语音处理

一、说明

        介绍一款python调用库,离线软件包pyttsx3 API,它能够将文字转化成语音文件。Python 中有多种 API 可用于将文本转换为语音。pyttsx3 是一个非常易于使用的工具,可将输入的文本转换为音频。与其它类似的库不同,它可以离线工作,并且与 Python 2 和 3 兼容。

二、环境安装

        安装 pyttsx3 API,请打开终端并写入:      

  pip install pyttsx3

        该库依赖于 win32,因此我们在执行程序时可能会出现错误。为了避免这种情况,只需在您的环境中安装 pypiwin32 即可。      

  pip install pypiwin32

三、pyttsx3 中重要函数

        一些重要函数包括:

  • pyttsx3.init([driverName : string, debug : bool]) – 获取对将使用给定驱动程序的引擎实例的引用。如果请求的驱动程序已被另一个引擎实例使用,则返回该引擎。否则,将创建一个新引擎。
  • getProperty(name : string) – 获取引擎属性的当前值。
  • setProperty(name, value) – 将命令排队以设置引擎属性。新的属性值会影响此命令之后排队的所有话语。
  • say(text : unicode, name : string) – 将命令排队以说出话语。语音根据队列中该命令之前设置的属性输出。
  • runAndWait() – 处理所有当前排队的命令时发生阻塞。适当地调用引擎通知的回调。当在此调用之前排队的所有命令都从队列中清空时返回。

四、文本转语音程序示范

        现在我们已经准备好编写一个将文本转换为语音的示例程序。

# Python program to show
# how to convert text to speech
import pyttsx3  # Initialize the converter
converter = pyttsx3.init()
# Set properties before adding
# Things to say 
# Sets speed percent # Can be more than 100
converter.setProperty('rate', 150)
# Set volume 0-1
converter.setProperty('volume', 0.7)
# Queue the entered text 
# There will be a pause between
# each one like a pause in 
# a sentenceconverter.say("Hello GeeksforGeeks")
converter.say("I'm also a geek")  # Empties the say() queue
# Program will not continue
# until all speech is done talkingconverter.runAndWait()
        输出:

        上述程序的输出将是一个声音,说“Hello GeeksforGeeks”和“I'm also a geek”。

五、变语速处理

        我们将设置发动机的速率和音量。设置讲话的速率和音量:

    rate = engine.getProperty('rate')engine.setProperty('rate', rate-100)

        默认情况下,速率是200,所以我们将其降低到100。速率是说话速率,200对我们来说很高。所以我们降低了它。

        速率简单来说就是说话者说出文本的速度。设置速率后,我们将通过首先获取音量属性然后设置它来更改或设置音量。

    volume = engine.getProperty('volume')engine.setProperty('volume', volume+0.50)

        默认音量为 1,即 100%,我们通过将 0.50 添加到从读取音量属性接收到的值,将其增加到 150%。

        现在我们完成了这两个属性的设置,我们将调用 say(),语音现在将具有我们的参数,即 1x 速度和 1.50 音量。

engine.say("Hello, This is the test for the pyttsx3")
engine.runAndWait()

        现在这个 runAndWait 对我们来说很重要。我们想要运行这个引擎,并继续运行,直到它完成所传递文本的 TTS。

六、改变声音

        假设您想将生成的声音从男性更改为女性。你怎样做呢?让我们来看看。
您会注意到,当您运行上述代码来实现文本到语音转换时,响应的声音是男性声音。要更改语音,您可以通过从引擎获取语音属性来获取可用语音列表,并且您可以根据系统中可用的语音更改语音。

        要获取声音列表,请编写以下代码。

voices = converter.getProperty('voices')

  

for voice in voices:

    # to get the info. about various voices in our PC 

    print("Voice:")

    print("ID: %s" %voice.id)

    print("Name: %s" %voice.name)

    print("Age: %s" %voice.age)

    print("Gender: %s" %voice.gender)

    print("Languages Known: %s" %voice.languages)

Output:

        要更改语音,请使用 setProperty() 方法设置语音。上面找到的 Voice Id 用于设置语音。
下面是变声的实现。

voice_id = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0"

  

# Use female voice

converter.setProperty('voice', voice_id)

  

converter.runAndWait()

        现在,您可以根据需要在声音之间切换。您可以尝试运行 for 循环来将不同的语句分配给不同的声音。运行代码并享受结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/6017.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十八章 MobileViT网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

Qt/C++编写跨平台的推流工具(支持win/linux/mac/嵌入式linux/安卓等)

一、前言 跨平台的推流工具当属OBS最牛逼,功能也是最强大的,唯一的遗憾就是多路推流需要用到插件,而且CPU占用比较高,默认OBS的规则是将对应画布中的视频画面和设定的音频一起重新编码再推流,意味着肯定占用不少CPU资…

passware kit forensic使用

一、从外部注册表文件提取密码 适用于不联网的情况下,例如2023盘古石杯的NAS取证 找到Windows/System32/config并在本地打开 将路径填充到config folder中 跑出来了John电脑对应的密码是paofen,NAS的密码是P88w0rd 后续遇见再补

【运维知识进阶篇】zabbix5.0稳定版详解7(zabbix分布式监控:使用场景+功能详解+快速部署+基本使用)

如果你有几百上千台客户端的数据需要上报给zabbix服务端,即便是你做了主动注册,监控项目主动式,那服务端压力还是会很大,所以我们可以考虑zabbix分布式监控。 zabbix proxy可以代替zabbix server收集性能和可用性数据&#xff0c…

6.用python写网络爬虫,表单交互

在前面几章中,我们下载的静态网页总是返回相同的内容。而在本章中,我们将与网页进行交互 根据用户输入返回对应的内容。本章将包含如下几个主题: 发送 POST 请求提交表单: 使用 cookie 登录网站: 用于简化表单提交的高…

Scala的foldLeft与foldRight详解

foldLeft与foldRight是特质TraversableOnce定义的高阶函数,直译过来为向左折叠和向右折叠。具体实现如下摘出的代码所示: trait TraversableOnce[A] extends Any with GenTraversableOnce[A] {deprecated("Use foldLeft instead of /:", &quo…

小波变换笔记

突然变化的图像或信号 小波变换 高带宽? 放缩和时延 放缩因子和频率成正比 小波在频域中具有带通特性 Cf 中心频率 s 小波刻度 \delta t 采样间隔 时延 我们需要移动小波,以便使其和信号中寻找的特征对齐 时频分析时域频率成分滤波 连续小波变换 C…

iview tree树形控件多选,自定义内容

项目中需要一个iview框架的树形控件,需要里面包含以下功能 1、控件宽度可展开,可缩小2、树形控件可搜索,并且定位到搜索的节点3、控件可以一键勾选,一键取消4、控件图标自定义5、 点击最后一个节点时可以进入到二级节点,点击上一节点可返回完整代码:listToTree文件 效果图: 具…

剑指 Offer 数组中数字出现的次数

⭐️ 题目描述 🌟 leetcode链接:数组中数字出现的次数 ⭕️ 代码: /*思路:有两个出现单次的数字,其余数字都出现两次。把所有的数字分成两组,这两个数组分到不同的组,异或起来,就可…

AI绘画StableDiffusion:云端在线版使用笔记分享(Kaggle版)

玩AI绘画(SD),自己电脑配置不够?今天给大家介绍一下如何baipiao在线版AI绘画StableDiffusion。 Kaggle 是世界上最大的数据科学社区,拥有强大的工具和资源,可帮助您实现数据科学目标。(每周可以…

云原生之深入解析如何在Kubernetes下快速构建企业级云原生日志系统

一、概述 ELK 是三个开源软件的缩写,分别表示 Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个 FileBeat,它是一个轻量级的日志收集处理工具 (Agent),Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输…

学习系统编程No.24【深入学习信号】

引言: 北京时间:2023/6/13/19:07,伴随着期末考的来临,最近停课啦!无论是线上课,还是学校的课,开心,那这不是咱持续更文的好时候嘛,但是今天在学习相关C知识时&#xff0…