Przejdź do treści

Milena polski syntezator mowy dla systemu Linux

Menu

Aplikacje pomocnicze

Dykcjonarz

Powrót do menu

Jest to prosty program pozwalający na stworzenie słownika przeznaczonego dla pojedynczego tekstu (np. książki) w celu prawidłowej wymowy przez Milenę nazw własnych. Pobiera wszystkie wyrazy z tekstu i wypisuje te, które nie pasują do słownika Mileny a w całym tekście pisane są wyłącznie wielką literą (oprócz początku zdania), zawierają apostrof lub dowolną literę z zakresu poza polskimi.

Program jest bardzo prowizoryczny, ale do czasu opracowania pełnego słownika wymawialnych wyrazów może być przydatny...

Sposób użycia:

dykcjonarz [opcje]... <plik> > plik_slownika
Gdzie możliwe opcje to:
-L <lang>
Kod języka (może występować wielokrotnie)
-u <slownik>
Plik słownika użytkownika
-m /sciezka/do/morfologik.txt
Używa pliku morfologika do eliminacji znanych słów
-b /sciezka/do/pl_basewords.dat
Używa pliku basewords do eliminacji znanych słów
-B
Jeśli nie podano -m ani -b, nie próbuje znaleźć domyślnej lokalizacji pliku pl_basewords.txt (użyteczne tylko przy testach)

Milenizer

Powrót do menu

Milenizer to konwerter tekstu na format przeznaczony dla Mileny. Tekstem wejściowym może być:

  1. niesformatowany tekst w dowolnym kodowaniu. Następuje tu wyłącznie konwersja na ISO-8859-2.
  2. sformatowany tekst w dowolnym kodowaniu. Oprócz konwersji na ISO-8859-2 milenizer próbuje połączyć linie w akapity, w miarę możliwości lącząc również przeniesienia wyrazów. Możliwe jest wymuszone zakończenie akapitu pustą linią lub rozpoznawanie końca akapitu po długości linii.
  3. tekst w formacie rtf.
  4. tekst w formacie doc.
  5. tekst w formacie odt.

W przypadku formatów "doc" i "odt" Milenizer używa zewnętrznych konwerterów (odpowiednio Antiword i odt2txt).

Na wyjściu otrzymuje się tekst w postaci akceptowanej przez Milenę (każdy akapit w jednej linii). Możliwy jest również półautomatyczny podział tekstu na rozdziały, z opcjonalną autonumeracją rozdziałów, uwzględnianiem tytułów rozdziałów oraz wyróżnieniem prologu oraz epilogu lub ostatniego rozdziału.

Milenizer może również służyć jako prosty konwerter z RTF na TXT. Na wyjściu otrzymuje się wtedy plik tekstowy w kodowaniu UTF-8.

Sposób użycia:

milenizer [opcje] <plik>

Dostępne opcje:

opcje rozformatowania

-u <minlen>
-U <minlen>
Włączenie rozformatowania. Jeśli <minlen> wynosi 0, uznaje się, że akapity są oddzielone pustą linią. W przeciwnym przypadku akapitem kończącym jest akapit o długości nie większej niż <minlen>. Opcja -U powoduje dodatkowo ignorowanie numeracji stron (tzn. linii zawierających wyłącznie cyfry oraz nastepujących po nich pustych)
-d
nie uznaje linii zaczynających sie od '-' za dialogi.

opcje podziału na rozdziały

-s <sciezka>
włącza tryb podziału na pliki rozdziałów. W tym trybie pierwsza linia traktowana jest jako linia tytułowa i rozpoczyna każdy plik. Jeśli nie podano żadnej z opcji -a/-A, pierwsza linia każdego rozdziału jest traktowana jako tytułowa rozdziału i oddzielona kropką od tytułu książki. Po linii tytułowej zawsze występuje pusty wiersz. Każdy plik kończony jest oddzielonym pustym wierszem zdaniem "koniec rozdziału" lub (dla ostatniego) "koniec książki". Jeśli podano opcje -p/-P, prolog kończony jest zdaniem "koniec prologu". Kolejne pliki mają postać <sciezka>_<numer>.txt, gdzie <numer> jest dwu- lub trzycyfrową liczbą oznaczającą kolejny plik.
-x
Tworzy dodatkowy plik indeksu dla milena_nokia
-S <separator>
Podaje znak separujący rozdziały (domyslnie '#'). Znak ten powinien byc pierwszym widocznym znakiem linii. Wszelkie białe znaki za separatorem są ignorowane.

