[cdl-studenti] [proiecte] MinVG

Iulian-Nicu Şerbănoiu undergraver at gmail.com
Wed Mar 3 23:48:53 EET 2010


Salut,

Raspunsurile mai jos intercalate.

2010/3/3 Dan-George Filimon <dangeorge.filimon at gmail.com>:
>> Cazul 1. Pentru dezvoltatorii de interfete grafice: e mai usor sa
>> foloseasca biblioteca daca exista un exemplu scurt si la obiect de
>> integrare (wxWidgets, gtk, qt ... - de preferinta folosind metodele
>> oferite de biblioteca GUI pentru tratarea evenimentelor/sincronizare
>> etc - pentru a oferi aceeasi portabilitate pe care o ofera si
>> biblioteca GUI).
>>
>> In cazul interfetelor grafice se doreste [evident] ceva care nu
>> blocheaza GUI-ul (asincron).
>>
>> Momentan exista o integrare cu wxWidgets.
>
> Aici as comenta ca dupa parerea mea Qt ar fi cea mai buna optiune. Argumentarea este urmatoarea:
> 1. wxWidgets nu functioneaza corect sub toate sistemele de operare -- in OS X 10.6 singura varianta compilabila este 2.8 care foloseste API-urile depreciate Carbon si pentru care suportul Cocoa (singurele biblioteci suportate de acum inainte si singurele pentru care va exista suport pe 64 de biti) este incomplet iar varianta actuala in dezvoltare, 2.9 nu compileaza;
>
> 2. Qt la momentul de fata are in spate cel putin o firma puternica, Nokia (care este si detinatorul) si care va folosi biblioteca pentru proiectul MeeGo (sistem Linux pentru sub-computere) impreuna cu Intel, deci biblioteca va fi dezvoltata in continuare si facuta sa ruleze pe platforme din cele mai diverse. Aplicatiile Qt functioneaza pe cele 3 mari sisteme de operare la ora actuala.
>
> 3. Integrarea Linux GTK/Qt functioneaza intr-o singura directie -- Qt poate fi configurat sa deseneze widgeturile folosind functii GTK rezultand un aspect uniform pentru aplicatii Qt rulate sub GNOME. Invers, pentru aplicatii GNOME in KDE, exista un theme care incearca sa "semene" cu Oxygen dar care drept vorbind este incomplet.
>
> Interfata grafica ar consta din apelarea strategica a functiilor din diversele directoare sau ar fi cum am inteles ca funtioneaza proiectul cu ext3 in care se trateaza utilitarul in linie de comanda ca o cutie neagra si se executa cu parametrii alesi strategici in alt thread?
> Directoarele wx* ar contine implementarea cu wxWidgets a interfetei grafice?

Din punctul meu de vedere nu exista cea mai buna optiune, depinde ce
vrea fiecare. Nu am preferinte la capitolul GUI atat timp cat merge si
e scrisa pe cat posibil conform standardelor acelei biblioteci.

O varianta a surselor din data de 12 decembrie (sau inainte) ar fi
ceva compilabil cu Code::Blocks (deschizi workspace-ul). Sursele
actuale sunt bune dar au nevoie de cateva adjustari pentru a se
compila - am inceput o mica refactorizare si ea se desfasoara in
concordanta cu timpul liber.

>
>> Cazul 2. Pentru cei care au deja o biblioteca audio integrata si vor
>> sa foloseasca optiunile MinVG un exemplu de utilizare (cu acea
>> biblioteca audio) reprezinta un punct de plecare.
>>
>> Se poate realiza ceva in mod text in acest caz. De preferinta sa fie
>> ceva asincron dar nu e obligatoriu.
>
> Cele 2 biblioteci propuse sunt Csound si OpenAL iar cea folosita momentan este PortAudio.
> Din ce am citit Csound este un program extrem de complicat care are propriul sau limbaj de programare iar PortAudio de asemenea inteleg ca sintetizeaza sunete din functii sinusoidale...
> Acum, problema mea e ca nu am _nici cea mai vaga idee_ cum ar trebui sa functioneze sintetizarea sonora si desi acolo in pagina proiectului scrie c-ar fi necesare cunostince C/C++ de baza, presupun ca neintelegand cum functioneaza deloc, nu prea as avea cum sa ajut la integrarea altei biblioteci audio.
> Intrebarea ar fi _ce anume_ inseamna integrarea altei biblioteci de redare audio (asta mi se pare cel mai interesant lucru)? E in regula daca nu stiu deloc cu ce se manaca dar as vrea sa aflu?

Ce se va face efectiv aici va fi un player de sunete preinregistrate
(nu se genereaza sunete pornind de la expresii si reguli lingvistice,
chestiunea este mult prea vasta - pentru asta exista "festival").
Portaudio este o biblioteca de nivel jos audio - adica poti sa ai
control la nivel de informatie reprezentata in format PCM (de
distractie poti sa generezi niste sinusoide - cred ca e deja un
exemplu in sursele/exemplele portaudio).

