Przejdź do treści

Milena polski syntezator mowy dla systemu Linux

Menu

Porady

Wyłączamy słownik Ivony

Ci, którzy używają syntezatora Ivona w wersji SAPI zauważyli pewnie denerwujący fakt: otóż wbudowany w Ivonę słownik (w rzeczywistości jest to bardzo prymitywny, oparty na wyrażeniach regularnych preprocesor tekstu) zawiera kilka konstrukcji które poza pewnymi kontekstami są pozbawione sensu. I tak na przykład wyraz hol. (czyli słowo "hol" zakończone kropką) jest czytane na końcu zdania jako "holenderski". Może to śmieszyć, ale zdanie "samochód został wzięty na holenderski" znalezione w książce wcale nie śmieszy - wręcz przeciwnie, powoduje zaburzenie w odbiorze tekstu.

Jeśli więc korzystamy z Ivony tylko poprzez Milenę i OpenSapi, możemy wyłączyć wbudowany słownik. W tym celu wchodzimy do naszego katalogu:

~/.wine/drive_c/Program Files/IVONA/IVONA 2 Voices

i zmieniamy nazwę pliku polish-ivona.lex np. na polish-ivona.lex.old (nie usuwamy pliku, bo kiedyś może się nam przydać), oraz polish-prm.lex na polish-prm.lex.old. Następnie w dowolnym edytorze tworzymy nowy plik polish-ivona.lex z następującą zawartością:

#& encoding=UTF-8

"~!" "`"
"~'" "'"

Oczywiście w miejsce ".wine" musimy podstawić właściwą nazwę katalogu Wine.

Od tej chwili Ivona przestanie realizować swoje radosne pomysły na upiększenie polskiej wymowy. Należy pamiętać, że aby zmiana odniosła skutek należy przeładować głos Ivony!

Konfiguracja dla zaawansowanych

Po przyzwyczajeniu się do słodkiego głosiku Mileny zaczyna razić pewien fakt: otóż w podstawowej konfiguracji Milena przesadnie akcentuje wyrazy aby zwiększyć czytelność, również pauzy mogą wydawać się przydługie. W pewnym stopniu można to poprawić w sposób następujący:

  1. Tworzymy plik (np. "profi.dat") z następującą zawartością:
    pause comma 20
    pause statement 100
    pause exclamation 100
    pause question 180
    pause colon 50
    pause ellipsis 220
    pause conj 15
    
    pause dialog comma 40
    pause dialog statement 150
    pause dialog exclamation 80
    pause dialog question 80
    pause dialog colon 50
    pause dialog ellipsis 180
    
    length stress 5
    
  2. Edytujemy plik ~/.milena_bookrc, zwracając uwagę na następujące linie:
    tempo=0.84
    pitch=0.9
    mbrola_conf=[tu wstaw ścieżkę do pliku profi.dat]

Parametry tempo i pitch dobieramy według własnych potrzeb.

Od tej chwili Milena nie będzie przedłużać akcentowanych sylab. Skrócenie pauz między frazami spowoduje pewne przyspieszenie czytania, przy zachowaniu czytelności interpunkcji.

Tworzymy audiobooka

Aby utworzyć audioksiążkę, prede wszystkim musimy dysponować tekstem książki w postaci pliku .txt w kodowaniu ISO-8859-2, każdy akapit w jednej linii. Oczywiście jest raczej mało prawdopodobne, że interesująca nas książka będzie akurat w tej postaci - tak więc musimy przeprowadzić konwersję z formatu w którym książka została dostarczona. Do tego celu służy milenizer.

Konwersja na format txt

W najprostszym przypadku książkę mamy w pliku rtf lub doc. Milenizer natywnie przeprowadza konwersję z formatu rtf, dla formatów doc i odt automatycznie użyje antiworda lub odt2txt. Tak więc wydajemy polecenie:

milenizer -o ksiazka.txt ksiazka.rtf

Po jego wykonaniu w pliku ksiazka.txt powinniśmy otrzymać postać tekstową książki.

Czasem zdarza się, że milenizer natrafi na znak, którego nie jest w stanie przekształcić na ISO-2. W tym celu można posłużyć się opcją -i (znak zostanie zignorowany) lub -I (znak zostanie zapisany w postaci encji szesnastkowej w celu późniejszego ręcznego poprawienia). Nasze polecenie będzie wyglądać więc tak:

milenizer -I -o ksiazka.txt ksiazka.rtf

Teraz musimy sprawdzić, czy książka jest rzeczywiście w formacie takim jak potrzeba (czyli pojedyncza linia na każdy akapit). W większości przypadków tak będzie, lecz zdarza się że osoba nieumiejętnie skanująca książkę pozostawia formatowanie, a nawet numery linii. Otwieramy w tym celu plik książka.txt w naszym ulubionym edytorze tekstu (należy pamiętać, aby umiał on obsługiwać kodowanie ISO-8859-2) i po prostu przeglądamy kilka pierwszysh stron. Jeśli pozostawiono formatowanie należy ponownie użyć milenizera:

