ggegoge / PyTDM

Pytońska treść do mowy – Polish Text to Speech library for Python
https://pypi.org/project/pytdm/
MIT License
13 stars 0 forks source link
polish polish-language python3 pyttsx3 speech-synthesis texttospeech tts

PyTDM

ie. Pytońska treść do mowy which is Polish for Python Text to Speech. Package for turning text written in Polish into speech.

Both for standard Python3 and for iOS.

ok but why

This lil library was designed in order to assure that people programming for Pollacks have some sort of an offline-working text to speech python software. For English speaking people there already is the pyttsx3 library which provides such functionalities. If you want your program to talk you simply run few commands

import pyttsx3
engine = pyttsx3.init()
engine.say("now we're talkin'")
engine.runAndWait()

and it's literally that easy! But for Polish there was no such thing. Until now.

installation

it is avalaible on PyPI! you can just run:

pip install pytdm

and you can use it just like that!

iOS

for the iOS version see the pythonista directory on github, do not use pip there – just put this file in the Python Modules/site-packages-3 directory and restart the app. The module will be added to the path and then you can simply import it.

how it's made

It's based on the pyttsx3 package I've mentioned. The thing is that contrary to what many English speaking people think (looking at u americans) Polish actually is pronounceable for someone knowing English (or French – see below).

What PyTDM does is

The asterisk above next to the word "translates" is there for a reason – it's not exactly translation. More like transcription or transliteration. Anglicises or francises depending on the language one has choosen. We shall get back to that later

usage

For simple basic stuff you should do it as follows:

import pytdm
pytdm.mów("dzień dobry, dobranoc")

or the second way:

from pytdm import mowa
mowa.mów("dzień dobry, dobranoc")

and then you can happily listen to the sweet sound of the polish language spoken by the pyttsx3 synthesiser voice. Isn't that great?

You don't have to start the engine as one does with pyttsx3 hence it takes some time for python to import the package (the pytdm modulw performs the pyttsx3.init() command itself when imported).

saving files

With version 0.1.0 came the functionality of saving spoken text in files! It is similar to simply making the computer say stuff:

pytdm.zapisz("dzień dobry świecie!", "example.mp3")

and your file will be saved in your cwd under the name "example.mp3". It isn't working 100% correctly though. For some reason pyttsx3 seems to break when trying to save a second file in the same session. Or rather the file does indeed get saved but the command doesn't stop executing itself. I suppose the issue is at pyttsx3 part.

little disclaimer

the functions have Polish names like mów or tłumacz with those funny strange letter but if you want you can use them without the diacritics eg. write mow or tlumacz. They will work just fine.

In general if you have any problems first you can type eg. help(pytdm.mow) and read the info provided there.

examples

An example for how well does the software work with approxima... translation of polish words is to be seen in the demo.py file (avalaible on my github). You just can run it and then see how well it handles the most sacred polish song (actually the second sacred-est. For the most sacred one see barka.py) – the anthem of the Third Polish Republic.

There is a video showing how the demo.py file works (recorded in low quality by me and posted on youtube) here.

Also with version 0.1.0 the french mode has been introduced therefore there's another demo file demo_fr.py. A video of it being run is here.

All demo files are in the demos github directory.

dependencies

all you need are built-in packages like re and apart from that the pyttsx3 package (version >=2.7). It is avalaible on pypi so you can just do the classic:

pip install pyttsx3

what OS?

The only problem is it's different for every OS.

For other OS I have only some feedback from other people:

In conclusion: it works ok for all of them but some sounds are realised differently on different OSs.

mobile versions – iOS

for iOS see the pythonista directory on github. Everything there is the iOS version of PyTDM.

Function names are weird?

As a cautious reader might have already noticed the main speaking function is mów (fyi it means say just like in the pyttsx3). One could ask wthell? or more properly co do diabła? but that is exactly how the package was intended to be: the functions have polish names. Deal with it. Or use the same name without the diacritics if you really need to.

behind the scenes

Now for some calrification about how the so called translation process actually works.

For every word passed to the mów function it is first tanslated by another polish-named func tłumacz (ie. translate) and it calls 2 more functions first:

only then mów gives the anglicised repolonised text to the engine.say as shown above.

So when you do something like mów('czuję, że będzie dziś dość średni dzień') it first calls tłumacz which calls repolonizuj that returns this simplified polish text: 'czuje, że bendźe dźiś dość średni dźen' and it is passed to the anglicyzuj which gives the final result to be said by pyttsx3:

'choo yeah, zshehh behnjehh jeesh dawshtch shrehdnee jehn'

it sure is amazing.

French

As you may have known the pyttsx3 library offers any speech synthesiser avalaible to the system. Therefore it may happen one does also have the french one and now it is possible to use it with pytdm too.

It is a relatively new feature so you shouldn't expect it to be flawless. As for now pronouncing numbers is not even implemented here. Also it hasn't been tested anywhere apart from macOS yet.

The good thing is it is actually easier to transcribe Polish into French than into English. Why? Well despite what many people think about the French language it is actually pretty logical and much more regular than English. Its reading rules are not that messy and there are not as many strange edge cases.

How to use the french mode?

You must have the pytdm version 0.1.0 or higher installed.

just add the lang="fr" argument or simply fr when calling functions like mów or tłumacz. To set it back to english set lang="en".

>>> import pytdm
>>> pytdm.tłumacz("czuję, że będzie dziś dość średni dzień", "fr")
'tchouyé, jé baindjé djich dochtch chrédgni djègn'
>>> pytdm.mów("czuję, że będzie dziś dość średni dzień", "fr")
czuję, że będzie dziś dość średni dzień

And there is the function francyzuj that works the same as anglicyzuj mentioned before but for French.


TO DO

feel free to fork the github repo and provide some videos:)