Skocz do zawartości

Pomocna odpowiedź

Cześć Ethanak:)

Próbuję odpalić Twój syntetyzator na nanopi air (16.04.6 LTS - Xenial Xerus), w marnej podróbce Twojego Ciapka:) ale niestety mam problem z zależnościami, brakuje pakietu sox, a z instalacją sobie nie radze:) Poniżej wklejam próbę, może będziesz  w stanie pomóc:


Unpacking mbrola-pl1 (0.1-2) ...
Setting up mbrola-pl1 (0.1-2) ...
root@NanoPi-NEO-Air:/home/pi/test/kedrigern# dpkg -i milena*.deb
Selecting previously unselected package milena-data.
(Reading database ... 52891 files and directories currently installed.)
Preparing to unpack milena-data_0.2.92.1-1_all.deb ...
Unpacking milena-data (0.2.92.1-1) ...
Selecting previously unselected package milena-libs.
Preparing to unpack milena-libs_0.2.92-1_armhf.deb ...
Unpacking milena-libs (0.2.92-1) ...
Selecting previously unselected package milena-libs-dev.
Preparing to unpack milena-libs-dev_0.2.92-1_armhf.deb ...
Unpacking milena-libs-dev (0.2.92-1) ...
Selecting previously unselected package milena-say.
Preparing to unpack milena-say_0.2.92-1_armhf.deb ...
Unpacking milena-say (0.2.92-1) ...
dpkg: dependency problems prevent configuration of milena-say:
 milena-say depends on sox; however:
  Package sox is not installed.

dpkg: error processing package milena-say (--install):
 dependency problems - leaving unconfigured
Setting up milena-libs (0.2.92-1) ...
Setting up milena-libs-dev (0.2.92-1) ...
Setting up milena-data (0.2.92.1-1) ...
Errors were encountered while processing:
 milena-say
root@NanoPi-NEO-Air:/home/pi/test/kedrigern# sudo apt-get install sox
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 sox : Depends: libsox-fmt-alsa (= 14.4.1-5+deb8u4ubuntu0.1) but it is not going to be installed or
                libsox-fmt-ao (= 14.4.1-5+deb8u4ubuntu0.1) but it is not going to be installed or
                libsox-fmt-oss (= 14.4.1-5+deb8u4ubuntu0.1) but it is not going to be installed or
                libsox-fmt-pulse (= 14.4.1-5+deb8u4ubuntu0.1) but it is not going to be installed
       Depends: libsox-fmt-base (= 14.4.1-5+deb8u4ubuntu0.1) but it is not going to be installed
       Depends: libsox2 (= 14.4.1-5+deb8u4ubuntu0.1) but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
root@NanoPi-NEO-Air:/home/pi/test/kedrigern# sudo apt-get inst^Cl sox
root@NanoPi-NEO-Air:/home/pi/test/kedrigern# sudo apt-get install libsox-fmt-alsa
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 libsox-fmt-alsa : Depends: libsox2 (>= 14.4.0) but it is not going to be installed
 milena-say : Depends: sox but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
root@NanoPi-NEO-Air:/home/pi/test/kedrigern#

20191001_180453.thumb.jpg.9078a5dc3e1dc50821e89a00294aaecc.jpg IMG_20190907_180624.jpg IMG_20190907_180556.jpg

  • Lubię! 2
Link to post
Share on other sites

Zainstaluj sox i wszyatko czego chce Milena - niestety, Neo jest ułomny i nie gwarantuję działania z rpm-ów.

W razie czego zawsze możesz ściągnąć źródła i skompilować, jak będziesz miał problemy pisz.

Kompiluj dla rpi (powinno ruszyć na neo).

Link to post
Share on other sites

@ethanak Próbuję uruchomić Milenę w "Nicolaus'ie", instalacja przebiegła pomyślnie (miałem ten sam błąd z sox-em, co Kolega powyżej), mam jednak kilka pytań:

a) czy prowadziłeś jakieś eksperymenty dla mini-jack i RaspberryPi 3B+? Mowa jest ledwo słyszalna, jednak bardziej to kwestia głośników - w internecie można znaleźć sporo zapytań n/t maksymalnej głośności tanich głośników podłączonych do mini-jack w RPi serii 3 (kiedy włączę jakiś plik MP3 problem jest ten sam) - zastanawia mnie, czy coś można z tym zrobić, jeśli głośniki te (to są takie "za 25PLN" 😉) grają normalnie podłączone do laptopa lub RPi 4B? Z HDMI jako sygnałem cyfrowym nie ma oczywiście problemu 🙂

b) jak zmienić głos (nigdzie nie mogłem znaleźć tej informacji) - Mbrola to taki "żeński", na filmie pokazujesz też "męski miękki" i "męski twardy" - jak je uruchomić? Rozumiem, że na ten moment do dyspozycji "dla niewtajemniczonych" są te trzy (tak z ciekawości)?

c) czym się różni zmiana tempa od zmiany częstotliwości (obrazek poniżej)? O ile parametr "-f 0.5" działa, o tyle "-t 0.5" zgłasza jakiś błąd (?) Ponadto chciałem odczytać godzinę poleceniem "milena_say -H", ale też coś zepsułem (błąd - niedozwolony parametr 😞);

image.thumb.png.67c692dd58a8b205cf758fce4abc1231.png

d) czym właściwie jest "serwer mowy" - maszyną, która na zapytanie tekstowe ma odesłać plik dźwiękowy (w tej dziedzinie jestem zielony)? Co mi da zainstalowanie samego Kedrigern'a (jeśli nie chcę używać modułu wizualizacji fonemów) - jeśli pythonowo wywołuję Milenę poleceniem "os.system()"? Piszesz na stronie, że http://milena.polip.com/raspberry.shtml:

Cytat

W porównaniu z poleceniem milena_say jest dużo szybszy (mowa startuje prawie od razu) oraz ma większe możliwości konfiguracji (tempo, częstotliwość bazowa, częstotliwość próbkowania i odtwarzania)

Czyli taki serwer to nie jest to samo co polecenie "milena_say"? Jak w takim razie działa (rozumiem, że synteza nadal odbywa się offline)? Zainstaluję, uruchomię jego usługę, i co dalej - jak używać kdr-say? I tak będę używał go w Pythonie, widzę, że aby użyć go bezpośrednio z języka, muszę mieć Kedrigern'a - z samą Mileną mam w pythonie błąd 111 "Connection refused" - ale dokąd chce się on połączyć? Wybacz pytania amatora, ale jestem w tym temacie zielony 🙂

Odnośnie a) - nie ma problemu, użyłem karty dźwiękowej pod USB, która rozwiązuje problem (częściowo, ponieważ muszę używać "-d 750"); w sumie najbardziej ciekawi mnie b) 🙂 Przepraszam za tyle pytań, bardzo gratuluję projektu i dziękuję za bezpłatne udostępnienie tak ciekawych zasobów 🙂

PS Co spowodowało, że zdecydowałeś się tworzyć własne rozwiązanie, a nie np. wykorzystać e-speak (poza tym, że ten drugi jest trochę wiekowy)?

PS2 Jak najlepiej czytać skróty - porozdzielać je kropkami?

Pozdrawiam 🙂

Link to post
Share on other sites
(edytowany)
10 godzin temu, wn2001 napisał:

czy prowadziłeś jakieś eksperymenty dla mini-jack i RaspberryPi 3B+?

Nie i nie mam zamiaru. W "Ciapku" zastosowałem dekoder i2s ze wzmacniaczem, i nie musiałem zajmować się problemami HDMI czy tego "audio dla przygłuchawych" pt. "wyjście jack". Ogólnie polecam albo to rozwiązanie, albo użycie najtańszej karty na USB (szczególnie, że do Zero musiałbym i tak dolutować piny do audio).