milenizer -u 50 -o ksiazka2.txt ksiazka.txt

Opcja -u informuje program, że należy dokonać "odformatowania" tekstu, przy czym liczba podana jako argument oznacza, że linie krótsze niż podana zostaną potraktowane jako końcowe linie akapitu.

Jeśli pozostawiono w książce również numery stron, opcję -u należy zastąpić -U. Spowoduje to, że linie zawierające wyłącznie ciągi cyfr oraz otaczające je puste linie zostaną usunięte przed dokonaniem odformatowania.

Zdarza się również, że książkę mam w postaci pliku txt. Musimy oczywiście obejrzeć jak wygląda ów plik. Opcji -u i -i możemy użyć jak w przykładzie powyżej. Dodatkowo może się zdarzyć, że tekst jest co prawda sformatowany, ale wszystkie akapity są rozdzielone pustym wierszem. Możemy wtedy użyć specjalnej formy:

milenizer -u 0 -o ksiazka2.txt ksiazka.txt

Wartość argumentu "0" oznacza, że milenizer nie będzie próbował odgadywać gdzie kończy się akapit, a po prostu podzieli tekst na akapity uwzględniając oddzielające puste linie.

Konwersja na plik mp3

W najprostszym przypadku możemy już skonwertować tekst na mp3. Zakładając że plikiem tekstowym jest ksiazka.txt, wydajemy polecenie:

milena_book ksiazka.txt

W efekcie otrzymamy plik ksiazka.mp3, który możemy załadować do naszego odtwarzacza.

Niestety, taki najprostszy scenariusz możliwy jest wyłącznie wtedy, gdy książka jest stosunkowo krótka (np. pojedyncze opowiadanie). Przy dłuższej formie pojedynczy plik mp3 jest niezbyt wygodny. Najprostszym sposobem będzie podzielenie pliku na części. W tym celu musimy zaopatrzyć się w program mp3splt. Wydajemy polecenie:

mp3splt -f -t 5.0 -a -p th=-48,gap=120,off=0.4 -d rozdzialy ksiazka.mp3

W efekcie zostanie utworzony katalog o nazwie "rozdzialy" a w nim pliki odpowiadające poszczególnym częściom książki podzielonej na fragmenty długości 5 minut.

Jeśli potrzeba innej długości części, podajemy ją w opcji -t polecenia.

Podział na rozdziały

Oczywiście, metoda podziału na odcinki równej długości nie zawsze jest wygodna Szczególnie jeśli książka będzie przygotowana do przesłuchania przez kilka osób. lub mamy zamiar korzystać z niej wielokrotnie (np. podręcznik) warto poświęcić chwilę na porządne przygotowanie książki do konwersji.

Milenizer oprócz konwersji na txt potrafi również w sposób mniej lub więcej automatyczny podzielić książkę na rozdziały. Aby z tej możliwości skorzystać, musimy lekko przeredagować treśc książki.

Pierwsza linia będzie czytana na początku każdego rozdziału. Najlepiej jest więc umieścić w niej autora i tytuł książki.

Kolejne rozdziały rozpoznawane są poprzez wstawienie znaku '#' na początku pierwszej linii rozdziału. Linia znajdująca się bezpośrednio za znakiem '#' będzie traktowana jako tytuł rozdziału. Stąd postać książki będzie mniej więcej taka:

Juliusz Verne, Łowcy meteorów
#Rozdział pierwszy, w którym sędzia John Proth...
Nie ma powodu ukrywać przed czytelnikami, że miasto...
...
#Rozdział drugi, który wprowadza czytelnika do domu...
- Mitz, Mitz!
- O co chodzi, synusiu?
...

Po przygotowaniu tekstu tworzymy sobie jakiś katalog (np. "ksiazka") i wydajemy polecenie:

milenizer -s ksiazka/ksiazka ksiazka.txt

Opcja -s oznacza podział na rozdziały, następujący po niej parametr to wzór według którego zapisane będą kolejne pliki. W przypadku polecenia jak powyżej będą to odpowiednio ksiazka/ksiazka_01.txt, ksiazka/ksiazka_02.txt itd.

Teraz konwertujemy poszczególne rozdziały na mp3. Korzystamy tu z możliwości milena_book konwersji wszystkich plików txt w katalogu:

milena_book ksiazka

Po wykonaniu polecenia w katalogu ksiazka otrzymamy pliki mp3 odpowiadającew każdemu plikowi txt - czyli w naszym przypadku ksiazka/ksiazka_01.mp3, ksiazka/ksiazka_02.mp3 itd.

Dodatkowe parametry

