Hola,

Verán, estoy desarrollando una aplicación de aprendizaje de teclado mediante voz. Para esto, uso python-gi en Debian, que conecta con gtk3, y Pygtk en Windows. El tema de la voz lo llevo diferente en cada plataforma, ya que en Debian puedo disponer de Speech Dispatcher, y en Windows acceder a Microsoft SAPI 5, mediante pywin32.

La aplicación funciona muy bien en Debian, y si no se compila, también en Windows. El problema viene al intentar generar una versión compilada o distribuible (no es como si le entregues el programa a un usuario, además de tener que instalarle python, pywin32, pygtk, pyGObject, etc, etc, etc). Para esto uso py2exe.

Antes que nada, adjunto una parte del código de lo que uso para tomar la voz de SAPI5, porque creo que ahí está el problema. Si alguien cree que no, puedo poner lo que sea de código. Esto es lo que uso de pywin32:

import win32com.client
from win32com.client import Dispatch as dispatch
from win32com.client import constants

clas speak()
# inicializaciones y cosas así
    self.tts = dispatch("SAPI.SpVoice")
    ...
  def say(self, text, stopSignal=0):
    if stopSignal == 0:
      self.tts.Speak("", constants.SVSFPurgeBeforeSpeak)
    self.tts.Speak(text, 1)

Bueno, el detalle funciona. El stopSignal me dice si la aplicación que llama al tts quiere interrumpir la voz si hay algo que se esté ejecutando de lo mismo, si no es 0, se espera a que termine de decir lo que decía, y si es diferente, lo detiene y corta el habla para comenzar él. Aquí, lo que uso de constants es la constante SVSFPurgeBeforeSpeak, y a continuación sigo con el problema.

Todo funciona excelente siempre y cuando lo ejecute desde Python con todo instalado, pero, al compilarlo con py2exe, el programa se ejecuta, al menos la ventana, y cuando debería empezar a hablar, no lo hace, y me escribe un archivo con errores, este es el contenido del archivo:

Traceback (most recent call last):
  File "gtk_main.py", line 39, in say_widget
  File "tts.pyc", line 31, in say
  File "win32com\client\__init__.pyc", line 170, in __getattr__
AttributeError: SVSFPurgeBeforeSpeak

Y este el archivo setup.py, que usé para la compilación:

setup(name="DANI",
      version="0.91-alfa2",
      description="Asistente de aprendizaje de teclado",
      author="Manuel Cortez",
      author_email="[email protected]",
      url="http://code.google.com/p/wcalc";,
      license="GPL",
      scripts=["tts.py", "keyboardexplorer.py", "about.py", "lesson.py"],
     windows = ["gtk_main.py"],
options={'py2exe': dict(includes=['cairo', 'gio', 'pango', 'pangocairo', 'atk', 'win32com'],)})

Alguien sabe qué sucede? según sé, todo está aparentemente bien, pero no funciona. El programa, repito, funciona si lo ejecuto con el intérprete Python que está instalado en el sistema.

Agradezco cualquier ayuda que me pudieran dar. Leí algo en google, pero nada hablaba del uso de SAPI con Python.

Gracias.
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a