opcje autonumeracji rozdziałow

-a
włącza autonumerację rozdziałow
-A
włącza autonumeracje, dodatkowo pierwsza linia rozdziału traktowana jest jako tytuł rozdziału.
-l
wyróżnia ostatni rozdział
-p
-P
wyróżnia prolog. Jesli podano -P pierwsza linia traktowana jest jako tytuł prologu.
-e
-E
wyróżnia epilog. Jesli podano -E pierwsza linia traktowana jest jako tytuł epilogu.

Opcje -p/-P i -e/-E działają niezależnie od tego czy podano -a czy -A. Wystąpienie którejkolwiek z opcji -p/-P/-e/-E/-l bez opcji -a/-A jest nielegalne. Wszystkie opcje autonumeracji są ignorowane, jeśli nie podano opcji -s.

opcje konwersji

-c <kodowanie>
podaje kodowanie pliku wejściowego. Jeśli nie podano tej opcji, program próbuje wydedukowac kodowanie na podstawie zawartości pliku. Jeśli program skompilowano z biblioteką enca, będzie ona użyta do określenia kodowania. W przeciwnym przypadku dopuszczalne są tylko trzy wejściowe kodowania (UTF-8, ISO-8859-2, CP-1250).
-r
powoduje że program dokona wyłącznie konwersji z formatu RTF na tekst w kodowaniu UTF-8 (przydatne przy ręcznej obróbce plikow). Podanie tej opcji spowoduje, ze wszystkie opcje oprocz -o, -i oraz -f będą ignorowane.
-i
powoduje, że przy konwersji z UTF-8 znaki spoza dopuszczalnego zakresu będą ignorowane. Nie dotyczy to znaków o kodach wyższych niż \uFFFF.
-I
powoduje, że przy konwersji z UTF-8 znaki spoza dopuszczalnego zakresu będą wypisywane jako szesnastkowe encje zgodne z HTML. Opcja przeznaczona przede wszystkim do przygotowania tekstu do dalszej obróbki.

pozostałe opcje

-h
wypisuje treść pomocy
-o <nazwa_pliku>
program zapisze wynik konwersji do podanego pliku (domyślnie program wypisuje wynik na standardowe wyjście).
-f <tryb>
określa tryb traktowania przypisów (footnotes) przy konwersji plikow w formacie RTF. Dopuszczalne są następujace tryby:
  • d - ignorowanie przypisow (domyślnie);
  • n - przypisy w postaci czytelnej na ekranie. Każdy przypis w treści oznaczany jest [n] (gdzie <n> to numer przypisu). Po akapicie wypisywana jest linia "---", a po niej wszystkie przypisy wystepujące w akapicie.
  • e - jak wyżej, ale wszystkie przypisy są grupowane i wypisane na końcu.
  • a - podobnie jak 'n', lecz przypisy wypisane są w formie czytelnej dla syntezatora mowy.
  • i - przypisy w postaci czytelnej dla syntezatora mowy będą wypisane bezpośrednio w miejscu wystąpienia przypisu w treści.

Uwagi co do konwersji na ISO-2.