10 godzin temu, wn2001 napisał:

jak zmienić głos (nigdzie nie mogłem znaleźć tej informacji) - Mbrola to taki "żeński", na filmie pokazujesz też "męski miękki" i "męski twardy" - jak je uruchomić? Rozumiem, że na ten moment do dyspozycji "dla niewtajemniczonych" są te trzy (tak z ciekawości)?

Nie, istnieje tylko jeden. Reszta to proste modyfikacje (zmiana tempa, częstotliwości podstawowej, odtwarzanie z inną częstotliwością niż próbkowanie i tak dalej).

 

10 godzin temu, wn2001 napisał:

czym się różni zmiana tempa od zmiany częstotliwości (obrazek poniżej)?

Zacznijmy od tego, że przekazujesz do skryptu milena_say parametry, które są przeznaczone nawet nie tyle dla Mileny, co dla Mbroli. Skrypt nie ma w ogóle parametrów umożliwiających zmianę tempa i wysokości głosu (ustawia się to w pliku ~/.milena_bookrc, parametry tempo i pitch - lub globalnie w /etc/milena/milena.conf). A czym się różni zmiana tempa od zmiany częstotliwości... tak na chłopski rozum: tempo to jak szybko perkusista na koncercie Martyniuka wali po bębnie, a częstotliwość to wysokość głosu Martyniuka którego ściskają albo nie za różne ważne narządy pozornie nie mające nic wspólnego ze śpiewem 🙂

10 godzin temu, wn2001 napisał:

czym właściwie jest "serwer mowy"

Programem, który po połączeniu się z nim i podaniu jakiegoś tekstu wydziela z siebie mowę na wyjściu audio...

10 godzin temu, wn2001 napisał:

Co mi da zainstalowanie samego Kedrigern'a (jeśli nie chcę używać modułu wizualizacji fonemów) - jeśli pythonowo wywołuję Milenę poleceniem "os.system()"?

Po pierwsze: os.system() został uznany za przestarzały w czasach, kiedy chodziłeś do podstawówki.

Po drugie: nawet gdybyś użył prawidłowego subprocess.call to i tak nie zmieniłoby sytuacji. Zauważ, jak działa milena_say (można to zrobić stosujc polecenie:

less `which milena_say`

i analizując sobie działanie tego skryptu).

  • Uruchamia się proces basha wykonujący milena_say
  • Proces uruchamia w pewnym momencie program "milena" służący do konwersji tekstu na fonrmy Mbroli
  • Program milena linkuje się dynamicznie do dwóch głównych bibliotek, następnie wczytuje kilka plików (słowniki, reguły wymowy), w tym co najmniej dwa wymagające kompilacji z postaci tekstowej na drzewo
  • Program milena po wczytaniu słowników bardzo szybko konwertuje tekst na fonemy i na tym kończy działanie
  • Skrypt uruchamia w następnej kolejności program mbrola.
  • Program mbrola wczytuje swoje dane (głos pl1 - na szczęście robi to bardzo szybko) i na podstawie tych danych oraz tego, co dostała od mileny generuje falę dźwiękową w postaci raw 16 bit LE mono 16 kHz
  • Aby ów dźwięk przekazać na głośniki, uruchamiany jest program sox
  • Z głośników słychać mowę

Trochę dużo, prawda?

Tymczasem Kedrigern działa inaczej. W pierwszej fazie uruchamia się serwer i czeka w tle na połączenie. Czyli:

  • linkuje się do tych samych dwóch bibliotek i wczytuje te wszystkie pliki wymagane do działania

Jeden punkt na razie... a i tak czas można pominąć, bo prawidłowo zainstalowany Kedrigern powinien się uruchomić przy statrcie systemu.

