Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» PROIECT GRAFICA Compresia audio - Algoritmul MPEG 1 Layer 3


PROIECT GRAFICA Compresia audio - Algoritmul MPEG 1 Layer 3


PROIECT GRAFICA

Compresia audio



Algoritmul MPEG 1 Layer 3

Standardizari. Comprimarea fisierelor sunet

MPEG (Moving Picture Experts Group) impreuna cu Comitetul International pentru Comprimare Audio de Inalta Fidelitate, a adoptat la sfarsitul anului 1992 un algoritm MPEG Audio, ca parte a standardului general de comprimare audio-video sincronizat. El urmareste defmirea procesului de codificare/decodificare, la o rata medie de transfer de 1.5 Mbits/sec, stabilind o plaja larga de incadrare in parametri, a producatorilor de codificatoare/decodificatoare de semnal audio.

MPEG Audio nu restrictioneaza gama surselor audio. Sunt utilizate tehnici de compresie pe diferite tipuri de semnale audio, asigurand in acelasi timp si facilitatile de direct access, reverse si fast forward.

Retele de esantionare sunt cuprinse intre valorile de 32.44 - 48 KHz, si lucreaza cu unul sau doua canale, astfel:

Monofonic pe un singur canal;

Monofonic pe doua canale independente, realizand o functionalitate comparabila cu modul stereo;

Stereo pe canale stereo ce partajeaza semnalul, dar nu codifica stereo simultan;

Stereo simultan.

Se poate lucra cu rate de transfer predefinite, intre 32 si 224 KB/sec/canal cu un factor de comprimare intre 2.7 si 24, dar si cu rata de transfer libera. Pentru comprimare se pot utiliza trei nivele independente de comprimare, ce permit o corelare mai stransa intre complexitata codificarii si calitatea semnalului comprimat. Toate nivelele sunt implementate pe un singur chip, cu decodificare in timp real si pot utiliza optional detectia erorilor.

Activitatile de standardizare pentru codarea audio Hi-Fi

In acest capitol va fi descris algoritmul de codare pentru semnalele audio pentru standarul international ISO/IEC. Au fost stabiliti trei algoritmi standard pentru a fi utilizati in functie de numarul de canale si de frecventa de esantionare: MPEG-1 audio, MPEG-2 si MPEG-2 LSF. In functie de complexitatea si de calitatea realizata fiecare este clasificat in Leyer I/II bazat pe codarea pe sub-benzi si Leyer III bazat pe o combinatie intre codarea pe sub-benzi si codarea adaptiva a transformatei.

Transmisia eficienta si stocarea semnalelor audio sunt importante pentru citeva aplicatii cum ar fi audio digital, radiodifuziunea digitala prin satelit (DSB - Digital Satellite Broadcasting), stocarea semnalelor audio, conferinta la distanta si multimedia. ISO/IEC JTC 1/SC 29/WG 11 (the International Organization for Standardization/the International Electrotechnical Commission, 1st Joint Technical Committee, 29th Subcommittee, 11th Working Group) a studiat caile pentru proiectarea unui standard international pentru compresia semnalelor audio impreuna cu semnalele video sub 1,5 Mb/s. Rezultatul studiului, pentru doua canale de semnal cu frecventa de esantionare intre 32 kHz si 48 kHz, au fost publicate de ISO/IEC pe 1 august 1993 dupa aprobarea prin vot de tarile participante.

Acesta este cunoscut ca MPEG/audio faza 1, sau MPEG-1/audio. O parte a standardului MPEG-1 a fost stabilit ca standard ITU-R. De asemenea, au fost efectuate studii pentru extensia standardului MPEG-1 audio si pentru sisteme multicanal si multilingvistice si pentru o viitoare reducere a ratei de bit prin adoptarea unei frecvente joase de esantionare. Acestea reprezinta faza 2 a standardului si este denumit MPEG-2 audio. MPEG-2/audio a fost aprobat prin consens international la conferinta de la Singapore in noiembrie 1994 dupa care a fost publicat ca standard in 1995.

Structura algoritmului MPEG audio

Algoritmul MPEG audio este constituit din trei algoritmi diferiti: Layer I, Layer II si Layer III. Complexitatea creste de la Layer I la Layer III, cu o imbunatatire corespunzatoare in calitatea sunetului. Acestea pot fi in plus clasificate in MPEG-1, MPEG-2 MC (multichannel) si MPEG-2 LSF (low sampling frequency), in functie de numarul de canale codate si de frecventa de esantionare. Deoarece Layer I si Layer II sunt foarte asemanatoare, ele vor fi prezentate impreuna.

Partea comuna intre Layer I/II si Layer III este aceea ca algoritmii lor au la baza codarea pe sub-benzi cu 32 de benzi. Numarul de canale este doi, iar frecventa de esantionare este de 32, 44,1 sau 48 kHz. Aceste caracteristici reprezinta algoritmul MPEG-1/audio care reprezinta baza pentru toate codurile. Plecind de la algoritmul MPEG-1/audio, avind frecventele de esantionare 32, 44,1 si 48 kHz, a fost elaborat standardul MPEG-2 LSF care foloseste frecventele 16, 22,05 si 24 kHz. Crescind numarul de canale la 5 si prin imbunatatirea canalului de joasa frecventa a fost elaborat standardul MPEG-2 MC. Numarul de canale care pot fi manipulate de standardul MPEG-2/audio este denumit uneori 5,1, considerind ca imbunatatirea canalului este 0,1. Cind se compara MPEG-2/audio cu MPEG-1/audio ca standard, MPEG-1/audio ar putea fi numit MPEG-2 2C (doua canale) sau MPEG-2 HSF (frecventa mare de esantionare). In Fig. 3.1 este prezentata structura de baza a algoritmului MPEG audio. Din figura se vede clar ca MPEG-1/audio este nucleul algoritmilor MPEG-2/audio.

