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

如何不保存本地MP3直接播放字符串转语音?

无需生成本地MP3文件实现文本转语音播放的方案

可以利用gTTS的字节流输出能力,配合音频播放库直接在内存中处理音频数据,无需生成本地文件。以下是两种可行的实现方式:

方法一:结合io.BytesIO与pydub

利用gTTS.write_to_fp()将音频数据写入内存字节流,再通过pydub从字节流加载音频并播放。

修改后的speak方法如下(需额外导入io库):

import io
from pydub import AudioSegment
from pydub.playback import play
from gtts import gTTS

# ... 其他代码保持不变 ...

def speak(self, text):
    tts = gTTS(text=text, lang='en')
    # 将音频数据写入内存字节流
    audio_bytes = io.BytesIO()
    tts.write_to_fp(audio_bytes)
    # 重置字节流指针到起始位置
    audio_bytes.seek(0)
    # 从字节流加载音频并播放
    audio = AudioSegment.from_file(audio_bytes, format="mp3")
    play(audio)

方法二:使用pygame加载内存字节流

pygame支持从字节流加载音频,直接播放内存中的MP3数据:

修改后的speak方法如下:

import io
import pygame
from gtts import gTTS

# ... 其他代码保持不变 ...

def speak(self, text):
    tts = gTTS(text=text, lang='en')
    audio_bytes = io.BytesIO()
    tts.write_to_fp(audio_bytes)
    audio_bytes.seek(0)
    
    # 初始化pygame音频模块
    pygame.mixer.init()
    # 加载内存中的音频数据
    pygame.mixer.music.load(audio_bytes)
    pygame.mixer.music.play()
    
    # 等待播放结束
    while pygame.mixer.music.get_busy():
        pygame.time.Clock().tick(10)

注意事项

  1. 确保已安装所有依赖库:pip install gTTS pydub pygame
  2. pydub依赖ffmpeg,需提前安装(Windows可下载ffmpeg并添加到环境变量,Linux/macOS可通过包管理器安装)
  3. 原代码中存在重复导入gTTS,可清理冗余导入优化代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:47:15