Teraz po otrzymaniu polecenia "powiedz coś tam" Kedrigern:

  • nie traci czasu na wczytywanie, tylko po prostu konwertuje szybciutko tekst na fonemy.
  • Uruchamia jak poprzednio program mbrola[1]
  • Nie używa żadnych soxów, tylko wewnętrznie przekazuje otrzymaną z mbroli falę na wyjście audio.

Jest różnica?

10 godzin temu, wn2001 napisał:

chciałem odczytać godzinę poleceniem "milena_say -H"

No, takie polecenie tylko informuje, że ciąg znaków "1:10" ma czytać jako "pierwsza dziesięć" a nie "jeden do dziesięciu". Godzinę to jej trzeba podać, żeby przeczytała...

10 godzin temu, wn2001 napisał:

jak używać kdr-say? I tak będę używał go w Pythonie, widzę, że aby użyć go bezpośrednio z języka, muszę mieć Kedrigern'a

Nic dziwnego, żeby używać roweru trzeba go mieć. Trudno by było uzyć polecenia kdr_say - które przecież jedynie przekazuje do serwera ingformację że ma cos powiedzieć - bez owego serwera...

10 godzin temu, wn2001 napisał:

mam w pythonie błąd 111 "Connection refused" - ale dokąd chce się on połączyć?

Do serwera... nie mów że się nie domyśliłeś?

10 godzin temu, wn2001 napisał:

Co spowodowało, że zdecydowałeś się tworzyć własne rozwiązanie, a nie np. wykorzystać e-speak (poza tym, że ten drugi jest trochę wiekowy)?

Po pierwsze: espeak jest cały czas rozwijany, przede wszystkim przez społeczność niewidomych (pozwala na czytanie z bardzo dużymi prędkościami rzędu kilkunastu sylab na sekundę, przy których inne syntezatory sobie nie radzą). Do espeaka też zresztą coś tam pisałem (polskie tabele konwersji na fonemy, trochę poprawek w odczycie liczebników i takie tam).

Po drugie: Milena powstała w czasach, kiedy o e-bookach można było tylko marzyć, z audiobooków można było dostać klasykę dramatu greckiego, a książki w postaci elektronicznej zdobywało się z różnych mniej lub bardziej pirackich źródeł typu chomikuj. Espeak nie miał wtedy jeszcze możliwości współpracy z Mbrolą, a czytanie książek Ivoną to moim zdaniem droga przez mękę (Ivona np. nie wie nic o interpunkcji). A czytanie z papieru zaczynało w moim przypadku być co najmniej utrudnione jeśli nie niemożliwe... Jedyne co pozostawało to przetworzenie z trudem zdobytej książki na audiobooka, a do tego potrzebny był syntezator...

10 godzin temu, wn2001 napisał:

Jak najlepiej czytać skróty - porozdzielać je kropkami?

Wrzucić do słownika i podać Milenie, że ma z niego dodatkowo korzystać podając parametr -u. Najlepiej podejrzeć plik /usr/share/milena/pl_udict.dat (czy gdzie tam masz zainstalowaną Milenę). Możesz również dopisać swoje skróty do tego pliku, na razie nie przewiduję jakichś wielkich aktualizacji czyli się nie nadpisze. Tylko pamiętaj: plik jest kodowany w ISO-8859-2 a nie UTF-8, nie ma prawa mieć żadnych BOM-ów na początku, czyli z edycją na Windowsie to ja bym uważał... najlepiej zachować gdzieś oryginalna postać pliku.

---

[1] Uwolnienie kodu Mbroli zbiegło się w czasie z powstaniem Kedrigerna, jak znajdę trochę wolnego czasu spróbuję użyć biblioteki (wtedy jej po prostu nie było) zamiast odpalać za każdym razem kod.

Po edycji

Jeszcze jedno co do koniecznego opóźnienia przy karcie USB: spróbuj w drugim terminalu odpalić coś takiego:

/usr/bin/aplay -D default -t raw -r 48000 -c 2 -f S16_LE /dev/zero