In Fig. 3.2 este data schema bloc care descrie algoritmul MPEG-1/audio. Algoritmul se bazeaza pe codarea pe sub-benzi, iar impartirea pe sub-benzi este obtinuta cu ajutorul unui banc de filtrare polifazat (PFB - polyphase filter bank) cu un filtru in cuadratura in oglinada (QMF - quadrature mirror filter). Un semnal de intrare cuantizat liniar PCM pe 16 biti este translatat in domeniul frecventa in 32 de benzi. In acelasi timp limitele benzilor (denumite nivele de mascare) sunt calculate printr-o analiza psihoacustica pentru a obtine eroarea de cuantizare permisa. Semnalul divizat in sub-benzi este cuantizat si codat conform schemei de alocare a bitilor bazata pe modelul psihoacustic, este constituite in cadre, impreuna cu date auxiliare (ancillary data). Aceste date suplimentare nu sunt folosite pentru operatia codare si decodare, utilizatorul le poate folosi in alte scopuri. Pentru decodare, intii sunt separate datele suplimentare si apoi este dezasamblat cadrul.

Apoi este efectuata decodarea si decuatizarea pe bzaa bitilor alocati pentru informatie. Este refacut apoi semnalul temporal prine reunirea benzilor. In practica au fost definite trei tipuri de algoritmi, Layer I, Layer II si Layer III, pe baza structurii din Fig. 3.2 (vezi Fig. 3.3). Codarea pe sub-benzi, ponderarea psyhoacustica, alocarea bitilor si intensitatea stereo este folosita de toati algoritmii. Layer III foloseste in plus codarea transformatei cu lungime adaptiva a blocului, codarea Huffman imbunatatirea calitatii codarii pentru stereo.

Calitatea sunetului depinde nu numai de nivelul algoritmului ci si de rata de bit folosita. Au fost specificate 14 feluri de rate de bit de la 32 kb/s pina la 448 kb/s, 384 kb/s si 320 kb/s, pentru Layer I pina la Layer III. Rata de bit pentru fiecare nivel este aratata in Tabelul. 3.1.

Tabelul 3.1

Layer

Target Bitrate (kb/s)

I

128, 192

II

96, 128

III

64, 96, 128

Algoritmul MPEG-1 audio

Formatul MP3    

Inca din 1987, institutul Fraunhofer din Germania a inceput sa lucreze la un proiect destinat compresiei audio cu pierdere de calitate, bazat pe tehnica perceptual coding. Este vorba de un concept nou fata de cele descrise anterior, mai exact de un algoritm care exploateaza slabiciunile urechii umane, oferindu-i un sunet cat mai apropiat de cel original. 
     Formatul MPEG Layer (MP1), prima reusita a institutului, a fost folosit doar pentru casetele digitale Philips DCC (Digital Compact Casette, un competitor al lui MiniDisc-urilor Sony) intre anii 1992 si 1996. Urmasul sau, MPEG Layer 2 (MP2), a fost utilizat pentru sonorul Video CD-urilor si a altor dispozitive multimedia, fiind relativ raspandit si astazi in domeniul video. A treia versiune a standardului, MPEG Audio Layer , are avantajul unei calitati ridicate la bitrate-uri scazute, ceea ce i-a adus o popularitate foarte mare. Odata cu raspandirea Internet-ului si implicit a retelelor de tip peer-to-peer (incepand cu Napster), fenomenul MP3 a luat amploare, devenind un mijloc eficient de transfer si stocare a muzicii pe calculator.     Perceptual coding este o tehnica ce permite eliminarea cu o acuratete destul de mare a sunetelor pe care urechea noastra nu le poate distinge, bazandu-se pe un model psihoacustic, adica modul in care urechea umana percepe undele sonore. In principiu, se cauta crearea unui astfel de model care sa duca la inmagazinarea sunetului folosind cat mai putini biti; nu se exclude posibilitatea unui sunet total diferit din punct de vedere matematic (esantioane cu valori departate de original) in conditiile in care urechea umana nu observa nici o diferenta. Am retinut din capitolul anterior faptul ca, pe masura ce punctele ce descriu functia sinusoidala a sunetului sunt mai numeroase, curba devine mai precisa. Downsampling-ul reprezinta eliminarea unui numar de esantioane sonore, in cazul scaderii de doua ori a ratei de esantionare urmand sa fie eliminate jumatate din sample-uri, din 2 in 2; curba rezultata are o precizie mai redusa iar calitatea sunetului este in mod constant mai scazuta. In schimb, in cazul compresiei MP3, sunt pastrate toate aceste puncte, dar ele sunt puternic modificate fata de valorile initiale, generandu-se un sunet apropiat de original, dar nu identic, totul relativ la numarul de biti alocati. Pentru 128.000 biti (128 Kb) pe secunda se obtine o calitate multumitoare a sunetului, pentru 8 Kb/s se obtine o calitate mai slaba decat cea oferita de receptorul unui telefon. Altfel spus, aproximarea curbei este determinata de un algoritm logic, creat special pentru urechea omului, nu de o taiere barbara a esantioanelor.     

Prin encoder intelegem un program (eventual un modul dintr-o suita de programe) care transforma (codeaza) un fisier necomprimat intr-unul comprimat, folosindu-se de un algoritm particular, care se supune unui standard (in cazul de fata MP3). Cu cat algoritmul de compresie este mai bun, cu atat sunetul rezultat va fi mai de calitate. Un encoder capabil va sti sa mascheze detaliile sonore nesemnificative si sa evidentieze tocmai ce urechea umana asteapta, si anume un sunet foarte apropiat de original, aparent identic; totul se reduce in principal la modelul psihoacustic implementat in encoder.    

