Documente Academic
Documente Profesional
Documente Cultură
MULTIMEDIA
2
3.7. Întrebări de control și teme de dezbatere ................................................................ 73
3.8. Bibliografie obligatorie .............................................................................................. 74
4. UNITATEA DE STUDIU 4 - Video .................................................................................... 75
Cuprins.................................................................................................................................. 75
4.1. Introducere................................................................................................................ 75
4.2. Obiectivele și competențele unității de studiu ......................................................... 75
4.3. Conținutul unității de studiu ..................................................................................... 75
4.4. Sinteza unității de studiu ........................................................................................... 89
4.5. Concepte și termeni de reținut ................................................................................. 89
4.6. Îndrumar pentru autoverificare ................................................................................ 89
4.7. Întrebări de control și teme de dezbatere .............................................................. 100
4.8. Bibliografie obligatorie ............................................................................................ 100
Bibliografie ............................................................................................................................. 101
3
1. UNITATEA DE STUDIU 1 - Concepte generale, clase de aplicații
multimedia
Cuprins
1.1. Introducere.................................................................................................................. 4
1.2. Obiectivele și competențele unității de studiu ........................................................... 4
1.3. Conținutul unității de studiu ....................................................................................... 4
1.4. Dezvoltarea de aplicații multimedia cu ajutorul HTML5, CSS3, JavaScript ............... 10
1.5. Sinteza unității de studiu ........................................................................................... 11
1.6. Concepte și termeni de reținut ................................................................................. 11
1.7. Îndrumar pentru autoverificare ................................................................................ 12
1.8. Întrebări de control și teme de dezbatere ................................................................ 12
1.9. Bibliografie obligatorie .............................................................................................. 12
1.1. Introducere
Multimedia reprezintă ansamblul mijloacelor de comunicare prin care informațiile pot fi
percepute vizual şi auditiv în diferite forme.
4
este o combinaţie de: text, imagine, sunet, grafică, animaţie, video accesibilă utilizatorului
prin intermediul sistemului de calcul.
Dezvoltarea multimediei s-a realizat datorită unui proces cunoscut sub denumirea de
Revoluție Digitală care s-a bazat pe două mari descoperiri:
▪ Conversia semnalului din analog în digital; proces care genera un volum mare de
date, deci necesita un spațiu mare de memorie pentru stocarea resurselor
multimedia în format digital;
▪ Dezvoltarea tehnicilor de compresie / decompresie a datelor.
Multimedia se regăseşte la intersecţia mai multor domenii de activitate:
▪ Mass media: Ziarul, revista ( considerate ca fiind primele document multimedia)
▪ Telecomunicţiile – aplicatii pe baza de streamming, prezentari online, televiziune
pe internet, etc.
5
Procesul de compresie necesită mult mai mult timp decât cel de decompresie.
6
server sau componente care permit procesarea tipuli media ORACLE prin componenta
InterMedia, sau SGBD-uri dedicate pentru multimedia cum ar fi Jasmine.
o Sunt conturate doua directii privind dezvoltarea aplicaţiilor multimedia:
7
După destinaţie şi interactivitate:
8
✓ Aparat foto digital foloseste lentile asemanatoare aparatului foto
clasic pentru transformarea informatiei luminoase in informatie
electrica. Pentru a transfera imaginile sistemului de calcul are
nevoie de un driver si o conexiune cu un port USB.
o Placa de sunet actioneaza ca un convertor de semnal audio din analog in
digital pe input-uri (microfon, etc), respectiv din digital in analog pe
outputuri. In ultima perioada placa de bază incorporeaza o placa de sunet.
Producatorii consacrati sunt Creative, Realtek, C-Media.
9
(necomprimat WAV si AVI si comprimat WMA WMV)
✓ Quick Time (pentru MAC, sunt mai performante AIFF si MOV) o
Produse software multimedia specializate pe medii de comunicare,
fac parte din software utilitar
INSTRUCTOR
✓ Soft de creaţie multimedia ce-şi elaborează proiectul de-a lungul
axei timpului; de exemplu: FLASH, DIRECTOR
10
▪ text
▪ imagini
▪ animație
▪ grafică raster - elementul <canvas>
▪ grafică vectorială – elemental <svg>
▪ 3D graphics - WebGL
▪ audio – elemental <audio>
▪ Video – elemental <video>
11
1.7. Îndrumar pentru autoverificare
Aplicația 1.1. Enumerați tehnologiile care au facilitat apariția și dezvoltarea multimediei ca
tehnologie.
Răspuns:
Răspuns:
12
2. UNITATEA DE STUDIU 2 - Imaginea
Cuprins
2.1. Introducere................................................................................................................ 13
2.2. Obiectivele și competențele unității de studiu ......................................................... 13
2.3. Conținutul unității de studiu ..................................................................................... 13
2.4. Sinteza unității de studiu ........................................................................................... 27
2.5. Concepte și termeni de reținut ................................................................................. 28
2.6. Îndrumar pentru autoverificare ................................................................................ 28
2.7. Întrebări de control și teme de dezbatere ................................................................ 46
2.8. Bibliografie obligatorie .............................................................................................. 46
2.1. Introducere
O imagine este o suprafața de obicei dreptunghiulara caracterizata, la nivelul oricărui
punct al ei, de o anumita culoare. Exista doua modele de culoare: aditiv și substractiv.
13
2.3.1. Formate de reprezentare a imaginilor
Exista doua modele de culoare:
14
Figura 2.2. Reprezentarea imaginii în CMYK
▪ diferenta intre cele doua modele de culoare: una este substractiva (CMYK) iar
cealalta aditiva (RGB).
▪ RGB reda o imagine emisa de lumina, iar CMYK o imagine emisa prin reflexie.
▪ este imposibila reproducerea unei imagini de pe monitor (RGB) in mod identic pe
hartie (CMYK).
▪ culorile in RGB sunt exprimate cu valori intre 0 si 255. ex albastru: R:0 G:0 B:255
15
Figura 2.3. Diferenţa dintre modelele de reprezentare RGB şi CMYK
▪ bitmap - potrivită pentru imagini cu detalii fine, cum ar fi picturi sau fotografii. Numită
și grafică raster. Stochează informația despre culoarea fiecărui pixel.
Astfel, o imagine grafică raster este formată dintr-o matrice dreptunghiulară de rânduri
și coloane compuse din pixeli.
16
Fiecare specifică o singură culoare stocată utilizând de cele mai multe ori 24 de biți. Numărul
total de pixeli dintr-o imagine raster este fix. Pentru a mări o imagine raster este necesară
adăugarea de pixeli suplimentari. Similar, anumiți pixeli trebuie eliminați le reducerea
dimensiunilor unei imagini raster. Lățimea și înălțimea unei imagini raster sunt determinate
de câte pixeli conține fiecare rând și coloană.
17
▪ dimensiunea în pixeli - descrieți dimensiunea unei imagini raster, exprimată ca
numărul de pixeli de-a lungul axei x (lățime) de numărul de pixeli de-a lungul axei y
(înălțime). Ex: 800px * 600 px.
▪ număr de pixeli - numărul total de pixeli dintr-o matrice raster. Pentru a determina
numărul de pixeli, multiplicați dimensiunile orizontale și verticale ale pixelilor. Ex: o
imagine cu dimensiunea de 30 * 18 pixeli conține 540 pixeli.
▪ adâncimea culorii (rezoluția culorii) - măsură a numărului de culori diferite care pot fi
reprezentate de un pixel individual. Numărul de biți alocați fiecărui pixel sau
adâncimea de biți determină rezoluția culorii. 8-biți (256 culori), 24 biți (16.8 millioane
de culori). Un desen folosind 16 culori distincte necesită doar 4 biți pe pixel. Utilizarea
unui cod cu o adâncime de biți mai mare produce un fișier mai mare, fără creșterea
calității.
Imaginile în format bitmap sunt emise în general de către periferice, care lucrează
în mod linie (raster). Astfel imaginea vizualizată pe ecran este o imagine bitmap digitală,
stocată în memoria video şi actualizată o dată la 60 de secunde sau mai repede, în funcţie
de viteza de scanare a monitorului.
Codajul bitmap al imaginii este considerat ca fiind unul sărac in informaţie, în sensul
că semantica imaginii nu este luată în considerare adică obiectele care compun imaginea
nu se pot distinge în mod individual. Reprezentarea matriceală a imaginii conservă toate
punctele imaginii, daca dacă nu i se aplică o metodă de comprimare.
De asemenea, o deficienţă a acestei reprezentări, de care trebuie sa se ţină seama
în proiectele multimedia, constă în aceea, că nu se pot adapta unei scări variabile de
vizualizare. Astfel, orice mărire a dimensiunii imaginii este însoţită de o degradare vizuală.
Pe de altă parte operaţia micşorare a dimensiunii imaginii, adică de grupare a pixelilor, chiar
d" uneori dă rezultate satisfăcătoare, nu este simplu de realizat.
Modificarea imaginilor bitmap se poate realiza totuşi, prin programe de editare,
specifice, cum ar fi Adobe PhotoShop. Aici se pune problema dacă imaginea este cu nivele
de gri sau în culori. Imaginea în culori numerizată prin scanare nu este descompusă în cele
patru culori de bază, ci doar trei culori, care se combină pentru a da o anumită tentă unui
punct imagine. Această trecere făcută automat necesită uneori retuşul electronic al
rezultatului, pentru a fi cât mai aproape de original. Aceeaşi descompunere cromatică este
folosită şi pentru afişarea imaginii în culori, pe ecran.
18
Morfismul este un efect de modificare a imaginilor fixe, constând transformări
animate şi repetate, insesizabile ochiului, şi realizand combinarea între două imagini, una
de început şi alta finală, astfel încât una din ele va apare ca "dizolvată" în cealaltă.
Reprezentarea imaginii sub formă de matrice are numeroase dezavantaje, datorită
păstrării tuturor punctelor imaginii. Orice metodă de compresie a acestui tip de imagine
duce la o degradare a acesteia proporţională cu rata de compresie.
Cu toate acestea, există numeroase formate de fişiere care păstreaza imaginea sub
forma unei matrici de puncte.
Formatul PCX (PC PaintBrush File Format) este un format recunoscut pe platforma
Windows - PaintBrush. El poate trata imaginea codificată pe 8 biţi (256 de culori), de
dimensiune maximă 64000 * 64000 pixeli, stocarea ei făcându-se pe linii şi pe planuri.
Se parcurg toate planurile unei linii, apoi se trece la planurile celei de-a doua linii până
când sunt parcurse toate. Algoritmul de compresie utilizat de acest format este RLE (Run
Lenght
Encoding) pentru eliminarea informaţiei redundante.
Formatul TIFF (Tag Image File Format) este foarte cunoscut pentru stocarea şi
transferul imaginilor scanate. Datorită lui s-a răspândit foarte mult imaginea matriceală.
Acest format este foarte puternic în ceea ce priveşte codificarea imaginilor şi foloseşte
mai mulţi algoritmi de compresie: RLE, LZW (Lempel-Ziv-Welch) sau JPEG. Majoritatea
programelor pot gestiona acest tip de format de fişier. Formatul TIFF deţine şi avantajul de
a fi recunoscut pe toate tipurile de platforme, ceea ce face posibil transferul de la una
la alta, fără dificultăţi.
Formatul BMP (Microsoft Windows Bitmap) este formatul tradiţional care stocheză
imaginea bitmap, definit de Microsoft pentru interfaţa sa grafică. Imaginea stocată
poate fi comprimată sau nu RLE, poate fi monocromă sau în culori pe 24 sau 32 de biţi.
Acest format este recunoscut şi în mediul OS/2.
Formatul ICO (Icon Resource File) este un format bitmap, pentru imagini de
dimensiune mică şi este folosit de Windows pentru reprezentarea icon-urilor program.
Acest tip de fişier acceptă definiţia unei imagini în numeroase rezoluţii şi în culori
diferite.
Formatul JPEG (Joint Photographics Experts Group) este un format pentru imaginile
bitmap, comprimate conform standardului JPEG. Avantajul său constă în aceea că deţine
19
rate de compresie JPEG diferite, definite chiar de utilizator, în funcţie de spaţiul pe hard
disc sau în funcţie de calitatea imaginii ce se doreşte a fi obţinută. Aceste rate de
compresie pot fi foarte mari fără a pierde din calitatea imaginii. Formatul JPEG s-a dorit
a fi în acelaşi timp un standard al unui tip de compresie şi a unui format de fişier.
Formatul GIF (Graphics Interchange Format) este un format foarte răspândit şi este
folosit pentru transferul de imagini bitmap, de maxim 64K x 64K, între noduri situate la
distanţă, datorită ratelor mari de compresie pe care le acceptă. Acest format a fost
dezvoltat de CompuServe pentru a facilita tranzitul informaţiilor grafice în domeniul
telecomunicaţiilor. El permite o rată avantajoasă de comprimare prin metoda LZW, iar
imaginea este analizată linie cu linie.
PNG (Portable Network Graphics), format bitmap construit ca o îmbunatatire a
formatului GIF în sensul ca permite transparenta si are o rata de compresie mai buna
decât a formatului GIF;
Formatul DIB (Device Independent Bitmap) este un format de tip bitmap al unui fişier
imagine, frecvent întâlnit în enciclopediile tematice multimedia. Poate exista ca format
de sine stătător sau poate fi ascuns într-un fişier de format RIFF (Resource
Interchange File Format). Pentru aplicaţiile sub Windows este preferat acest format.
Fişierul PJFF DIB mai este recunoscut şi după extensia RDI.
Imaginea vectorială
Imaginea vectorială este construită din elemente geometrice (linii, curbe,
poligoane, elipse etc.) care definesc obiectele grafice numite şi vectori. Astfel de imagini
sunt stocate prin descrierea lor, prin prisma elementelor geometrice ce le compun. Din
acest motiv ele ocupă mai puţin spaţiu de memorie în comparaţie cu imaginile bitmap dar
devin semnificative când imaginea abundă de elemente grafice. Editarea imaginilor
vectoriale se face la nivelul obiectelor grafice ce compun imaginea.
Imaginile vectoriale sunt independente de scala de vizualizare, în sensul că, aplicând zoom
pe imagine, aceasta nu se distorsionează deoarece ea se retrasează la o scală mai mare sau
mai mică.
Aceste tipuri de imagini sunt mai puţin utilizate în practică deoarece au ca principal
neajuns faptul că nu pot reda fidel realitatea deoarece nu tot ce există în lumea
înconjurătoare se poate reprezenta prin elemente geometrice.
O teorie bine cunoscută care are ca scop reprezentarea elementelor din realitate
prin imagini vectoriale este teoria Fractală (Fractalii). Prin fractal se înţelege o figură
geometrică fragmentată care poate fi divizată în părţi astfel încât fiecare parte să fie o
20
aproximare a întregului. Această definiţie descrie şi modul recurent în care fractalii sunt
generaţi. In figura
2.1 este prezentat un fractal din natură şi anume frunza de ferigă.
21
2.3.2. Animația
Pentru prima dată dinamismul la nivel vizual a fost redat prin intermediul sistemelor
de calcul sub formă de animaţie. Dezvoltarea tehnologica este factorul cel mai important
care a permis utilizarea componentei video la scara larga. Aceasta componeneta este cel
mai spectaculos element al tipului media.
Atât animaţia cât şi video digital, crează impresia de mişcare printr-o succesiune de
imagini fixe derulate la o anumită viteză. Această viteză trebuie să fie suficient de mare
atunci când mişcarea este realizată pe ecranul calculatorului. Exploatând un fenomen
biologic cunoscut sub denumirea de "persistenţa viziunii", prin care un obiect văzut de
ochiul uman rămâne lipit pe retină pentru încă un timp scurt după vizualizarea sa, se
permite ca o serie de imagini care se modifică foarte uşor, dar foarte rapid, una dupa alta,
să pară legate într-o iluzie vizuală a mişcării. Viteza cu care fiecare cadru este înlocuit cu
următorul este ceea care crează senzaţia de mişcare. Acesta ar fi principiul animaţiei, care
constă în modificarea rapidă a imaginii vizualizate, adică modificarea rapidă a locului unui
obiect sau a formei şi dimensiunilor sale.
O altă tehnică prin care se poate reda mişcarea cu ajutorul calculatorului, este legată
de procesul de inking. Furnizarea unui traseu de animaţie se bazează pe metode de calcul
a valorilor pixelilor RGB, pe metode de determinare a limitelor obiectelor dintr-o scenă şi
22
de combinare a culorilor lor, astfel încât să se producă anumite efecte speciale, vizuale şi
de translaţie. Această tehnică obţine mişcarea ca urmare a realizării acestor efecte speciale.
Cele mai multe dintre software-urile authoring furnizează unelte specifice pentru
crearea animaţiei prin diferite tehnici, direct în proiectul în lucru. Aceste tehnici sunt în
general orientate asupra cadrelor sau asupra obiectelor din cadre. Folosindu-se de aceste
mijloace, se poate crea animarea unui text sau a unei imagini fixe, mai ales folosite în
prezentările multimedia. în fapt, elementele multimedia se pun într-o anumită secvenţă
prin cadrele în mişcare. Elementele de la care se porneşte în crearea animaţiei pot fi de
asemenea şi fişiere importate, asupra lor putându-se apoi aplica efecte speciale sau diferiţi
algoritmi. Ca o concluzie pentru realizarea acestui element al multimediei, putem enumera
câteva dintre caracteristicile sale:
- secvenţierea şi trasarea cadrelor intermediare, care redau senzaţia de mişcare;
Imaginea animată este recunoscută în aplicaţii sub diferite formate de fişiere. Cele mai
cunoscute formate de fişiere ce conţin animaţie bitmap sunt GIF, FLI şi FLC (Animation
Flic). Un alt format pentru stocarea imaginii animate sau pentru video comprimat, este
RLE.
Acest format este utilizat şi recunoscut de numeroase editoare grafice, furnizate mai ales
împreună cu Video for Windows.
23
de date: textuale, grafice, vectoriale, imagini bitmap, imagini fixe sau animate şi sunet. In
conformitate cu specificul fiecărui tip de dată, se aleg algoritmi potriviţi, specifici sau normaţi.
2. Compresia RLE (Run Length Encoding) este destinat compresiei imaginilor si este
avantajos în cazul datelor care conţin secvenţe lungi şi puţine valori diferite. Pentru o
imagine în culori codificarea se face prin identificarea unei culori, apoi prin indicarea
acesteia şi a numărului de pixeli din această culoare. Raportul de compresie obţinut
prin această metodă variază de la imagine la imagine, nefiind însă foarte mare.
3. LZW (Lempel, Ziv, Welch) este deja foarte cunoscut şi este aplicat prin intermediul
utilitarelor ARC, PKZIP sau LHARC, precum şi al numeroaselor filtre ce recunosc
diferite formate de fişiere. Algoritmul se bazează pe o tabelă de corespondenţă între
date şi adresele lor, tabelă ce se construieşte pe măsură ce codificarea avansează. La
reconstituirea datelor, receptorul procedează în mod simetric pentru reconstituirea
dicţionarului, utilizând acelaşi algoritm. Deşi se bazează tot pe un tabel ca şi codajul
Huffman, acest codaj nu necesită o analiză în prealabil a datelor de codificat. Pentru
a da un randament sporit, metodele se pot combina aplicându-se mai întâi un codaj
LZW şi apoi unul Huffman.
24
face ca formatul GIF sa fie recomandat in situatiile cand avem imagini simple de gen grafice,
logo-uri cu zone intanse de aceasi culoare si nerecomandate in cazul fotografiilor. Imaginile
GIF, dupa prelucrare, sunt comprimate apoi folosind algoritmul LZW fara pierdere de
informatie.
Acest algoritm a fost creat la iniţiativa ISO a CCITT. Acest standard se încadrează în
clasa metodelor de comprimare cu pierdere de informatie şi utilizează algoritmi hibrizi,
bazaţi pe transformarea cosinus discretă şi pe codajul Huffman. Principiul sub care
funcţionează JPEG este stabilirea de relaţii între pixelii unei imagini şi codificarea lor, iar
prin aplicarea sa se poate obţine o imagine comprimată într-un raport de 75:1, fără o
degradare vizibilă a calităţii acesteia. Structura standardului a fost finalizată în 1989 şi
poartă în clar denumirea de "compresie numerică a imaginilor fixe de natură fotografică".
Realizarea normei JPEG este condiţionată de existenţa a trei elemente necesare:
-un codor, care primeşte datele numerice ale imaginii sursă şi generează, conform
unui ansamblu de proceduri, datele imaginii comprimate;
25
discretă, DCT. împărţirea imaginii în blocuri cu această dimensiune este datorată
codificării pe câte 8 biţi a fiecărei componente a semnalului imagine: luminanţă şi
chrominanţă. Datorită funcţiilor matematice se trece astfel de la o reprezentare spaţială a
celor 64 de informaţii distincte la o reprezentare secvenţială, cu o componentă continuă.
-codaj progresiv fără pierdere, în care se face o predicţie a unei valori pornind de la
alte trei eşantioane vecine. Diferenţa acestei valori estimate faţă de valoarea sa
efectivă face obiectul unui codaj de tip Huffman. Acest codaj nu mai are în vedere
transformări de tip DCT, iar aplicarea lui se foloseşte în special pentru imaginile de
calitate fotografică, cum ar fi de exemplu imaginile Photo-CD.
-codaj progresiv ierarhic, în care imaginea este codificată ca într-o urzeală, fără a fi
supusă transformărilor DCT. Se porneşte cu o linie de urzeală de referinţă, după care
se face o predicţie asupra liniilor de urzeală următoare. Diferenţa constatată între
urzelile sursă şi urzelile reconstruite se codifică printr-un algoritm de tip diferenţial.
Rata de comprimare obţinută în fiecare din aceste moduri depinde de
caracteristicile imaginii tratate. Astfel pentru aceeaşi imagine se pot obţine patru rate de
compresie JPEG, după modul în care a fost codificată imaginea. De exemplu, pentru o
imagine sursă reprezentată 16 biţi / pixel, raportul rată de compresie JPEG - calitatea
imaginii obţinute se prezintă în felul următor:
-la o reducere de 0,08 biţi / pixel, adică la o rată de 200:1, se permite obţinerea unei
imagini cu forme identificabile,
26
-la o reducere de 0,25 biţi / pixel, adică o rată de compresie de 60:1, se obţine o
imagine de calitate medie,
-la o reducere 0,75 biţi / pixel, adică o rată de 20:1, imaginea este de calitate
excelentă; - la o reducere 2,25 biţi / pixel, adică o rată de 7:1, imaginea este aproape
identică, din punct de vedere vizual, cu imaginea iniţială.
Norma JPEG şi-a găsit deja aplicarea, folosindu-se pentru stocarea pe suporţii optici
CD-I şi pentru DVI.
- imaginile de comprimat pot avea rezoluţii foarte mari, depăşind chiar 1000x1000
pixeli;
27
2.5. Concepte și termeni de reținut
Imagine raster format de reprezentare
Imagine vectorială GIF
Model de culoare JPEG
RGB TIFF
CMYK pixel
Răspuns:
Un pixel este zonă pătrată (sau ocazional rectangulară) de culoare, reprezentând un singur
punct din imagine. Toți pixelii dintr-o imagine raster au exact aceeași dimensiune. Fiecare
specifică o singură culoare stocată utilizând de cele mai multe ori 24 de biți.
Răspuns:
Aplicația 1.3. Implementați utilizând limbajele HTML, JavaScript și CSS o librărie pentru
afișarea de grafice pe canvas. Interfața aplicației va fi similară cu cea din Figura 2-3.
28
Figura 2-3. Afișare grafic cu bare pe canvas
Răspuns:
//http://exploringjs.com/es6/ch_classes.html
//https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Classes
class BarChart{
constructor(canvas) {
this.canvas = canvas;
}
draw(values){
let context = this.canvas.getContext('2d');
context.save();
let h = this.canvas.height;
let w = this.canvas.width / values.length;
context.fillStyle = '#DEDEDE';
context.fillRect(0, 0, this.canvas.width, this.canvas.height);
context.fillStyle = 'red';
context.strokeStyle = 'black';
context.lineWidth = 2;
//...spread operator
let maxValue = Math.max(...values);
let f = this.canvas.height / maxValue;
29
let rectWidth = w * 0.8;
let rectHeight = values[i] * f * 0.9;
let rectX = (i + 0.1) * w;
let rectY = h - rectHeight;
/* Equivalent to:
context.beginPath();
context.rect(rectX, rectY, rectWidth, rectHeight);
context.fill();
context.stroke();*/
}
context.restore();
}
}
<!DOCTYPE html>
<html>
<head>
<title>BarChart</title>
<meta name="viewport" content="width=device-width, initial-
scale=1, maximum-scale=1.0, user-scalable=0">
<script src="canvas-bar-chart-library.js"></script>
</head>
<body>
<form>
<input id="tbValues" type="text" value="12, 13, 3, 2, 1, 10, 7, 18
">
<input id="btnDrawChart" type="button" value="Draw chart">
</form>
30
<script>
'use strict';
btnDrawChart.addEventListener('click', () => {
let tbValues = document.getElementById('tbValues');
let values = tbValues.value;
</script>
</body>
</html>
31
Aplicația 1.3. Implementați utilizând limbajele HTML, JavaScript și CSS o aplicație care să
permită afișarea histogramei unei imagini preluate prin drag and drop. Interfața aplicației va
fi similară cu cea din Figura 2-4.
Răspuns:
Regăsiți în cele ce urmează codul necesar pentru preluarea imaginii prin drag and drop. Pentru
desenarea histogramei se va utiliza biblioteca pentru grafice cu bare de la aplicația anterioară.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>HTML5Multimedia - DragDrop</title>
<script src="canvas-bar-chart-library.js"></script>
</head>
<body style="text-align:center;">
Drag and drop an image to start. Click on the image afterwards to down
load it. <br>
32
<a id='downloadLink' href="#" download="histogram.png">
<!--
download attribute: download file when clicking on the link (i
nstead of navigating to the file)
http://www.w3schools.com/tags/att_a_download.asp
-->
<canvas id="canvasHistogram" width="512" style="width:512px;border
-style: dotted;"></canvas>
</a>
<br>
<script>
'use strict';
//Selectors
const canvasImage = document.getElementById('canvasImage');
const canvasHistogram = document.getElementById('canvasHistogram')
;
const barChart = new BarChart(canvasHistogram);
//Methods
function drawImage(img) {
const cW = img.naturalWidth, cH = img.naturalHeight;
canvasImage.width = cW;
canvasImage.height = cH;
function drawImageHistogram(){
const v = [];
for (let i = 0; i < 256; i++) {
//The push() method adds new items to the end of an array,
and returns the new length.
// http://www.w3schools.com/jsref/jsref_push.asp
v.push(0);
}
33
const cW = canvasImage.width;
const cH = canvasImage.height;
const imageData = context.getImageData(0, 0, cW, cH);
const data = imageData.data;
barChart.draw(v);
}
//Events
document.addEventListener('dragover', function(e){e.preventDefault
();})
document.addEventListener('drop', function (e) {
e.preventDefault();
34
//https://developer.mozilla.org/en-
US/docs/Web/API/FileReader/onload
reader.addEventListener('load', function (e) {
const image = document.createElement('img');
image.addEventListener('load', function(){
drawImage(this);
drawImageHistogram();
});
image.setAttribute('src', e.target.result);
});
//1. Ok for small images. Does not work with large images
//downloadLink.setAttribute("href", this.toDataURL("image/png"
));
Aplicația 1.4. Implementați utilizând limbajele HTML, JavaScript și CSS o aplicație care să
permită aplicarea de efecte pe imagini încărcate cu ajutorul unui control de tip ”input”.
Interfața aplicației va fi similară cu cea din Figura 2-5.
35
Figura 2-5. Aplicare efecte pe canvas
Răspuns:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Image Editor</title>
<script src="image-editor.js"></script>
36
<link rel="manifest" href="manifest.json">
<body style="text-align:center;">
<canvas id="visibleCanvas" style="
position: fixed; top: 50%; left: 50%; transform: translate(-50%, -
50%);
max-width:100%; width:auto; height: auto; max-height: 600px">
</canvas>
<div style="
background-color: rgba(200,200,200,0.8);
padding: 10px;
position: fixed;
top:10px; left: 50%;
transform: translate(-50%);">
<!-- https://developer.mozilla.org/en-
US/docs/Web/HTML/Element/input/file -->
<input type="file" id="fileBrowser" name="fileBrowser" accept="ima
ge/*">
</div>
<!-
- https://developer.mozilla.org/en/docs/Web/Guide/HTML/Using_data_attribut
es -->
<button type="button" class="effectType" data-
effect="normal">Normal</button>
37
<button type="button" class="effectType" data-
effect="grayscale">Grayscale</button>
<button type="button" class="effectType" data-
effect="threshold">Threshold</button>
<button type="button" class="effectType" data-
effect="sephia">Sephia</button>
<button type="button" class="effectType" data-
effect="invert">Invert Colors</button>
<button type="button" class="effectType" data-
effect="pixelate">Pixelate</button>
<button type="button" class="effectType" data-
effect="twoChannels">2 Channels</button>
<button type="button" class="effectType" data-
effect="red">Red</button>
<button type="button" class="effectType" data-
effect="green">Green</button>
<button type="button" class="effectType" data-
effect="blue">Blue</button>
</html>
.loader {
left: 50%;
top: 50%;
position: fixed;
38
transform: translate(-50%, -50%);
}
.loader #spinner {
border: 16px solid #f3f3f3; /* Light grey */
border-top: 16px solid #3498db; /* Blue */
border-radius: 50%;
width: 80px;
height: 80px;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
'use strict';
const app = {
visibleCanvas: null,
offscreenCanvas: null,
donwloadLink: null,
loader: null,
currentEffect: null
}
//Drawing methods
/** Changes the effect
* @param {string} effect - The new effect
*/
app.changeEffect = function(effect){
if(effect !== app.currentEffect)
{
app.currentEffect = effect;
app.drawImage();
}
}
app.drawImage = function() {
//show spinner
app.loader.style.display = 'block';
39
//https://developer.mozilla.org/en-US/docs/Web/API/Performance/now
let t0 = performance.now();
console.log("t0: "+t0);
let t1 = performance.now();
console.log(t1-t0 + ": drawing the image on the canvas");
app.offscreenCanvas.toBlob(function(blob){
let blobUrl = URL.createObjectURL(blob);
app.donwloadLink.href = blobUrl;
},"image/png");
app.loader.style.display = 'none';
}
app.normal = function(pContext){
pContext.drawImage(app.visibleCanvas, 0, 0);
}
app.grayscale = function(pContext){
let oContext = app.visibleCanvas.getContext("2d");
pContext.putImageData(imageData, 0, 0);
}
//Events
app.load = function () {
app.visibleCanvas = document.createElement("canvas");
40
app.donwloadLink = document.getElementById("donwloadLink");
app.offscreenCanvas = document.getElementById("visibleCanvas");
app.loader = document.querySelector('.loader');
document.getElementById("fileBrowser").addEventListener("change", func
tion(e){
//1. create the reader
let reader = new FileReader();
//2. attach events
reader.addEventListener('load', function(event){
app.changeEffect("normal");
});
img.src = event.target.result;
});
//3. start loading the file
reader.readAsDataURL(e.target.files[0]);
});
}
{
"name": "Image Editor",
"short_name": "Image Editor",
"icons": [{
"src": "img/icons/icon-128x128.png",
"sizes": "128x128",
"type": "image/png"
41
}, {
"src": "img/icons/icon-144x144.png",
"sizes": "144x144",
"type": "image/png"
}, {
"src": "img/icons/icon-152x152.png",
"sizes": "152x152",
"type": "image/png"
}, {
"src": "img/icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
}, {
"src": "img/icons/icon-256x256.png",
"sizes": "256x256",
"type": "image/png"
}, {
"src": "img/icons/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}],
"start_url": "index.html",
"display": "standalone",
"background_color": "#3E4EB8",
"theme_color": "#2F3BA2"
}
Aplicația 1.5. Implementați utilizând limbajele HTML, JavaScript și CSS o aplicație care să
permită afișarea unui grafic cu bare utilizând grafică vectorială. Interfața aplicației va fi
similară cu cea din Figura 2-6.
42
Figura 2-6. Afișarea unui grafic cu bare utilizând grafică vectorială
Răspuns:
<!DOCTYPE HTML>
<html>
<head>
<title>SVG Bar Chart</title>
<meta name="viewport" content="width=device-width, initial-
scale=1, maximum-scale=1.0, user-scalable=0">
<style>
.bar:hover {
fill: yellow;
}
</style>
<script src="svg-bar-chart-library.js"></script>
</head>
<body>
<div id="barChart" style="width: 600px; height:400px;"></div>
<script>
const data = [
['Label 1', 1],
43
['Label 2', 2],
['Label 3', 3],
];
//http://exploringjs.com/es6/ch_classes.html
//https://developer.mozilla.org/en-
US/docs/Web/JavaScript/Reference/Classes
class BarChart{
constructor(domElement) {
this.domElement = domElement;
this.svgns = "http://www.w3.org/2000/svg";
}
draw(data){
this.data = data;
this.width = this.domElement.clientWidth;
this.height = this.domElement.clientHeight;
this.createSVG();
this.drawBackground();
this.drawBars();
this.domElement.appendChild(this.svg);
}
createSVG(){
this.svg = document.createElementNS(this.svgns, "svg");
this.svg.setAttribute('style', 'border: 1px solid black');
//or
//this.svg.style.borderColor = 'black';
//this.svg.style.borderWidth = '1px';
//this.svg.style.borderStyle = 'solid';
this.svg.setAttribute('width', this.width); //note: this.svg.width
is readonly
this.svg.setAttribute('height', this.height);
}
drawBackground(){
const rect = document.createElementNS(this.svgns, 'rect');
rect.setAttribute('x', 0);
44
rect.setAttribute('y', 0);
rect.setAttribute('height', this.height);
rect.setAttribute('width', this.width);
rect.style.fill = 'WhiteSmoke';
//rect.setAttribute("fill", 'WhiteSmoke'); //! not recommended
this.svg.appendChild(rect);
}
drawBars(){
const barWidth = this.width / this.data.length;
//note: if the styles are set using CSS .bar:hover {...} will
only work if marked as !important
//the styling should be moved to the .bar {...} instead
bar.setAttribute("fill", '#db4437');
bar.setAttribute("stroke-width", 2);
bar.setAttribute("stroke", "black");
this.svg.appendChild(bar);
45
2.7. Întrebări de control și teme de dezbatere
1. Dați exemple de situații când este preferabilă utilizarea imaginilor raster.
3. Creați o imagine vectorială si salvați-o într-un format raster. Comparați dimensiunile celor
două fișiere.
4. Salvați o poză în mai multe formate diferite. Comparați dimensiunea fișierelor rezultate și
calitatea imaginilor stocate.
46
3. UNITATEA DE STUDIU 3 - Sunetul
Cuprins
3.1. Introducere................................................................................................................ 47
3.2. Obiectivele și competențele unității de studiu ......................................................... 47
3.3. Conținutul unității de studiu ..................................................................................... 48
3.4. Sinteza unității de studiu ........................................................................................... 56
3.5. Concepte și termeni de reținut ................................................................................. 56
3.6. Îndrumar pentru autoverificare ................................................................................ 56
3.7. Întrebări de control și teme de dezbatere ................................................................ 73
3.8. Bibliografie obligatorie .............................................................................................. 74
3.1. Introducere
Sunetul este o vibrație propagată printr-un mediu material sub forma unei unde
mecanice. Sunetul digital se reprezintă printr-un flux de valori numerice care rezultă în urma
procesului de eșantionare și cuantificare a semnalului analog. Compresia sunetului utilizează
tehnici precum mascarea frecvențelor și mascarea temporală. Sunetul poate fi utilizat în
context web cu ajutorul elementului de tip <audio>.
47
3.3. Conținutul unității de studiu
Presiune Voltaj
Voltaj Presiune
48
Figura 3-2. Redarea sunetului
Reprezentarea sunetului:
▪ Axa X: timp
▪ Axa Y: presiune (0 – presiunea aerului în repaus)
Două caracteristici importante ale sunetului sunt amplitudinea și frecvența. Amplitudinea
măsoară dimensiunea vibrației / volumul sunetului, așa cum se poate observa în Figura 3-3.
Frecvența măsoară viteza vibrației / tonul sunetului, așa cum se poate observa în Figura 3-4.
49
Figura 3.1 Eşantionarea semnalului audio
Valorile astfel obţinute se pot cuantifica pe un număr diferit de biţi (8, 16, 32 etc.) depinzând
de capabilităţile plăcii de sunet. La digitizarea semnalului audio, editoarele de sunet
furnizează utilizatorilor posibilitatea de a stabili valorile parametrilor de numerizare după
cum se observă în figura 3.2.
Din figura 3.2 se poate observa că s-a optat pentru o frecvenţă de eşantionare de 11025
Hz (aproximativ 11 kHz), valorile se reprezintă pe 2 baiţi şi sunetul se memorează pe un singur
canal (mono).
50
creşterea numărului de valori ce trebuie stocate. In literatura de specialitate se recomandă a
se utiliza anumite frecvenţe de eşantionare în funcţie de tipul de semnal audio:
In general, valoarea ratei de eşantionare trebuie să fie egală cu dublul celei mai mari
frecvenţe a semnalului audio care urmează a fi numerizat. Astfel, un sunet având frecvenţa
de 8000 Hz trebuie să fie eşantionat la o frecvenţă de cel puţin 16000 Hz adică să se obţină
Un alt parametru care influienţează calitatea semnalului audio este numărul de biţi pe
care se reprezintă valorile preluate din eşantionare. Prin intermediul acestor valori se
cuantifică amplitudinea sunetului adică diferenţa dintre sunetul având intensitatea cea mai
mare şi cel cu intensitatea cea mai mică. Spre exemplu dacă se utilizează 8 biţi pentru
cuantificarea valorilor atunci se pot reprezenta 256 niveluri distincte ale amplitudinii
semnalului. In caz că se reprezintă valorile pe 16 biţi atunci se poate cuantifica amplitudinea
sunetului prin 65536 niveluri distincte. In plan fonic amplitudinea se exprimă prin dB (decibeli)
iar corespondenţa între numărul de biţi şi numărul de dB este prezentată în tabelul 3.1.
51
Număr biţi Valori distincte Intensitatea sunetului (dB)
8 256 48
16 65536 96
52
- AU (AUdio) este formatul standard al firmei Sun Microsystems, introdus iniţial
pentru telefonie digitală;
- VOC (VOiCe) este formatul pentru sunet digital lansat de firma Creative Voice
în mod deosebit pentru plăcile de sunet produse de această firmă; formatul a
fost limitat şi dezvoltat în funcţie de capabilităţile placilor de sunet produse de
această firmă;
- MPEG (Moving Picture Experts Group) Audio care s-a impus ca format
standard în ceea ce priveşte sunetul digital comprimat este parte a standardului
MPEG de codificare a semnalului audio-video; cea mai cunoscută variantă a lui
este MP3;
- AMR (AMR-NB) folosit iniţial pentru înregistrări;
- OGG - un format deschis şi liber, ca şi calitate este asemănător cu MPEG, dar
datorită popularității MPEG, OGG nu se poate impune ca utilizare;
Spre deosebire de sunetul digital propriu-zis, sunetul MIDI se reprezintă sub forma unei
descrieri muzicale. Protocolul conține comenzi, secvenţializate în timp, ce indică plăcii de
sunet nota pe care să o reproducă, prin prisma cărui instrument, canalul în care va fi difuzată,
durata de emitere a ei şi volumul.
Deoarece sunetul MIDI nu este un sunet rezultat în urma unui proces de eşantionare şi
cuantificare, ci apare ca o descriere muzicală pe baza unui protocol, fișierele care conțin sunet
MIDI sunt semnificativ mai mici decât cele care conţin sunet digital propriu-zis. Dezavantajul
secvenţelor audio de tip MIDI constă în aceea că, nu orice sunet întâlnit în realitate poate fi
sintetizat prin prisma instrumentelor muzicale electrice (de exemplu, sunetele emise de vocea
umană).
53
Sunetul MIDI este redat de placa de sunet prin înţelegerea protocolului de descriere a
secvenţei muzicale. Pornind de aici, un alt dezavantaj al acestui tip de sunet se referă la faptul
că periferice diferite sintetizează diferit sunetele aceloraşi instrumente muzicale. De aceea
este posibil ca pe un calculator care are o placa de sunet diferită de a calculatorului pe care s-
a înregistrat secvenţa, aceeaşi melodie să se audă în mod diferit.
Se poate face o paralelă între cele două componente care formează tipul media
(imaginea şi sunetul) în sensul că, aşa după cum avem imaginea reprezentată punct cu punct
avem şi sunetul digital propriu-zis, în timp ce imaginea descrisă prin elemente geometrice are
corespondent în partea audio, sunetul MIDI.
a) mascarea frecvențelor
b) mascarea temporală
a) mascarea frecventelor
− In primul rand, din coloana sonora sunt eliminate sunete care au frecventa mai mare de
1618 KHz (limita pana la care noi auzim: 18000 Hz).
− Mai sunt eliminate sunetele de intensitate scazuta, care apar concomitent cu sunete de
intensitate inalta, conditia fiind ca sunetele sa fie in benzi invecinate de frecventa. Cele cu
intensitate scazuta sunt mascate de cele cu intensitate inalta.
b) mascarea temporala
Se elimina sunetele de intensitate mica care urmeaza dupa sunete de intensitate
puternica (pe o durata foarte mica).
54
In paralel, se aleg si valorile de referinta pentru fiecare banda de semnal in parte.
2) Stabilirea numarului de biti disponibilizat, folosind un cuantificator de tip bit per zgomot
mp3: compresia, in plus, elimina zgomotul (sesizeaza valorile de referinta si tot ceea ce
iese in afara valorilor este eliminat, pentru a ajunge la o sinusoida regulata) (aplatizarea
neregularitatilor in cadrul fluxului audio).
3) Preluarea valorilor obtinute si constituirea unui flux unic de biti.
55
▪ canPlayType(type) – permite aplicației să determine dacă browser-ul curent suportă
un anumit tip de fișier audio
▪ load() – pornește procesul de descărcare a fișierului audio de pe server; este
obligatoriu să fie apelat înainte de începerea redării folosind metoda play()
▪ pause() – oprește redarea (cu păstrarea poziției curente)
▪ play() – pornește redarea de la poziția curentă
Răspuns: Sunetul este o vibrație propagată printr-un mediu material sub forma unei unde
mecanice.
56
Aplicația 3. Care este intervalul de frecvențe perceput de urechea umană?
Aplicația 4. Utilizați HTMLAudioElement pentru a crea o aplicație de tip player audio care să
includă și o listă de redare. Lista de redare poate fi definită local sau preluată prin
intermediul unui API (cum ar fi cel furnizat de Spotify). O captură de ecran cu interfața
utilizată de Spotify pentru redarea pieselor este inclusă în Figura 3-7.
'use strict';
const app = {
audio: null,
tracks: [], //track list
currentUrl: null,
//UI
currentTime: null,
duration: null,
btnPlayPause: null
};
57
const selectedElement = document.querySelector('#playlist li[data-
url="' + url + '"]');
selectedElement.classList.add('active');
app.currentUrl = url;
app.audio.src = app.currentUrl;
app.audio.load();
app.audio.play();
}
app.play(app.tracks[index]);
}
app.load = function () {
app.audio = document.getElementById('audio');
app.currentTime = document.querySelector('#currentTime');
app.duration = document.querySelector('#duration');
app.btnPlayPause = document.getElementById('btnPlayPause');
elements[i].addEventListener('click', function () {
app.play(this.dataset.url);
});
}
app.audio.addEventListener('timeupdate', function () {
const currentTime = app.audio.currentTime;
58
if (app.audio.duration) {
app.currentTime.textContent = app.secondsToString(currentTime)
;
}
else {
//innerText can also be used
//differences https://www.w3schools.com/jsref/prop_html_innerh
tml.asp
app.currentTime.textContent = '...';
};
});
59
document.getElementById('btnForward').addEventListener('click', functi
on () {
app.audio.currentTime += 10;
});
/**
* A utility function for converting a time in miliseconds to a readable ti
me of minutes and seconds.
* @param {number} seconds The time in seconds.
* @return {string} The time in minutes and/or seconds.
**/
app.secondsToString = function (seconds) {
let min = Math.floor(seconds / 60);
let sec = Math.floor(seconds % 60);
return time;
};
<!DOCTYPE html>
<html lang="en">
<head>
<title>HTML5 - Audio Playlist</title>
60
integrity="sha384-
TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2"
crossorigin="anonymous">
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/5.15.1/css/all.min.css">
<style>
#audioTime {
min-width: 200px;
text-align: right;
color: #eeeedd;
background: #333;
}
</style>
</head>
<body class="container">
<ul id="playlist">
<li data-url="media/Bolero.mp3" class="list-group-item">
Ravel - Bolero
</li>
<li data-url="media/Beethoven-MoonlightSonata.mp3" class="list-
group-item">
Beethoven - Moonlight Sonata
61
</li>
<li data-url="media/CanoninD.mp3" class="list-group-item">
Pachelbel - Canon in D
</li>
</ul>
<canvas id="canvas"></canvas>
<script src="audio-playlist.js"></script>
<script>
app.load();
</script>
</body>
</html>
Figura 3-9. Reprezentare sunet microfon prin intermediul unui grafic cu bare
Rezolvare:
<!DOCTYPE html>
<html lang="en-us">
62
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1, shrink-to-fit=no">
<body>
<div class="container">
<form>
<div class="form-group">
<label for="visual">Visualizer setting</label>
<select id="visual" name="visual" class="form-control">
<option disabled selected>Choose</option>
<option value="sinewave">Sinewave</option>
<option value="frequencybars">Frequency bars</option>
</select>
</div>
</form>
</div>
<script src="sound-analyser-library.js"></script>
<script>
"use strict";
//Variables
const canvas = document.getElementById('canvas');
const visualSelect = document.getElementById("visual");
63
const soundAnalyser = new SoundAnalyser(canvas);
//Methods
function resizeCanvas() {
//reset canvas width and height to match the display values
canvas.width = canvas.clientWidth;
canvas.height = canvas.clientHeight;
}
//Subscribe to events
window.addEventListener("resize", resizeCanvas);
visualSelect.addEventListener("change", function () {
soundAnalyser.display(this.value);
});
//Start
resizeCanvas();
if (navigator.mediaDevices.getUserMedia) {
//The MediaDevices.getUserMedia() method prompts the user for permis
sion to use one video and/or one audio input device such as a camera or sc
reensharing and/or a microphone.
//Part of WebRTC API
//More details: https://developer.mozilla.org/en-
US/docs/Web/API/MediaDevices/getUserMedia
navigator.mediaDevices.getUserMedia(
{
audio: true // constraints - only audio needed for this app
})
.then((stream) => {
soundAnalyser.setStreamSource(stream);
})
.catch(function (err) {
alert(err.messsage);
});
}
</script>
</body>
</html>
64
//https://developer.mozilla.org/en-
US/docs/Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API
class SoundAnalyser {
/**
*
* @param {HTMLCanvasElement} canvas
*/
constructor(canvas) {
this.canvas = canvas;
this.context = this.canvas.getContext("2d");
this.audioCtx.resume();
if (visualSetting == "frequencybars") {
//Is an unsigned long value representing the size of the FFT (Fast F
ourier Transform) to be used to determine the frequency domain.
//More info: https://developer.mozilla.org/en-
US/docs/Web/API/AnalyserNode/fftSize
this.analyserNode.fftSize = 256;
this.drawFrequencyBars();
} else if (visualSetting == "sinewave") {
this.analyserNode.fftSize = 1024;
this.drawSineWave();
}
}
65
/**
*
* @param {MediaStream} stream
*/
setStreamSource(stream) {
const sourceNode = this.audioCtx.createMediaStreamSource(stream);
// Connect the output of the source to the input of the analyser
sourceNode.connect(this.analyserNode);
}
/**
*
* @param {HTMLMediaElement} mediaElement
*/
setMediaElementSource(mediaElement){
const sourceNode = this.audioCtx.createMediaElementSource(mediaElement
);
// Connect the output of the source to the input of the analyser
sourceNode.connect(this.analyserNode)
// Connect the output of the analyser to the destination
this.analyserNode.connect(this.audioCtx.destination);
}
drawFrequencyBars() {
this.context.fillStyle = 'rgb(0, 0, 0)';
this.context.fillRect(0, 0, this.canvas.width, this.canvas.height);
//Copies the current frequency data into a Uint8Array array passed int
o it.
const dataArray = new Uint8Array(bufferLength);
this.analyserNode.getByteFrequencyData(dataArray); //Value btween 0 an
d 255
//http://stackoverflow.com/questions/14789283/what-does-the-fft-data-
in-the-web-audio-api-correspond-to/14789992#14789992
66
this.context.fillStyle = 'rgb(' + dataArray[i] + ',50,50)';
this.context.fillRect(barX, barY, barWidth, barHeight);
}
this.context.lineWidth = 2;
this.context.strokeStyle = 'rgb(0, 0, 0)';
this.context.beginPath();
if (i === 0) {
this.context.moveTo(x, y);
} else {
this.context.lineTo(x, y);
}
x += sliceWidth;
}
67
this.context.lineTo(this.canvas.width, this.canvas.height / 2);
this.context.stroke();
Rezolvare:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Speech API</title>
68
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4
.0.0-beta/css/bootstrap.min.css" integrity="sha384-
/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M"
crossorigin="anonymous">
<style type="text/css">
.btn-circle {
border-radius: 50%;
padding: 0.7em;
background-color: white;
}
button:focus {
outline: 0;
}
.bs-callout {
padding: 20px;
margin: 20px 0;
border: 1px solid #eee;
border-left-width: 5px;
border-radius: 3px;
}
.bs-callout-warning {
border-left-color: #f0ad4e;
}
</style>
<script src="https://code.jquery.com/jquery-
3.2.1.slim.min.js" integrity="sha384-
KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd
/popper.min.js" integrity="sha384-
b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4"
crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-
beta/js/bootstrap.min.js" integrity="sha384-
h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1"
crossorigin="anonymous"></script>
<script src="speech-api.js"></script>
</head>
<body class="container">
69
<div class="row justify-content-md-center align-items-
center" style="margin-top:10px">
<div class="col-md-1">
<button onclick="startButton(event)" class="btn-circle">
<img id="start_img" src="img/mic.gif">
</button>
</div>
<div class="col-md-11">
<div id="info" class="bs-callout bs-callout-warning">
<p id="info_start">Click on the microphone icon and begin speaking
for as long as you like.</p>
<p id="info_speak_now" style="display:none">Speak now.</p>
<p id="info_no_speech" style="display:none">
No speech was detected. You may need to adjust your
<a href="https://support.google.com/chrome/bin/answer.py?hl=en&a
mp;answer=1407892">microphone settings
</a>.
</p>
<p id="info_no_microphone" style="display:none">
No microphone was found. Ensure that a microphone is installed a
nd that
<a href="https://support.google.com/chrome/bin/answer.py?hl=en&a
mp;answer=1407892">
microphone settings</a> are configured correctly.
</p>
<p id="info_allow" style="display:none">
Click the "Allow" button above to enable your microphone.
</p>
<p id="info_denied" style="display:none">
Permission to use microphone was denied.
</p>
<p id="info_blocked" style="display:none">
Permission to use microphone is blocked. To change, go to chrome
://settings/contentExceptions#media-stream
</p>
<p id="info_upgrade" style="display:none">
Web Speech API is not supported by this browser. Upgrade to
<a href="https://www.google.com/chrome">Chrome</a> version 25 or
later.
</p>
</div>
</div>
</div>
70
<span style="font-weight: bold">Recognized text:</span>
<span id="interim_span"></span>
</div>
</body>
</html>
"use strict";
changeState('info_start');
$(document).ready(function () {
if (!('webkitSpeechRecognition' in window)) {
upgrade();
} else {
recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.onstart = function () {
recognizing = true;
changeState('info_speak_now');
};
71
if (event.error == 'not-allowed') {
if (event.timeStamp - start_timestamp < 100) {
changeState('info_blocked');
} else {
changeState('info_denied');
}
ignore_onend = true;
}
};
recognition.onend = function () {
recognizing = false;
if (ignore_onend) {
return;
}
changeState('info_start');
if (window.getSelection) {
window.getSelection().removeAllRanges();
var range = document.createRange();
range.selectNode(document.getElementById('final_span'));
window.getSelection().addRange(range);
}
};
72
$("#final_span").val($("#final_span").val() + final_transcript
);
interim_span.innerHTML = interim_transcript;
};
}
});
function startButton(event) {
if (recognizing) {
recognition.stop();
return;
}
interim_span.innerHTML = '';
recognition.lang = 'ro-ro';
recognition.start();
ignore_onend = false;
start_timestamp = event.timeStamp;
}
function changeState(s) {
$("#info").children().hide();
$("#" + s).show();
// Helper Methods
function capitalize(s) {
return s.replace( /\S/, function (m) { return m.toUpperCase(); });
}
3. Salvați un sunet în mai multe formate diferite. Comparați dimensiunea fișierelor rezultate
și calitatea acestora.
73
3.8. Bibliografie obligatorie
▪ Dardala, M., Smeureanu, I., Reveiu, A. Tehnologii Multimedia, Editura ASE,
Bucuresti 2008
▪ Smeureanu,I., Drula, G., Multimedia, concepte si practica, Editura Cison, 1997
▪ Cotfas, L.-A., Suport de curs și seminar, 2020, https://github.com/liviucotfas/ase-
multimedia, România
▪ http://ro.wikipedia.org/wiki/MP3
74
4. UNITATEA DE STUDIU 4 - Video
Cuprins
4.1. Introducere................................................................................................................ 75
4.2. Obiectivele și competențele unității de studiu ......................................................... 75
4.3. Conținutul unității de studiu ..................................................................................... 75
4.4. Sinteza unității de studiu ........................................................................................... 89
4.5. Concepte și termeni de reținut ................................................................................. 89
4.6. Îndrumar pentru autoverificare ................................................................................ 89
4.7. Întrebări de control și teme de dezbatere .............................................................. 100
4.8. Bibliografie obligatorie ............................................................................................ 100
4.1. Introducere
Video digital – cuprinde totalitatea tehnicilor de captură, procesare și stocare a imaginilor
în mișcare (precum și a sunetului asociat) prin intermediul unui dispozitiv de calcul. Avantajele
video digital includ posibilitatea de procesare prin intermediul calculatorului, păstrarea în
timp și rezistența la copieri repetate și posibilitatea de transmitere la distanță.
▪ studenții vor putea implementa aplicații web care să utilizeze fișiere video.
Această legătură dintre calculator şi video a început mai demult, atunci când sistemele
de calcul au fost folosite pentru controlul imaginilor video analogice, stocate pe benzi şi care
apoi erau afişate pe ecranul televizorului. Apoi diferenţele dintre imaginea video pe calculator
şi imaginea video analogă au început treptat să se atenueze printr-o numerizare de calitate.
Nu a fost nevoie decât de o componentă hardware specializată, o placă overlay de
numerizare, pentru ca imaginile video de televiziune preluate sub formă analogă să fie
transformate în informaţii digitizate, apoi mixate cu informaţiile digitale ale calculatorului şi
vizualizate pe monitorul acestuia. Datorită sprijinului dat de hardware, imaginile video
digitizate pot fi afişate full-screen, full-motion, full-color şi în plus, de o bună calitate; pot fi
captate cadre video analogice, care apoi pot fi salvate ca imagini fixe digitizate, dar există şi
posibilitatea ca achiziţia şi stocarea video să se facă în întregime sub formă digitală. Pentru a
realiza o producţie multimedia este necesar deci să înţelegem aceste două tehnologii, în
special pentru că procesele de transformare a unui tip de semnal în celălalt presupun
performanţe deosebite ale calculatorului de procesare, algoritmi eficienţi de comprimare şi
un spaţiu de stocare considerabil, cerinţe care sunt încă departe de un nivel satisfăcător.
Având în vedere aceste considerente, putem spune că producţiile multimedia se vor
"liberaliza" abia atunci când captarea şi înregistrarea video vor deveni în totalitate procese
digitale.
76
devin în acest caz insesizabile în raport cu semnalul util. însă cea mai mare parte a surselor
video furnizează încă semnalul în formă analogă.
Conversia dintre video analog şi video digital prezintă un număr de dificultăţi tehnice,
generate în principal de diferenţele dintre cele două sisteme. Acestea se referă la existenţa
unor standardele diferite, uneori incompatibile, care au fost dezvoltate de diferitele industrii
implicate.
Afişarea semnalului perceput de către cele două sisteme se face diferit şi din punctul de
vedere al modului de baleiaj al ecranului. Pentru a reda imaginile de pe benzile video în
tehnologia analogică, ecranul este întreţesut, în sensul că două seturi de linii alternate
formează banda. Liniile cu număr de ordine par sunt trasate în primul pas, iar cele cu număr
impar în pasul al doilea, intercalându-se. Din acest motiv, acest baleiaj se mai numeşte şi
baleiaj întreţesut 2/1. Acest mod permite ca o imagine video să fie difuzată la o rată redusă a
cadrelor, sub 25-30 fps (frame per secundă), fără o pâlpâire sesizabilă ochiului. Pe ecranele
calculatoarelor însă, liniile video sunt prezentate secvenţial, una după cealaltă. Acest tip de
baleiaj este cunoscut sub numele de baleiaj progresiv. în compensaţie cu modul de baleiaj,
rata cadrelor în tehnologia digitală este mai rapidă, de exemplu 66.7 fps pentru monitorul
calculatorului Macintosh.
Legat de modul de baleiaj este şi spectrul de frecvenţă al unui semnal video, care se
referă la cantitatea de informaţie existentă, adică la numărul de cadre şi de linii cadru.
O diferenţă uşor de constatat între cele două sisteme este rezoluţia ecranului. Astfel
rezoluţia video diferă pentru sistemul analog în funcţie de standardul TV: 625 linii în cazul
77
standardului NTSC, respectiv 525 linii pentru standardele PAL şi SECAM. Pentru ecranul
calculatorului scanarea se face, de obicei, la numai 480 de linii, pentru aceeaşi dimensiune a
acestuia, în mod progresiv, iar rezoluţia lui este limitată în mod obişnuit la rezoluţia unui
monitor VGA, de 640*480 pixeli, cu o paletă de 256 culori.
Principalele caracteristici ale fișierelor video digitale sunt: rezoluția, spațiul de culoare și
numărul de biți per pixel, numărul de cadre pe secundă, modul de afișare (întrețesut sau
progresiv) și calitatea compresiei
78
câte 360 de pixeli/linie pentru componentele de culoare). Debitul obţinut în urma operaţiei
de numerizare este de 166 Mbiţi/s pentru video brut. Pentru o imagine video cu un baleiaj de
525 de linii (norma NTSC) numărul de linii active de eşantionat este de 486, cu acelaşi număr
de eşantioane. Se eşantionează un singur semnal de luminanţă la fiecare semnal de
chrominanţă, din cele două. Raportul 4:2:2 este bazat pe faptul că ochiul uman este mult mai
sensibil la luminanţă decât la chrominanţă, deci semnalul de chrominanţă se poate codifica
cu mai puţină precizie decât luminanţă. Acest format este considerat ca format principal pe
care se bazează toate echipamentele de producţie video numeric şi algoritmii de compresie
asociaţi. De la acest format se porneşte la determinarea blocurilor de frecvenţă, obţinute prin
transformarea cosinus discret, în operaţia de comprimare. De remarcat că la comprimarea
MPEG se folosesc numai 352 pixeli pe linie, în loc de 360 cât se obţin prin numerizarea video,
pe o componentă de culoare.
Un alt mod de codificare a semnalului video numeric este 4Fsc, sau video numeric
compus.
Acest format este varianta compusă a semnalului video analog şi constă în numerizarea
unui semnal NTSC sau PAL la o frecvenţă egală cu de 4 ori frecvenţa undei purtătoare, cu o
cuantificare pe 8 biţi.
Obţinerea unui rezultat bun pentru video numeric este condiţionată în principal de
următorii
factori:
- fluxul de imagini, care poate fi de la 25, la aproape 30 de cadre-pe secundă;
79
Sistemul de indexare Time Code Input/Output este o metodă comercială, care foloseşte
pentru codificarea semnalului video, timpul. Metoda a fost stabilită de Society of Motion
Picture and Televisión Engineers (SMPTE) ca un standard de sincronizare universal, utilizat în
editarea video, audio şi a filmului. Conform acestei codificări, fiecărui cadru video individual i
se asociază câte un număr unic, ce permite controlul exact al benzii şi indexarea secvenţelor.
Prin aceste numere, platformele industriale de calitate pot adresa fiecare cadru prin codul
"timp" şi apoi pot să-1 acceseze direct în timpul procesului de editare. Numărul unic al fiecărei
imagini se codifică într-un bloc de 80 de biţi, ce reprezintă în fapt, momentul captării sau
înregistrării acesteia. în acest mod, Time Code indică prin codajul BCD (Binary Coded Decimal)
ora, minutul, secunda şi numărul imaginii. Semnalul este completat cu 16 biţi de control şi
depanare. Cei 96 de biţi care formează codul se transmit pe durata unei linii video.
Deoarece semnalul Time Code este înregistrat pe o pistă audio paralelă, codul s-a mai
numit şi Longitudinal Time Code sau LTC. Pentru a extrage şi decodifica semnalul Time
Code se folosesc un generator şi un lector de Time Code, care se regăsesc sub forma unor
plăci integrate sistemului. Acest mod de a ţine evidenţa cadrelor, poate pierde cu uşurinţă
sincronismul imagine - numărul unic Time Code, datorită paralelismului semnalului cu banda
video, la o simplă defazare a semnalului. Din această cauză, semnalul Time Code a fost
integrat semnalului video, în partea de sus a benzii şi a primit denumirea Vertical Time Code
sau VTC. Atât semnalul LTC, cât şi semnalul VTC folosesc codificarea BCD, pe 96 de biţi.
Un alt sistem de reperaj şi indexare a cadrelor video este Frame Code. Din punctul de
vedere al codificării, el este mult mai simplu şi se bazează pe numerotarea crescătoare a
imaginilor - cadru care compun mişcarea, începând cu 1, până la 300000. Acest sistem de
codificare este furnizat de Sony şi este în principiu acelaşi cu al video-discului interactiv
LaserVision.
Animaţia şi filmele video digitale sunt considerate secvenţe de scene grafice bitmap,
redate rapid, la o anumită viteză impusă. Crearea mişcării se poate realiza cu anumite produse
software, cu funcţii dedicate, ce propun pentru aceasta un mod de lucru orientat pe cadre sau
un mod de lucru orientat pe obiecte. Cele două posibilităţi software pentru crearea mişcării,
în mod obişnuit se exclud.
80
Produsele software video sunt folosite pentru crearea componentelor dinamice, în
mişcare, ale multimediei, beneficiind de câteva caracteristici necesare acestora.
• Montajul video numeric reprezintă varianta cea mai utilizată de editare a datelor
video.
Editoarele video specializate deja existente, sunt proiectate în jurul celor două tehnologii
audiovideo, specifice platformelor Macintosh şi PC. Acestea permit mixarea clipurilor video,
înregistrărilor audio cu animaţia, cu imaginile fixe sau cu grafice, pentru a crea filme
QuickTime sau AVI. De asemenea, datorită acestor tehnologii, programele afişează timpul de
desfăşurare a proiectului, contorizează şi indexează cadrele componente, ca şi nivelele audio.
In acest fel, accesul şi lucrul pe un anumit cadru este facilitat de funcţii din interiorul
produsului.
Din categoria acestor produse produse face parte şi software-ul VideoMachine. Filmul
este văzut ca o succesiune de scene numerotate, ceea ce permite o rapidă căutare a acestora.
Video Machine dispune de o funcţie de căutare, care în baza unor criterii variate de căutare
permite selectarea clipurilor individuale. Editarea filmului se face cu desfăşurare pe axa
timpului, deci este de tip timeline.
Interfaţa utilizator a produsului este divizată în zone de lucru, în mod obişnuit afişate pe
ecran, zona timeline şi zona Project Manager. Componenta Project Manager este cea care
81
se ocupă de gestionarea obiectelor (clipuri, grafică, efecte speciale, texte) pe axa timpului, în
procesul de editare.
Ideea folosirii acestui produs este de a prelua materialul filmat de pe casete şi de a-1
edita prin metode numerice. Aplicaţia rezultată în urma prelucrării poate fi returnată unui
suport oarecare de stocare. O secvenţă video prelucrată cu acest produs poate fi încorporată
unui proiect multimedia datorită unor caracteristici de mare compatibilitate:
• imaginile pot fi supuse unor reglaje speciale, în ceea ce priveşte alegerea culorii şi
luminozităţii;
• în plus, produsul dispune de funcţii specifice bazelor de date, ceea ce simplifică to£-
urile la editare şi la arhivare;
• Alegerea anumitor cadre se face după criterii dorite, denumite şi condiţii de filtrare.
Selecţia se mai poate face însă şi prin cuvintele cheie existente sau alte funcţii
specifice.
Când se creează cadrele, trebuie să se specifice condiţiile care vor fi apoi luate în
considerare pentru funcţiile de filtrare. Ele pot fi legate prin operatori OR şi AND, ceea ce
uşurează formularea cererilor compuse. O altă posibilitate de selecţie a cadrelor este după
codul determinat pe axa timpului, timecode. Tot după această axă se realizează şi editarea
secvenţelor video, afişându-se în mod grafic toate etapele şi efectele obţinute în urma editării.
Un alt element care se poate combina cu secvenţele în mişcare este sunetul. întrucât şi
acesta este un mediu dependent de timp, afişarea lui se face pe axa timpului, pe o pistă
separată de cea a secvenţelor video. Această reprezentare poate asigura înregistrarea
sunetului pentru fiecare imagine în parte şi se poate asigura sincronizarea cu acestea. Editarea
audio este de asemenea posibilă şi în mod obişnuit este executată după editarea imaginii.
Pentru integrarea textului unei secvenţe video, există un modul special proiectat. Cazul
cel mai frecvent este inserarea textului pentru titluri şi se realizează cu un editor de text sau
82
cu o aplicaţie grafică. Prelucrarea titlului este condiţionată de modul în care acesta va apare
pe ecran, precum şi de dimensiunea imaginii video cu care se combină. Se poate lucra atât cu
titluri statice, cât şi cu elemente text animate. În legătură cu background-ul imaginilor în
mişcare, culoarea aleasă pentru text trebuie să evite obţinerea efectelor de transparenţă sau
acoperire a acestuia.
Un alt avantaj apreciat pentru multimedia, este posibilitatea acestui produs de a accesa
instantaneu o sursă. Astfel se pot capta anumite cadre video, care apoi pot fi utilizate drept
clipuri grafice. Sursa de captare poate fi o cameră video sau imaginea de la televizor, după
care imaginea este convertită şi salvată într-un fişier de format grafic. Acest fişier poate fi
utilizat în orice altă aplicaţie, care îl poate importa.
Efectele speciale aplicate asupra imaginii din Video Machine sunt efecte video digitale.
Acestea se datorează unui editor special, inclus, denumit editorul DVE (Digital Video
Effect). El poate genera propriile efecte sau le manipulează pe cele deja existente, pentru
eventuale modificări.
Deoarece imaginea este tratată în formă digitală se pot genera efecte speciale prin
manipularea geometriei şi culorii informaţiei. Astfel de efecte pot fi: înclinarea (o nouă
imagine se pune peste original pe o anumită direcţie specificată), zoom-ul (modificarea
dimensiunii imaginii), rotaţia (conţinutul imaginii se deplasează în jurul unei axe imaginare,
care poate trece prin ecran; se admite numai rotaţia după o axă orizontală), cortina (o imagine
este pusă ca o cortină verticală sau orizontală peste o alta care se acoperă, total sau parţial),
îngheţarea imaginii la intervale de timp fixate, efectul mozaic (imaginea este împărţită în
pătrate de diferite dimensiuni, al căror conţinut a fost redus şi eventual colorat; acest efect
se foloseşte la emisiunile TV pentru a ascunde identitatea anumitor persoane), negativul,
solarizarea (răsturnarea valorilor tonale prin supraexpunerea zonelor de lumină, determinând
apariţia lor în negru), XY-List (dă o anumită traiectorie specifică zooOT-urilor şi efectelor,
creând impresia de zbor).
83
▪ Audio Video Interleave – AVI: container mai vechi dezvoltat de Microsoft pe baza
Resource Interchange File Format – RIFF (stochează datele în secțiuni identificate
prin markere FourCC)
▪ MP4 – MPEG-4 Part 14: dezvoltat de către Motion Pictures Expert Group și utilizat
inițial de către QuickTime (video H.264, audio AAC)
▪ AVCHD – format utilizat în special de către camerele video (video H.264 AVC și sunet
AC3 sau PCM)
▪ Matroska / OGG: formate deschise; pot conține mai multe fluxuri audio / video
Codecul este cel care specifică modalitatea de compresie / decompresie pentru un flux
video / audio în cadrul unui container:
▪ H.264 / MPEG-4 AVC – cel mai popular (utilizat pentru Web, BluRay, camere video)
▪ H.262 / MPEG-2 – formatul standard pentru DVD
▪ Windows Media Video – format dezvoltat de către Microsoft
▪ MJPEG (Motion JPEG) – format mai vechi bazat pe compresia JPEG
Întrucât pentru video se înregistrează o redundanţă mare, atât spaţială, adică a detaliilor
de conţinut a cadrelor, cât şi temporală, adică a diferenţelor constatate între cadrele
84
succesive, transparenţa nu se pierde la o compresie chiar de 20 de ori, deşi de multe ori este
posibilă o compresie mult mai mare. Redundanţa spaţială este exploatată de tehnicile de
compresie intra-cadre, care tratează imaginile una după alta, în mod individual. Acestea se
bazează fie pe eliminarea detaliilor nesemnificative, fie pe codificarea culorilor pe mai puţini
biţi sau pe considerarea culorilor vecine ca fiind identice. în schimb, la compresia bazată pe
redundanţă temporală, inter-cadre, sunt luate în considerare numai aspectele care ţin de
diferenţele semnalate într-o imagine în raport cu precedenta.
Algoritmii de compresie video real-time cunoscuţi sunt: JPEG, MPEG, P*64, DVI, M-JPEG;
ei se bazează pe cele două tipuri de redundanţă şi sunt disponibili pentru a comprima
informaţia video digitală, cu rate cuprinse de la 50:1 până la 200:1.
Dintre aceştia MPEG s-a impus ca normă oficială de compresie a imaginilor video. El
poartă numele grupului de lucru desemnat în 1988 să dezvolte standarde pentru
reprezentarea codificată a imaginii în mişcare, a sunetului asociat şi a combinaţiei lor. Acest
grup numit MPEG (Motion Picture
Pentru a face faţă nevoilor crescânde de standarde pentru multimedia, grupul MPEG şi-
a orientat lucrările pe mai multe direcţii, existând deja numeroase specificaţii ale acestuia:
- MPEG1 - "Coding for Moving Pictures and Associated Audio for Digital Storage Media at up
to about 1,5 Mbps". Este un standard internaţional (IS-1172 / octombrie 1992) ce priveşte
numerizarea video cu sunet sincron, pentru aplicaţii pe CD-ROM, cu debite de până la 1,5
Mbits/s.
MPEG2 - "Generic Coding of Moving P(ictures and Associated Audio". Similar MPEG1,
acest standard internaţional (IS-13818 / noiembrie 1994) include extensii, ce pot acoperi
cerinţele unei game largi de aplicaţii video numerizat, de înaltă calitate, pentru publicul larg:
bănci de imagini, enciclopedii multimedia, etc. MPEG2 cere pentru video numerizat, de
calitatea emisiunii TV, un debit cuprins între 4 şi 9 Mbits/s. în plus, MPEG2 s-a dovedit eficient
şi pentru TV de înaltă definiţie şi s-a dezvoltat în ideea de a suporta formate de afişaj progresiv
şi intercalat. Ulterior, MPEG2 a evoluat pentru a suporta şi transmisii video, la o rată de
transfer de 2-15 Mbits/s prin cablu, prin satelit sau prin alte canale de comunicaţie. în forma
omologată la mijlocul anului 1994, standardul MPEG2 este definit ca un standard destinat
televiziunii, în principal prin satelit, pentru imagini de 724*480 pixeli (NTSC) şi de 720*576
pixeli (PAL) la debite de transfer mergând până la 40 Mbits/s.
85
MPEG1 şi MPEG2 au o structură constituită din 4 părţi principale, ce se referă una la
întregul sistem, prin descrierea sincronizării şi multiplexării semnalelor video şi audio, una la
componenta video, cuprinzând compresia semnalelor video, una la componenta audio,
insistând pe compresia semnalelor audio şi o alta privind testele de conformitate a operaţiilor,
descriind procedurile pentru determinarea caracteristicilor fluxurilor de date şi a procesului
de decodare, precum şi procedurile pentru testarea conformităţii cu cerinţele specificate în
primele trei părţi.
MPEG2.
MPEG4 - este denumită şi "Very Low Bit Rate Audio-Visual Coding". Pentru acest
standard prima listă de propuneri a fost deschisă la 1 octombrie 1995, el,fiind destinat
codificării video numeric la debite joase, cuprinse între 4800 şi 64000 bits/s pentru imagini de
170*144*10 Hz. Primele versiuni ale standardului au fost anunţate pentru sfârşitul anului
1996, dar definitivarea lui este prevăzută pentru anul 1998. Obiectivele acestui standard
vizează comunicaţiile multimedia interactive, videofonia, poşta electronică multimedia, ziare
interactive, bazele de date. Datorită acestor debite scăzute, se permite, spre exemplu,
videofonie digitală pe linii telefonice analogice. Ca suport software se mizează pe perfectarea
unor noi tehnici de comprimare ultraperformante, pe bază de fractali şi funcţii iterate.
86
• codajul de tip Huffman, pentru date; codajul predictiv, pentru mişcări înainte şi înapoi,
prin care anumite mişcări sunt reconstituite în totalitate prin interpolare, plecând de la
imaginile anterioare şi de la cele posterioare;
• codajul diferenţial, ce presupune reţinerea doar a diferenţelor faţă de o altă imagine.
Stocarea fără comprimare a cadrelor care se succed într-o secvenţă video, pe un anumit
suport de informaţie, conduce la depăşirea rapidă a spaţiul disponibil fără a mai lua în
considerare şi ritmul lent de redare. MPEG reuşeşte să rezolve problema limitării resurselor
prin operaţia de comprimare.
Compresia video MPEG este una de tip asimetric, în sensul că operaţia de codificare este
mult mai complexă şi cu timpi de desfăşurare mai mari decât cea de decodificare. Semnalul
video şi audio comprimat prin această operaţie trebuie să-şi păstreze sincronizarea iniţială.
Pentru a menţine informaţia de timp asociată acţiunii în mişcare, codorul foloseşte un ceas
intern, prin care se asigură integrarea şi vehicularea acesteia împreună cu semnalul digitizat.
Mai concret, pentru imaginile video, compresia MPEG acţioneză prin reducerea
caracteristicilor de luminanţă şi chrominanţă ale semnalului YUV. Aceste caracteristici sunt
gestionate în bloc, prin convertirea lor în frecvenţe, care sunt apoi cuantificate. Această
transformare produce o reducere a dimensiunii secvenţelor video. Astfel se foloseşte un
format SIF (Standard Image File) pentru comprimare, ce prevede o numerizare pe trei
componente YUV, de forma 4:2:0 şi nu 4:2:2, pentru a asigura reducerea debitelor de transfer.
Pentru acest format, atât pentru standardul PAL, adică 352 * 288 pixeli la 25 de cadre pe
secundă, cât şi pentru standardul NTSC, adică 352 * 240 pixeli la 30 de cadre pe secundă, se
obţine o reducere substanţială la 176 * 144 pixeli pentru semnalul PAL şi respectiv de 176 *
120 pixeli, pentru NTSC. Rezoluţiile admise pentru reducere pot fi de la cele prevăzute de
CCIR-601 (704 * 480), până la cele mai mari, de dimensiune 4095 * 4095.
87
Figura 4-1. Element de tip <video>
Procesarea cadrelor dintr-un fișier video se poate realiza cu ajutorul unui element de tip
canvas, așa cum se poate observa în Figura 4-2.
88
var W = canvas.width = video.clientWidth;
var H = canvas.height = video.clientHeight;
context.drawImage(video, 0, 0, W, H);
var imageData = context.getImageData(0, 0, W, H);
for (var y = 0; y < H; y++) {
for (var x = 0; x < W; x++) {
var i = (y * W * 4) + x * 4;
// change values in imageData.data[i+...]
}
}
}
context.putImageData(imageData, 0, 0);
// other canvas drawing operations
Răspuns: Fișierele de tip video pot fi utilizat în context web cu ajutorul elementului de tip
<video>.
89
Aplicația 3. Realizați o aplicație care să permită controlul secvențelor de tip <video>, similar
cu cea prezentată în Figura 4-3.
Răspuns:
<!DOCTYPE html>
<html>
<head>
<title>Video - Simple Player</title>
</head>
<body>
<video id="video">
<source src="../media/tears-of-steel-battle-clip-
medium.mp4" type="video/mp4" />
<source src="../media/tears-of-steel-battle-clip-
medium.ogg" type="video/ogg" />
Your browser doesn't support HTML5 video.
</video>
<div class="controls">
<a id="btnStop" href="#">Pause</a>
<a id="btnControls" href="#">Hide Controls</a>
</div>
<script>
"use strict";
90
let video = document.getElementById("video");
let btnStop = document.getElementById("btnStop");
let btnControls = document.getElementById('btnControls');
//Play/Pause
btnStop.addEventListener('click', function (e) {
if (video.paused) {
video.play();
btnStop.textContent = "Pause";
}
else {
video.pause();
btnStop.textContent = "Play";
}
});
//Show/Hide Controls
btnControls.addEventListener('click', function (e) {
e.preventDefault();
if (video.hasAttribute("controls")) {
video.removeAttribute("controls")
btnControls.textContent = "Show Controls";
} else {
video.setAttribute("controls", "")
//we put "" because the controls atribute has no value <vi
deo controls></video>
//https://developer.mozilla.org/en/docs/Web/API/Element/se
tAttribute
</html>
91
Aplicația 4. Realizați o aplicație care să permită aplicarea de efecte asupra fișierului rulat prin
intermediul elementului de tip <video>. Interfața aplicației va fi similară cu cea din Figura 4-4.
Răspuns:
<!DOCTYPE html>
<html>
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1, shrink-to-fit=no">
<body>
92
<div class="container">
<div class="row">
<div class="col-sm-6"> <!-- What does col-ms-
6 mean? Check http://getbootstrap.com/css/#grid -->
<h2>Original</h2>
<div class="embed-responsive embed-responsive-16by9">
<video id="video" controls autoplay loop muted crossor
igin="anonymous" class="embed-responsive-item">
<source src="../media/tears-of-steel-battle-clip-
medium.mp4" type="video/mp4" />
<source src="../media/tears-of-steel-battle-clip-
medium.ogg" type="video/ogg" />
Your browser doesn't support HTML5 video.
</video>
</div>
<br>
</div>
<div class="col-sm-6">
<h2>Transformed</h2>
<canvas id="canvasProcessed"></canvas>
</div>
</div>
93
<button type="button" class="btn btn-
default effectType" data-effect="rotation">Rotation</button>
<button type="button" class="btn btn-
default effectType" data-effect="emboss">Emboss</button>
<button type="button" class="btn btn-
default effectType" data-effect="blackWhite">Black & White</button>
<button type="button" class="btn btn-
default effectType" data-effect="threshold">Threshold</button>
<button type="button" class="btn btn-
default effectType" data-effect="sephia">Sephia</button>
<button type="button" class="btn btn-
default effectType" data-effect="invert">Invert Colors</button>
<button type="button" class="btn btn-
default effectType" data-effect="pixelate">Pixelate</button>
<button type="button" class="btn btn-
default effectType" data-effect="twoChannels">2 Channels</button>
<button type="button" class="btn btn-
default effectType" data-effect="red">Red</button>
<button type="button" class="btn btn-
default effectType" data-effect="green">Green</button>
<button type="button" class="btn btn-
default effectType" data-effect="blue">Blue</button>
</div>
</div>
</div>
<script src="js/video-effects.js"></script>
</body>
</html>
"use strict";
94
//Restores the previously saved canvas state
context.restore();
//Saves the entire state of the canvas by pushing the current stat
e onto a stack
context.save();
//more about the data attribute: https://developer.mozilla.org/en/
docs/Web/Guide/HTML/Using_data_attributes
window.effect = this.dataset.effect;
});
}
video.addEventListener('play', function () {
draw(video, context);
//TODO add the code for resizing the canvas here
}, false);
switch (effect) {
case "normal":
context.drawImage(video, 0, 0, video.clientWidth, video.client
Height);
break;
case "rotation":
let unghi = 3 * Math.PI / 180;
let ct = Math.cos(unghi), st = Math.sin(unghi);
let x = video.clientWidth / 2, y = video.clientHeight / 2;
context.transform(ct, -st, st, ct, -
x * ct - y * st + x, x * st - y * ct + y);
context.drawImage(video, 0, 0, video.clientWidth, video.client
Height);
context.fillText("Rotation Effect", 10, 10);
break;
case "emboss":
//further reading http://html5doctor.com/video-canvas-magic/
context.drawImage(video, 0, 0, video.clientWidth, video.client
Height);
let imageData = context.getImageData(0, 0, video.clientWidth,
video.clientHeight);
let pixels = imageData.data;
let imgDataWidth = imageData.width;
95
pixels[i] = 127 + 2 * pixels[i] - pixels[i + 4] - pixe
ls[i + imgDataWidth * 4];
}
}
context.putImageData(imageData, 0, 0);
context.fillText("Emboss Effect", 10, 10);
break;
case "blackWhite":
//context.drawImage(video, 0, 0, video.clientWidth, video.clie
ntHeight);
//let imageData = context.getImageData(0, 0, video.clientWidth
, video.clientHeight);
//process the pixels
//context.putImageData(imageData, 0, 0);
break;
}
96
Figura 4-5. Afișare moment curent de timp pe video
Răspuns:
<!DOCTYPE html>
<html>
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1, shrink-to-fit=no">
97
<title>Video - Processing</title>
</head>
<body>
<div class="container">
</div>
<script>
"use strict";
98
const imageData = context.getImageData(0, 0, canvas.width, canvas.
height);
const pixels = imageData.data;
// pixels[i] - Red
// pixels[i+1] - Green
// pixels[i+2] - Blue
// pixels[i+3] - Opacity
context.putImageData(imageData, 0, 0);
requestAnimationFrame(draw);
}
requestAnimationFrame(draw);
</html>
99
4.7. Întrebări de control și teme de dezbatere
1. Salvați un fișier video în mai multe formate diferite, utilizând algoritmi și setări de
compresie diferite. Comparați dimensiunea fișierelor rezultate și calitatea acestora.
2. Analizați similaritățile între elementele HTML <audio> și <video>. Care considerați că este
motivul acestor similarități?
100
Bibliografie
▪ Dardala, M., Smeureanu, I., Reveiu, A. Tehnologii Multimedia, Editura ASE,
Bucuresti 2008
▪ Smeureanu,I., Drula, G., Multimedia, concepte si practica, Editura Cison, 1997
▪ Vaughan, T., Multimedia – ghid practic, Teora, Bucuresti, 2004, România
▪ Cotfas, L.-A., Suport de curs și seminar, 2020, https://github.com/liviucotfas/ase-
multimedia, România
▪ Ionita, C., Seminarii multimedia, 2020,
http://ase.softmentor.ro/Multimedia/multimedia.htm, România
▪ http://en.wikipedia.org/wiki/Lempel-Ziv-Welch
▪ http://en.wikipedia.org/wiki/Tagged_Image_File_Format
▪ http://ro.wikipedia.org/wiki/MP3
101