FLAC formátumban
Itt van egy teljes leírását a FLAC formátumban.
Először is, mint a fő fejlesztő, meg kell jegyeznem, hogy én nem vagyok szakértő területén a tömörítés, így kötelességének érzi, hogy köszönöm a sok ember, akik keményen dolgoztak, hogy javítsa a hang tömörítési algoritmusok. Külön köszönet I-hez:
alkalmazási körét
Köztudott, hogy nincs algoritmus, amely képes tömöríteni veszteség nélkül input bármilyen típusú adat. A legtöbb archívumok vannak elhelyezve, hogy működjön együtt az adatok egy bizonyos típusú és optimalizálták a környéken. FLAC audio tömörítés. Annak ellenére, hogy ez az adatok tömörítésére elvesztése nélkül bármilyen, csak egy bizonyos input mentésre is. FLAC hasznosítja azt a tényt, hogy az audió adatok jellemzően magasabb rendű összefüggéseket a minták között.
A területen az audio, a sok lehetséges felosztás. Például egy beszéd alacsony bitráta, többcsatornás zenei magas mintavételezési frekvencia, stb FLAC nem célzott, hogy semmilyen alszakasz, de a legtöbb alapértelmezett beállítások alapvető coder tervezett CD-audio (azaz, 44,1 kHz-es, 2-csatornás 16-bites mintánként). Hatása kódolási paramétereket különböző audio későbbiekben lesz szó.
építészet
Mint a legtöbb ilyen programok, FLAC jeladó a következő műveleteket végzi:
Amellett, hogy a meghatározott metaadatok rendszer, amely lehetővé teszi, hogy adjunk a fal tetején tetszőleges információt.
meghatározzák
Sok olyan kifejezések, mint „blokk” és a „keret” mást jelent a kódolási rendszereket. Például, az MP3 keretben leírás megfelel sok mintát minden csatornán, míg a S / PDIF keret jelentése csak egy mintát az egyes csatornákhoz. Felhívjuk figyelmét, hogy a beszéd „blokkok” és a „alblokkra” utalunk a kódolatlan audio adatokat, és a „keret” és a „bölcső” használatára adattömörített FLAC.
Partition blokkok
Blokk mérete erősen befolyásolja a tömörítés mértékét. Ha a blokk mérete túl kicsi, akkor előbb-utóbb kap egy csomó kép, ami azt jelenti, hogy a hírek fog tölteni egy csomó bit. Ha egy nagy blokk mérete, és a jel jellemzőit nagymértékben változhat, a jeladó nem lesz képes megtalálni a jó előrejelzője. Az egyszerűség kedvéért a kodek, FLAC meghatározza a minimális blokk mérete 16 minta és legfeljebb 65535 minták. Ez lefedi az optimális blokk méretek minden audio támogatott FLAC.
Most a bázis kódolók által rögzített blokk méretét, optimális bemeneti mintavételi frekvencia. Későbbi verziók megváltoztathatja a blokk méretét a jelzéstől függően jellemzőit.
Törött tömbökbe továbbított adatok a predikciós lépés egy alblokkot. Minden al-blokk van kódolva az alkeretben függetlenül, és később obendinyayutsya a keret. Mivel minden egyes csatorna külön kódoljuk, ami azt jelenti, hogy az egyik sztereó csatorna keret lehet tömörített, mint egy szokásos alkeret és a második alkeret LPC tetszik.
csatornák közötti dekorreláció
A legtöbb esetben van sztereó patakok kellő mértékű összefüggés a bal és jobb csatorna. FLAC lehetővé keretek sztereó adatfolyamok különböző értékesítési csatornák, a kódoló használhatja egy jobb ötletem.
Kiderült, hogy a bal oldali és a jobb oldali kódolás hatékonyabb lehet a sok kép, annak ellenére, hogy szükség van az eredeti jel a bitek számát minta valamivel nagyobb, mint az átlag az önálló vagy kódolás.
jóslás
FLAC használ négy beviteli mód modellezés:
kódoló maradékok
Ahhoz, hogy kódolják a maradék jelet a predikciós lépésben FLAC használ két hasonló módszerrel. A maradék jelet tömörítjük a Rice kódokat az alábbi módokon:
- A kódoló értékeli az egységes Rice paraméter alapján a különbség a mérleg és a Rice kódokat. Az egész maradékot alkalmazásával van kódolva ez a paraméter.
- A maradékot osztva több intervallumok azonos hosszúságú, és mindegyik van kódolva a Rice paraméter alapján egy átlagos érték az intervallum.
Megjegyezzük, hogy az első eljárás egy speciális esete a második egyetlen intervallum. A különbség az, hogy az első módszer, a Rice paraméter számított különbség maradékot, nem az átlagos.
A FLAC formátumban van fenntartva hely más kódolási eljárásokkal. Bárki kipróbálhatja, hogy megtalálják a legjobb kontextus modellezés Rice paramétert vagy Huffman-kódolás. Leírás több univerzális kódok megtalálhatók az oldalakon LOCO-I és pucrunch.
Ez a rész ismerteti a fájlformátumot. FLAC formátumban nem biztosít területen a verziószámot, de tartalmaz néhány fenntartott pozíciók. A későbbi verziók képesek lesznek használni ezt a teret anélkül, hogy elszakadna a kompatibilitást a korábbi verziók. Régebbi verziói dekóderek lehetnek leállt vagy adattovábbításhoz által kódolt új módszereket. Szintén fenntartott néhány speciális értékek, amelyek nem jelennek meg a változatban a formátumot. Ez általában úgy történik, hogy javítsa a szinkronizációs mechanizmus.
Minden szám FLAC formátumban egész számok, az alacsony byte ami meg van írva az első (big-endian). A számok előjel nélküli, kivéve, ha másképpen nem jelezzük.
FLAC adatfolyam adhatunk címkéket ID3v1 (a végén) és ID3v2 (első). Ezek az adatok nem kell alkalmazni a formátumot, de a dekóder képes átadni nekik.
Mielőtt a teljes leírást a méret adja meg az áttekintést.
A táblázat azt mutatja formális leírást FLAC formátumban. Zárójelben lévő számok jelzik a szögletes használt bitek számának ez a mező.
„FLAC”, FLAC patak marker ASCII, ami azt jelenti, hogy az első négy bájt a patak a 0x66, 0x4C, 0x61, 0x43
fenntartva:- 00. A kívánt érték
- 01-11. későbbi használatra fenntartva
- 0000 nyert metaadatok blokk STREAMINFO
- 0001. 192 mintát
- 0010-0101. 576 * (2 ^ (2-n)) minták, azaz a 576/1152/2304/4608
- 0110. hogy 8 bit (egy blokk méret) a végén a fejléc
- 0111. kap 16 bit (egy blokk méret) a végén a fejléc
- 1000-1111. 256 * (2 ^ (n-8)) minták, azaz a 256/512/1024/2048/4096/8192/16384/32768
- 0000 nyert metaadatok blokk STREAMINFO
- 0001-0011. fenntartott
- 0100. 8kHz
- 0101 16 kHz
- 0110. 22.05kGts
- 0111. 24kHz
- 1000. 32kHz
- 1001 44,1
- 1010. 48kHz
- 1011 96k
- 1100. A fogadási 8-bites érték a mintavételi frekvencia (kHz-ben) a végén a fejléc
- 1101 kap egy 16 bites érték, a mintavételi frekvencia (Hz-ben) a végén a fejléc
- 1110. kap 16-bites érték, hogy a mintavételi frekvencia (Pmc) végétől a fejléc
- 1111. hibás értéket, hogy elkerülje a véletlen szinkronizálókódból
- 0000-0111. (Független csatornák számának) -1. Amikor 0001. == 0 a bal csatorna, 1 - jobb
- 1000. A bal oldali sztereó: 0 a bal csatorna, 1 - különbség
- 1001. A jobb oldali sztereó: 0 csatorna van különbség, 1 - jobb
- 1010. Az átlagos sztereó: 0 csatorna egy átlagos, 1 - különbség
- 1011-1111. fenntartott
- 000. nyert metaadatok blokk STREAMINFO
- 001. 8 bit mintát
- 010. 12-bites mintánként
- 011. fenntartva
- 100. 16 bit minta
- 101. 20 bit mintánként
- 110. 24 bit mintát
- 111. fenntartva
Amellett nulla bitet a határ, hogy elkerülje a szinkronizálási hiba
Ha (változó blokkméret)
. mintaszám UTF-8 formátumban (a méret a dekódolt 36 bites)
egyébként
. keret száma UTF-8 formátumban (a méret a dekódolt 31 bites)
Ha (bitmaszk blokkméret == 11x)
8/16 bit (blokkméret - 1)
Ha (bitmaszk mintavételi frekvencia == 11xx)
8/16 bit mintavételi sebesség
Polinomalnaya 8-bites ellenőrző (x ^ 8 + x ^ 2 + x ^ 1 + x ^ 0) az adatok fejléc beleértve a szinkronizációs kód (x nullára inicializálunk).
Notes.- 0000-0101 blokk mérete bit csak akkor használható a konstans érték az egész blokk. Bit 0110-0111 lehet alkalmazni minden olyan esetben, a dekóder azt feltételezi, hogy az áramlás változtatható blokkhosszúság. Egy kivétel van: a kódoló használhatja a biteket az elmúlt 0110-0111 folyam keret állandó blokk mérete, ha annak hossza nagyobb, mint a felhasznált teljes áramlását.