Program milena_book przyjmuje kilka dodatkowych parametrów. Najczęstsze z nich to:

-H
odczyt godzin (np. "budzik zadzwonił o 6:25")
-L<język>
Włącza dodatkowe słowniki i reguły rozpoznawania dla książek zawierających wiele wyrazów w danym języku (nazwiska, nazwy geograficzne itp). W chwili obecnej najbardziej dopracowany jest angielski (en), można korzystać również z francuskiego (fr) i hiszpańskiego (es)

Tak więc konwersja np. powieści J. Deavera (miejsce akcji Nowy Jork, częste użycie zapisu godzin) będzie wyglądać następująco:

milena_book -Len -H kolekcjoner_kosci

Tworzenie audioksiążek dla Nokia Audiobook

Posiadacze telefonów Nokia z systemem Symbian mogą zamiast odtwarzacza mp3 użyć programu Nokia Audiobook, przeznaczonego specjalnie do słuchania książek w wersji audio.

UWAGA!
Program wymaga sox w wersji >=14.1 oraz pakietu amrwb (nie jest dołączany automatycznie przez instalator Ubuntu!).
Tworzenie książek dla Nokii jest możliwe wyłącznie z książki podzielonej na rozdziały.

Przede wszystkim, musimy utworzyć dodatkowy indeks dla generowania spisu treści. Do tego celu służy dodatkowy przełącznik -x milenizera. Tak więc nasze polecenie podzielenie książki będzie wyglądało tak:

milenizer -x -s ksiazka/ksiazka ksiazka.txt

Po wykonaniu polecenia w kattalogu docelowym oprócz plików txt znajdzie się plik index.nok.

Teraz w miejsce milena_book uruchamiamy milena_nokia. Ponieważ skrypt tworzy docelowy katalog w innym miejscu (tzn. jest to katalog bezpośrednio przystosowany do przegrania do E:\audiobooks naszej Nokii) musimy również podać jego nazwę:

milena_nokia ksiazka KsiazkaNokia

Po wykonaniu w katalogu KsiazkaNokia mamy wszystkie pliki potrzebne do zainstalowania na telefonie.

Oprócz parametrów znanych z milena_book skrypt przyjmuje dodatkowo:

-b <kompresja>
Wartość kompresji od 0 do 9.
-p okladka.jpg
Plik z okładką

Dykcjonarz - czyli uczymy Milenę wymowy wyrazów obcych.

Mimo że zarówno wbudowane słowniki, jak i reguły translacji pozwalają Milenie na prawidłową (lub przynajmniej nie rażącą) wymowę popularnych obcojęzycznych słów, w wielu przypadkach zachodzi konieczność poprawienia wymowy. Do utworzenia słownika służy program dykcjonarz.

Uruchamiamy go bardzo prosto:

dykcjonarz ksiazka.txt > slownik.txt

Możemy tu użyć również przałączników językowych, czyli np. dla angielskiego:

dykcjonarz -Len ksiazka.txt > slownik.txt

Dykcjonarz działa dość długo (w zależności od wielkości pliku i maszyny od kilku do kilkudziesięciu sekund), po zakończeniu działania w pliku slownik.txt zostaną wypisane w oddzielnych sekcjach słowa których dykcjonarz nie zna (tzn. te które nie znajdują się w pliku basewords.dat) oraz słowa znane, do których dykcjonarz ma jakieś wątpliwości (są to przede wszystkim słowa pisane w całym tekście wielką literą). Postać pliku jest bardzo prosta, każda linia ma postać typu:

słowo //wymowa w EPN-PL

Ciąg "//" (dwóch znaków slash) jest traktowany przez Milenę jako komentarz, tak że w tym przypadku "wymowa" służy tylko do pokazania, w jaki sposób dane słowo zostanie wymówione przez syntezator.

Teraz otwieramy ten plik w naszym ulubionym edytorze (dla przypomnienia: edytor musi pracować w ISO-8859-2) i dopisujemy wymowę dla słów, które Milena interpretuje nieprawidłowo. Wymowę podaje się normalnym tekstem ortograficznym, z następującymi rozszerzeniami:

