Skip to main content

代码,大家可以照着这个自己玩

  1. 代码,大家可以照着这个自己玩。因为写的比较快,🔒糙极了(又不是不能用)
    https://github.com/yihong0618/tg_bot_collections
    
    from telebot import TeleBot
    from telebot.types import Message
    
    from . import *
    
    import wave
    import numpy as np
    from handlers.ChatTTS import Chat
    
    chat = Chat()
    chat.load_models()
    is_generating = False
    
    
    def generate_tts_wav(prompt):
        global is_generating
        texts = [prompt,]
        is_generating = True
        wavs = chat.infer(texts, use_decoder=True)
        output_filename = 'tts.wav'
        audio_data = np.array(wavs[0], dtype=np.float32)  # Ensure the data type is correct
        sample_rate = 24000
        # Normalize the audio data to 16-bit PCM range
        audio_data = (audio_data * 32767).astype(np.int16)
    
        # Open a .wav file to write into
        with wave.open(output_filename, 'w') as wf:
            wf.setnchannels(1)  # Mono channel
            wf.setsampwidth(2)  # 2 bytes per sample
            wf.setframerate(sample_rate)
            wf.writeframes(audio_data.tobytes())
    
        print(f"Audio has been saved to {output_filename}")
        is_generating = False
        
    
    
    def tts_handler(message: Message, bot: TeleBot):
        """pretty tts: /tts <address>"""
        global is_generating
        if is_generating:
            bot.reply_to(message, "please wait for the previous ChatTTS to finish")
            return
        bot.reply_to(
            message,
            f"Generating ChatTTS may take some time please left" 
        )
        m = message.text.strip()
        prompt = m.strip()
        if len(prompt) > 100:
            bot.reply_to(message, "prompt too long must length < 100")
            return
        try:
            generate_tts_wav(prompt)
            with open(f"tts.wav", "rb") as audio:
                bot.send_audio(
                    message.chat.id, audio, reply_to_message_id=message.message_id
                )
        except Exception as e:
            print(e)
            bot.reply_to(message, "tts error")
            is_generating = False
    
    
    def register(bot: TeleBot) -> None:
        bot.register_message_handler(tts_handler, commands=["tts"], pass_bot=True)
        bot.register_message_handler(tts_handler, regexp="^tts:", pass_bot=True)
    GitHub - yihong0618/tg_bot_collections: collections of yihong0618's telegram bot
OKHK