使用pyttsx3實現簡單tts服務

来源:https://www.cnblogs.com/MikeZhang/archive/2022/04/04/pyttsx3test20220404.html
-Advertisement-
Play Games

操作系統:Windows 10_x64 python版本:Python 3.9.2_x64 pyttsx3版本: 2.90 pyttsx3是一個tts引擎包裝器,可對接SAPI5、NSSS(NSSpeechSynthesizer)、espeak等引擎,實現統一的tts介面。 pyttsx3的地址:h ...


操作系統:Windows 10_x64 python版本:Python 3.9.2_x64 pyttsx3版本: 2.90   pyttsx3是一個tts引擎包裝器,可對接SAPI5、NSSS(NSSpeechSynthesizer)、espeak等引擎,實現統一的tts介面。

 pyttsx3的地址:https://pypi.org/project/pyttsx3/

 幫助文檔地址:https://pyttsx3.readthedocs.org/

安裝pyttsx3依賴包:

pip install pyttsx3

介面介紹

1、init介面

使用的具體引擎可以在init裡面指定:

pyttsx3.init([driverName : string, debug : bool]) → pyttsx3.Engine   入參: driverName : 可選,用於指定tts引擎,若未指定,則使用系統預設引擎。
  • sapi5 - windows環境
  • nsss - Mac OS X環境
  • espeak - 非windows和Mac OS X 的其它系統
debug : 可選,用於指定是否開啟調試功能,若未指定,則不開啟。

 

 2、engine介面

使用init介面初始完畢,會返回engine對象。 engine對象的方法如下:
  • connect
註冊回調函數用於訂閱事件。 入參及出參 connect(topic : string, cb : callable) → dict topic :訂閱事件的名稱,有效的名稱 cb : 回調函數 返回token信息,可用於後續取消訂閱。   可用事件如下: started-utterance 引擎開始說話時觸發,回調函數定義如下: onStartUtterance(name : string) -> None started-word 引擎說詞語時觸發,回調函數定義如下: onStartWord(name : string, location : integer, length : integer) -> None finished-utterance 引擎說話結束時觸發,回調函數定義如下: onFinishUtterance(name : string, completed : bool) -> None error 引擎遇到錯誤時觸發,回調函數定義如下: onError(name : string, exception : Exception) -> None 
  • disconnect
反註冊回調函數。 disconnect(token : dict) token是connect函數返回的數據。 
  • endLoop
結束正在運行的事件迴圈。 
  • getProperty
獲取tts的屬性,比如語速、嗓音、音量等。 getProperty(name : string) -> object 參數: name - 屬性名稱 object - 屬性對象 屬性列表: rate - 語速 voice - 嗓音 voices - 嗓音集,列出 pyttsx3.voice.Voice 裡面定義的所有嗓音 volume - 音量 
  • isBusy
判斷當前引擎是否在執行文本轉語音。 isBusy() -> bool 返回值: True - 正在執行文本轉語音 False - 未執行
  • iterate
當使用外部事件迴圈時,該方法需要被調用。  
  • runAndWait
runAndWait() -> None 執行緩存的命令並等待完成。
  • save_to_file
執行語音轉文本操作,並生成音頻文件。 save_to_file(text : unicode, filename : string, name : string) 參數: text - 要執行轉語音的文本 filename - 文件名稱 name - 可選,註冊需要通知的關鍵字 示例: engine.save_to_file('Hello World' , 'test.mp3')  
  • say
執行語音轉文本操作,並播放文本內容。 say(text : unicode, name : string) -> None 參數: text - 要執行轉語音的文本 name - 可選,註冊需要通知的關鍵字 示例: engine.say('I will speak this text!', 'speak')  
  • setProperty
設置tts的屬性,比如語速、嗓音、音量等。 setProperty(name, value) -> None 參數: name - 屬性名稱 value - 屬性值 屬性列表: rate - 語速,設置每分鐘說幾個字 voice - 嗓音,可以設置不同嗓音的說話人 volume - 音量,介於0到1的小數  
  • startLoop
開始事件迴圈。 startLoop([useDriverLoop : bool]) -> None  
  • stop
停止當前正在運行的文本轉語音並清理命令隊列。 

使用示例

 1、使用pyttsx3播放語音及生成文件 簡單示例:
#! /usr/bin/env python3
#-*- coding:utf-8 -*-

# pip install pyttsx3

import pyttsx3

def onStart(name):
   print('starting',name)

def onWord(name,location,length):
   print('word',name,location,length)

def onEnd(name,completed):
   print('finishing',name,completed)

engine = pyttsx3.init()

# 註冊回調函數
engine.connect('started-utterance', onStart)
engine.connect('started-word', onWord)
engine.connect('finished-utterance', onEnd)