Milenizer rozpoznaje litery do kodu \u017f oraz "ș" i "ț" ("s" i "t" z przecinkiem). W przypadku napotkania znaku literowego niewystępującego w ISO-2:

  1. Litery "ș" i "ț" ("s" i "t" z przecinkiem) zamienione zostają odpowiednio na "ş" i "ţ";
  2. Litery "à", "è", "ì" i "ù"( "a","e","i","u" z akcentem gravis) zostają zamienione na odpowiednie litery z akutem (odpowiednio "á", "é", "í" i "ú").Pozwala to na rozróżnienie np. angielskich i francuskich słów o podobnej pisowni ("collège" - "kol~!eż", ale "college" - "kolidż");
  3. Litery "þ" (thorn) i "ð" (eth) zostają zamienione odpowiednio na "t" i "d";
  4. Litera "ñ" występująca przed samogłoską zostaje zamieniona na "ńj", w pozostałych przypadkach na "ń";
  5. Litery "å", "æ", "ø", "œ" "ij" i "ŋ" zamienione zostają odpowiednio na "o", "ä", "ö", "ö", "ij", "ng";
  6. Pozostałe litery zostaja zamienione na ich odpowiedniki bez akcentu.

Taki sposób konwersji w wielu przypadkach pozwala na prawidłową (lub przynajmniej nie rażąco błędną) wymowę obcojęzycznych wyrazów bez konieczności wprowadzania ich do słownika.

Dodatkowo częściowo rozpoznawana jest cyrylica i przekładana fonetycznie według uproszczonych zasad odpowiadających językowi rosyjskiemu. Oprócz liter z alfabetu rosyjskiego rozpoznawane są również litery charakterystyczne dla alfabetów ukraińskiego i białoruskiego. Translacja jest w fazie eksperymentalnej, nie należy się więc spodziewać dobrych rezultatów, ale czytany tekst powinien być zrozumiały.

Milena_book

Powrót do menu

Jest to bardzo prosty skrypt w bashu służący do szybkiej konwersji książki będącej wynikiem działania milenizera (czyli kompletu plików txt) na komplet plików mp3.

Sposób użycia:

milena_book [opcje] <katalog>

Przy pierwszym uruchomieniu skrypt tworzy plik ~/.milena_bookrc, w którym należy ustawić wszystkie parametry, w szczególności parametr "voice" wskazujący ścieżkę do pliku językowego Mbroli.

Opcje:

-H
odczyt godzin w formacie HH:MM:SS i HH:MM
-u <plik>
dodatkowy słownik uzytkownika
-f <plik>
dodatkowy plik frazera
-m <plik>
dodatkowy plik konfiguracji mbroli
-L <lang>
plik języka

Skrypt znajduje wszystkie pliki z rozszerzeniem .txt w podanym katalogu i tworzy z nich pliki mp3, zamieniając w nazwie rozszerzenie .txt na .mp3. Do pracy wymagany jest lame.

Milena_nokia

PowrĂłt do menu

Jest to odmiana milena_book, tworząca pliki awb i inx dla odtwarzacza audioksiążek Nokia Audiobooks (dla telefonów z S60 3rd Edition).

Sposób użycia:

milena_nokia [opcje] <katalog_txt> <katalog_nokii>

<katalog_txt> to katalog w którym umieszczone zostały pliki .txt będące wynikiem działania milenizera z opcjami -x i -s (opcja -x tworzy plik indeksu konieczny do stworzenia pliku .inx dla playera).

<katalog_nokii> to katalog, w którym utworzone zostaną pliki wynikowe .awb i .inx. W razie potrzeby zostanie utworzony automatycznie.

Opcje:

-b <tryb>
kompresja awb (0 do 9, domyslnie 2)
-p <plik>
obrazek okładki

Opcje u,L,H,m,Q,s,t oraz f przekazane będą do Mileny.

UWAGA!
Do wersji 0.1.9-4 do pracy wymagany jest sox skompilowany ze wsparciem dla formatu amr-wb! Od 0.1.9-5 wymaga amrwb. Jeśli obrazek okładki jest w innym formacie niż jpg, potrzebny jest również ImageMagick

Milena_say

Powrót do menu

Również prosty skrypt w bashu, umożliwiający bezpośrednie odczytanie tekstu (z pliku lub parametrów w linii poleceń). Potrzebuje jednego z programów aplay lub sox (wykrywane są automatycznie).

