我试图弄清楚如何从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)
答案 0 :(得分:0)
我认为用于这种事情的主要库是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。