Ce avem acum este folosirea bibliotecii portaudio cu ajutorul unei
biblioteci de decodificare a sunetelor (libsndfile). Procesul
simplificat e cam asa: libsndfile citeste din fisier si trimite catre
portaudio datele in format PCM. [adevarul e ca aici e necesara putina
munca de sincronizare intre threaduri - nimic complicat, pot sa ajut
cu lamuriri daca e cazul]

Motivele pentru care am folosit portaudio au fost lipsa unei
modalitati de aflare a momentului cand un sunet a fost redat in
totalitate pentru a porni la redarea urmatorului (ma refer la redarea
asincrona, singura care poate fi integrata cu succes intr-o aplicatie
in general - pentru ca in general e absurd sa blochezi o aplicatie ca
sa redai un sunet).

Acum prin integrare cu alte biblioteci doresc a se intelege folosirea
si a altor biblioteci decat portaudio; ca si in cazul bibliotecilor de
GUI - nu am pretentii atata timp cat e vorba de o biblioteca
utilizabila.

> Modificarile pentru partea asta ar consta in editare fisierelor din CBProjects?
> De exemplu sndplayer.cpp pare sa contina playback-ul efectiv?
>

Modificarile constau in scrierea efectiva de cod. Eu utilizez
Code::Blocks pentru asta deoarece sunt un utilizator de IDE-uri in
general (nu sunt genul vi/emacs, make - desi vi in momentul actual
incepe sa se apropie de conceptul de IDE).

> Summing up:
> 0. Inteleg ca proiectul nu va compila decat folosind CodeBlocks?

Fara efort, da. Exista si o tema ce doreste integrarea cu alte tooluri
de build (autotools, scons ...)

> 1. Raman ca cerinte 'cunostinte C/C++' si atat la proiectul asta?

Da + utilizarea altor biblioteci tot scrise in C/C++
Pentru partea de redare asincrona e nevoie de ceva sincronizare intre
threaduri care nu reprezinta o bariera - pot ajuta aici daca e cazul.

> 2. Ar exista vreun plan de roadmap sau ceva?

Ar exista, ajungerea la unei forme stabile - momentan am separat
partea de number to text intr-o biblioteca separata.

> 3. No offense, dar in prezentarea [1] scrie pe slide-ul 2 - "_Not_ a text-to-speech engine". Daca se numeste Minimal _Voice_ Generator,  ce _face_ de fapt??

E "minimal" :) adica mapeaza texte la sunete (preinregistrate). Asta
ii ofera avantajul de a putea fi folosit indiferent de limba folosita
(chineza, engleza, romana, germana, araba etc) cu doar cateva
modificari - biblioteca number to text momentan).

Ce face biblioteca de number to text:
Input:34--> Output:treizeci si patru (RO) sau thirty-four (EN) [si
alte limbi in viitor ...]

Un exemplu concludent este o aplicatie GPS.
Ex simplificat de functionare:

In baza de date avem expresia: "In {N} metri virati la {W}." avand
mapari la fisierele de sunet "in.wav" si "metri_virati_la.wav" pentru
partile statice ("In" si "metri virati la").

Urmatoarele 2 stringuri se potrivesc (match) expresiei de mai sus.
A. In 5 metri virati la stanga.
B. In 10 metri virati la dreapta.

Pentru stringul A.
In continuare se preproceseaza si se obtine
In "cinci" metri virati la stanga.
Ulterior va rezulta maparea:
in.wav+cinci.wav+metri_virati_la.wav+stanga.wav (considerand ca pentru
"cinci" avem maparea cinci.wav si stanga.wav respectiv pentru
"stanga").

Partea de preprocesare utilizeaza biblioteca number to text la care
exista de asemenea un task.

>
> [1] - http://docs.google.com/present/view?id=dchgzw94_33g6d3j8gm
>
> Mersi mult,
> Dan

off the record - originea proiectului:
Am avut nevoie odata sa verific ca datele introduse intr-un fisier
(numere intregi) sunt aceleasi ca cele de pe foaia originala (e vorba
de sute de inregistrari). Cea mai simpla varianta era ca cineva sa
citeasca de pe calculator si eu sa urmaresc pe foaie (sau invers).
Acel cineva care citea s-a dovedit ca poate fi si calculatorul.
Initial a fost un hack care isi facea treaba admirabil (exectuabil C
(pentru number to text) + playsound) iar apoi m-am gandit sa extind.

E posibil ca in momentul actual unele parti sa nu se compileze - se
incearca rezolvarea acestei probleme in limita timpului liber (o
versiune din 12 decembrie (conferinta blugoscon) ar trebui sa mearga
ok).

Structura proiectului nu e batuta in cuie asa ca orice sugestie e
binevenita. Desigur limbajul ramane C/C++ si cateva elemente precum
biblioteca number to text ramane acolo :).

Bafta,

-- 
Iulian Şerbănoiu
MinVG - http://minvg.sourceforge.net


More information about the cdl-studenti mailing list