这次想要介绍的部分是 Audio message,它跟 Image message 一样可以透过line_bot_api.get_message_content
去取得它的对应资讯。而 Line 的音档寄收会是个aac档,若要对该音档去做其他处理的时候就需要注意。
存音档的写法跟图片一样,只是将副档名的部分做更换
@handler.add(MessageEvent)def handle_message(event):if event.message.type == 'audio':UserSendAudio = line_bot_api.get_message_content(event.message.id)path= './audio/mp4/'+ UserId + '.aac'with open(path, 'wb') as fd:for chunk in UserSendAudio.iter_content():fd.write(chunk)
那现在我们把音档存好之后,可以对它进行怎样的操作呢?这边是尝试将音档转换成文字再回传给使用者。
pip install
pydub
SpeechRecognition
pydub 是 Python 中用来处理音讯档案的套件,我们这次会使用到的是 AudioSegment,式其中可以用来变更档案格式、音量大小、撷取音档等功能。而SpeechRecognition则是可以进行将音档转文字的功能。
SpeechRecognition 有个特点是它转文字时所使用的音档需要是 wav 格式,因此会需要使用到 AudioSegment 来进行转档,而它辨认语音的语言依据是依照开头的语言,例如说,该段音档是前面中文,后面日文,它会当作是一段全中文的音档去做辨识,并不会把它切成两部分分别辨识。
下面为实际的範例:
from pydub import AudioSegmentimport speech_recognition as srdef trans_wav_to_text(filepath):r = sr.Recognizer()#预设辨识英文with sr.WavFile(filepath) as source:#读取wav档 audio = r.record(source)try: print("Transcription: " + r.recognize_google(audio,language="zh-TW")) #使用Google的服务 return r.recognize_google(audio,language="zh-TW") #默认辨识的语言except LookupError: return "Could not understand audio" @handler.add(MessageEvent)def handle_message(event):if event.message.type == 'audio':# 解读并储存音档UserSendAudio = line_bot_api.get_message_content(event.message.id)path= './audio/'+ UserId + '.aac'with open(path, 'wb') as fd:for chunk in UserSendAudio.iter_content():fd.write(chunk)trans_aac_to_wav(path, UserId)audio_message = trans_wav_to_text('./audio/wav/'+ UserId + '.wav')line_bot_api.reply_message(event.reply_token,TextSendMessage(text=audio_message))
。