You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不先保存文件直接播放Edge TTS生成的音频?

实现Edge TTS音频直接播放的修改方案

要实现无需保存文件直接播放Edge TTS生成的音频,核心思路是获取音频流的字节数据,再用音频播放库直接处理这些数据,无需写入本地文件。以下是具体修改步骤:

1. 安装依赖库

除了edge_tts,还需要安装用于音频播放的pygame库:

pip install pygame

2. 修改后的完整代码

import asyncio
import edge_tts
import pygame
from io import BytesIO

voices = ['en-US-GuyNeural']
text = "Hi this is the test"
voice = voices[0]

async def amain():
    # 初始化pygame音频模块
    pygame.mixer.init()
    
    # 创建Edge TTS通信对象
    communicate = edge_tts.Communicate(text, voice)
    
    # 收集所有音频字节块
    audio_bytes = b""
    async for chunk in communicate.stream():
        if chunk["type"] == "audio":
            audio_bytes += chunk["data"]
    
    # 将字节数据包装成类文件对象
    audio_file = BytesIO(audio_bytes)
    
    # 加载并播放音频
    pygame.mixer.music.load(audio_file)
    pygame.mixer.music.play()
    
    # 等待播放结束
    while pygame.mixer.music.get_busy():
        await asyncio.sleep(0.1)
    
    # 清理资源
    pygame.mixer.quit()

loop = asyncio.get_event_loop_policy().get_event_loop()
try:
    loop.run_until_complete(amain())
finally:
    loop.close()

关键修改说明

  • 移除了原代码中与文件保存相关的变量和save方法调用
  • 通过communicate.stream()异步遍历获取音频数据块,筛选出audio类型的块并拼接成完整的音频字节数据
  • 使用BytesIO将字节数据转换为类文件对象,让pygame可以直接加载播放
  • 添加了等待播放结束的逻辑,避免程序提前退出导致音频中断
  • 播放完成后清理pygame音频资源,避免残留占用

内容的提问来源于stack exchange,提问作者Abstract

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:32:12