# 語音轉文本測試(直接播放)
engine.say("I will speak this text")
engine.say('I will speak this text!', 'speak') # 註冊 speak 關鍵字,進行事件通知
engine.say("我可以說話了")

# 語音轉文本測試(文件存儲到磁碟) 
engine.save_to_file('我可以說話了', 'test.mp3')

# 運行並等待
engine.runAndWait()
運行效果如下:

 

2、使用pyttsx3搭建簡單的tts服務

這裡使用tornado搭建簡單的http服務(tornado是一個開源的網路伺服器框架),來實現tts服務。 時序如下:

 主邏輯代碼如下:

def text2File(text,dstFile):
    engine = pyttsx3.init()
    engine.save_to_file(text,dstFile)
    engine.runAndWait()

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        tmpFile = "1.mp3" 
        print("get",self.request.arguments)
        text = self.get_query_argument("text").strip()
        print("text : %s" % text)
        if len(text) > 0 :
            text2File(text,tmpFile)
            self.set_header('content-type', 'audio/mpeg')
            fbin = open(tmpFile,"rb").read()
            self.set_header('Content-Length', len(fbin))
            self.set_header('Content-Disposition', 'attachment;filename="%s"'%tmpFile)
            self.write(fbin)
            self.finish()            
        else:
            self.set_header('content-type', 'application/json')
            self.finish(json.dumps({"result" : "input text "}))
        
    def post(self):
        print("post")
        print(self.request.arguments)

運行效果如下:

 

 本文涉及資源下載地址:https://pan.baidu.com/s/1Dc8zlL2fs8p4ebF916WyXQ

 

 可關註微信公眾號(聊聊博文)後回覆 2022040401 獲得提取碼。

微信公眾號:

  • E-Mail : [email protected]
  • 轉載請註明出處,謝謝!
    您的分享是我們最大的動力!

    -Advertisement-
    Play Games
    更多相關文章
    • 有沒有小火伴是特別喜歡玩五子棋的,我記得我初中是特別喜歡的。於是,我今天就用Python給大家寫了一個黑白棋游戲。代碼放在下麵了。 01、繪製棋盤 Python學習交流Q群:906715085### import pygame, sys, random from pygame.locals impo ...
    • 多線程方式實現(1) 方式1:繼承Thread類。 * 步驟 * A:自定義類MyThread繼承Thread類。 * B:MyThread類裡面重寫run()? * 為什麼是run()方法呢? * C:創建對象 * D:啟動線程 */ package cn.itcast_02; /* * 該類要重 ...
    • Windows微信清理工具v.3.0.2 更新內容: 1、清理完成時可顯示刪除了哪些文件。 軟體截圖: 所有版本及源碼下載鏈接: 百度網盤:https://pan.baidu.com/s/1OSIpvZEOvd-lVZb_82BnKg 提取碼:ylzh (請下載v.3.0.2版本) 阿裡雲盤:htt ...
    • 假期就要好好利用,不然怎麼捲死同齡人,今天給大家分享替換字元串。 FlashText 演算法是由 Vikash Singh 於2017年發表的大規模關鍵詞替換演算法,這個演算法的時間複雜度僅由文本長度(N)決定,演算法時間複雜度為O(N) 而對於正則表達式的替換,演算法時間複雜度還需要考慮被替換的關鍵詞數量( ...
    • 說明 當前的版本為 MyBatis 3.5.9 MyBatis Plus 3.5.1 Spring Boot 2.6.4 Postgresql 42.3.3 與 Spring Boot 結合使用 MyBatis 以下說明Spring Boot下完全以註解方式進行的配置, 覆蓋大部分功能場景 項目依賴 ...
    • SpringBoot+vue練手項目 博客系統 項目使用技術 : springboot + mybatisplus+redis+mysql 1. 工程搭建 前端的工程地址: 鏈接:https://pan.baidu.com/s/1cg_11ctsbbq_WM9BnpcOaQ 提取碼:nrun npm ...
    • Java學習地址 視頻地址 真的很推薦大家去聽老韓的課(非常細誰聽誰知道):【零基礎 快速學Java】韓順平 零基礎30天學會Java_嗶哩嗶哩_bilibili 使用心得 說一下我使用的心得: 1. 學過C和C++,作為軟體工程的學生大一下學期的 Java 屬實是混過去的(60飄過),當我真正想開 ...
    • Spring Boot啟動流程 君生我未生,君生我已老。君恨我生遲,我恨君生早。 一、簡述 Spring Boot啟動流程分析使用版本SpringBoot VERSION:版本 2.5.5-SNAPSHOT。 Spring Boot項目最簡單的Application啟動類。 可以看出Applicat ...
    一周排行
      -Advertisement-
      Play Games
    • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
    • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
    • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
    • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
    • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
    • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
    • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
    • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
    • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
    • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...