#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
为"韩寒创业简史 上"生成TTS
"""

import os
import sqlite3
import asyncio
import edge_tts


async def generate_tts(text, output_file):
    """
    生成TTS音频
    """
    communicate = edge_tts.Communicate(text, "en-US-AriaNeural", rate="-30%")
    with open(output_file, "wb") as f:
        async for chunk in communicate.stream():
            if chunk["type"] == "audio":
                f.write(chunk["data"])


async def main():
    adid = 8428  # 韩寒创业简史 上
    adname = "韩寒创业简史_上集_以笔为矛的少年天才__韩寒__飞驰人生__人物传记__商业故事__掘金计划2026"
    
    # 获取srts数据
    db_path = r"\\ll\\d\\xtrssvjj\\dpd.db"
    conn = sqlite3.connect(db_path)
    cur = conn.cursor()
    
    cur.execute("SELECT idx, en FROM srts WHERE adid=? AND en IS NOT NULL AND en != '' ORDER BY idx", (adid,))
    srtsdata = cur.fetchall()
    conn.close()
    
    # 创建输出目录
    output_dir = f"{adname}_tts"
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 生成TTS
    total = len(srtsdata)
    for idx, en in srtsdata:
        output_file = os.path.join(output_dir, f"tts_{idx}.mp3")
        
        print(f"生成TTS {idx} ({srtsdata.index((idx, en))+1}/{total})...")
        try:
            await generate_tts(en, output_file)
            print(f"  成功: {output_file}")
        except Exception as e:
            print(f"  失败: {e}")


if __name__ == "__main__":
    asyncio.run(main())
