2015-05-22 2 views
1

Я спасаю текста в речь аудио файл, используя следующий код:Python comtypes текста в речь не суметь молча

from comtypes.client import CreateObject 
from comtypes.gen import SpeechLib 

engine = CreateObject("SAPI.SpVoice") 
stream = CreateObject("SAPI.SpFileStream") 
stream.Open('audio.mp3', SpeechLib.SSFMCreateForWrite) 
engine.AudioOutputStream = stream 
engine.speak(text) 
stream.Close() 

Иногда, созданный файл не может быть воспроизведен и может иметь нулевой размер - хотя ошибок нет. Я нашел пример текста ввода, который использовался во время одного из этих сбоев (слишком долго для включения здесь), и результат был воспроизводимым, но он не имеет явно проблемных функций.

Я не смог выяснить, как обнаружить ошибки в коде выше или определить, что может вызвать проблему. В идеале, я хотел бы решить проблему, но обнаружить проблему, которая позволила бы мне справиться с ней, было бы достаточно. Как я могу это достичь?

+0

Ну, 'текст' не определен. Я предполагаю, что это в вашем коде? – IronManMark20

+0

Да, 'text' определен в моем коде - это фрагмент. – Ninjakannon

ответ

1

Ну, я не знаю, почему это провалилось молча, но когда я запустил его, он поднял: ImportError: Cannot import name SpeechLib.

Затем я пошел к испытанному оле Google, и нашел это так вопрос:

Can't save to wav from python, can't import SpeechLib from comtypes.gen, what next?

Так что ваш код должен выглядеть следующим образом:

from comtypes.client import CreateObject 

text="Hi there, how are you?" 
engine = CreateObject("SAPI.SpVoice") 
stream = CreateObject("SAPI.SpFileStream") 
from comtypes.gen import SpeechLib 
stream.Open('audio.mp3', SpeechLib.SSFMCreateForWrite) 
engine.AudioOutputStream = stream 
engine.speak(text) 
stream.Close() 

Это работало и сохранил файл audio.mp3 ,

+0

Спасибо за ваш вклад. Мой код работает более 99% времени и не создает ошибку, которую вы описываете. Иногда, однако, звуковой файл сломан, и вот что я не знаю, как исправить. – Ninjakannon

+0

Думаю, я напомнил, что на самом деле я использовал SO-вопрос/ответ, когда я впервые установил библиотеку comtypes. Однако, после запуска кода один раз, я мог бы использовать код, как в моем вопросе, без ошибок. – Ninjakannon

Смежные вопросы