Mój HomeMatic

Blog opisujący moją przygodę z HomeMatic

Gerwazy TTS – ver. 0.01

No i zaczęło się. Na pierwszy ogień idzie TTS (text to speech) czyli zamiana tekstu na mowę.

Dużo czasu zajęła analiza rozwiązania zagadnienia oraz wybór odpowiedniego silnika. Mogłem użyć silników TTS zainstalowanych lokalnie, dzięki czemu Gerwazy byłby niezależny od internetu. Jednak te silniki zazwyczaj oferują słabą jakość translacji. Znowuż silniki TTS on-line wymagają stałego połączenia z internetem. Postanowiłem więc  połączyć zalety obydwu wersji TTS. Rozwiązaniem jest nagranie na kartę raz pobranego dźwięku z silnika TTS i wielokrotne wykorzystywanie go lokalnie (z dysku). Dzięki takiemu pomysłowi mogłem pozwolić sobie na najprostsze rozwiązanie czyli  Google TTS i to w wersji bez klucza.

Wersja 0,01 (czyli nawet nie 1.0) to kilka linijek skryptu PHP. Na razie jest on w wielkim bałaganie i jeszcze nie mogę wykorzystywać tego do generowania komunikatów ale od tej wersji to już tylko krok, by Gerwazy zaczął gadać nowym silnikiem i tym samym by się w końcu rozgadał. Na pewno na pierwszy ogień pójdą komunikaty z kalendarza systemowego. W nim zapisywane są różne ważne daty (choćby terminy wywozu śmieci). Obecnie sporo tych informacji z kalendarza trafia na jedną z diod urządzenia HM-OU-LED16. Chciałbym jednak to zmienić między innymi z powodu ograniczenia ilości informacji jaką tam można wyświetlić.

Mając już wstępnie opracowane rozwiązanie kupiłem:

  • Raspberry PI 3 B+
  • zasilacz (3,1A)
  • obudowę
  • radiatory

Do tego wszystkiego gdzieś w czeluściach swoich „przydasiów” wynalazłem głośniki komputerowe (aktywne).

Do tego na RPI należy zainstalować serwer WWW oraz PHP. Ja wybrałem apache2 oraz PHP w wersji 7 ale skrypt jest tak prosty, że bez problemów będzie funkcjonował nawet na PHP w wersji 5.

Padło na Raspberry PI 3 B+ gdyż mimo, że dziś komputerek jeszcze niewiele będzie rozbił to jednak docelowo dostanie sporo zadań do realizacji. Oczywiście sam silnik w tej wersji spokojnie można uruchomić na czymś znacznie słabszym.

 

Wracając do Gerwazego TTS – skrypt wygląda tak:

<?php 
ini_set( 'display_errors', 'On' ); 
error_reporting(E_ALL);

$wyp='Jakiś przykładowy tekst.';

#koduj tekst na potrzeby adresu URL.
$wyp=urlencode($wyp);


GerwazySay($wyp);

# funcja GerwazySAY - TTS
function GerwazySay($text=''){
    # generuj nazwę pliku
    $file="/mnt/gerwazy/".md5($text);
    # jeśli nie ma pliku to pobierz go z Google TTS
    if(!is_file($file)){
        $url="http://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=".$text."&tl=pl";
        exec('wget -q -U Mozilla -O '.$file.' "'.$url.'"');
    }
    #odtwórz test z pliku dźwiękowego
    exec('/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "'.$file.'"  > /dev/null',$out);
}
?>

 

 

Kilka uwag:

  1. w adresie pobierającym plik ważny jest parametr „client=tw-ob”. Bez tego parametru Google będzie żądało potwierdzenia poprzez captcha.
  2. by z poziomu PHP uruchomić Mplayer musiałem dodać użytkownika obsługującego WWW („www-data”) do grupy „music”, która ma uprawnienia do uruchamiania Mplayera. Pomogło w tym polecenie wydane w konsoli Raspbiana. Po wydaniu polecenia konieczny był restart Raspbiana.
     sudo adduser www-data audio
  3. do tego były wymagane zmiany w konfiguracji samego Mplayer’a. Edycja pliku konfiguracyjnego:
    sudo nano /etc/mplayer/mplayer.conf

    Do tak otworzonego pliku dodałem

    nolirc=yes
    prefer-ipv4=yes 

 

Podwaliny pod Gerwazego położone, testy wykonane – działa 😉

Updated: 13 lutego 2019 — 22:19

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Mój HomeMatic © 2016 Frontier Theme