From 7c71eafa416bd10dc38794e856fc52524f6e58e4 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 8 Oct 2024 15:10:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0edge-tts=E8=AF=AD?= =?UTF-8?q?=E9=9F=B3=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/utils/speech.py | 37 ++++++++++++++++++++++++++----------- requirements.txt | 1 + 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/apps/utils/speech.py b/apps/utils/speech.py index d48b3a3f..9925f4c6 100644 --- a/apps/utils/speech.py +++ b/apps/utils/speech.py @@ -3,6 +3,8 @@ from django.conf import settings import uuid import os from django.utils import timezone +import edge_tts +from asgiref.sync import async_to_sync def generate_voice(msg: str, per: int = 0): @@ -17,16 +19,29 @@ def generate_voice(msg: str, per: int = 0): str: 地址 dict: result """ - client = AipSpeech(settings.BD_SP_ID, settings.BD_SP_KEY, settings.BD_SP_SECRET) - result = client.synthesis(msg, 'zh', 1, {'vol': 5, 'spd': 5, 'per': per}) - # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 - if not isinstance(result, dict): - file_name = '{}.mp3'.format(uuid.uuid4()) - path = '/media/' + timezone.now().strftime('%Y/%m/%d/') - full_path = settings.BASE_DIR + path - if not os.path.exists(full_path): - os.makedirs(full_path) - with open(full_path + file_name, 'wb') as f: - f.write(result) + file_name = '{}.mp3'.format(uuid.uuid4()) + path = '/media/' + timezone.now().strftime('%Y/%m/%d/') + full_path = settings.BASE_DIR + path + if not os.path.exists(full_path): + os.makedirs(full_path) + result = None + if getattr(settings, 'BD_SP_ENABLED', False): + client = AipSpeech(settings.BD_SP_ID, settings.BD_SP_KEY, settings.BD_SP_SECRET) + result = client.synthesis(msg, 'zh', 1, {'vol': 5, 'spd': 5, 'per': per}) + # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 + if not isinstance(result, dict): + with open(full_path + file_name, 'wb') as f: + f.write(result) + return True, path + file_name, None + elif getattr(settings, 'EDGE_TTS_ENABLED', False): + if per == 0: + per = 'zh-CN-XiaoxiaoNeural' + else: + per = 'zh-CN-YunjianNeural' + communicate = edge_tts.Communicate(msg, per) + try: + async_to_sync(communicate.save(full_path + file_name)) return True, path + file_name, None + except Exception as e: + result = str(e) return False, None, result diff --git a/requirements.txt b/requirements.txt index ed37fcc6..f04b0c51 100755 --- a/requirements.txt +++ b/requirements.txt @@ -34,3 +34,4 @@ pymysql==1.0.3 docxtpl==0.16.7 paho-mqtt==2.0.0 # deepface==0.0.79 +# edge-tts==6.1.12