Воспроизведение аудио непосредственно из программы Python (текст в речь) - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь выяснить, как воспроизводить звук из программы на Python без необходимости сохранения звука на моем компьютере. Звук создается в программе Python, и его нужно просто воспроизвести и остановить сразу после.

Я уже пытался использовать pygame, playsound, subprocess, gTTS и другие, но безуспешно.

gTTS «работает», но сохраняет только звук и не воспроизводит его

Также я использую python 3 (я обновил 18.06.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) 

1 Ответ

0 голосов
/ 29 июня 2018

Я думаю, что основная библиотека, используемая для такого рода вещей, - PyAudio . Он построен поверх portaudio (библиотеки C), которую я использовал много раз.

Если вы сгенерировали звук в Python, вы можете просто передать его на выход, аналогичный примеру в документации PyAudio ( Режим блокировки ввода-вывода аудио 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).

Чтобы одновременно происходило несколько процессов, см. PyAudio Режим обратного вызова в / 1014 * в документации .

...