找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

查看: 11|回复: 0

[转载] TTS生成语音Python源码

[复制链接]
  • TA的每日心情
    开心
    昨天 09:53
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    6

    主题

    48

    回帖

    569

    积分

    高级会员

    积分
    569
    来自: 中国福建泉州
    发表于 昨天 09:55 | 显示全部楼层 |阅读模式 来自: 中国福建泉州
    非业余 - aardio 编程语言 - 非官方问答社区
    风行者三期培训:Aardio+Python+Flutter,1000集课程让你成为全栈开发高手!https://mp.weixin.qq.com/s/_WOoHFtITUyLk2k7BXYGkg
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    aardio风行者第三期培训班https://mp.weixin.qq.com/s/cdZcvFiAWhlYTaSrQGCPvA



    [AAuto] 纯文本查看 复制代码
    # -*- coding: utf-8 -*-
    """
    TTS 生成器 —— 读取 A.txt 内容生成 MP3
    ✅ 从 A.txt 读取正文
    ✅ 从 config.txt 读取配置(可选)
    ✅ 免注册、免Key、使用 edge-tts
    ✅ 自动生成 output 文件夹
    ✅ 错误处理 + 进度提示
    """
    
    import asyncio
    import edge_tts
    import os
    import sys
    from pathlib import Path
    
    
    # ========== 默认配置 ==========
    DEFAULT_VOICE = "zh-CN-YunxiNeural"
    DEFAULT_RATE = "-10%"
    DEFAULT_PITCH = "+5Hz"
    DEFAULT_VOLUME = "+0%"
    DEFAULT_OUTPUT_FILE = "output.mp3"
    OUTPUT_DIR = "output"
    TEXT_FILE = "需要生成的文本.txt"
    
    
    # ========== 读取 A.txt ==========
    def read_text_file(filepath=TEXT_FILE):
        """读取 A.txt 中的文本内容"""
        if not os.path.exists(filepath):
            print(f"❌ 文本文件 {filepath} 不存在!")
            return None
    
        try:
            with open(filepath, "r", encoding="utf-8") as f:
                content = f.read().strip()
            if not content:
                print(f"❌ {filepath} 内容为空!")
                return None
            return content
        except Exception as e:
            print(f"❌ 读取 {filepath} 失败:{e}")
            return None
    
    
    # ========== 读取 config.txt ==========
    def read_config_file(config_path="config.txt"):
        """读取配置文件,返回参数字典"""
        config = {
            "output_file": DEFAULT_OUTPUT_FILE,
            "voice": DEFAULT_VOICE,
            "rate": DEFAULT_RATE,
            "pitch": DEFAULT_PITCH,
            "volume": DEFAULT_VOLUME,
        }
    
        if not os.path.exists(config_path):
            print(f"⚠️  配置文件 {config_path} 不存在,使用默认参数")
            return config
    
        try:
            with open(config_path, "r", encoding="utf-8") as f:
                lines = f.readlines()
    
            for line in lines:
                line = line.strip()
                if not line or line.startswith("#"):
                    continue
                if "=" in line:
                    key, value = line.split("=", 1)
                    key = key.strip()
                    value = value.strip()
                    if key in config:
                        config[key] = value
    
            print("✅ 已加载配置文件")
            return config
    
        except Exception as e:
            print(f"⚠️  读取配置文件失败,使用默认参数:{e}")
            return config
    
    
    # ========== 语音合成函数 ==========
    async def generate_audio(text, config):
        """根据文本和配置生成语音文件"""
        output_file = config["output_file"]
        voice = config["voice"]
        rate = config["rate"]
        pitch = config["pitch"]
        volume = config["volume"]
    
        # 确保输出目录存在
        os.makedirs(OUTPUT_DIR, exist_ok=True)
        full_path = os.path.join(OUTPUT_DIR, output_file)
    
        print(f"\n




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    非业余 - aardio 编程语言 - 非官方问答社区
    风行者三期培训:Aardio+Python+Flutter,1000集课程让你成为全栈开发高手!https://mp.weixin.qq.com/s/_WOoHFtITUyLk2k7BXYGkg
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    aardio风行者第三期培训班https://mp.weixin.qq.com/s/cdZcvFiAWhlYTaSrQGCPvA
    回复

    使用道具 举报

    *滑块验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|非业余 - aardio 编程语言 - 非官方问答社区 知道创宇云防御

    GMT+8, 2025-9-16 06:10 , Processed in 0.101093 second(s), 31 queries .

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表