audio - 直接从python程序播放音频(文本到语音)

标签 audio python-3.6 text-to-speech

我试图弄清楚如何从python程序播放音频,而无需将音频保存到我的计算机。声音是在python程序中创建的,只需要在播放后立即停止播放即可。

我已经尝试使用pygame,playsound,子进程,gTTS和其他各种工具,但都没有成功。

gTTS“有效”,但仅保存音频而不播放

我也在使用python 3(我于6/18/18更新)

PyAudio的尝试对我不起作用。但是这是我的代码:

import subprocess 
from gtts import gTTS 
if choose in card.keys(): 
  tts = gTTS(text = choose, lang = 'en') 
  tts.save(audio_eng) 
  checker(guess, choose, card, pract_one, good_count, bad_count, pract_two) 
  return_code = subprocess.call(["afplay", audio_eng])#, shell= True) 

最佳答案

我认为用于这种事情的主要库是PyAudio。它建立在portaudio(一个C库)的顶层,我已经使用了很多次。

如果您使用Python生成了音频,则只需将其传递到输出即可,类似于PyAudio文档(Blocking mode Audio I/O)上的示例。这将停止发生其他过程,直到音频文件完成播放为止。

"""PyAudio Example: Play a wave file."""

import pyaudio
import wave
import sys

CHUNK = 1024


# wf = wave.open(sys.argv[1], 'rb') # Original example
wf = your_audio_data_array

# instantiate PyAudio (1)
p = pyaudio.PyAudio()

# open stream (2)
stream = p.open(format=p.get_format_from_width(your_audio_data_samplewidth),
                channels=your_audio_data_nChannels,
                rate=your_audio_data_framerate,
                output=True)

# read data
data = wf # your_audio_data_array

# play stream (3)
while len(data) > 0:
    stream.write(data)
    # data = wf.readframes(CHUNK) # read more data if you want to stream another buffer

# stop stream (4)
stream.stop_stream()
stream.close()

# close PyAudio (5)
p.terminate()

我已经修改了这个示例,以解释您的问题所在。因此,您只需将音频数据缓冲区(您说您已经在Python中生成)传递给PyAudio。

要一次执行多个进程,请参阅PyAudio中的their documentation回调模式I / O。

关于audio - 直接从python程序播放音频(文本到语音),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51091577/

相关文章:

c++ - QT (C++) 中的简单声音 (.wav) 播放应用程序

python - 在 Pygame 中后台 blit 代码中创建的 TypeError

python - 如何将列表插入 Python 中的 f 字符串?

java - HTML5 初学者。我想要一个 Speech-Box 来运行 Java 程序

javascript - 如何从 javascript 中的输入声音生成负音频波?

javascript - webRTC 视频聊天中的噪音/回声

android - native 应用程序 android 和 ios 上的文本转语音

azure - 使用 Chrome Devtools 捕获 WebSocket 音频文件

audio - Stream.CopyTo(newStream)返回长度0

python - 问题在于变量定义。我不确定如何解决