Codec audio gratuit fără pierderi | |
---|---|
Tip de | codec audio , format de fișier audio |
Dezvoltator | Josh Coalson, Fundația Xiph.Org |
Scris in | C [2] |
Sistem de operare | multiplatformă |
Prima editie | 20 iulie 2001 |
ultima versiune |
|
Formate de fișiere care pot fi citite | Codec audio gratuit fără pierderi |
Formate de fișiere generate | Codec audio gratuit fără pierderi |
Licență | GNU GPL ; BSD (piese) |
Site-ul web | xiph.org/flac |
Fișiere media la Wikimedia Commons |
FLAC | |
---|---|
Extensie | .flac |
tip MIME | audio/xflac |
Dezvoltator | Xiph.Org [3] |
publicat | 20 iulie 2001 [4] |
Tip de format | audio |
Standard(e) | Specificație |
Site-ul web | xiph.org/flac |
Fișiere media la Wikimedia Commons |
FLAC ( Engleză Free Lossless Audio Codec ) este un codec gratuit conceput pentru a comprima datele audio fără pierderi .
Spre deosebire de codecurile audio care oferă compresie cu pierderi ( MP3 , AAC , WMA , Ogg Vorbis , Opus ), FLAC, ca orice alt codec fără pierderi , nu elimină nicio informație din fluxul audio și este potrivit atât pentru ascultarea muzicii pe un sunet de înaltă calitate. echipamente și și pentru arhivarea unei colecții audio.
Astăzi, formatul FLAC este suportat de multe aplicații audio, playere audio portabile și sisteme audio specializate și are o mare varietate de implementări hardware [5]
Principalele părți ale fluxului sunt:
Primii patru octeți identifică fluxul FLAC. Metadatele care le urmează conțin informații despre flux, urmate de datele audio comprimate.
Începând cu 03/10/2010, următoarele tipuri de bloc sunt definite în libflac-1.2.1: StreamInfo, Padding, Application, SeekTable, VorbisComment, CueSheet, Picture, Unknown. Blocurile de metadate pot fi de orice dimensiune, nu este dificil să adăugați blocuri noi. Decodorul omite blocuri necunoscute de metadate.
Blocul STREAMFO este necesar. Conține date care permit decodorului să ajusteze tampoanele , rata de eșantionare , numărul de canale, numărul de biți per eșantion și numărul de mostre. Semnătura MD5 a datelor audio necomprimate este de asemenea scrisă în bloc . Acest lucru este util pentru verificarea întregului flux după ce a fost transmis.
Alte blocuri sunt concepute pentru a rezerva spațiu, pentru a stoca tabele de puncte de căutare, etichete , o listă de layout-uri CD audio, precum și date pentru aplicații specifice. Opțiunile pentru adăugarea de blocuri PADDING sau puncte de căutare sunt enumerate mai jos. FLAC nu are nevoie de puncte de căutare, dar acestea pot crește foarte mult viteza de acces și pot fi folosite și pentru etichetare în editorii audio.
O descriere exactă a structurilor blocurilor de construcție poate fi găsită în fișierul format.h al bibliotecii libflac, disponibil pe site-ul de format.
Metadatele sunt urmate de datele audio comprimate. Metadatele și datele audio nu sunt intercalate. La fel ca majoritatea codecurilor , FLAC împarte fluxul de intrare în blocuri și le codifică independent. Blocul este încadrat și adăugat la flux. Codificatorul de bază utilizează blocuri de dimensiune constantă pentru întregul flux, dar formatul permite blocuri de lungimi diferite în flux.
Dimensiunea blocului este un parametru foarte important pentru codificare. Dacă este prea mic, atunci vor exista prea multe anteturi de cadre în flux, ceea ce va reduce nivelul de compresie. Dacă dimensiunea este mare, atunci codificatorul nu va putea alege un model de compresie eficient. Înțelegerea procesului de modelare ajută la creșterea nivelului de compresie pentru unele tipuri de intrare. De obicei, atunci când se utilizează predicția liniară pe date audio cu o rată de eșantionare de 44,1 kHz, dimensiunea optimă a blocului se află în intervalul de 2-6 mii de eșantioane.
Dacă sunt introduse date audio stereo, acestea pot trece prin etapa de decorelare inter-canal. Canalele dreapta și stânga sunt convertite în medie și diferență conform formulelor: medie = (stânga + dreapta) / 2, diferență = stânga - dreapta. Spre deosebire de stereo comun utilizat în codificatoarele cu pierderi, acest proces nu are ca rezultat pierderea codării fără pierderi. Pentru datele CD audio, aceasta duce de obicei la o creștere semnificativă a nivelului de compresie.
În etapa următoare, encoderul încearcă să aproximeze semnalul cu o astfel de funcție încât rezultatul obținut după scăderea lui din original (numit diferență, reziduală, eroare) să poată fi codificat cu un număr minim de biți. Parametrii funcției ar trebui, de asemenea, înregistrați, astfel încât să nu ocupe mult spațiu. FLAC folosește două metode pentru generarea aproximărilor:
În primul rând, predicția polinomială constantă (-l 0) este semnificativ mai rapidă, dar mai puțin precisă decât LPC. Cu cât comanda LPC este mai mare, cu atât modelul va fi mai lent, dar mai bun. Cu toate acestea, pe măsură ce comanda crește, câștigul va fi din ce în ce mai puțin semnificativ. La un moment dat (de obicei în jurul valorii de 9), procedura codificatorului pentru a determina cea mai bună ordine începe să eșueze și dimensiunea cadrelor primite crește. Pentru a depăși acest lucru, se poate folosi căutarea exhaustivă, ceea ce va duce la o creștere semnificativă a timpului de codificare.
În al doilea rând, parametrii pentru predictorii constanți pot fi descriși de trei biți, în timp ce parametrii pentru modelul LPC depind de numărul de biți pe eșantion și de ordinea LPC. Aceasta înseamnă că dimensiunea antetului cadrului depinde de metoda și ordinea aleasă și poate afecta dimensiunea optimă a blocului.
Când modelul este montat, codificatorul scade aproximarea din original pentru a obține un semnal rezidual (eronat), care este apoi codificat fără pierderi. Aceasta folosește faptul că semnalul de diferență are de obicei o distribuție Laplace și există un set de coduri de entropie, numite coduri Rice, care vă permite să codificați eficient și rapid aceste semnale fără a utiliza un dicționar.
Codarea orezului constă în găsirea unui singur parametru corespunzător distribuției semnalului și apoi utilizarea acestuia pentru a compune coduri. Când distribuția se modifică, se modifică și parametrul optim, așa că există o metodă care vă permite să-l recalculați dacă este necesar. Restul poate fi împărțit în contexte sau secțiuni, fiecare cu propriul parametru Rice. FLAC vă permite să specificați cum trebuie făcută divizarea. Restul poate fi împărțit în 2n secțiuni.
Un cadru audio este precedat de un antet care începe cu un cod de sincronizare și conține informațiile minime necesare unui decodor pentru a reda fluxul. Blocul sau numărul eșantionului și suma de control de opt biți a antetului în sine sunt de asemenea scrise aici. Codul de sincronizare, antetul cadrului CRC și numărul blocului/eșantionului permit retemporizarea și căutarea chiar și în absența punctelor de căutare. La sfârșitul cadrului, este scrisă suma de verificare de șaisprezece biți. Dacă decodorul de bază detectează o eroare, va fi generat un bloc de tăcere.
Pentru a accepta tipurile de metadate de bază, decodorul de bază poate sări peste etichetele ID3v1 și ID3v2, astfel încât acestea să poată fi adăugate liber. Etichetele ID3v2 trebuie plasate înaintea marcatorului „fLaC”, iar etichetele ID3v1 trebuie plasate la sfârșitul fișierului.
Există modificări ale codificatorului FLAC: Encoder FLAC îmbunătățit , Flake și FLACCL.
Pe 29 ianuarie 2003, Xiphophorus (denumită acum Fundația Xiph.Org ) a anunțat includerea formatului FLAC în linia lor de produse: Ogg Vorbis , Theora și Speex [6] .
Xiph.Org | |
---|---|
Proiectul Ogg | |
Alte proiecte |
|
Vezi si |
|
Compresie audio | |
---|---|
Codec-uri | |
Vorbire/voce |
|
Fara pierderi |
|
Standarde și formate | |
containere media | |
---|---|
Video/Audio | |
Audio | |
Muzică | |
Raster | |
Vector | |
Complex |