**FLAC** (inglizcha: *Free Lossless Audio Codec*) - bu hech qanday yo'qotishlarsiz audio ma'lumotlarini siqish uchun mo'ljallangan bepul audio kodek hisoblanadi.

Audio ma'lumotlarini yo'qotishlar bilan siquvchi audio kodeklardan (MP3, AAC, WMA, Ogg Vorbis, Opus) farqli o'laroq, FLAC, audio oqimdan hech qanday ma'lumotlarni olib tashlamaydi, ma'lumotlar yo'qolmaydi va yuqori sifatli audio ma'lumotlarni saqlab beradi.

Bugungi kunda FLAC formati ko'plab audio ilovalar, portativ audio playerlar va ixtisoslashtirilgan audio tizimlar tomonidan qo'llab-quvvatlanadi va turli xil apparatlarda qo'llash mumkin.

Format ma'lumotlari
-------------------

### Audio oqim

Ushbu formatning asosiy qismlari quyidagilardan iborat:

* To'rt baytdan iborat "`fLaC` "qatori
* STREAMINFO metadata bloki
* Boshqa ixtiyoriy metadata bloklari
* Audiofreymlar

Birinchi to'rt bayt FLAC oqimini aniqlaydi. Keyingi baytlar metadata oqim haqidagi ma'lumotlarni, keyingilari esa siqilgan audio ma'lumotlarini o'z ichiga oladi.

### Metadata

03/10/2010 holatiga ko'ra, libflac-1.2.1 quyidagi blok turlarini belgilaydi: StreamInfo, Padding, Application, SeekTable, VorbisComment, CueSheet, Picture, Unknown. Metadata bloklari har qanday hajmda bo'lishi mumkin, yangi bloklarni qo'shish qiyin emas. Dekoder metama'lumotlarning noma'lum bloklarini o'tkazib yuboradi.

STREAMINFO bloki bo'lishi shart. U dekoderga buferlarni, namuna tezligini, kanallar sonini, namunadagi bitlar sonini va namunalar sonini sozlash imkonini beruvchi ma'lumotlarni o'z ichiga oladi. Siqilmagan audio ma'lumotlarning MD5 imzosi ham blokga yoziladi. Bu oqim uzatilgandan keyin butun oqimni tekshirish uchun foydalidir.

Boshqa bloklar bo'sh joyni zaxiralash, qidirish nuqtalari jadvallarini, teglarni, audio CD maketlari ro'yxatini, shuningdek, ma'lum ilovalar uchun ma'lumotlarni saqlash uchun mo'ljallangan. PADDING bloklari yoki qidirish nuqtalarini qo'shish variantlari quyida keltirilgan. FLAC qidiruv nuqtalariga muhtoj emas, lekin ular kirish tezligini sezilarli darajada oshirishi mumkin va audio muharrirlarda teglash uchun ham ishlatilishi mumkin.

### Audio ma'lumotlar

Metadatadan keyin siqilgan audio ma'lumotlar keladi. Metadata va audio ma'lumotlar aralashmaydi. Ko'pgina kodeklar singari, FLAC kirish oqimini bloklarga ajratadi va ularni mustaqil ravishda kodlaydi. Blok ramkaga o'ralgan va oqimga qo'shilgan. Asosiy enkoder butun oqim uchun doimiy o'lchamdagi bloklardan foydalanadi, ammo format oqimdagi turli uzunlikdagi bloklarga ruxsat beradi.

### Bloklarga bo'linishi

Blok hajmi kodlash uchun juda muhim parametrdir. Agar u juda kichik bo'lsa, u holda oqimda juda ko'p ramka sarlavhalari bo'ladi, bu esa siqilish darajasini pasaytiradi. Agar o'lcham katta bo'lsa, u holda enkoder samarali siqish modelini tanlay olmaydi. Modellashtirish jarayonini tushunish kirishning ayrim turlari uchun siqilish darajasini oshirishga yordam beradi. Odatda, namuna olish tezligi 44,1 kHz bo'lgan audio ma'lumotlarga chiziqli bashorat qilishda optimal blok hajmi 2-6 ming blok oralig'ida joylashgan. namunalar.

### Kanallararo dekorrelyatsiya