Sa vedem in ce consta scaderea calitatii datorata compresiei MP3. Ea genereaza aparitia de "goluri" in cazul frecventelor inalte, ducand la aparitia a doua fenomene nedorite: aliasing-ul si ringing-ul. Pentru a evita acest lucru, aceste frecvente sunt pur si simplu eliminate din pasajul muzical, sunetul rezultat fiind "inchis", foarte asemanator cu cazul downsampling-ului. Cu alte cuvinte, downsampling-ul elimina prin natura sa frecventele inalte, pe cand la compresia MP3 aceasta eliminare este necesara pentru pastrarea calitatii sunetului in limite decente. In plus, chiar daca aliasing-ul nu este suparator intr-un caz particular, frecventele joase si medii sunt cele mai evidente intr-un pasaj muzical, deci avem un motiv in plus pentru a nu ocupa relativ inutil bitii (si asa putini) cu frecventele inalte. Aliasing-ul este cauzat de faptul ca, prin compresia MP3, sunetele mai slabe sunt eliminate, lasand locul celor mai puternice, pe care ascultatorul le aude mai bine. Insa, de la un anumit prag, mai exact in momentul folosirii unui bitrate prea scazut (deci encoder-ului ii este impus un numar de biti pe care sa ii utilizeze), sunt eliminate si sunete mai importante, pe care ascultatorul le aude in mod normal. Insa in pasajul urmator (prin pasaj intelegem segmente de ordinul zecimilor de secunda), sunt "extrase" alte sunete importante, ele fiind, in mod evident, diferite fata de primul caz. Daca primul pasaj contine o vioara solo, al doilea o vioara impreuna cu un pian iar al treilea din nou vioara solo, in primul si al treilea se va auzi clar vioara, iar in al doilea numai pianul pentru ca intensitatea sonora a acestuia ii este superioara viorii. Drept urmare, vioara se va auzi intrerupt in piesa cu pricina.  Ringing-ul este un caz extrem al aliasing-ului, obtinut la bitrate-uri foarte mici; diferenta de intensitate de la un pasaj la altul fiind foarte mare, unda sonora se va asemana cu sunetul de telefon. Calitatea este in acest caz foarte slaba, putandu-se ajunge chiar si la eliminarea informatiei sonore de baza.  Asadar, pentru a evita aceste efecte nedorite (dar cu pastrarea dimensiunii mici a fisierului rezultat), singura posibilitate (pe langa folosirea unui alt encoder - dar nu am ajuns cu discutia in acel punct) consta in eliminarea, uneori masiva, a frecventelor inalte, aceasta ori prin introducerea unui filtru, ori prin scaderea ratei de esantionare. Astfel, frecventele respective nu mai sunt deteriorate, ci eliminate pe de o parte, iar pe de alta parte, in cazul codarii CBR sau ABR (vom vedea in paragrafele urmatoare ce inseamna) sunt salvati biti importanti care pot fi refolositi pentru frecventele mai joase, care compun sunetul propriu-zis.   Omul, dupa cum se stie, aude sunete pana in zona a 16-20 KHz (a nu se confunda cu rata de esantionare, care se masoara tot in KHz), aceasta acuitate scazand odata cu varsta. Un filtru acceptabil este cel care elimina frecventele de peste 16 KHz, o valoare mai scazuta fiind de neacceptat pentru auditie de calitate.  Iata doua exemple de aliasing si ringing, obtinute prin pastrarea fortata a frecventelor inalte si a ratei de sampling de 44.1 KHz in cazul unui bitrate de 80 si respectiv 40. La aceleasi bitrate-uri dar cu aplicarea filtrelor la 11 si respectiv 6 KHz am obtinut rezultatele urmatoare: fara aliasing, fara ringing.     

Daca in cazul downsampling-ului si al conversiei de la 16 la 8 biti, calitatea oricarei bucati muzicale era cu aproximatie aceeasi fata de original, pe tot parcursul piesei muzicale, in cazul lui MP3 lucrurile stau altfel: in functie de numarul de instrumente care intra in ecuatie, de tipul lor sau, mai general, de genul muzical ascultat, compresia MP3 poate oferi o calitate excelenta sau poate "zgaria" urechile ascultatorului. O sonata pentru pian de Chopin nu are nevoie de prea multi biti, pe cand o orchestra intreaga, unde se suprapun zeci de instrumente, genereaza un sunet complex si greu de codat.   Efectele compresiei le putem imparti in doua categorii: cele care modifica sunetul fara a oferi un sunet deranjant (prin schimbarea timbrului instrumentelor, prin eliminarea anumitor detalii muzicale sau prin taierea frecventelor inalte) si cele care distrug piesa muzicala, facand-o greu sau imposibil de ascultat din cauza imperfectiunilor mai mult decat evidente. Taierea frecventelor poate, teoretic vorbind, sa estompeze la nesfarsit scaderea calitatii datorate compresiei, insa sub un anumit prag muzica nu mai poate fi numita muzica, ci un amalgam de frecvente joase fara prea multa noima. De aceea, encoder-ul va realiza automat un compromis intre scaderea de calitate si scaderea benzii de frecvente.  Derivat din aliasing este "umezirea" percutiei, instrumentele care o compun oferind la lovire un sunet asemanator cu cel perceput atunci cand aruncam un obiect usor in apa, asa cum putem observa si din acest exemplu (fenomenul este cunoscut sub numele de pre-echo). De asemenea, literele "s", "s" si "t" din vocea umana, instrumentele cu coarde dar si de suflat, aplauzele, precum si instrumentele care genereaza ecouri lungi si sunt combinate cu alte instrumente sau voci, sufera cel mai mult de pe urma compresiei.    

O extensie a formatelor MPEG Layer 2 si Layer o reprezinta MPEG 2 si MPEG 2.5 (a nu se confunda cu layer-ele , 2 si ). MPEG (sau 1.0), versiunea clasica, este folosita pentru ratele de sampling de 32, 44 si 48 KHz, pe cand MPEG 2 (sau 2.0) pentru 16, 22 si 24 KHz, iar MPEG 2.5 pentru 8, 11 si 12 KHz. Pentru a simplifica lucrurile, un MP3 obisnuit, obtinut din copierea unei piese de pe un CD audio (operatie numita ripping) este un MPEG 1.0 Layer . Variantele 2.0 si 2.5 nu se pot obtine decat la rate de esantionare mai mici, neuzuale pentru muzica. 

Algoritmul MPEG-1 Layer III

In Layer III au fost incorporate multe idei noi pentru a imbunatati calitatea codarii fata de Layer I/II. In fig. 3.9 este prezentata schema bloc pentru Layer III. Comparativ cu Layer I/II, Layer III foloseste transformata cosinus modificata cu lungime adaptiva a blocului (MDCT), fluturele pentru reducerea distorsiunii de aliere (alias distortion reduction butterfly), cuantizarea neliniara si codarea cu lungime variabila (codarea Huffman). Toate acestea contribuie la imbunatatirea rezolutiei in frecventa si la reducerea redundantei. In rest procedura de baza se desfasoara ca la Layer I/II.