Sposób użycia:

milena_say [opcje] [tekst]
milena_say [opcje] -F <plik>
Jeśli nie podano opcji -F ani tekstu, będzie on odczytany ze standardowego wejścia. W przypadku czytania ze standardowego wejścia lub pliku tekst musi być zakodowany w ISO-8859-2.

Opcje:

-F <plik>
czytaj tekst z pliku
-H
odczyt godzin w formacie HH:MM:SS i HH:MM
-u <plik>
dodatkowy słownik uzytkownika
-f <plik>
dodatkowy plik frazera
-m <plik>
dodatkowy plik konfiguracji mbroli
-L <lang>
plik języka

Milena_subplayer

Powrót do menu

Umożliwia głośne czytanie napisów w filmach odtwarzanych w programie mplayer.

UWAGA!
Program nie jest już rozwijany i w następnych wersjach będzie usunięty. Jego miejsce zajął SubAloud (do ściągnięcia z tego katalogu). Program współpracuje z wieloma syntezatorami (m.in. Ivoną), ma dużo większe możliwości (m.in. automatyczne przyspieszanie czytania zachodzących na siebie kwestii), jest niezależny od języka i formatu napisów.
Dokładne informacje w pliku README_pl (w ściągniętym archiwum).
Użytkownicy Ubuntu mogą zainstalować SubAloud bezpośrednio z mojego repozytorium ppa:ethanak/milena.
Niniejszy wpis pozostaje na razie wyłącznie jako fragment historii...

Program odczytuje napisy w formacie JACOsub, dlatego trzeba skonwertować posiadane napisy na ten format. Wydajemy polecenie:

mplayer -dumpjacosub -ao none -vo none film.avi

Po wykonaniu polecenia w bieżącym katalogu powinien pojawić się plik dumpsub.jss, zawierający napisy w danym formacie.

Oczywiście jeśli napisy mamy w innym pliku niż domyślny, lub są one w jakimś nietypowym kodowaniu, należy użyć którejś z opcji mplayera dotyczącej napisów.

Teraz możemy odtworzyć film:

mplayer -softvol film.avi | milena_subplayer dumpsub.jss

Parametr -softvol jest potrzebny, aby móc niezależnie regulować głośność ścieżki dźwiękowej filmu (głośność odczytywanego tekstu ustawiamy parametrem vol w linii soxeffect_sub pliku ~/.milena_bookrc)

Uprzedzając ewentualne pytania: na dzień dzisiejszy nie widzę żadnej możliwości współpracy Mileny z innym odtwarzaczem. Technicznie potrzebna jest jedna z dwóch opcji:

  1. odtwarzacz wysyła synchronicznie napisy np. na stdout (lub w inne podane miejsce)
  2. odtwarzacz pozwala z dokładnością do 0.1 sekundy jednoznacznie określić aktualny czas filmu.
Przykładowy skrypt do odtwarzania filmów może wyglądać tak:
#!/bin/bash

#ustaw opcje mplayera w linii ponizej
mplayer_opt="-ao alsa"

#odkomentuj ponizsza linie jesli nie chcesz wyswietlania napisow
#nodisplay=t

film=$(readlink -f "$1")
napisy=""
if [ "$2" != "" ] ; then
	napisy=$(readlink -f "$2")
fi	
if [ -d ~/tmp ] ; then
	cd ~/tmp
else
	cd ~
fi
if [ "$napisy" = "" ] ; then
	mplayer -subcp enca:pl:cp1250 -nosound -vo none -dumpjacosub \
	 $film >/dev/null 2>/dev/null
else
	mplayer -subcp enca:pl:cp1250 -nosound -vo none -dumpjacosub \ 
	-sub "$napisy" $film >/dev/null 2>/dev/null
fi
if [ "$nodisplay" = "t" ] ; then
	napisy=""
	mplayer_opt="$mplayer_opt -noautosub"
fi
if [ "$napisy" = "" ] ; then
	mplayer -subcp enca:pl:cp1250 -softvol $mplayer_opt \
	 "$film" | milena_subplayer ./dumpsub.jss
