Parcourir la source

更新tts功能

关习习 il y a 3 mois
Parent
commit
644a8cd80d
4 fichiers modifiés avec 91 ajouts et 3 suppressions
  1. 2 1
      key.example.json
  2. 23 1
      main.py
  3. 15 0
      msg_send_save.py
  4. 51 1
      tts.py

+ 2 - 1
key.example.json

@@ -1,5 +1,6 @@
 {
   "groq": "YOUR_GROQ_KEY",
   "siliflow": "YOUR_SILIFLOW_KEY",
-  "feishu": "YOUR_FEISHU_KEY"
+  "feishu": "YOUR_FEISHU_KEY",
+  "tts": "YOUR_TTS_KEY"
 }

+ 23 - 1
main.py

@@ -6,9 +6,11 @@ import time
 import re
 from wakeonlan import send_magic_packet
 from ai_pic import story_start, story_start_p2p, story_start_p2p_sese
-from msg_send_save import send_private_message_word,save_group_message,send_group_message_pic,send_group_message_word,send_group_poke,del_group_message
+from msg_send_save import (send_private_message_word,save_group_message,send_group_message_pic,send_group_message_word,
+                           send_group_poke,del_group_message,send_group_vioce)
 from chat_model import AI_chat,AI_get_picprompt,AI_lora_getpic_prompt,AI_sendphoto_ornot
 from special_date import get_week,get_v50,get_holidays
+from tts import get_free_tts
 from config import config_get
 import random
 import os
@@ -88,6 +90,7 @@ def on_command(group_id, user_id,command):
 /王石:查询王石效果
 /猫猫画画:调用自定义AI绘画功能
 /整点瑟瑟:不用我多说了吧
+/语音合成+角色名称:合成AI语音(测试用,目前支持诺艾尔,芙宁娜,神里绫华,迪卢克
 所有命令均需要@猫猫触发"""
         send_group_message_word(group_id, home)
         save_group_message(group_id, my_name, home)
@@ -116,6 +119,25 @@ def on_command(group_id, user_id,command):
                 message_id = send_group_message_pic(group_id, user_id, story_start("nsfw,"+AI_lora_getpic_prompt(pic_word)))['data']['message_id']
                 time.sleep(8)
                 del_group_message(message_id)
+    elif str(command).startswith("/语音合成"):
+        send_group_message_word(group_id, "语音合成开始")
+        if str(command).startswith("/语音合成诺艾尔"):
+            name = "诺艾尔"
+            text = str(command)[len("/语音合成诺艾尔"):]
+        elif str(command).startswith("/语音合成芙宁娜"):
+            name = "芙宁娜"
+            text = str(command)[len("/语音合成芙宁娜"):]
+        elif str(command).startswith("/语音合成神里绫华"):
+            name = "神里绫华"
+            text = str(command)[len("/语音合成神里绫华"):]
+        elif str(command).startswith("/语音合成迪卢克"):
+            name = "迪卢克"
+            text = str(command)[len("/语音合成迪卢克"):]
+        result = get_free_tts(name, text)
+        if result.startswith("https"):
+            send_group_vioce(group_id, result)
+        else:
+            send_group_message_word(group_id, "语音合成失败!")
 
     else:
         error = "抱歉没有找到你所输入的命令!如有关于命令的问题请@猫猫输入/菜单进行查询\n示例:\n@猫猫 /菜单"

+ 15 - 0
msg_send_save.py

@@ -62,6 +62,21 @@ def send_group_poke(group_id, user_id):
         'user_id':user_id
     })
 
+def send_group_vioce(group_id, file_path):
+    """
+    发送群语音消息
+    """
+    response = requests.post('http://127.0.0.1:3000/send_group_msg', json={
+        'group_id': group_id,
+        'message': [{
+            'type': 'record',
+            'data': {
+                'file': file_path
+            }
+        }]
+    })
+    return response.json()
+
 def save_group_message(group_id, user_name, raw_message):
     """
     保存聊天记录,按群名创建文件夹

+ 51 - 1
tts.py

@@ -2,4 +2,54 @@ import csv
 import datetime
 import os
 import requests
-from config import key_get
+from config import key_get
+
+free_map = {
+    "诺艾尔": "原神-中文-诺艾尔_ZH",
+    "芙宁娜": "原神-中文-芙宁娜_ZH",
+    "神里绫华": "原神-中文-神里绫华_ZH",
+    "迪卢克": "原神-中文-迪卢克_ZH",
+}
+def get_free_tts(name, text):
+    """
+    从免费的试用api获取语音合成效果
+    """
+    url = "https://gsv2p.acgnai.top/infer_single"
+    headers = {
+        "Authorization": "Bearer " + key_get('tts'),
+        "Content-Type": "application/json"
+    }
+    model = free_map[name]
+    if model is None:
+        return "该模型暂不支持"
+    response = requests.post(url, headers=headers, json={
+          "version": "v4",
+          "model_name": model,
+          "prompt_text_lang": "中文",
+          "emotion": "默认",
+          "text": text,
+          "text_lang": "中文",
+          "top_k": 10,
+          "top_p": 1,
+          "temperature": 1,
+          "text_split_method": "按标点符号切",
+          "batch_size": 1,
+          "batch_threshold": 0.75,
+          "split_bucket": True,
+          "speed_facter": 1,
+          "fragment_interval": 0.3,
+          "media_type": "mp3",
+          "parallel_infer": True,
+          "repetition_penalty": 1.35,
+          "seed": -1,
+          "sample_steps": 16,
+          "if_sr": False
+        })
+    data = response.json()
+    if data.get("msg") == "合成成功":
+        return data.get("audio_url")
+    else:
+        return "获取失败"
+
+if __name__ == "__main__":
+    print(get_free_tts("诺艾尔", "你好"))