Agar stereo audio ma'lumotlar kiritilsa, u kanallararo dekorrelyatsiya bosqichidan o'tishi mumkin. O'ng va chap kanallar formulalar bo'yicha o'rtacha va farqga aylantiriladi: o'rtacha = (chap + o'ng) / 2, farq = chap - o'ng. Yo'qotilgan enkoderlarda ishlatiladigan qo'shma stereodan farqli o'laroq, bu jarayon yo'qotishsiz kodlashning buzilishiga olib kelmaydi. Audio CD ma'lumotlari uchun bu odatda siqilish darajasining sezilarli darajada oshishiga olib keladi.

### Modellashtirish

Keyingi bosqichda **enkoder** signalni shunday funksiya bilan yaqinlashtirishga harakat qiladiki, uni asl nusxadan ayirish natijasida olingan natija (farq, qoldiq, xato deb ataladi) minimal bitlar soni bilan kodlanishi mumkin. Funksiya parametrlari ham yozilishi kerak, shuning uchun ular ko'p joy egallamasligi kerak. FLAC taxminiy ma'lumotlarni yaratish uchun ikkita usuldan foydalanadi:

* signalga oddiy polinom moslashtirish
* umumiy chiziqli bashorat qiluvchi kodlash (LPC).

Birinchidan, doimiy polinom bashorati (-l 0) LPC (Low Pin Count)dan sezilarli darajada tezroq, ammo aniqroq emas. LPC soni qanchalik yuqori bo'lsa, model shunchalik sekinroq, lekin yaxshiroq bo'ladi. Biroq, buyurtma ortib borayotganligi sababli, daromad kamroq va kamroq ahamiyatga ega bo'ladi. Bir nuqtada (odatda 9 atrofida) kodlovchining eng yaxshi tartibni aniqlash tartibi muvaffaqiyatsizlikka uchraydi va qabul qilingan kadrlar hajmi ortadi. Buni bartaraf etish uchun to'liq qidiruvdan foydalanish mumkin, bu kodlash vaqtini sezilarli darajada oshirishga olib keladi.

Ikkinchidan, doimiy bashorat qiluvchilar uchun parametrlar uchta bit bilan tavsiflanishi mumkin, LPC modeli uchun parametrlar esa namunadagi bitlar soniga va LPC tartibiga bog'liq. Bu shuni anglatadiki, ramka sarlavhasining o'lchami tanlangan usul va tartibga bog'liq va optimal blok hajmiga ta'sir qilishi mumkin.

### Qoldiq kodlash

Model o'rnatilganda, kodlovchi qoldiq (noto'g'ri) signalni olish uchun asl nusxadan taxminiylikni olib tashlaydi, keyin esa yo'qotishsiz kodlanadi. Bunda farq signali odatda Laplas taqsimotiga ega ekanligi va Rays kodlari deb ataladigan entropiya kodlari toʻplami mavjudligidan foydalaniladi, bu esa lugʻatdan foydalanmasdan ushbu signallarni samarali va tez kodlash imkonini beradi.

Guruchni kodlash signalning taqsimlanishiga mos keladigan bitta parametrni topish va undan keyin kodlarni yaratish uchun foydalanishdan iborat. Tarqatish o'zgarganda, optimal parametr ham o'zgaradi, shuning uchun kerak bo'lganda uni qayta hisoblash imkonini beruvchi usul mavjud. Qolganlarni kontekstlarga yoki bo'limlarga bo'lish mumkin, ularning har biri o'z Rays parametriga ega bo'ladi. FLAC bo'linish qanday amalga oshirilishi kerakligini belgilashga imkon beradi. Qolganlarini 2n bo'limga bo'lish mumkin.

### Ramkalanishi

Audio kadrdan oldin sinxronlash kodi bilan boshlanadigan sarlavha mavjud va oqimni ijro etish uchun dekoder uchun zarur bo'lgan minimal ma'lumotlarni o'z ichiga oladi. Blok yoki namuna raqami va sarlavhaning sakkiz bitli nazorat summasi ham bu yerda yoziladi. Sinxronizatsiya kodi, ramka sarlavhasi CRC va blok/namuna raqami qidiruv nuqtalari bo'lmagan taqdirda ham vaqtni qayta o'tkazish va qidirish imkonini beradi. Kadr oxirida uning o'n olti bitli nazorat summasi yoziladi. Agar asosiy dekoder xatolikni aniqlasa, jim blok hosil bo'ladi.

### Turli xil

Asosiy metadata turlarini qo'llab-quvvatlash uchun asosiy dekoder ID3v1 va ID3v2 teglarini o'tkazib yuborishi mumkin, shuning uchun ularni erkin qo'shish mumkin. ID3v2 teglari "fLaC" belgisidan oldin, ID3v1 teglari esa fayl oxirida joylashtirilishi kerak.

FLAC enkoderining modifikatsiyalari mavjud: FLAC kodlovchi yaxshilangan, Flake va FLACCL.

2003-yil 29-yanvar Xifofor (hozir Xiph deb ataladi. Org Foundation) o'z mahsulot qatoriga FLAC formatini kiritishni e'lon qildi: Ogg Vorbis, Theora va Speex.

Eslatmalar
----------

1. ↑  „Links".  FLAC. 28-yanvar 2017-yilda asl nusxadan arxivlandi. Qaraldi: 6-oktabr 2015-yil.
2. ↑  „FLAC Joins Xiph!" (inglizcha). 30-iyun 2007-yilda asl nusxadan arxivlandi. Qaraldi: 30-oktabr 2008-yil.

Havolalar
---------

* „FLAC" (ru). 12-fevral 2012-yilda asl nusxadan arxivlandi. Qaraldi: 26-iyul 2011-yil.



* „Xiph.Org: QuickTime Components" (inglizcha). 10-fevral 2012-yilda asl nusxadan arxivlandi. Qaraldi: 30-oktabr 2008-yil.