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:

  • Bontani blokkokat. Bemeneti van osztva több egymást követő blokkok, hogy mérete változó lehet. Az optimális blokkméret általában számos tényezőtől függ, mint például a frekvencia disketizatsii, időt spektrális jellemző, stb Annak ellenére, hogy a FLAC formátum lehetővé teszi áramlási blokkok különböző méretű, az alap-jeladó használ állandó méretű.
  • Inter-csatornás dekorreláció. Abban az esetben, sztereó patakok jeladó generál egy átlagos és a különbség jelek alapján az átlagérték között a bal és a jobb csatorna, illetve és a különbség. A következő lépés a kódolás kerül átvitelre a legjobb megvalósítási módja szerint a szűkített jel.
  • Előrejelző. Ezt követően a kódoló megpróbálja megtalálni azt a matematikai leírása a jel (általában kb). Gyakran ez sokkal kisebb, mint a jel. Mivel az előrejelzési módszerek ismertek mind a kódoló és a dekódoló az áramot meg kell adni azokat a paramétereket prediktor. FLAC jelenleg használt négy különböző osztályainak prediktor (részben leírt előrejelzés), de a formátum helyet biztosít további módszereket. FLAC osztály előrejelzője lehetővé változás blokk blokk, és még a csatornán belül a blokkban.
  • Coding maradványok. Ha a prediktor jel nem pontosan leírja a különbség az eredeti jel és a várható (az úgynevezett reziduális vagy több hibás) kell kódolni veszteség nélkül. Ha a jóslat hatékony, a maradék jel kerül kevesebb bit mintánként, mint az eredeti jelet. FLAC jelenleg csak az egyiket használja Eljárás aminosavakat kódoló (lásd. Szakasz kódolás maradék), de van hely további eljárásokra formátumban. FLAC kódolási eljárás lehetővé teszi a változás maradékok blokk blokk, és belül is a csatorna a blokk.

    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.

  • Block - ez egy vagy több mintában, amelyek több csatornán.
  • Sub-blokk - ez egy vagy több mintát egy csatornán. Ily módon a blokk tartalmaz egy al-blokk minden egyes csatornához és minden al-blokk ott azonos minták száma.
  • Block Size - a minták száma annak bármely al-blokkok. Például, a blokk hossza egy második frekvencia 44,1 kHz deskretizatsii van blokkolja mérete 44100 függetlenül a csatornák száma.
  • Keret - egy fejlécet és egy vagy több alkereteket.
  • Segédváz - egy élőfejet és egy vagy több kódolt mintákat ezen a csatornán. Minden alkereteké a keret tartalmazza az azonos minták száma.

    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.

  • Független. A bal és jobb csatornák függetlenül kódolunk.
  • Különbség. A bal és a jobb csatorna alakítjuk közepes és a maradék hírcsatornák. Közel csatorna - az átlag a bal és jobb jeleket, és a fennmaradó - a köztük lévő különbség (bal mínusz jobb).
  • Bal kezét. Kódolt balra és a többi csatorna.
  • Pravoostoronnee. Kódolt jobb és a többi csatorna.

    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:

  • Szó szerint. Lényegében ez a predikciós nulla szinten jelet. A prediktív jel maga a jel, mert nincs tömörítés nem történik. Ez a minta, amely alapján ellenőrzi az összes többi előrejelzője. Ha át véletlen adatokat a jeladó, minden alblokkra valószínűleg használhatják változatlanul előrejelzője. Mivel a nyers jel nem halad a lépést aminosavait kódoló, az eredményeket más lesz a lineáris előrejelzője érdekében nulla.
  • Állandó. Ez előrejelzője használják, amikor a alblokk tartalmaz digitális csend, azaz bemenetére egy állandó áramlás. A jel van kódolva a teljes hosszon, és hozzáadjuk a fluxus.
  • Állandó lineáris prediktor. FLAC használja az osztály hatékonyan kiszámítható állandó lineáris prediktor (egy jó leírás az Shorten és AudioPak). FLAC hozzáteszi előrejelzője a negyedik szint, mint amit Shorten előrejelzője nulla és a harmadik szintre. Mivel előrejelzője állandó, sűrített áramot kell menteni az egyetlen előrejelzője sorrendben. A maradék jelet továbbítják a jeladó maradványok.
  • Lineáris predikciós FIR. A pontosabb modellezése (a lassú művelet) FLAC támogatja FIR lineáris predikciós érdekében legfeljebb 32 (lásd. Lerövidítése és AudioPak). Referencia jeladó használja Levinson-Durbin számításának módszerét LPC a autokorrelációs együtthatók és az együtthatók előtt sérült maradványai számítás. Míg kódolók mint például a rövidítse állandó partíciót az összes bemenet, FLAC lehetővé teszi minden egyes képkocka változtatni a pontosság a megoszlási hányados. Base FLAC kódoló értékeli optimális pontosság alapján a blokk mérete és a tartomány az eredeti jelet.

    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:

    1. 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.
    2. 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
    A blokkméret mintákban:
    • 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
    Mintavételi frekvencia:
    • 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
    Hely csatornák:
    • 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
    A bitek száma mintánként:
    • 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.

    Kapcsolódó cikkek