mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-06-02 00:57:41 +08:00
fix: send voice in wechatcomapp rightly
This commit is contained in:
@@ -63,15 +63,17 @@ class WechatComAppChannel(ChatChannel):
|
|||||||
logger.info("[wechatcom] Do send text to {}: {}".format(receiver, reply_text))
|
logger.info("[wechatcom] Do send text to {}: {}".format(receiver, reply_text))
|
||||||
elif reply.type == ReplyType.VOICE:
|
elif reply.type == ReplyType.VOICE:
|
||||||
try:
|
try:
|
||||||
|
media_ids = []
|
||||||
file_path = reply.content
|
file_path = reply.content
|
||||||
amr_file = os.path.splitext(file_path)[0] + ".amr"
|
amr_file = os.path.splitext(file_path)[0] + ".amr"
|
||||||
any_to_amr(file_path, amr_file)
|
any_to_amr(file_path, amr_file)
|
||||||
files = split_audio(amr_file, 60000)
|
duration, files = split_audio(amr_file, 60 * 1000)
|
||||||
if len(files) > 1:
|
if len(files) > 1:
|
||||||
logger.info("[wechatcom] voice too long, split into {} parts".format(len(files)))
|
logger.info("[wechatcom] voice too long {}s > 60s , split into {} parts".format(duration / 1000.0, len(files)))
|
||||||
for path in files:
|
for path in files:
|
||||||
response = self.client.media.upload("voice", open(path, "rb"))
|
response = self.client.media.upload("voice", open(path, "rb"))
|
||||||
logger.debug("[wechatcom] upload voice response: {}".format(response))
|
logger.debug("[wechatcom] upload voice response: {}".format(response))
|
||||||
|
media_ids.append(response["media_id"])
|
||||||
except WeChatClientException as e:
|
except WeChatClientException as e:
|
||||||
logger.error("[wechatcom] upload voice failed: {}".format(e))
|
logger.error("[wechatcom] upload voice failed: {}".format(e))
|
||||||
return
|
return
|
||||||
@@ -81,7 +83,9 @@ class WechatComAppChannel(ChatChannel):
|
|||||||
os.remove(amr_file)
|
os.remove(amr_file)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
self.client.message.send_voice(self.agent_id, receiver, response["media_id"])
|
for media_id in media_ids:
|
||||||
|
self.client.message.send_voice(self.agent_id, receiver, media_id)
|
||||||
|
time.sleep(1)
|
||||||
logger.info("[wechatcom] sendVoice={}, receiver={}".format(reply.content, receiver))
|
logger.info("[wechatcom] sendVoice={}, receiver={}".format(reply.content, receiver))
|
||||||
elif reply.type == ReplyType.IMAGE_URL: # 从网络下载图片
|
elif reply.type == ReplyType.IMAGE_URL: # 从网络下载图片
|
||||||
img_url = reply.content
|
img_url = reply.content
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ def split_audio(file_path, max_segment_length_ms=60000):
|
|||||||
audio = AudioSegment.from_file(file_path)
|
audio = AudioSegment.from_file(file_path)
|
||||||
audio_length_ms = len(audio)
|
audio_length_ms = len(audio)
|
||||||
if audio_length_ms <= max_segment_length_ms:
|
if audio_length_ms <= max_segment_length_ms:
|
||||||
return [file_path]
|
return audio_length_ms, [file_path]
|
||||||
segments = []
|
segments = []
|
||||||
for start_ms in range(0, audio_length_ms, max_segment_length_ms):
|
for start_ms in range(0, audio_length_ms, max_segment_length_ms):
|
||||||
end_ms = min(audio_length_ms, start_ms + max_segment_length_ms)
|
end_ms = min(audio_length_ms, start_ms + max_segment_length_ms)
|
||||||
@@ -124,4 +124,4 @@ def split_audio(file_path, max_segment_length_ms=60000):
|
|||||||
path = f"{file_prefix}_{i+1}" + f".{format}"
|
path = f"{file_prefix}_{i+1}" + f".{format}"
|
||||||
segment.export(path, format=format)
|
segment.export(path, format=format)
|
||||||
files.append(path)
|
files.append(path)
|
||||||
return files
|
return audio_length_ms, files
|
||||||
|
|||||||
Reference in New Issue
Block a user