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...
dykcjonarz [opcje]... <plik> > plik_slownika
Gdzie możliwe opcje to:
Milenizer to konwerter tekstu na format przeznaczony dla Mileny. Tekstem wejściowym może być:
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.
milenizer [opcje] <plik>
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.
Milenizer rozpoznaje litery do kodu \u017f oraz "ș" i "ț" ("s" i "t" z przecinkiem). W przypadku napotkania znaku literowego niewystępującego w ISO-2:
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.
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.
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.
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.
Jest to odmiana milena_book, tworząca pliki awb i inx dla odtwarzacza audioksiążek Nokia Audiobooks (dla telefonów z S60 3rd Edition).
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 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
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).
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.
Umożliwia głośne czytanie napisów w filmach odtwarzanych w programie mplayer.
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:
#!/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
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
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.
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!