Semnalul cuantizat liniar PCM este impartit in 32 de benzi cu PFB si fiecare banda este in continuareste transformata in linii spectrale de banda ingusta cu MDCT pe blocuri de lungime adaptiva pentru reducerea ecoului. Blocurile de lungime 18 sau 6x3 sunt determinate pe baza analizei psihoaustice. Folosirea bancului de filtre hibride mareste rezolutia in frecventa de 32 de ori, la 32x18=576. Semnalul obtinut este prelucrat pentru reducerea distorsiunii de aliere si este apoi cuantizat liniar. Cascada formata din bancul de filtre, MDCT si reducerea distorsiunii de aliere este denumita banc de filtre hibrid (Hybrid Filter Bank - HFB). Cuanizarea eset insotita de o bucla iterativa pentru alocarea bitilor. Rata de bit a fiecarui cadru este variabila. Semnalul cuantizat este codat Huffman si organizat apoi intr-un cadru. La decodare este dezasamblat intii primul cadru, este decodat indexul tabloului Huffman si factorii de scala. Semnalul temporal este reconstruit pe baza semnalului cuantizat cu bancuri de filtre hibride.

Analiza psihoacustica

Analiza psihoacustica este executata pentru a gasi nivelele de mascare pentru fiecare componenta MDCT si pentru a determina lungimea blocurilor pentru MDCT. Se recomanda folosirea versiunii modificate a modelului psihoacustic II pentru Layer II.

Lungimea blocului este selectata pe baza entropiei psihoacustice, folosind teoria impredictibilitatii. Impredictibilitatea se masoara comparind spectrele cadrului temporal curent si anterior. In vecinatatea atacului unde se produce pre-ecoul forma spectrului difera intre doua cadre si entropia psihoacustica creste. Cind entropia depaseste o valoare predeterminata sistemul o evalueaza ca un nou atac si comuta MDCT pentru micsorarea blocurilor.

Sunt calculate nivelele de mascare schimbind parametrii interni in functie de lungimea blocului. Pentru reducerea complexitatii de calcul se foloseste FFT cu lungime 256 pentru blocurile scurte si 1024 pentru cele lungi.

MDCT cu lungime adaptiva a blocului si forma ferestrei

La HFB, 576 esantioane ale semanlului de intrare reprezinta o granula. O granula este un set de esantioane si reprezinta o componenta in formarea blocului. Doua granule, de exemplu granula 0 si granula 1 sunt prelucrate ca un bloc constituit din 1152 esantioane. Cind este executata analiza pe sub-benzi a esantioanelor PCM ale unei granule, fiecare sub-banda are 18 esantioane.

Pentru blocuri lungi este executata MDCT in 36 de puncte. 18 esantioane ale unei sub-benzi din granula cuernta sunt combinate cu 18 esantioane din granula precedenta. Datorita simetriei coeficientilor, numarul de iesiri distincte ale MDCT sunt 36/2=18. Pentru blocuri scurte numarul de esantioane de intrare ale MDCT este redus la 12 si intr-om granula se aplica de trei ori mai multe MDCT. Primele 6 esantioane sunt combinate cu ultimele 6 esantioane din granula anterioara. Numarul de iesiri independente pentru MDCT pe blocuri scurte este 18, la fel ca in cazul MDCT pentru blocuri lungi.

Sunt folosite patru feluri de functii fereastra: fereastra normala (Normal Window), fereastra de inceput (Start Window), fereastra de sfirsit (Stop Window) si fereastra scurta (Short Window). Pentru primele trei ferestre se aplica o MDCT in 36 puncte, iar pentru ultima se aplica o MDCT in 12 puncte. Pentru a obtine o transforamre fara zgomot fereastra de start trebuie plasata inaintea ferestrei scurte, iar fereastra de stop dupa fereastra scurta. In fog. 3.10 este prezentat modul de folosire a functiilor fereastra.

Reducerea distorsiunii de aliere in domeniul frecventa

Coeficientii MDCT pentru blocurile lungi sunt prelucrati cu un circuit de tip fluture (butterfly) pentru reducerea distorsiunii de aliere ca in Fig. 3.11. Aceasta operatie este executata pe 32 de sub-benzi mutual adiacente, folosind 8 benzi de esantioane din vecinatatile benzii. Coefiicentii circuitului fluture sunt dati de relatiile:

(10)

(11)

Valoarea lui ci este detrminata astfel incit ea devine mai mica cu cit distanta coeficientilor MDCT folositi devine mai mare.

Cuantizarea

In Layer III este folosita cuantizarea neliniara in locul celei liniare folosita in Layer I/II. Relatia dintre coeficientul invers cuantizat MDCT, x, codul i si factorul de scala este data de relatia

(12)

Formarea sirului de biti

Formatul sirului de biti in Layer III este aproximativ la fel ca in Layer II, iar dimensiunea cadrului este la fel. Fiecare cadru de 1152 esantioane este impartit in doua granule de 576 esantioane. Dupa antetul cadrului urmeaza informatia care este comuna ambelor granule si apoi informatia proprie fiecarei granule.

Dupa cum a fost aratat, psiho-entropia creste la cadrul care contine atacuri, iar cadrul necesita un numar mai mare de biti. In acest scop a fost introdusa o tehnologie denumita "rezervor de biti". Aceasta tehnologie foloseste volumul de informatii care este produs de fiecare cadru. Cind entropia creste intr-un cadru care contine un atac, sistemul foloseste bitii de rezerva ca o completare la bitii normali si apoi incepe stocarea unui numar mic de biti in cadrul urmator si ii pastreaza pina cind volumul ajunge aproape de nivelul maxim de stocare.

Codarea stereo

In standard, codarea stereo a fost specificata ca o optiune. Reducerea ratei de bit folosind corelatia intre canalul din stinga si din dreapta este realizata in modul "joint stereo". Acest mod este indicat in tabelul 3.4, corespunzator fiecarui nivel. Layer I/II au numai intensitate stereo, iar Layer III combina intensitatea stereo cu MS.

Tabelul 3.4

Layer

Available stereo coding mode

Layer I/II

Intensity stereo

Layer III

Combined (intensity and MS) stereo

Intensitatea stereo foloseste aceeasi forma insa date cu amplitudini diferite in sub-benzi intre semnalele stinga si dreapta, in locul semnalelor originale pe cele doua canale. Sunt pregatite patru moduri pentru a schimba sub-benzile pentru folosirea ca intensitate stereo, respectiv 4-31, 8-31, 12-31, 16-31. Sub-benzile dinaintea lor, cum sunt 0-3, 0-7, 0-11 si 0-15 sunt codte independent pentru fiecare canal.