@ (małpa)
Tworzy nieistniejącą w języku polskim "schwa", potrzebną np. do wymowy angielskich wyrazów (np. Beatless - bit@ls, Marple - merp@l)
~! (tylda wykrzyknik)
Umieszczenie tego ciągu w tekście spowoduje, że główny akcent w wyrazie będzie umieszczony na najbliższej sylabie
~, (tylda przecinek)
Jak wyżej, ale dotyczy akcentu pomocniczego
~' (tylda apostrof)
Modyfikuje poprzedzającą literę. W większości przypadków będzie to separator, pozwalający oddzielnie wymówić litery stanowiące normalnie jeden fonem (np. mor~'ze) lub błędnie potraktowane przez Milenę jako obcojęzyczną zbitkę literową (dh, th, ph, sh, sch, tz, skj itd). W pozostałych przypadkach modyfikator zamienia literę na domyślny dla niej fonem, nawet gdy reguły wymowy stanowią inaczej (np. francuski Lupin - lip~!ę~'). Niektóre modyfikatory mają również dodatkowe znaczenie:
h~'
Tworzy "krótkie" h (nie istniejące w języku polskim) - jak w angielskim Graham (grejh~'em)
ł~'
Skrócone 'ł', użyte jako łącznik między samogłoskami.
i~'i
Ponieważ połączenie "ii" jeśli nawet tworzy dwie samogłoski zawsze wymawiane jest tak, aby słyszalne było oddzielenie, ta konstrukcja pozwala na wymówienie go łącznie. Stosowane praktycznie w angielskich wyrazach, gdzie ostatnia akcentowana sylaba zawiera "ee", na przykład:
lee li~'i
deep di~'ip // ale...
deep+purple diparp@l // "deep" nie jest tu akcentowane
                     // cała nazwa wymawiana łącznie

Zamiast podania wymowy możemy posłużyć się skrótami:

$S (dolar duże S)
Oznacza, że dane słowo będzie traktowane jako skrót i przeliterowanie:
ana $S // będzie wymówione jako aen~!a
$1..9 (dolar cyfra od 1 do 9)
oznacza, że główny akcent wyrazu będzie ustawiony na podanej sylabie licząc od końca. Ten sposób zapisu dopuszczalny jest również wtedy, gdy podajemy wymowę stanowiącą pojedyncze słowo:
Iwanowicz $3 // będzie wymówione jako 'iv~!anoviC'
Wasiliewna $3 // błąd - będzie wymówione przez 'ś'
Wasiliewna was~'iljewna $3 // będzie wymówione jako vas~!iljevna

Czasem zachodzi konieczność podania wymowy całego zwrotu. Ponieważ w słowie nie może być spacji, ponadto różne (czasem błędne) pisownie mogą prowadzić do tego samego zwrotu, mamy tu następujące możliwości:

_ (podkreślnik)
zastępuje dowolną (również zerową) ilość spacji.
+ (plus)
zastępuje co najmniej jedną spację.
~ (tylda)
zastępuje myślnik lub dowolną (również zerową) ilość spacji. Np. "coca~cola" pasuje do "coca cola", "coca-cola" i "cocacola".
` (odwrócony apostrof)
Zastępuje opcjonalny apostrof (również odwrócony). Np. "d`artagnan" pasuje do "d`artagnan", "d'artagnan" i "dartagnan"
* (gwiazdka)
zastępuje dowolny ciąg liter do końca wyrazu. W podaniu wymowy powinien wystąpić w takim przypadku znak '%' (procent), w miejsce którego zostanie wstawiony ten ciąg. Np: "brown* brałn%" spowoduje wymówienie "brown" jako "brałn", "brownowi" jako "brałnowi" itd.
[litery] (ciąg liter w nawiasach kwadratorych)
pasuje do jednej z podanych liter, np: "lyc[ée]e" pasuje do "lycée" i "lycee"

W słowie mogą wystąpic zarówno wielkie, jak i małe litery, przy czym wielka litera pasuje tylko do wielkiej litery w tekście, mała pasuje do litery niezależnie od wielkości. Pozwala to na zróżnicowanie wymowy homogramów (ważne przede wszystkim przy obcojęzycznych słowach). I tak np.:

Grace grejs
spowoduje, że słowo "Grace" będzie potraktowane jako imę (Grace Kelly na przykład) i wymówione jako "grejs", natomiast słowo "grace" będzie potraktowane jako czysto polskie słowo (liczba mnoga od "graca") i wymówione zgodnie z regułami polskiej wymowy.

Pamiętać należy, że przy dopasowaniu reguł ważna jest ostatnia pasująca, toteż złożone zwroty najlepiej umieszczać na końcu słownika.

Po utworzeniu słownika możemy podać go Milenie poprzez parametr -u. We wczytanym słowniku pominięte zostaną słowa które nie posiadają podanej wymowy.

Istnieje również możliwość kaskadowego tworzenia słowników, przydatna przede wszystkim przy tworzeniu np. kolejnych powieści z cyklu. Podanie dykcjonarzowi parametru -u spowoduje wczytanie podanego słownika i pominięcie znanych już słów w wynikowym słowniku. Parametr -u może wystąpić wielokrotnie. Pamiętać jedynie należy, aby Milenie podać wszystkie słowniki w podanej kolejności, np:

dykcjonarz -Len -u slownik.txt ksiazka.txt > slownik_nowy.txt
milena_book -Len -u slownik.txt -u slownik_nowy.txt ksiazka.txt