else
	mplayer -subcp enca:pl:cp1250 -softvol $mplayer_opt \
	 -sub "$napisy" "$film" | milena_subplayer ./dumpsub.jss
fi
rm ./dumpsub.jss

Milena_ws

Powrót do menu
Program został usunięty ze względu na zerową przydatność.

Milena_kadu

Powrót do menu

Skrypt pozwalający na użycie Mileny w module kadu_notify_speech (kompatybilny z programem "powiedz").

Możliwe jest ustawienie czestotliwości bazowej oraz tempa wymowy z poziomu okna konfiguracji Kadu, pozostałe ustawienia są ignorowane.

Jako ścieżkę do programu należy podać:

/usr/local/bin/milena_kadu

Milena_submixer

Powrót do menu
UWAGA!
Program nie jest już rozwijany, jego rolę przejęła Milena ABC. Niniejszy wpis pozostawiono jedynie dla miłośników historii...

Submixer to program umożliwiający zgranie oryginalnej ścieżki dźwiękowej filmu z czytanymi przez Milenę napisami oraz utworzenie nowego pliku, zawierającego zmiksowany materiał. Ponieważ submixer automatycznie dopasowuje poziom głośności oryginalnej ścieżki do poziomu czytanego tekstu, a jednocześnie dba o to, aby poza dialogami poziom oryginału był wysoki, komfort oglądania (i słuchania) filmu jest dużo wyższy niż przy stosowaniu programów czytających bezpośrednio napisy (np. subplayer). Również automatyczna regulacja tempa czytania w miejscach zagęszczenia dialogów pozwala na bardziej prawidłową synchronizację czytanego tekstu z oryginałem. Dzięki submixerowi można również oglądać filmy z lektorem np. na telefonach komórkowych (czytanie napisów w rozdzielczości 320x240 jest niespecjalnie wygodne).

Aby utworzyć film z wgranymi napisami, należy najpierw skonwertować napisy na jedyny znany submixerowi format JACOsub oraz zrzucić oryginalną ścieżkę audio do pliku wav. Można to zrobić pojedynczym poleceniem, np.:

mplayer -dumpjacosub -ao pcm:fast -vo null -vc null -sub napisy.txt film.avi

(bliższe informacje - patrz dokumentacja mplayera). Po wykonaniu tego polecenia w bieżącym katalogu pojawią się pliki audiodump.wav i dumpsub.jss.

Plik dumpsub.jss należy teraz przejrzeć, usunąć zbędne linie oraz połączyć następujące po sobie kwestie, a następnie zapisać w kodowaniu ISO-8859-2. W najprostszym przypadku można po prostu przepuścić plik przez milenizer, np:

milenizer -o dumpsub_jss.txt dumpsub.jss

Najlepszym sposobem będzie jednak wykorzystanie Mileny ABC, która pozwoli na szybką edycję pliku oraz utworzenie słownika obcojęzycznych zwrotów. Dodatkowo w Milenie ABC planowane jest częściowe zautomatyzowanie edycji napisów (kod automatycznie łączący kwestie w całość jest w fazie eksperymentalnej).

Uwaga!
Mplayer czasem potrafi przy dumpjacosub wypluć nieprawidłową linię TIMERES (np. TIMERES wynosi 25, a rzeczywista rozdzielczośc 100). Taki przypadek można wykryć od razu patrząc na początek pliku: jeśli w pierwszej linii jest #TIMERES=25 (lub zamiast 25 inna liczba różna od 100), a w dalszej części występują zapisy np. 00:11:22.32 (ostatni człon oznaczający ilość jednostek czasowych jest nie mniejszy niż TIMERES) należy po prostu zmienić wartość w pierwszej linii na 100.

Teraz można przystąpić do tworzenia ścieżki audio. Wydajemy polecenie (przykładowo):

milena_submixer -u dumpsub_jss.dic audiodump.wav dumpsub_jss.txt newaudio.wav

