dijous, desembre 31, 2009

Veu a Python amb Festival

Fes parlar el teu Python
Fa poc vaig explicar com fer servir les veus catalanes a Ubuntu. En aquest temps FestCAT ha fet forces progressos: ja hi ha diverses veus de molta qualitat (clunits) i un repositori per a Ubuntu, que facilita la instal·lació.

Avui explicaré com fer servir les veus amb Python, per fer els nostres programes més humans. Com que només fa uns mesos que faig servir Python, segur que trobareu millors formes de fer-ho, així que us animo a deixar els vostres comentaris. En tot cas funciona, Forma part de l'aplicació que estic desenvolupant per a la Gestió de Classes i Tutoria.

Aquest és el mòdul que s'encarrega de que Festival tingui la codificació que necessita, i només cal importar-lo així:

from xerra import diguesCadena


i cridar-lo així:

diguesCadena(cadena)


Baixar el codi.

Codi del mòdul:

#!/usr/bin/python
#-*- coding: UTF-8 -*-
__doc__="""Funcions de veu amb Festival

"""
__author__ = "Paco Rivière (http://pacoriviere.cat)"
__version__ = "0.1"
__date__ = "21 desembre 2009"
__copyright__ = "Copyright (c) 2009 Paco Rivière"
__license__ = "Python"
########################################
# xerra.py #
########################################

import os, sys

#Si echo és cert l'ordre es copia a pantalla:
echo=False
Debug=False

#llengua
llengua='catalan'
# cadena del tub de veu:
motor='|festival --tts --language '+llengua

def diguesCadena(cadena=u'Això és una prova'):
"""Llegeix una cadena en veu alta
cadena: string

Torna: int (0-éxit 1-fracàs)
"""
if cadena=='': cadena=u'No hi ha res a llegir'
try:
ordre=u'echo \'%s\' %s' % (cadena, motor)
ordre=ordre.encode('latin-1')
if echo:print ordre.decode('latin-1')
err=os.system(ordre)
return err
except:
if Debug:
print "Hi ha hagut un error:", sys.exc_info()[0]
print " La ordre utilitzada ha estat:"
print ordre.decode('latin-1')
raise
print " Hi hagut un problema en llegir la cadena:", cadena.decode('latin-1')
raw_input(" Premeu Intro per continuar.")
return 1

if __name__ == '__main__':
print __doc__
err=diguesCadena()
print 'Retorn:', err

Cap comentari:

Publica un comentari a l'entrada