Python 3.4 - текст в речь с SAPI

Я пытался использовать этот код для преобразования текста в речь с Python 3.4, но поскольку основным языком моего компьютера является не английский (я использую Win7x64), голос и акцент неверны (потому что я хочу, чтобы он "говорил" по-английски),

import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("Hello, it works!")

Итак, есть ли способ изменить голос / язык (программы, а не системы)? Кроме того, как вы думаете, есть лучший способ сделать это? Возможно, модуль, который может работать на любой системе?

1 ответ

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

Первое, что я хотел бы сделать, это взять английский голос, если у вас его еще нет. (Сначала проверьте, зайдя в свою панель управления-> распознавание речи-> преобразование текста в речь, и посмотрите на свой выбор голоса. Если он говорит "Microsoft Anna - English (United States)"), тогда да, у вас уже есть английский голос.)

Если нет, вам придется взять другой голос Microsoft Speech Platform - Runtime Languages ​​(Version 11). Я настоятельно рекомендую Microsoft Server Speech Text для Speech Voice (en-US, ZiraPro) в качестве английского голоса. Вам также понадобится Microsoft Speech Platform - Software Development Kit (SDK) (версия 11).

Честно говоря, я просто устанавливаю их все, потому что я думаю, что это круто.

После того, как вы установили все эти функции, я обнаружил, что голосовые команды работают с аккуратным взломом реестра: " Получение бесплатных альтернативных голосов TTS, работающих с Win7/8 64bit".

В основном это влечет за собой замену строк в голосах MS Speech Platform в реестре, чтобы вы могли видеть

HKEY_LOCAL_MACHINE\ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \Microsoft\Speech Server\v11.0\Voices HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech Server\v11.0\Voices

реестры окажутся в:

HKEY_LOCAL_MACHINE\ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \Microsoft\Speech\Voices HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices

Как только это будет сделано, вернитесь к панели управления и посмотрите на все голоса, которые вы установили. Вы должны быть в состоянии проверить их все, даже на разных языках. Если голоса не воспроизводятся, значит, установленные вами голоса были неправильными (x86 против 64).

Теперь в python вам нужно сделать вызов SetVoice. Я никогда в своей жизни не программировал на python, но я представляю, что вызов, который вы хотите, выглядел бы примерно как speaker.SetVoice("Microsoft Server Speech Text to Speech Voice (en-US, ZiraPro)"). После того, как вы установили голос, этот голос должен быть тем, который говорит все время, когда вы делаете голосовой вызов.

Теперь, если вы дошли до этой точки, и голоса воспроизводятся на панели управления, но не в вашем коде, возможно, ваша программа 32-битная /64-битная или что-то в этом роде, а затем вам нужно вернуться назад, переустановить противоположные 32-битные /64-битные голоса, снова запустите reg reg и попробуйте снова запустить приложение.

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

Это работает на питоне.

Не стесняйтесь делать его более элегантным.

import win32com.client as wincl

speaker_number = 1
spk = wincl.Dispatch("SAPI.SpVoice")
vcs = spk.GetVoices()
SVSFlag = 11
print(vcs.Item (speaker_number) .GetAttribute ("Name")) # speaker name
spk.Voice
spk.SetVoice(vcs.Item(speaker_number)) # set voice (see Windows Text-to-Speech settings)
spk.Speak("Hello, it works!")

Это также должно дать общее представление о том, как переводить примеры SDK.

Другие вопросы по тегам