Proces tworzenia ścieżki dźwiękowej potrwa kilka minut. Po jego zakończeniu możemy sprawdzić poprawność odtwarzając plik w mplayerze:

mplayer -audiofile newaudio.wav film.avi

Wynikowy plik wav będzie miał te same parametry (wielkość, częstotliwość próbkowania, ilośc kanałów) jak plik źródłowy. Jedynym ograniczeniem jest tu ilość kanałów (maksymalnie dwa, czyli mono lub stereo).

Teraz można już stworzyć wynikowy film. Tworzymy go za pomocą mencodera, przykładowo:

mencoder -audiofile newaudio.wav -oac mp3lame -lameopts cbr:br=128:mode=3 \
    -ovc copy film.avi -o nowy_film.avi

Ponieważ wspominałem o tworzeniu wersji dla komórki, oto przykładowy skrypt tworzący film w formacie strawnym dla Nokii (w rozdzielczości 320x240):

#!/bin/bash
a=`ffmpeg -i "$1" 2>&1 | grep 'Stream.*Video' 2>/dev/null | tr ',' ' '`
w=""
h=""
if [ "$a" != "" ] ; then
	for b in $a; do
		if echo -n $b | grep -E '^[0-9]+x[0-9]+$' ; then
			w=`echo $b | cut -dx -f1`
			h=`echo $b | cut -dx -f2`
			break
		fi
	done
fi

if [ "$#" != 2 ] && [ "$#" != "3" ] ; then
	echo Sposób użycia: $0 '<infile> <outfile.3gp> [audiotrack.wav]'
	exit 1
fi

left=0
top=0
rite=0
bot=0

let "th=($h*320)/$w"
if let "$th>=180" ; then
	let "top=(240-$th)/2"
	let "bot=240-(th+top)"
else
	top=30
	bot=30
	th=180
	let "nw=($h*16)/9"
	let "left=($w-$nw)/2"
	let "rite=$w-($nw+$left)"
	let "left=2*($left/2)"
	let "rite=2*($rite/2)"
fi

echo $left $rite $top $bot

let "tw=320+$left+$rite"
sx=""
if [ $left != "0" ] ; then
	sx="$sx -cropleft "$left
fi
if [ $rite != "0" ] ; then
	sx="$sx -cropright "$rite
fi
if [ $top != "0" ] ; then
	sx="$sx -padtop "$top
fi
if [ $bot != "0" ] ; then
	sx="$sx -padbottom "$bot
fi



if [ "$3" != "" ] ; then
ffmpeg -i "$1" -s ${tw}x${th} -i "$3" -map 0:1 -map 1:0 \
	-vcodec mpeg4 -acodec libfaac \
	$sx -r 15 -y -aspect 4:3  "$2"

else
ffmpeg -i "$1" -s ${tw}x${th} -vcodec mpeg4 -acodec libfaac \
	$sx -r 15 -y -aspect 4:3 "$2"

fi

Uwaga!
Przy pierwszym uruchomieniu zostanie utworzony plik ~/.milena_submixer (dokładny opis znaczenia poszczególnych wartości w załączonym pliku README). O ile domyślne parametry regulacju głośności powinny być prawidłowe, o tyle wartości tempa i wysokości głosu należy dopasować do swoich upodobań.

UWAGA!
Z przyczyn technicznych program nie został zamieszczony w paczce Mileny, proszę o sciągnięcie z działu download! Do skompilowania potrzebna jest biblioteka samplerate w wersji devel.

Milena_gtk

Powrót do menu

Prosty, ale użyteczny skrypcik udźwiękowienia środowiska pracy. Pozwala na:

Skrypt przeznaczony jest dla środowiska Gnome, ale działa również na KDE i XFCE.

Do działania skryptu potrzebna jest biblioteka python-Xlib. Dla użytkowników Ubuntu:

apt-get install python-xlib

UWAGA!
Z przyczyn technicznych skrypt nie został zamieszczony w paczce Mileny, proszę o sciągnięcie z działu download!