当前位置:   article > 正文

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

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() – 处理所有当前排队的命令时发生阻塞。适当地调用引擎通知的回调。当在此调用之前排队的所有命令都从队列中清空时返回。

四、文本转语音程序示范

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

  1. # Python program to show
  2. # how to convert text to speech
  3. import pyttsx3  
  4. # Initialize the converter
  5. converter = pyttsx3.init()
  6. # Set properties before adding
  7. # Things to say 
  8. # Sets speed percent 
  9. # Can be more than 100
  10. converter.setProperty('rate', 150)
  11. # Set volume 0-1
  12. converter.setProperty('volume', 0.7)
  13. # Queue the entered text 
  14. # There will be a pause between
  15. # each one like a pause in 
  16. # a sentence
  17. converter.say("Hello GeeksforGeeks")
  18. converter.say("I'm also a geek")  
  19. # Empties the say() queue
  20. # Program will not continue
  21. # until all speech is done talking
  22. converter.runAndWait()
        输出:

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

五、变语速处理

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

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

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

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

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

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

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

  1. engine.say("Hello, This is the test for the pyttsx3")
  2. 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 循环来将不同的语句分配给不同的声音。运行代码并享受结果。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/101310
推荐阅读
相关标签
  

闽ICP备14008679号