MS stereo este cea mai simpla transformare ortogonala in doua puncte este folosita suma diferentei a doua semnale in locul semnalelor originale. Atunci cind corelatia intre ambele canale este mare este de asteptat un efect de compresie datorita distributiei neuniforme a energiei. In cazul stereo-ului combinat sistemul aduna suma totala a fiecarei FFT a ambelor canale, si o multiplica cu o constanta de valoare mare. Daca valoarea rezultata este mai mare decit diferenta puterii spectrale a celor doua canale, atunci sistemul selecteaza MS stereo. , si daca nu este sistemul selecteaza modul intensity stereo si executa codarea; de exemplu, cind raportul dintre semnalul suma anterior si semnalul diferenta este mai mare decit valoarea de prag prestabilita, sistemul selecteaza modul MS stereo.

Tehnici de imbunatatire a formatului MP3 (VBR, Joint-Stereo)     
 
 

VBR constituie prescurtarea de la variable bitrate. Pentru a intelege mecanismul bitrate-ului variabil trebuie descrisa structura unui fisier MP3.  Frame-ul este unitatea indivizibila, prezenta in majoritatea formatelor ce stocheaza date, fie ele de sunet, film sau imagine. Un frame contine, in cazul formatelor lossy, informatiile cele mai reprezentative din unitatea de timp (in cazul sunetului) sau de spatiu vizual (pentru imagini). El poate avea dimensiune fixa sau variabila, in primul caz tehnica fiind numita CBR (constant bitrate), in al doilea caz VBR. La CBR, bitrate-ul este specificat de utilizator la inceputul codarii si toate frame-urile vor contine acelasi numar de biti, indiferent de nevoile reale. VBR detine avantajul modelarii numarului de biti in functie de necesitati; daca algoritmul "simte" ca sunt necesari mai multi biti pentru un frame, va genera un bitrate local mai mare sau mai mic. Cu alte cuvinte, CBR inseamna bitrate constant, calitate variabila, iar VBR inseamna bitrate variabil, calitate constanta. Pentru un MP3, exista cateva dimensiuni clasice ale frame-ului, indiferent ca este aleasa optiunea CBR sau VBR, cele mai reprezentative fiind de 96, 112, 128, 160, 192, 224, 256 si 320, si indiferent de nevoile reale sau de preferinta utilizatorului nu poate fi ales un bitrate intermediar. Exista cateva optiuni disponibile la codarea MP3 VBR. In primul rand, poate fi specificat un bitrate minim si unul maxim; astfel, indiferent de "dorinta" algoritmului, nu se va cobori sub valoarea minima si nu se va depasi valoarea maxima. Optiunea este utila in caz ca anumite pasaje sunt codate la un bitrate mic, algoritmul putandu-se insela in privinta nevoii de bitrate mic/mare. In al doilea rand, exista posibilitatea specificarii unui bitrate mediu dorit (ABR = average bitrate). Chiar daca bucata muzicala nu necesita acel numar de biti, se incearca, pe cat posibil, atingerea bitrate-ului specificat, ceea ce duce la o calitate mai scazuta decat in cazul VBR. Avantajul principal al lui ABR: se cunoaste de dinainte de codare dimensiunea (aproximativa) a fisierului rezultat, spre deosebire de VBR, care aloca mai eficient bitii dar da nastere unui fisier de dimensiune impredictibila.    Joint Stereo (JS) este numele generic atribuit unor tehnici de codare prin care informatia stereo este prelucrata diferit fata de metoda clasica (stocarea independenta a celor doua canale). Aceasta ori prin indepartarea de informatie (in locul acesteia, bitii ramasi liberi fiind folositi pentru a stoca informatii legate de sunetul propriu-zis), ori printr-o codare alternativa, mai eficienta. Tehnica se foloseste de faptul ca, in majoritatea cazurilor, diferentele dintre cele doua canale nu sunt foarte mari. Intr-un caz extrem, in care fisierul codat contine doua canale (aproape) identice, aplicandu-se modul stereo simplu s-ar risipi inutil multi biti pretiosi.  Metoda clasica de JS este denumita Intensity Stereo (IS), care uneste cele doua canale in domeniul frecventelor inalte, ducand per total la o senzatie intermediara dintre sunetul stereo si mono. Frecventele inalte sunt mai greu de perceput de catre om si de aceea in cazul lor este neglijata stereofonia. Metoda nu este recomandata decat atunci cand aceasta pierdere este mai convenabila decat o calitate foarte scazuta a sunetului, cu alte cuvinte in cazul bitrate-urilor mici. In general, e de preferat chiar si un sunet mono decat un aliasing sau ringing care practic distruge sunetul.     

Mid/Side Stereo este o alta metoda de tip Joint Stereo (s-a incetatenit aceasta denumire desi M/S Stereo nu are nici o legatura cu unirea canalelor pe care o anunta cuvantul "joint") prin care encoder-ul transforma coordonatele "stanga" si "dreapta" in unele de tip "mijloc" si "lateral". Logica este bazata pe matematica de clasa a cincea: daca notam stanga cu L (left) si dreapta cu R (right), iar L si R au valorile a si b, aceste valori pot fi deduse din relatiile a' = (L+R)/2 (mijloc) si b' = (L-R)/2 (lateral), care devin variabilele principale. Asadar, in loc ca fisierul MP3 sa contina a-uri si b-uri, va contine a'-uri si b'-uri, informatia finala fiind refacuta intr-un mod similar. In realitate, formula depinde de la encoder la encoder, Lame folosind, spre exemplu, relatia (L+/-R)/sqrt(2) (sqrt = radical). Compresia este realizata ca si cum cele doua canale originale ar fi cel de mijloc si cel lateral. Avantajul consta in faptul ca avem de-a face cu o metoda alternativa de codare, care este selectata de la caz la caz. Daca stanga si dreapta sunt identice sau foarte apropiate, canalul lateral va fi zero sau aproape zero, numarul de biti alocati lui fiind foarte redus. Daca stanga si dreapta difera foarte mult, este mai eficienta folosirea modului stereo simplu, iar acest lucru il decide encoder-ul pentru fiecare frame. De retinut faptul ca M/S Stereo nu determina cresterea calitatii sunetului decat in modurile CBR si ABR, cand encoder-ul este limitat la un numar (maxim) de biti. In cazul lui VBR, folosirea sa doar va scadea dimensiunea fisierului final (bitrate-ul mediu va fi mai mic).    

