Да, у меня тоже была идея заюзать hal через dbus, но т.к. я с ним не работал, а учить было лень, пришлось искать альтернативные методы. Кстати s/is founded/was found/.
def __getDeviceName(self, device):
result = ""
if device.PropertyExists('info.vendor'):
result = device.GetProperty('info.vendor') + " "
if device.PropertyExists('info.product'):
result += device.GetProperty('info.product')
else:
result += "unknown"
return result
def __say(self, text):
pipe = os.popen('espeak -ven+f2 -s 150 -a 10','w')
print text
pipe.write(text)
pipe.close()
Во-первых, есть смысл предложить это команде gnome, в качестве одного из средств для людей с ограниченными возможностями + уникальная фича, которую можно использовать саму по себе.
Второе, имеет смысл добавить локализацию, чтобы говорило на языке, определяемом локалью.
def __say(self, text):
pipe = os.popen('espeak -ven+f2 -s 150 -a 10','w')
print text
pipe.write(text)
pipe.close()
Заменить 'espeak -ven+f2 -s 150 -a 10' на 'festival --tts --language ru_female', но у вас опция language работать не будет, это нужно скрипт один править.
В espeak en - означает язык, в убунте есть и русский, f - значит female, f2 - значит второй голос (их там 4 или 5), -s задает скорость произнесения слов, а -a задает громкость.
Использовать локализацию я не вижу смысла, потому что не русский женский фестиваля не аналогичный espeak не работает удовлетворительно, да и для многих других языков голосов вообще нет, никаких. Да а мужской русский для фестиваля весит 200 метров и не поставляется с дистрами.
Да а мужской русский для фестиваля весит 200 метров и не поставляется с дистрами.
Ну так я скачал поставил, проверил. Говорит имхо даже реалистичнее, чем еспиковский.
Но вот просто так выход не перенаправишь. Ибо как задать голос при иницилизации я так и не нашёл, а в не интерактивном режиме с фестивалем сложнее управляться.
В интерактивном режиме просто отправляешь в пайп '(voice_msu_ru_nsh_cg)', для неинтерактивного в файле /usr/share/festival/languages.scm (алярм, это все для убунты) заменяешь
((equal? language 'klingon)
(language_klingon))
на
((equal? language 'klingon)
(language_klingon))
((equal? language 'ru_female)
(language_russian_female))
и
(define (language_castillian_spanish)
"(language_spanish)
Set up language parameters for Castillian Spanish."
(voice_el_diphone)
(set! male1 (lambda () (voice_el_diphone)))
(Parameter.set 'Language 'spanish)
)
на
(define (language_castillian_spanish)
"(language_spanish)
Set up language parameters for Castillian Spanish."
(voice_el_diphone)
(set! male1 (lambda () (voice_el_diphone)))
(Parameter.set 'Language 'spanish)
)
(define (language_russian_female)
"(language_russian_female)
Set up language parameters for Russian."
(voice_msu_ru_nsh_cg)
)
а потом задешь в командной строке как я писал выше, но это все для женского голоса, для него портебуется конвертация сообщений из юникода в koi8
В общем суть такова.
Неплохо было бы озвучивать не только storage-девайсы. А то в наличии мобилка, фотик, вебкамера, мышка, джойстик, принтер, блютуз донгл, хотелось бы услышать и их голос.
И еще я бы сократил все эти объявы, оно не нужно знать, как называется модель, т.к. там все равно обычно альфанумериковая белиберда, да и размер мне не нужен. Нужно всего лишь обявить, что подключено мышко, подмонтирован такой-то волюм, и т.д.
А еще если ключ типа вербозе указать то чтоб объём инфы регулировать легко. Можно грабить корованы...