直接从 python 程序播放音频(文本到语音)
Playing audio directly from a python program (text to speech)
我想知道如何从 python 程序播放音频而不需要将音频保存到我的计算机。声音是在 python 程序中创建的,只需要播放并在之后立即停止。
我已经尝试使用 pygame、playsound、subprocess、gTTS 和其他各种方法,但都没有成功。
gTTS "works" 但只保存音频不播放
我也在使用 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()
我已将此示例修改为您解释问题的方式;所以你只需将音频数据缓冲区传递给 PyAudio(你说你已经在 Python 中生成)。
我想知道如何从 python 程序播放音频而不需要将音频保存到我的计算机。声音是在 python 程序中创建的,只需要播放并在之后立即停止。
我已经尝试使用 pygame、playsound、subprocess、gTTS 和其他各种方法,但都没有成功。
gTTS "works" 但只保存音频不播放
我也在使用 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()
我已将此示例修改为您解释问题的方式;所以你只需将音频数据缓冲区传递给 PyAudio(你说你已经在 Python 中生成)。