Lame, cel mai bun encoder MP3, lucreaza exclusiv cu modurile Mid/Side Stereo si Stereo "normal". Utilizarea lui M/S Stereo este recomandata la orice bitrate pentru ca, in cel mai nefericit caz (imposibil de intalnit in practica), calitatea M/S Stereo va fi similara modului stereo simplu. Totusi, prima varianta (IS) - neimplementata in Lame, desi elimina multa informatie stereo, salveaza mai multi biti decat M/S Stereo, folosirea ei fiind destinata bitrate-urilor foarte mici (de 96 kbps sau mai putin). Exista si alte tipuri de JS, numite Narrowing of Stereo Image si Simple Stereo, care elimina aproape complet informatia stereo, utilizarea lor nefiind recomandata decat in situatii speciale. In cealalta directie se afla modul Dual Channel (nici o legatura cu controller-ele de memorie). Cea mai simpla explicatie rezulta dintr-un exemplu: avem un MP3 stereo (JS sau Stereo). Pentru canalul din stanga, care contine o informatie audio mai simpla, este alocat un procent de doar 40% din numarul de biti, pentru cel din dreapta ramanand disponibili 60%. Prin Dual Channel, ambele canale vor primi exact jumatate din numarul de biti, indiferent de diferentele de complexitate, rezultand, evident, o calitate mai scazuta decat in cazul stereo normal. Folosirea acestei optiuni nu are sens decat daca cele doua canale sunt total diferite (canale de sunet ale unui film in limbi diferite).

Evolutia lui MP3 si encoder-ele existente    

