Arduino 39: SYNTEZATOR MOWY

Поделиться
HTML-код
  • Опубликовано: 13 сен 2024
  • Syntezator mowy czyli jak zrobić urządzenie mówiące dowolnym, wcześniej nagranym głosem. O fonemach i problemach z "gadającymi" interfejsami.
    Kod, na którym bazuje odcinek, można pobrać stąd:
    adamsmialek.co...
    Zapraszam do wsparcia mojego kanału:
    patronite.pl/s...
    PayPal.Me/smialekadam
    oraz do subskrybowania:
    www.youtube.co...
    #Arduino #speech #syntezatormowy

Комментарии • 58

  • @olo3539
    @olo3539 Год назад +2

    oglądam pańskie materiał aby zrozumieć podstawy na które nie mam już czasu, dziękuję

  • @Banerled
    @Banerled Год назад +4

    *_W roku 1994 na pracę dyplomową z kolegą zmajstrowałem na Z80 8KB ROM + 32KB SRAM + 64 KB EPROM (sample) gadający zegar, było kupa zabawy a właściwie to cała tabela startów, stopów sampli by gadacz wymawiał czas w płynny zrozumiały sposób._*
    _Także Adamie mój szacun za takie dość "dyletanckie" acz ciekawe podejście do tego typu zagadnienia jakim jest fonetyka._

    • @Informatykwakcji
      @Informatykwakcji Год назад

      Mógłbyś kiedyś zrobić film o tym urządzonku! Wtedy to było coś nowatorskiego! Może nie mega, bo już takie rozwiązania były, ale też na pewno synteza mowy była dużo mniej popularna niż dziś i dużo mniej zaawansowana. I wciąż powodowała duże wow! W każdym bądź razie fajny temat pracy!

  • @rekawek6
    @rekawek6 Год назад +1

    Bardzo ciekawy odcinek, choć po cichu liczyłem, że pokaże Pan prace nad jedną głoską czyli jak brzmi przycięta i jak nie. Najciekawsze, że problemy z odnajdywaniem głosek i ich rozwiązanie, wydały mi się łatwiejsze do zrozumienia, niż większość operacji przy starych wyświetlaczach.

  • @Informatykwakcji
    @Informatykwakcji Год назад +1

    👍 👍 👍 I kolejny fajny odcinek, dający pewne pojęcie o syntezie mowy! Choć oczywiście do prawdziwej syntezy wciąż daleko...

  • @waldemarrudolf6250
    @waldemarrudolf6250 Год назад

    Wstęp mnie zaskoczył i rozbawił.

  • @sylwekpiekarski9091
    @sylwekpiekarski9091 Год назад +2

    Panie Adamie, jestem osobą niewidomą która właśnie korzysta z czytników ekranu i syntezatorów mowy. syntezator rzeczywiście gada jak ten z końca lat osiemdziesiątych np. Przystawka do komputera Spektrum, Ale sama wiedza na temat tworzenia syntezy mowy bardzo przystępnie przedstawiona.

    • @mark-robots
      @mark-robots 7 месяцев назад

      I2S dla arduino czy pythona jest tanie i mowi naturalnie - dla prostych urzadzen stosuje tanie syntezatory mowy ktore maja zdania czy zwroty zapisane w pamieci - format MP3 . W cenie 500 zl sa kamery inteligentne AI ktore rozpoznaja przedmioty i modul za 20 zl moze powiedzic co widzi - za 4000 mozna zbudowac system, ktory bedzie odszukiwal przedmioty - np. gdzie jest czerwony kubek ? - odpowiedz - na stoliku po twojej lewej stronie. Tyle kosztuje jeden, zwykly pocisk artyleryjski 155 mm.

  • @MH-vx1fo
    @MH-vx1fo Год назад +5

    Piękne ale nie usłyszałem nawet jednego wyrazu.

  • @piotrolszowski8389
    @piotrolszowski8389 Год назад +2

    Super odcinek ale w 17:58 brzmi groźnie 😊

  • @rafadydo555
    @rafadydo555 Год назад +1

    A nie zastanawiał się pan nad podejściem opartym o fonemy i ich składowe - szum i ton. 1 i 2 harmoniczna ich przebieg jest charakterystyczny dla głosek i ich kontrola zapewni płynne przejścia między głoskami. Plozywne to tylko szum.

    •  Год назад

      Tak pewno byłoby też ciekawie, ale byłoby z tym więcej pracy i jest to mniej intuicyjne. Chętnie bym się tym pobawił dłużej, ale nie ma kiedy. Dobrym pomysłem byłoby przejście na sylaby, przy wytypowaniu powiedzmy setki najczęściej spotykanych.

  • @dziku878
    @dziku878 Год назад +2

    👍👍👍👍

  • @sanjyuu2298
    @sanjyuu2298 Год назад +1

    Oprócz DZI jest jeszcze 4 literowy przypadek DZI + samogłoska, gdzie I staje się praktycznie nieme.

  • @sawomirsiwek7558
    @sawomirsiwek7558 Год назад +2

    Jak się to zachowuje jeśli wychodzimy poza rozmiar string? Np. x wskazuje na przedostatni znak a odczytujemy x+2 ?

    •  Год назад +1

      Coś przypadkowego się pojawi. Ale szansa, że to będzie któraś z kombinacji istniejących jest marna, więc po prostu zagra cisza. Błędu nie będzie.

    • @Maciej.Komosinski
      @Maciej.Komosinski Год назад

      😱

  • @G12GilbertProduction
    @G12GilbertProduction Год назад +2

    Jest coś takiego jak "voice cloning" - a właściwie usługi klonujące głos na bazie próbek głosu. Zresztą, są one zaawansowane dzięki CNN (Convulsional Neural Networks) - konwulsyjnym sieciom neuronowym, a zarazem dzięki bibliotekom generującym głos w danym języku.
    Ale nie wiem czy takie rozwiązania rodem z AI mają odbicie w obecnych bibliotekach Arduino.
    p.s. pamiętam swoje zabawy przy klonie Ivony, jaką było Expressivo. Ono operowało lepszymi formami tworzenia dykcji komputerowego głosu.

    •  Год назад +2

      To jest zabawa na bardzo wstępnych założeniach, robiona na szybko i jest propozycją wyjściową do czegoś bardziej zaawansowanego. Zresztą jak większość moich projektów, które mają raczej pobudzać do działania, a nie dawać gotowe rozwiązania.

    • @mdawid
      @mdawid Год назад +4

      @G12GilbertProduction nie "Convulsional" (konwulsja, spazm, podryg) tylko Convolutional, czyli po polsku konwolucyjna lub splotowa

  • @przemekbundy
    @przemekbundy Год назад +2

    witam.
    jest gotowa biblioteka do syntezy mowy.
    na c64 tez byla realizowana taka synteza.
    na polskim kardridzu. black box v8. i nie uzywala sampli.
    moze kiedys zrobisz filmik o takiej realizacji syntezy.
    byly tez specjalne chipy do syntezy. ale tylko w angielskiej formie. brzmialy jeszcze gorzej niz ten z c64..
    pozdrawiam.

    •  Год назад +2

      Te wszystkie rozwiązania mają jedną wadę: nie gadają głosem właściciela :)

    • @Informatykwakcji
      @Informatykwakcji Год назад

      Z tym kartridżem to jak napisałeś, coś zaczęło chodzić mi po głowie... Ale w jaki sposób ta synteza była realizowana?

  • @daro0352
    @daro0352 Год назад +1

    W rzeczywistości trzeba by analizować całe słowa a nawet całe zdania i pewnie też w grę może wchodzić jakieś buforowanie. Zapytanie Arduino na przykład o godzinę czy tam temperaturę z jakiegoś czujnika nie powinno stanowić większego problemu ale realizacja syntezatora mowy przez odgrywanie z plików samych liter to kompletne nieporozumienie. Już to widzę jak Arduino wypowie godzinę 12:45 jako jeden dwa cztery pięć a nie dwunasta czterdzieści pięć albo temperaturę 27 st. jako dwa siedem zamiast dwadzieścia siedem.

    •  Год назад

      Oczywiście, że nieporozumienie, dlatego pokazałem jak na początek radzić sobie z głoskami, które nie mają swoich reprezentantów znakowych. Po tej dawce wiedzy każdy już sobie może rozbudowywać program w nieskończoność.

    • @daro0352
      @daro0352 Год назад

      @ Rozrośnie się tak że pamięci nie wystarczy, nie mówiąc już o wydajności. Trzeba by kupić Mega 2560 do takich zabaw. Tłumaczenie cyfr na słowa byłoby jednak znacznie prostsze. Co nie zmienia faktu że odcinek ma niezłą wartość edukacyjną.

    •  Год назад

      No ale tu właśnie przetłumaczyłem cyfry na słowa :) Tylko, że w odmianie głównej, co nie znaczy, że nie można sobie zrobić drugiej grupy w odmianie porządkowej. Poza tym tego typu idea wystąpiła w poprzednim odcinku.

    • @mark-robots
      @mark-robots 7 месяцев назад

      zrobilem w Ardulino i mowi naturalnie godzine - mozna zapisac slownik - ale kto to wczyta do pamieci ( czas i koszty) ?

    • @daro0352
      @daro0352 7 месяцев назад

      @@mark-robots Normalnie na karcie SD się zapisuje w postaci plików dźwiękowych. A potem wczytuje i wybiera odpowiednie. Słownik też można tam jakoś zapisać w postaci pliku tekstowego żeby wiedziało co ma wybierać.

  • @dejaeprouve
    @dejaeprouve Год назад

    AI na Arduino - Future is beeing made today!

  • @cbm80amiga
    @cbm80amiga Год назад +3

    Wiele lat temu zrobilem sobie gadajacy zegar z samplami w pamieci SPI, a samo odtwarzanie sampli tez bylo reczne - bez biblioteki. Prototyp latwiej bylo sprawdzic z karta SD.Jak kogos interesuje jak to slychac to demo w filmiku
    watch?v=3xSZnY-yeYA

    • @paprukas
      @paprukas Год назад

      Dasz w końcu ten kod, czy nie 😉

    • @cbm80amiga
      @cbm80amiga Год назад

      @@paprukas Kto chcial to dostal :)

  • @terminus_666
    @terminus_666 Год назад

    Ok.

  • @maxmaksowski8697
    @maxmaksowski8697 Год назад +2

    no HAL 9000 to to nie jest ale ...

  • @jerry8250
    @jerry8250 Год назад +1

    Badzmy szczerzy. Nic z tego samplera nie idzie zrozumiec. C64 + black box 8.1 robi to tysiac razy lepiej. Nie wspominajac o tym, ze umie spiewac...

    •  Год назад

      No cóż, poświęciłem temu godzinę. Nic tylko siąść i dopracować sample, dorobić więcej fonemów i będzie dobrze.

    • @przemekbundy
      @przemekbundy Год назад +1

      ​@ skoro tylko godzinę. to faktycznie twój mózg robi robote.pozdro..

  • @kkierczak
    @kkierczak Год назад +2

    Dłubanina na calego!

  • @11111olo
    @11111olo Год назад

    Sama idea jest ok ale wykonanie to delikatnie mówiąc nieporozumienie.
    Nie wiem skąd taki bezsensowny pomysł z milionem instrukcji IF! Tak wiem było o tym w filmie ale jest coś takiego magicznego jak TABLICA.
    Lepiej było by na początku zrobić analizę tekstu a potem tylko odtwarzać dźwięki - było by płynniej. Jak ktoś wspomniał na C64 z marnym 1MHz brzmi to lepiej.
    Do tego RZ w wyrazie ZMARZLINA czytane jak R Z a nie Ż. Jest jeszcze dużo takich wyjątków jak np WSCHÓD, a mówimy fshut.

    •  Год назад

      Trochę bezrefleksyjną ta krytyka i zdradza nieznajomość rzeczy. Po pierwsze, szybkość pracy pętli jest wielokrotnie wyższa od wymagań algorytmu mowy. Przerwy są powodowane wyłącznie pobieżnym dobraniem fazy attack i release próbek. Po drugie, to właśnie w takich przypadkach, samych wyjątków, stosuje się if-y zamiast tablic, bo w każdych warunkach można podjąć indywidualne działania, co w przypadku syntezatorów mowy jest nieodzowne. Resztę przedstawiłem w filmie i w razie wątpliwości proszę go obejrzeć z uwagą.

    • @Raren789
      @Raren789 Год назад

      Jeśli chodzi o takie hobbystyczne projekty, to jak najbardziej można sobie pisać milion ifów, choć nie jest to wedle najlepszych praktyk, nikt nam nie zabroni. Jednak przy rozbudowywaniu takiego projektu można by się pokusić o inny sposób na zakodowanie tego, który nie będzie wymagał tylu linijek

  • @pirat1981
    @pirat1981 Год назад +1

    Brzbi jak Major Suchodolski

  • @TechnikZaba
    @TechnikZaba Год назад +2

    Zamiast tych if-ów mozna zrobić SdPlay.setFile(litera+".afm")

    •  Год назад +1

      No a co w przypadku np. ą? :)

    • @TechnikZaba
      @TechnikZaba Год назад +1

      @ ja bym to zrobił w ten sposób że pierwsza obsługa wyjątków a potem zwykle litery. Pisałem komentarz w trakcie oglądania filmu

    • @janusznowak2464
      @janusznowak2464 Год назад +1

      @ każdy inny sposób byłby lepszy.. Zawsze można zrobić kilka warunków na zakresy a-z, 0,9 a polskie z jakiejś statycznej mapy / tabeli asocjacyjnej wczytać.

    •  Год назад

      I zaciemnić obraz całości początkującym. Tutaj jest ukazana ewolucja, do której dokładam kolejne wyjątki i skupiam się na nich, a nie na kodzie. O kodzie jest w innych odcinkach, mówiłem o takich sprawach wiele razy.

  • @Eselter
    @Eselter Год назад +2

    Zabawa może i ciekawa, ale nie wyszło z tego coś co dało by się zrozumieć.

  • @TomekNagisa
    @TomekNagisa Год назад +2

    Ah a jakby zamiast ręcznego analizowania kodów UTF-8 wrzucić tam poprawny dekoder UTF-8 do tego tablicę sekwencji wraz z przypisanymi do nich nazwami plików (od najdłuższych do najkrótszych), to by się to pewnie zamiast tego spagetti ifów dało upchnąć w jednym do {} while i paru ifach ;D Ale ok, ok, edukacja. ;)

    •  Год назад +1

      Różne są metody dojścia do prawdy :) Metoda z if-ami ma tę zaletę, że łatwo dokładać kolejne wyjątki i wbrew pozorom, jest dość przejrzysta.

    • @TomekNagisa
      @TomekNagisa Год назад

      @ Mi się to tam źle czyta. Ale jak dla początkujących, meh, ok. No i jest jeszcze ta sprawa, że jakby przełączyć terminal z UTF8 na coś jedno bajtowego (WIN1250?) to cala zabawa z wielo-bajtowymi znakami wcale by nie była potrzebna. ;)

    •  Год назад +3

      Pewno, ale zakładałem, że używamy narzędzi jakimi są. Chyba nie da się przestawić standardu bez głębszego grzebania w środowisku IDE. Tym razem chodziło mi właśnie o umiejętność pracy na danych zastanych.

    • @kuba5858
      @kuba5858 Год назад

      @ Metoda z if'ami jest oczywiście nie najlepsza i na pewno dałby się to zrobić znacznie zwięźlej, natomiast zakładając że if'y są bardziej "przejrzyste" to może zamiast męczyć atmegę sprawdzaniem kolejnych warunków (nawet po znalezieniu danej litery) warto by zastosować else if'y. W takim wypadku po znalezieniu odpowiedniej litery zamiast sprawdzać kolejne warunki program przejdzie do końca pętli. Dodatkowo ostatni złożony warunek "if (litera < 48 || (litera > 57 && litera < 65) || (litera > 90 && litera < 97) || (litera > 122 && litera < 128))" zastępujemy wtedy samym słowem "else". Wydaje się, że do samego pokazania jak taki syntezator miałby działać to jest taki program wystarczający, ale de facto za dużo nie da się tam już dopisać żeby urządzenie robiło coś innego niż syntezę mowy. Co do wychodzenia poza zakres tablicy (jeżeli dobrze liczę) przykładowe zdanie kończące się na literę "c" może zostać przeczytane jako "ci","ch" lub "cz" z prawdopodobieństwem ok. 2,3%. Przy czytaniu większej liczby zdań może to być znaczące.

    •  Год назад

      2,3% dla c, ale mamy jeszcze sporo innych liter, dla których nie będzie drugiego ani trzeciego bajtu i w sumie to się pewno zdarzy raz na tysiąc razy. Ale oczywiście to jest wersja na początek tylko i wymaga rozbudowania do zastosowań bardziej użytecznych (np. status READY dla żądania wysłania kolejnej partii tekstu). Else siedzą u mnie w warunkach badań drugiego i trzeciego bajtu, nie chciałem zaciemniać jeszcze bardziej całości. Jak mówiłem, czas pracy jest tu zupełnie niekrytyczny, nawet kilkumilisekundowe lagi nie mają znaczenia.