使用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
    • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
    • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
    • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
    • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
    • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
    • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
    • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
    • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
    • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
    • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...