Desi a fost dezvoltat initial de catre institutul Fraunhofer si a patruns pe piata in 1994 (prima versiune dateaza din 13 iulie 1994), specificatiile formatului au iesit la lumina si au permis crearea de diverse encodere care se supun standardului (deci fisierele create pot fi decodate de orice player care cunoaste formatul MP3). Programul L3ENC, dezvoltat de institut si avand o interfata la nivel de linie de comanda DOS, a intrat in istorie pentru o calitate exceptionala a codarii si o viteza foarte slaba. Ulterior, firma Xing Technology a lansat un program comercial, Xing Audio Catalyst, ce oferea posibilitatea extragerii pieselor muzicale de pe CD direct in format MP3. Succesul sau a fost foarte mare datorita vitezei impresionante, insa s-a pierdut din vedere calitatea audio, inferioara lui Fraunhofer (pe numele complet Fraunhofer-Gesellschaft, de unde si prescurtarea FhG). Mai mult, au aparut pe piata encodere foarte slabe calitativ, precum Blade sau Plugger+, dezvoltate cu scopul de a oferi o alternativa freeware la programele comerciale si putem spune ca ele si-au indeplinit scopul. Cine dorea calitate, platea pentru Fraunhofer, cine dorea viteza opta pentru Xing, cine era interesat de ceva gratuit avea de asemenea de unde alege. Totul pana cand Lame (Lame Ain't an MP3 Encoder), un encoder open-source, a depasit FhG din punct de vedere al calitatii si s-a apropiat de Xing ca viteza, aducand toate agumentele in favoarea sa. Dezvoltandu-se permanent si fiind gratuit, el a fost adoptat de multe software-uri, in acest moment fiind liderul incontestabil in ceea ce priveste codarea MP3.     

Inceputurile lui Lame dateaza din 1998, cand un anume Mike Cheng a modificat surselele standard de codare MP3, primele versiuni de Lame fiind simple patch-uri aplicate codului original. Cu timpul, Lame a fost imbunatatit de numerosi programatori, codul fiind rescris si adaugandu-i-se facilitati deosebite, precum tehnica VBR. In anul 2000, el a depasit din punct de vedere al calitatii concurentul direct sub acest aspect, FhG, in diversele sale variante, majoritatea comerciale. Chiar daca lucrul la Lame nu a incetat, versiunile noi apar rar si sunt mai mult experimentale, ultimele imbunatatiri majore fiind realizate in anul 2001. 
     Singurul punct slab al lui Lame este absenta tehnicii Intensity Stereo (IS), detaliata anterior, tehnica ce ofera posibilitatea diverselor versiuni de FhG care o au implementata sa surclaseze Lame-ul la bitrate-uri foarte scazute (de ordinul a 64 kbps). 

Initiatorul lui Lame a preferat sa se axeze pe formatul MP2, initiand proiectul tooLame, care nu a avut succes mare, calitate foarte buna, superioara lui MP3, fiind obtinuta doar la bitrate-uri foarte mari. Totusi, el are cateva avantaje clare fata de encoder-ele clasice MPEG Layer 2, precum suportul VBR si calitatea aproape de maximul care se poate obtine folosind acest format. 

Dupa cum spuneam anterior, formatul MP3 se afla spre finalul dezvoltarii sale, cresteri semnificative de calitate nemaiputand avea loc. Desi maturitatea a fost desavarsita de Lame, versiunea initiala nu se afla departe de maximul atins ulterior. In schimb, diversele encodere gratuite dar de calitate indoielnica au crescut popularitatea formatului si au impanzit piata. De exemplu, multe reviste si site-uri declarau encoder-ul de la Xing castigator, pornind pe ideea ca utilizatorul este interesat in cea mai mare masura de viteza, calitatea fiind "tot pe acolo". Si intr-adevar, pentru cei mai multi consumatori de muzica (adica cei cu boxe cat palma) un MP3-Xing la 128 kbps suna perfect, sistemul audio nefiind in stare sa redea sunetele mai fidel decat atat. In plus, versiunea demo a soft-ului nu permitea alegerea altui bitrate decat cel de 128. Iata ce ne spune Xing Audio Catalyst despre fiecare bitrate in parte: 
- 96 kbps - Near CD-Quality, good choice for portable MP3 Players 
- 112 kbps - CD-Quality, best choice for portable MP3 Players 
- 128 kbps - CD-Quality, best choice for most users 
- 160 - 192 kbps - Archival quality for high-end stereos 
- 224 - 320 kbps - Archival quality for highest-end stereos    

Personal, detin un sistem audio extrem de departe de pretentiile unuia high-end, fara a mai vorbi de acel "highest-end", si totusi un MP3 la 160 kbps generat de acest encoder imi pare a avea o calitate sub limita acceptabilului. Mai departe, citim in help-ul acestui software: "MPEG files are smaller than other digital multimedia formats, so they use less disk space while maintaining the quality of the original source." La prima vedere, orice necunoscator isi va imagina o compresie fara pierdere de calitate, bazata pe un algoritm senzational care reduce spatiul ocupat de orice melodie la 9% din original. Nimic mai fals.     

Sa trecem la urmatorul "inculpat", Blade Encoder. Homepage-ul sau este https://bladeenc.mp3.no, unde aflam ca encoder-ul nu mai este dezvoltat. Mai departe gasim urmatoarea fraza: "BladeEnc is a very different mp3 encoder (compared to Fraunhofer, LAME etc) with a very unique approach to mp3 encoding." De asemenea, sunt criticate encoder-ele Xing si Gogo (o versiune veche de Lame care a cunoscut o dezvoltare separata, oferind o calitate destul de buna), despre care se mentioneaza ca au o calitate scazuta tocmai din cauza vitezei mari de codare: "The fastest encoders like Xing and Gogo are still much faster than BladeEnc, but they have to some extent compromised quality for speed." Orice test, si folosind nu sisteme audio hi-fi ci boxe de cativa dolari, va dovedi faptul ca fisierele codate cu BladeEnc au o calitate extrem de slaba chiar si la 320 kbps, mult sub Gogo, Xing si alte encodere, singurul concurent cunoscut fiind probabil Plugger+, despre care nu am gasit prea multe informatii dar care oricum nu este prea raspandit. Dar inutil, citam dintr-un review al lui BladeEnc: "Rock solid with high bit rates and excellent quality"  Pentru cine vrea sa se convinga, am ales un exemplu poate putin exagerat, folosind bitrate-ul de 96 kbps, dar foarte edificator: Lame 96, Blade 96. Iar pentru cei cu urechi mai sensibile, avem alt exemplu: Lame 128 vs. Blade 320. Sunetul este foarte apropiat, dar putem sesiza in cazul lui Blade percutia mai "uda" decat in cazul lui Lame, desi bitrate-ul celui dintai este de 2,5 ori mai mare. Daca tineti cu orice pret, puteti asculta si un Blade la 128. Mai amintim de 8Hz-MP3, CannaMP3, M3E, SCMPX, Uzura, SoloH, X-Codec si lista probabil ca este mult mai mare. Toate aceste encodere au avut o raspandire restransa, o calitate si eventual o viteza nesatisfacatoare, dezvoltarea lor fiind oprita de obicei din motive legale, Fraunhofer avand o politica de licentiere menita sa descurajeze astfel de incercari.  

Encoder-ele se prezinta ori sub forma de program in linia de comanda, ori ca plugin (de obicei constand intr-un fisier DLL), utilizat de audio grabbere (programe care extrag de pe CD-uri piesele muzicale) precum CDex sau EAC (Exact Audio Copy), sau pur si simplu de frontend-uri (aplicatie special dedicata usurarii utilizarii alteia, oferind o interfata grafica user-friendly). De asemenea, soft-uri de scriere a CD-urilor, precum Nero, contin module de compresie/decompresie audio, ce permit comprimarea pieselor, respectiv scrierea directa pe CD a fisierelor comprimate (fara a fi necesara o decompresie care ar consuma timp si spatiu pe hard disk).

Setari recomandate pentru codarea MP3    

Indiscutabil, cel mai bun encoder MP3 este Lame. De aceea, ne vom referi in continuare doar la acesta, orice alt produs neaducand vreun avantaj major pentru a se justifica utilizarea sa, decat cel mult anumite versiuni de FhG la bitrate-uri foarte mici. Versiunile recomandate a encoder-ului Lame sunt 3.90. si 3.96. , care pot fi descarcate de aici. A doua este mai rapida si ofera imbunatatiri de calitate in unele situatii, in schimb prima este cea mai testata si ofera siguranta deplina unui sunet bun, desi uneori nu cel mai bun. Pentru extragerea pieselor muzicale de pe CD (audio-grabbing) si convertirea lor in MP3 se recomanda EAC (Exact Audio Copy), care are avantajul de a oferi siguranta unei copieri lipsite de erori, aceasta daca sunt folosite setarile recomandate. Unele utilitare asemanatoare, de exemplu CDex, necesita un fisier DLL, inclus in arhiva Lame, si care va fi apelat pe parcursul codarii. 

          Pentru inceput va trebui sa va hotarati asupra dimensiunii alocate fisierului comprimat. Cu alte cuvinte sa alegeti bitrate-ul, in functie de "finetea" urechii, calitatea placii de sunet, a boxelor sau a castilor la care ascultati muzica precum si de spatiul pe care vi-l puteti permite pe disc. Tineti cont ca in viitor este posibil ca pretentiile sa va creasca, eventual odata cu un upgrade hardware, iar prietenii carora le veti imparti MP3-urile este la fel de posibil sa prefere un bitrate mai ridicat, fiind mai pretentiosi. Comanda corecta pentru compresia cu Lame (pe care o veti introduce in optiunile lui EAC sau, daca doriti, o veti executa de la prompt-ul DOS) este Lame fisier_input.wav [fisier_output.mp3] (ultimul parametru este optional). Daca aveti un hard disk de minim 120 GB pe care intentionati sa il folositi in mare parte pentru stocarea muzicii, puteti folosi fara probleme bitrate-ul constant de 320 kbps oferit de Lame care, impreuna cu setarea Joint Stereo, ofera calitatea maxima care poate fi obtinuta cu ajutorul formatului MP3, foarte apropiata de cea a CD-ului audio. Daca aceasta calitate nu va satisface, nu va ramana decat optarea pentru alt format de compresie, eventual pentru unul lossless. Parametrul pentru acest tip de codare este --alt-preset insane. De fapt, acest preset reprezinta o combinatie intreaga de parametri, insa pentru simplificare s-au creat cateva standarde de calitate, printre care este si cel "insane". Daca doriti o dimensiune mai mica a fisierelor, aveti optiunea --alt-preset extreme, din care rezulta MP3-uri la un bitrate de aproximativ 220-270 kbps, fiind folosita tehnica VBR. Pentru cei mai putin pretentiosi si/sau care tin la spatiul ocupat, exista optiunea --alt-preset standard, care ofera, de la caz la caz, un bitrate mediu de 180-220 kbps, in functie de piesa codata. Daca doriti sa specificati un anume bitrate mediu, puteti folosi tehnica ABR, sub forma parametrilor --alt-preset 240 (sau orice alt bitrate) dar calitatea va fi mai scazuta decat in cazul VBR. Exista, de asemenea, o setare special conceputa pentru player-ele portabile, si anume --alt-preset standard -Y, care limiteaza spectrul de frecvente la aproximativ 16 KHz, oferind un bitrate de circa 160 kbps; frecventele mai inalte sunt practic insesizabile in medii zgomotoase, adica cele in care MP3 player-ele sunt adesea purtate. Cresterea maxima de calitate este inregistrata pana la 192 kbps, dupa care pentru un plus de cateva procente de acuratete poate fi necesar un spatiu mult mai mare. Totusi, cei mai pretentiosi vor opta probabil pentru preset-ul "extreme", care reprezinta un compromis foarte bun intre calitate (excelenta, de altfel) si spatiu ocupat. Ca o paranteza, parametrii sub forma de cuvinte sunt precedati de doua liniute iar cele care constau intr-o litera au nevoie de una singura. Regula este preluata din lumea Linux-ului.     

Tehnica VBR detine avantajul faptului ca nu detine vreo limitare in privinta bitrate-ului (decat la cel de 320, prevazut de standardul MP3), ci doar o recomandare vaga. Pentru un fragment de pian solo, in cazul preset-ului "extreme", va rezulta un bitrate din zona lui 220; in schimb, o combinatie de instrumente complet diferite (cu coarde, de percutie, de suflat), eventual impreuna cu vocea umana, va produce bitrate-uri mai apropiate de 270 kbps (si fara a fi limitate la acest numar, care este orientativ). In schimb, optiunea ABR 240 de exemplu, va produce bitrate-uri medii foarte apropiate de valoarea 240, cu plus sau minus maxim 10 kbps. Cu alte cuvinte, o piesa greu de codat va avea o calitate mai scazuta decat una usor de codat, chiar daca ambele sunt cantate de aceeasi formatie si se afla pe acelasi album. 
     Nu se recomanda folosirea de bitrate-uri sub 192 (decat cel mult ca VBR, in jur de 170-180). Daca ar fi sa facem o statistica privind proportia de fisiere MP3 din toata lumea la bitrate de 128, vom afla ca procentul lor este peste jumatate, poate trei sferturi din numarul total. Totusi, lumea muzicii digitale a progresat odata cu progresul tehnicii de calcul, in zilele noastre placile de sunet de calitate (incluzand chiar si "amaratul" de AC '97, integrat pe placile de baza) fiind mult mai numeroase decat in trecut. Acelasi lucru se poate spune si despre boxe, 20-30$ cheltuiti pe acestea intr-un sistem de minim 400$ nu creeaza o gaura in buzunar. Toate aceste dispozitive fac ca sunetul sa fie redat mai fidel, iar in aceste conditii un MP3 la 128 kbps isi dovedeste rapid limitarea in privinta calitatii, mult mai evident decat cu cativa ani in urma, cand el era ascultat pe o placa de sunet cu un chip antic ESS si pe o pereche de boxe de dimensiuni foarte mici. Daca inca nu v-ati convins, incercati sa socotiti spatiul pierdut in cazul in care veti recurge la un bitrate de 192 in locul celui de 128. Presupunand ca aveti un hard disk plin cu fisiere MP3 la 192 kbps, aceeasi cantitate de muzica obtinuta la 128 kbps cu un HDD de 80 GB o puteti avea prin inlocuirea acestuia cu unul de 120 GB. Care este diferenta de pret?    

Bitrate-urile mai mici de 128 nu sunt utile decat cel mult pentru MP3 player-ele portabile, in caz ca tineti cu orice pret sa inghesuiti pe ele mai multe ore de muzica. Insa alte formate ofera o calitate mult mai buna in acest caz, singura problema fiind suportul oferit din partea player-ului.  Mai mentionam posibilitatea crearii de fisiere MP3 la bitrate-uri mai mari de 320 cu ajutorul optiunii --freeformat bitrate de care dispune encoder-ul Lame. Dezavantaje: incompatibilitate cu majoritatea player-elor (in cazul lui Winamp, doar plugin-ul MAD este capabil sa le decodeze), calitate nu cu mult crescuta fata de MP3 320, in timp ce bitrate-ul poate atinge maxim 640 kbps, zona in care formatele lossless ofera o calitate superioara. Concluzionand, free format MP3 a fost un experiment si nimic mai mult. 
 

Performanta standardului MPEG-1/audio

A fost facuta evaluarea subiectiva folosind hardware-ul pentru fiecare nivel, pentru 128, 96 si 64 kb/s, in mai 1991 la Stockholm si apoi reevaluarea pentru 64 kb/s in noiembrie 1991 la Hanovra. In Fig. 3.13 este prezentat rezultatul acestor evaluari subiective. In Fig. 3.12 fiecare nivel de performanta corespunde egalitatii din Tabloul 3.5. In practica , exista erori de perceptie datorate evaluatorilor, si de aceea performanta pentru sunetul original nu depaseste 5,0. Dupa aceste doua sesiuni de evaluare subiectiva, cele doua nivele, Layer I si Layer II, au fost aprobate pentru ca asigura o calitate suficienta pentru radiodifuziune la 128 kb/s pe canal.

Tabelul 3.5

Score

Quality

5.0

Imperceptible

4.0

Perceptible, but not annoying

3.0

Silightly annoying

2.0

Annoying

1.0

Very annoying

Activitati viitoare de standardizare

Activitatile de standardizare MPEG ((Motion Picture Experts Group, rom: grupul expertilor in filme) au condus la obtinerea unei transmisii/stocari audio transparente de 96-128 kbps/canal. Numarul de canale suportate este 6. Aceste tehnologii sunt acum prezente pe piata. De exemplu el este folosit in inregistrarile video pe CD-ROM si in transmisiunile audio intre statiile de radiodifuziune. Dar piata continua sa evolueze. In consecinta cerintele pentru algoritmi de compresie de mare eficienta se mentin si in continuare. In acest scop MPEG dezvolta in prezent MPEG-2/AAC si MPEG-4 cu obiectivul obtinerii unei codari transparente la 32kbps/canal.

Bibliografie:

Andrew S. Tanenbaum - Retele de calculatoare Ed. a-IV-a.

Curs-Algoritmi si tehnologii multimedia - sursa :

Curs- Tehnici multimedia- sursa:





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate