Сохраните результат итерации по списку в виде одного звука с помощью pyttsx3

#python-3.x #text-to-speech #pyttsx3

Вопрос:

Я пытаюсь создать один аудиофайл из списка предложений с помощью pyttsx3. Я хочу назначить каждое предложение в списке другому голосу и сохранить его в одном аудиофайле. Итак, упрощенная версия того, что я пытаюсь сделать, была бы:

 import pyttsx3


sentences = ['1: Hi there', '2: Hi', '1: How are you?', '2: I am fine']


speaker = pyttsx3.init()
voices = speaker.getProperty('voices')
for s in sentences:
    if s.startswith('1: '):
        speaker.setProperty('voice', 'com.apple.speech.synthesis.voice.fiona')
        speaker.save_to_file(s[2:], 'test.mp3')
    else:
        speaker.setProperty('voice', 'com.apple.speech.synthesis.voice.daniel')
        speaker.save_to_file(s[2:], 'test.mp3')
speaker.runAndWait()

 

Если я выполню приведенный выше код, файл test.mp3 будет создан, но он пуст.
Если я попробую то же самое, но вместо того, чтобы сохранить предложение, я попытаюсь воспроизвести его, все сработает:

 import pyttsx3


sentences = ['1: Hi there', '2: Hi', '1: How are you?', '2: I am fine']


speaker = pyttsx3.init()
voices = speaker.getProperty('voices')
for s in sentences:
    if s.startswith('1: '):
        speaker.setProperty('voice', 'com.apple.speech.synthesis.voice.fiona')
        speaker.say(s[2:])
    else:
        speaker.setProperty('voice', 'com.apple.speech.synthesis.voice.daniel')
        speaker.say(s[2:])
speaker.runAndWait()

 

Это также работает, если я сохраняю каждое предложение в отдельный файл, но не в один файл.
Есть какие-нибудь предложения о том, как достичь того, чего я хочу?
Я с удовольствием воспользуюсь любой другой бесплатной библиотекой для преобразования текста в речь.