i sprawdź, czy w trakcie działania tego polecenia opóźnienie dalej będzie potrzebne.

 

 

Edytowano przez ethanak
Link to post
Share on other sites
4 godziny temu, ethanak napisał:

Nie i nie mam zamiaru. W "Ciapku" zastosowałem dekoder i2s ze wzmacniaczem, i nie musiałem zajmować się problemami HDMI czy tego "audio dla przygłuchawych" pt. "wyjście jack". Ogólnie polecam albo to rozwiązanie, albo użycie najtańszej karty na USB (szczególnie, że do Zero musiałbym i tak dolutować piny do audio).

Jasne, tak jak pisałem na końcu poprzedniego postu - karta pod USB dała znacznie lepsze efekty (chociaż i tak dźwięk generowany przez espeak jest znacznie głośniejszy 😉)

4 godziny temu, ethanak napisał:

Nie, istnieje tylko jeden. Reszta to proste modyfikacje (zmiana tempa, częstotliwości podstawowej, odtwarzanie z inną częstotliwością niż próbkowanie i tak dalej).

OK, będę wiedział na przyszłość (oczywiście to tylko sugestia laika, ale może kiedyś wbudowane zostałyby presety, aby w sposób banalny wybierać rodzaj głosu?) 🙂

4 godziny temu, ethanak napisał:

Zacznijmy od tego, że przekazujesz do skryptu milena_say parametry, które są przeznaczone nawet nie tyle dla Mileny, co dla Mbroli. Skrypt nie ma w ogóle parametrów umożliwiających zmianę tempa i wysokości głosu (ustawia się to w pliku ~/.milena_bookrc, parametry tempo i pitch - lub globalnie w /etc/milena/milena.conf). A czym się różni zmiana tempa od zmiany częstotliwości...

Dziękuję, będę wiedział 🙂

4 godziny temu, ethanak napisał:

Po pierwsze: os.system() został uznany za przestarzały w czasach, kiedy chodziłeś do podstawówki.

Po drugie: nawet gdybyś użył prawidłowego subprocess.call to i tak nie zmieniłoby sytuacji. Zauważ, jak działa milena_say (można to zrobić stosujc polecenie:

Bardzo dziękuję za obszerne wyjaśnienie, niemniej jest coś złego w os.system(), poza tym, że blokuje program (i tak nic w tym czasie nie muszę robić)?

4 godziny temu, ethanak napisał:

No, takie polecenie tylko informuje, że ciąg znaków "1:10" ma czytać jako "pierwsza dziesięć" a nie "jeden do dziesięciu". Godzinę to jej trzeba podać, żeby przeczytała...

image.thumb.png.f89701da2e12e21ff321222462dd2b6f.png

Może coś robię nie tak, ale nadal nie działa 😉

4 godziny temu, ethanak napisał:

Nic dziwnego, żeby używać roweru trzeba go mieć. Trudno by było uzyć polecenia kdr_say - które przecież jedynie przekazuje do serwera ingformację że ma cos powiedzieć - bez owego serwera...

Jasne, rozumiem...

4 godziny temu, ethanak napisał:

Do serwera... nie mów że się nie domyśliłeś?

...domyśliłem, chociaż trochę to dla mnie nieintuicyjne (jako nie-informatyka), aby w obrębie jednego fizycznego urządzenia istniała jakaś komunikacja między programami  😉

4 godziny temu, ethanak napisał:

Po pierwsze: espeak jest cały czas rozwijany, przede wszystkim przez społeczność niewidomych (pozwala na czytanie z bardzo dużymi prędkościami rzędu kilkunastu sylab na sekundę, przy których inne syntezatory sobie nie radzą). Do espeaka też zresztą coś tam pisałem (polskie tabele konwersji na fonemy, trochę poprawek w odczycie liczebników i takie tam).

Po drugie: Milena powstała w czasach, kiedy o e-bookach można było tylko marzyć, z audiobooków można było dostać klasykę dramatu greckiego, a książki w postaci elektronicznej zdobywało się z różnych mniej lub bardziej pirackich źródeł typu chomikuj. Espeak nie miał wtedy jeszcze możliwości współpracy z Mbrolą, a czytanie książek Ivoną to moim zdaniem droga przez mękę (Ivona np. nie wie nic o interpunkcji). A czytanie z papieru zaczynało w moim przypadku być co najmniej utrudnione jeśli nie niemożliwe... Jedyne co pozostawało to przetworzenie z trudem zdobytej książki na audiobooka, a do tego potrzebny był syntezator...

Jasne, rozumiem - natomiast odnośnie e-speak, zauważyłem jeszcze, że:

a) e-speak generuje mowę natychmiast (a dla Mileny muszę użyć -d 1000, inaczej "ścina" pierwszy wyraz) - co jest oczywiste w kontekście szybkości przetwarzania, a której pisałeś;
b) głos jest inny, bardziej (chyba) pasuje do mojego robota;
c) mówi zauważalnie głośniej (dla tych samych warunków sprzętowych) - nie wiem, czy to może kwestia amplitudy sygnału wyjściowego?

