Python文本轉化語音模塊大比拼,看看青銅與王者的差別!

      網友投稿 1176 2022-05-29

      自從開始公眾號寫作,作息問題就成了一件讓人很頭大的事情,相對平時學習時間的基礎上,每天需要再多抽出來至少兩個小時進行公眾號寫作,這些時間只能從睡眠中擠出來。別人研究怎么碎片化學習,我現在每天盤算的是怎么碎片化打盹。不知道該怎么解決作息的問題,好苦惱….

      如果把Python比喻成游戲中的一個英雄,你覺得它是誰?對于Dota老玩家來說,我會想到鋼琴手卡爾!感覺Python和卡爾一樣,除了生孩子什么都可以做的角色。日常生活中,我們會涉及到很多語音播報的場景,比如郭德綱版的高德地圖導航、超市門口的紅外感知提醒歡迎光臨、銀行的自助叫號系統,等等…今天就和大家聊聊Python文本轉語音,看看這些從青銅到王者的模塊。

      通過pip install pywin32安裝模塊,pywin32是個萬金油的模塊,太多的場景使用到它,但在文本轉語音上,它卻是個青銅玩家,簡單無腦但效果不好。代碼示例:

      import win32com.client

      speaker = win32com.client.Dispatch("SAPI.SpVoice")

      speaker.Speak("一天什么時候最安全?中午,因為早晚會出事...")

      因為這個模塊使用了很多次,自信執行,結果報錯了….

      Traceback (most recent call last):

      File “D:\Python37\lib\site-packages\win32com\client\dynamic.py”, line 89, in _GetGoodDispatch

      IDispatch = pythoncom.connect(IDispatch)

      pywintypes.com_error: (-2147221005, ‘無效的類字符串’, None, None)

      這個模塊之前在公司和家里筆記本用過很多次的,怎么會報錯呢?一臉懵逼…結果查了半天發現,代碼在調用語音識別組件的時候報錯了。

      打開控制面板發現語音識別組件我的臺式機電腦沒有,原來現在很多GHOST版WIN系統為了精簡體積都去除了語音識別組件,所以在安裝語音朗讀語音叫號類軟件時,都不能正常發音。本來這種青銅小選手,像我這種王者級別的不羞于為伍,但既然是模塊介紹還是確定下到底是不是這個問題吧。網上找了一個語音識別的TTSwidnows補丁包安裝了一下,再次執行成功。如果跟我存在一樣問題的選手,可以網上搜索安裝一下。下載補丁包執行bat文件一鍵無腦安裝。

      pyttsx3 is a text-to-speech conversion library in Python.

      Unlike alternative libraries, it works offline, and is compatible with both Python 2 and 3.

      SAPI5 on Windows XP and Windows Vista and Windows 8,8.1 , 10

      NSSpeechSynthesizer on Mac OS X 10.5 (Leopard) and 10.6 (Snow Leopard)

      espeak on Ubuntu Desktop Edition 8.10 (Intrepid), 9.04 (Jaunty), and 9.10 (Karmic)

      pyttsx3使用pyttsx移植過來的,因為pyttsx不支持python3…針對不同的系統,模塊會自動所有系統對應的語音驅動,前提是你的系統存在該驅動…

      它依賴pywin32模塊,可以說它時針對無腦的pywin32接口,進行了升級的個性化配置。先來看下最簡單的使用:

      import pyttsx3

      engine = pyttsx3.init()

      engine.say("明天你好,我叫干不倒!")

      engine.runAndWait()

      代碼初始化模塊后,填寫你所需轉化的文本,之后執行runAndWait方法完成語音轉化。再來看看其相關操作:

      事件監聽

      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('The quick brown fox jumped over the lazy dog.')

      engine.runAndWait()

      中斷話語

      import pyttsx3

      def onWord(name, location, length):

      print 'word', name, location, length

      if location > 10:

      engine.stop()

      engine = pyttsx3.init()

      engine.connect('started-word', onWord)

      engine.say('The quick brown fox jumped over the lazy dog.')

      engine.runAndWait()

      改變聲音

      import pyttsx3

      engine = pyttsx3.init()

      voices = engine.getProperty('voices')

      for voice in voices:

      engine.setProperty('voice', voice.id)

      engine.say('The quick brown fox jumped over the lazy dog.')

      engine.runAndWait()

      改變語速

      import pyttsx3

      engine = pyttsx3.init()

      rate = engine.getProperty('rate')

      engine.setProperty('rate', rate+50)

      engine.say('The quick brown fox jumped over the lazy dog.')

      engine.runAndWait()

      改變音量

      import pyttsx3

      engine = pyttsx3.init()

      volume = engine.getProperty('volume')

      engine.setProperty('volume', volume-0.25)

      engine.say('The quick brown fox jumped over the lazy dog.')

      engine.runAndWait()

      運行驅動程序事件循環

      import pyttsx3

      engine = pyttsx3.init()

      def onStart(name):

      print 'starting', name

      def onWord(name, location, length):

      print 'word', name, location, length

      def onEnd(name, completed):

      print 'finishing', name, completed

      if name == 'fox':

      engine.say('What a lazy dog!', 'dog')

      elif name == 'dog':

      engine.endLoop()

      Python文本轉化語音模塊大比拼,看看青銅與王者的差別!

      engine = pyttsx3.init()

      engine.connect('started-utterance', onStart)

      engine.connect('started-word', onWord)

      engine.connect('finished-utterance', onEnd)

      engine.say('The quick brown fox jumped over the lazy dog.', 'fox')

      engine.startLoop()

      使用外部事件循環

      import pyttsx3

      engine = pyttsx3.init()

      engine.say('The quick brown fox jumped over the lazy dog.', 'fox')

      engine.startLoop(False)

      # engine.iterate() must be called inside externalLoop()

      externalLoop()

      engine.endLoop()

      百度語音識別api:baidu-aip是百度開放的公共語音轉化服務。只需要在百度注冊相關的app及秘鑰信息即可使用。

      使用流程如下:

      訪問語音合成-百度AI開放平臺:http://ai.baidu.com/tech/speech/tts

      之后使用百度賬號即可登陸(沒有百度賬號的,自己注冊一個)

      創建應用,添加語音識別的功能,并完成注冊

      保存你的app_id, API_Key, Secret_Key 三項數據留著后續使用

      切換回語音合成首頁,點擊立即使用旁邊的技術文檔按鈕,進入API文檔

      定位 語音合成—>SDK文檔—>Python SDK,即可看到詳細的開發文檔說明

      接下來,我們看看文檔中的相關說明:

      接口描述

      基于該接口,開發者可以輕松的獲取語音合成能力

      請求說明

      合成文本長度必須小于1024字節,如果本文長度較長,可以采用多次請求的方式。文本長度不可超過限制

      舉例,要把一段文字合成為語音文件:

      from aip import AipSpeech

      """ 你的 APPID AK SK """

      APP_ID = '你的 App ID'

      API_KEY = '你的 Api Key'

      SECRET_KEY = '你的 Secret Key'

      client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

      result ?= client.synthesis('你好百度', 'zh', 1, {

      'vol': 5,

      })

      # 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼

      if not isinstance(result, dict):

      with open('auido.mp3', 'wb') as f:

      f.write(result)

      # 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼

      if not isinstance(result, dict):

      with open('auido.mp3', 'wb') as f:

      f.write(result)

      在上面代碼中,常量APP_ID在百度云控制臺中創建,常量API_KEY與SECRET_KEY是在創建完畢應用后,系統分配給用戶的,均為字符串,用于標識用戶,為訪問做簽名驗證,可在AI服務控制臺中的應用列表中查看。

      相比于前兩種模塊,baidu-aip卻是高端很多啊…喜歡的朋友可以下載了玩玩,感興趣的朋友可以看看我之前發表的文章使用Python將任正非400+篇演講批量轉化為語音https://www.jianshu.com/p/05f9874b6989

      OK,今天的內容就到這里,如果覺得內容對你有所幫助,歡迎點擊文章右下角的“在看”。

      期待你關注我的公眾號清風Python,如果覺得不錯,希望能動動手指轉發給你身邊的朋友們。

      希望每周一至五清晨的7點10分,都能讓清風Python的知識文章叫醒大家!謝謝……

      -----------------------------

      本文來自清風Python公眾號

      內容審核-文本 一句話識別 python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【推薦】性能測試、系統優化入門必看的一篇文章
      下一篇:關系數據庫——基礎
      相關文章
      精品国产日韩久久亚洲| 波多野结衣亚洲一级| 亚洲国产精品无码久久九九大片 | 亚洲高清成人一区二区三区 | 亚洲AV无码成人精品区天堂| 亚洲中文字幕久久精品无码喷水 | 亚洲äv永久无码精品天堂久久 | 4444亚洲国产成人精品| 亚洲视频在线免费观看| 亚洲成在人天堂一区二区| 亚洲av色福利天堂| 亚洲AV第一页国产精品| 亚洲AV无码不卡无码| 国产成人精品日本亚洲网站| 亚洲AV综合色区无码另类小说| 亚洲国产成人片在线观看| 亚洲s色大片在线观看| 五月天网站亚洲小说| 久久亚洲精品成人av无码网站| 综合自拍亚洲综合图不卡区| 亚洲码在线中文在线观看| 亚洲春黄在线观看| 亚洲国产综合精品中文第一| 亚洲精品国产高清在线观看| 大桥未久亚洲无av码在线| 亚洲国产成人久久综合区| 国产精品亚洲综合一区| 亚洲自偷自偷图片| 久久精品国产亚洲香蕉| 亚洲成人免费在线观看| 狠狠色香婷婷久久亚洲精品| 亚洲精品天堂成人片AV在线播放 | 香蕉蕉亚亚洲aav综合| 亚洲视频免费播放| 国产精品亚洲四区在线观看 | 国产日韩亚洲大尺度高清| 无码乱人伦一区二区亚洲| 亚洲另类图片另类电影| 亚洲精品无码中文久久字幕| 国产亚洲精彩视频| 亚洲色婷婷综合久久|