Преобразование текста в речь и сохранение в переменную

Пробую преобразование текста в речь на . Использовал вариант через и через win api win32com.client.Dispatch("SAPI.SpVoice") . В целом реализация не сложная, но единственное не могу найти способ засунуть полученный объект в переменную, а точнее текст → аудио → аудио в переменной. Подскажите варианты, или идеи, хотя бы, куда копать. Пример через pyttsx3:

import pyttsx3
engine = pyttsx3.init()
engine.save_to_file('Hello World' , 'test.mp3')
engine.runAndWait()

У этой библиотеки есть сохранение в файл, сама переменная engine - это объект класса pyttsx3. Его нет смысла засовывать в переменную. Второй вариант - через WinApi:

speaker = win32com.client.Dispatch("SAPI.SpVoice")
text = "Введите текст, который вы хотели бы озвучить"
print(speaker.SpeakStream)

Тут получается воспроизвести текст с помощью встроенного в windows голоса. Но только лишь воспроизведение. Не пойму, как преобразовать объект speaker в аудио. В целом, вопрос такой - как с помощью python перевести речь в аудио, и это аудио засунуть в переменную, что бы дальше с ней работать. И условие таково, что необходимо использовать синтезатор самого ПК (библиотеки наподобие gTTS не подходят).


Ответы (2 шт):

Автор решения: Yegor Androsov

Не считаю, что время записи/чтения файла хоть сколько нибудь сравнимы с временем генерациии аудио потока. Однако вот пример кода с использованием библиотеки gtts

from gtts import gTTS
import io

tts = gTTS('hello', lang='en')
b = io.BytesIO()
tts.write_to_fp(b)

print(b.getvalue()) // выведет b'\xff\xf3D\xc4\x00\x11\xa1*\x10...'
→ Ссылка
Автор решения: eri
import comtypes.client

tts = comtypes.client.CreateObject("SAPI.SPVoice")
stream = comtypes.client.CreateObject("SAPI.SpMemoryStream")
constants = comtypes.client.Constants(tts)
stream.Format.Type = constants.enums.get('SpeechAudioFormatType')['SAFT16kHz16BitMono']
tts.AudioOutputStream = stream
tts.Speak(str("hello word").encode("utf-8").decode("utf-8"))
stream.Seek(0)
sound = bytes(stream.GetData())

Использованы SAPI.SPVoice и SAPI.SpMemoryStream для сохранения в оперативку. Байты без заголовка WAV - поэтому указывайте формат когда пошлёте их в кодек.

Другие форматы wav в SpeechAudioFormatType

→ Ссылка