iT邦幫忙

1

用 Python 暢玩 Line bot - 07:Audio message

  • 分享至 

  • xImage
  •  

這次想要介紹的部分是 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 AudioSegment
import speech_recognition as sr

def 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))


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
donye
iT邦新手 5 級 ‧ 2022-03-01 23:28:31

我的電腦找不到 trans_aac_to_wav() 這個函式

我要留言

立即登入留言