用 Python 畅玩 Line bot - 08:Audio message part2

既然可以将音档转为文字回传了,接下来我们可以尝试看看将收到的 Text message 转为音档去进行 Audio message 的回传,而这样的功能会使用到的套件如下。

pip install

gtts
langdetect

gtts 是 Google 的文字转语音 API,它在转换文字到语音的时候会需要两个参数,分别是文字内容以及它是什麽语言。因此我们会需要用到第二个套件 langdetect 来协助我们便是该段文字是用什麽语言书写的,而它的输出会是 ISO 639- 1语言代码。
而 line 再传送音档的时候,会需要输入的参数除了音档的 URL 以外,还会要求输入该音档的长度,这个长度会影响到使用者在接受到该讯息时所显示的长度,虽然这部分的数值不影响音档的运作,不过为了让使用者可以准确的知道该音档的长度,我们可以利用 AudioSegment 去取得该档案的长度。范例程序码如下。

from gtts import gTTS
from langdetect import detect
from pydub import AudioSegment
import math

# 转成 aac 档
def trans_mp3_to_aac(filepath, filename):
    song = AudioSegment.from_file(filepath, "mp3")
    song.export("./static/" + filename + ".aac", format="mp4")
    # 回传音档的长度(ms)
    return math.ceil(song.duration_seconds)

# 确认所传文字的语言
language = detect(instruction)

# 转档并取得长度
path = "./audio/mp3/" + UserId +".mp3"
output = gTTS(text=instruction, lang="zh-TW", slow=False)
output.save(path)
# 为了避免重复存档,用乱数来编号
num = random.randint(1,99999)
# 因为 line 传送音档需要 aac 格式,因此转档
lon = read_audio.trans_mp3_to_aac(path, UserId + str(num))

# line 长度显示以秒为单位
line_bot_api.reply_message(event.reply_token, AudioSendMessage(original_content_url = ngrok_url + "/static/" + UserId + str(num) + ".aac",duration=(lon*1000)))

<<:  【Day 29】支援向量机(Support Vector Machine, SVM)(下)

>>:  Day30 - 模型复杂度分析

Day 20 资料宝石:RDS 架构解析

今天我们要来介绍的 AWS RDS 的基本架构。 RDS instance 的概念 首先,当我们建...

[Day 21] 过滤器Filter哗啦啦

今天天气真好,最适合来学习新事物了!!在创建一个网页时,有可能会遇到需要把使用者输入的文字转成大小写...

【Day7】ERP核心模组篇-Purchase

#odoo #开源系统 #数位赋能 #E化自主 昨天我们讨论了销售模组的运作,我们接下来进入到采购模...

LEAP(轻量级可扩展认证协议)

-EAP和802.1X 以下是维基百科的摘录: EAP不是有线协议;相反,它仅定义消息格式。每个使...

Gulp 基础介绍 gulp-sass DAY80

今天要来介绍 gulp-sass 如何安装与使用 gulp-sass 介绍 https://www....