Absolutnie proszę tego nie traktować jako jakiejś złośliwości, jednak pozostanę chyba przy e-speak'u wywoływanym os.system() 😉  Generalnie, jako że to projekt szkolny, odpowiadam tylko za warstwę sprzętową (w rozumieniu i mechaniki, i elektroniki); programowo przygotowuję jedynie "demonstrację" możliwości - oczywiście Milena też będzie zainstalowana, więc niewykluczone, że ktoś jej użyje 🙂

 

Link to post
Share on other sites
55 minut temu, wn2001 napisał:

może kiedyś wbudowane zostałyby presety, aby w sposób banalny wybierać rodzaj głosu?

Można w kedrigernie.

55 minut temu, wn2001 napisał:

głos jest inny, bardziej (chyba) pasuje do mojego robota;

Nic dziwnego - espeak to syntezator formantowy (czyli generuje głos na podstawie jakichś tam parametrów i brzmi jak robot), mbrola posługuje się nagranymi fragmentami "przemówienia" żywego lektora.

57 minut temu, wn2001 napisał:

mówi zauważalnie głośniej

To wiąże się nie z amplitudą, a z energią. Nie chcę wnikać w niuanse akustyki, ale porównaj jak głośno brzmi np. fala piłokształtna i sinusoidalna przy tej samej amplitudzie. A espeak używa przebiegu piłokształtnego jako bazowego.

59 minut temu, wn2001 napisał:

Absolutnie proszę tego nie traktować jako jakiejś złośliwości, jednak pozostanę chyba przy e-speak'u

A dlaczego złośliwość? Jeśli espeak bardziej pasuje to jak najbardziej trzeba go wykorzystać. A gdyby nawet to byłaby złośliwość to bardzo nietrafiona (używając espeaka i tak używasz moich tabel wymowy) 🙂

1 godzinę temu, wn2001 napisał:

wywoływanym os.system()

I za to bym obniżył ocenę - posługiwanie się przestarzałymi konstrukcjami języka w nowych aplikacjach zamiast zalecanych.

A w ogóle zainteresuj się tym: https://pypi.org/project/python-espeak/

Tak przy okazji: skrypt milena_say dla rpi był pisany "na kolanie", nigdy nie został przetestowany i w efekcie wykryłeś dwa błędy. Po pierwsze - parametr -H zniknął (milena ustawiona jest na odczytywanie godzin czyli przestał być potrzebny), po drugie - omyłkowo użyłem -t do tempa (a był wcześniej użyty jako temat). Zresztą - milena_say w przypadku tych małych komputerków służy raczej do sprawdzenia czy w ogóle tandem milena+mbrola działa lub jako baza do własnych skryptów.

 

  • Pomogłeś! 1
Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.