iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 22
0
影片教學

用Django架構建置專屬的LINEBOT吧系列 第 22

[Day 22]用Django架構建置專屬的LINEBOT吧 - 將文字訊息轉成語音內容

上一篇提到了關於操作以語音轉文字的應用,
今天就說一下怎麼用文字轉語音吧~

關於TTS(Text To Speech)及gTTS

TTS其實在講的就是合成語音,

我們常常聽到的google小姐聲音,
即可透過gTTS來將文字轉為google語音,
在合成語音的資料庫當中,算是我們比較熟悉的,
其他也有許多使用免費的TTS服務可以搜尋得到,
當然也已經被大量運用在軟體開發上,
不過從入門開始的話,我們就先使用gTTS的應用作為示範吧

首先以pip安裝gTTS

pip install gTTS

安裝完畢之後,我們可以建立一個test.py檔案,
來用以下範例程式碼測試以gTTS來實現文字轉語音的應用:

#test.py
from gtts import gTTS
tts=gTTS(text='生日快樂', lang='zh-tw')
tts.save("./static/test.m4a")

這樣一來就能儲存一個.m4a格式的實體音訊檔案了,
是不是非常簡單呢/images/emoticon/emoticon07.gif

實際操作影片:

透過gTTS建立用語音回覆的聊天機器人

那麼,就直接來放到LINE BOT裡面進行測試看看囉,
邏輯跟圖片、語音訊息一樣,我們可以將文字轉為實體檔案之後,
再將實體檔案的路徑丟給LINE API,以進行音訊的傳送,
方法如下:

#views.py
domain = '更改為你的ngrok domain'

...

if isinstance(event, MessageEvent):
    print(event.message.type)
    if event.message.type=='text':
        mtext = event.message.text
        if mtext[0]==' ':
            tts=gTTS(text=mtext, lang='zh-tw')
            tts.save("./static/mtext.m4a")
            url = 'https://'+domain+'/static/mtext.m4a'
            print(url)
            message.append(AudioSendMessage(original_content_url=url,duration=330*len(mtext)))
            line_bot_api.reply_message(event.reply_token,message)
        else:
            message.append(TextSendMessage(text='文字訊息'))
            line_bot_api.reply_message(event.reply_token,message)

由於要設定音訊的長度,這邊自定義即可,
我大概抓了一個字330毫秒的長度,來把用戶的文字訊息以音訊訊息回傳給用戶,
先簡單進行測試看看,先丟個出師表給他試試看,
結果順利的話就如下圖囉,

https://ithelp.ithome.com.tw/upload/images/20201006/20121176tuLx37jMJB.jpg

每一家的TTS SDK使用方法都不一樣,
所以這邊只是以gTTS作為範例簡單介紹如何將文字轉為語音囉~
如果覺得google小姐的聲音不好想換個TTS語音,
那要再另外參閱一下其他TTS的文檔,
基本上都還滿平易近人的/images/emoticon/emoticon12.gif

實際操作影片:


上一篇
[Day 21]用Django架構建置專屬的LINEBOT吧 - 將語音訊息轉成文字內容
下一篇
[Day 23]用Django架構建置專屬的LINEBOT吧 - 網路爬蟲(I)
系列文
用Django架構建置專屬的LINEBOT吧30

尚未有邦友留言

立即登入留言