67 lines
1.9 KiB
Python
67 lines
1.9 KiB
Python
from gradio_client import Client, file, handle_file
|
|
import asyncio
|
|
import base64
|
|
import io
|
|
import json
|
|
import os
|
|
from datetime import datetime
|
|
from nonebot import logger
|
|
from PIL import Image, ImageOps, ImageDraw, ImageFont
|
|
from nonebot.internal.params import ArgPlainText
|
|
from nonebot.params import CommandArg
|
|
from nonebot.typing import T_State
|
|
from playwright.async_api import async_playwright
|
|
from nonebot import on_command
|
|
from nonebot.adapters.onebot.v11 import MessageEvent, Bot, MessageSegment, GroupMessageEvent, Message
|
|
from nonebot.plugin import PluginMetadata
|
|
from typing import Optional, Union
|
|
from nonebot.matcher import Matcher
|
|
|
|
__plugin_meta__ = PluginMetadata(
|
|
name="语音合成",
|
|
description="太好玩了",
|
|
usage="语音合成",
|
|
type="application",
|
|
extra={
|
|
|
|
}
|
|
)
|
|
|
|
voice = on_command("voice", aliases={"语音合成"})
|
|
|
|
|
|
@voice.handle()
|
|
async def make_voice(ev: MessageEvent, rgs: Message = CommandArg()):
|
|
text = rgs.extract_plain_text()
|
|
if text is None:
|
|
await voice.finish("缺少文本")
|
|
return
|
|
await voice.send("生成中...请耐心等待")
|
|
client = Client("http://localhost:9872/")
|
|
result = client.predict(
|
|
text=f"{text}",
|
|
text_lang="中文",
|
|
ref_audio_path=handle_file(
|
|
"D:\RVC\LJ\雷军_年度演讲.wav"),
|
|
aux_ref_audio_paths=[],
|
|
prompt_text="全球今天的消费者买手机,每六个人至少有一个人买的是小米手机",
|
|
prompt_lang="中文",
|
|
top_k=15,
|
|
top_p=1,
|
|
temperature=1,
|
|
text_split_method="按标点符号切",
|
|
batch_size=20,
|
|
speed_factor=1,
|
|
ref_text_free=False,
|
|
split_bucket=True,
|
|
fragment_interval=0.25,
|
|
seed=-1,
|
|
keep_random=True,
|
|
parallel_infer=True,
|
|
repetition_penalty=1.35,
|
|
api_name="/inference"
|
|
)
|
|
audio_path = result[0]
|
|
message = MessageSegment.record(audio_path)
|
|
await voice.finish(message)
|