FLAC
FLAC(Free Lossless Audio Codec, )은 오디오 데이터 압축을 위한 파일 형식이다. 무손실 압축 포맷이다. 다시 말해서, MP3, AAC, Vorbis와는 달리 오디오 스트림에 손실이 발생하지 않는다.
다른 압축 방법들과 마찬가지로, FLAC의 장점은 전송율·대역폭·저장공간 등을 절약할 수 있다는 점인데, FLAC은 오디오 소스를 온전한 모습으로 보전해준다. 예를 들어, 디지털 레코딩(콤팩트 디스크)을 FLAC으로 인코드하였다가 디코드하면 정확히 똑같은 오디오 데이터를 얻을 수 있다. 보통, FLAC으로 압축하면 원래 크기의 40-50%로 줄어든다. (FLAC 개발자들은 약 47%이라고 주장)
FLAC는 태깅(tagging), 앨범 아트, 빠른 건너뛰기(fast seeking)을 지원하기 때문에, 일상적인 음악 재생과 보관에 알맞다. FLAC은 자유 소프트웨어이자 동시에 오픈 소스 소프트웨어, 로열티 없는 소프트웨어이기 때문에, 많은 응용 소프트웨어가 FLAC을 지원하고 있다. 휴대용 음악 기기나 MP3 플레이어, 고급 오디오 시스템에서의 FLAC 지원은 얼마전까지만 해도 미미했으나 MP3 플레이어 등 휴대용 기기 한정으로 2013년 현재 상당수 기종에서 이 포맷을 지원한다. 특히 안드로이드 운영 체제를 탑재한 제품의 경우 음악 애플리케이션에 따라 이 포맷의 재생이 가능한 경우가 많다. 하지만 현재 인기있는 애플사의 제품들은, iTunes부터 FLAC 재생을 지원하지 않기 때문에 아이폰과 아이팟 모두 FLAC을 지원하지 않는다. 그러나 iOS11에 새로 추가된 '파일'앱의 일부로 flac 재생 기능이 추가되었다.
조시 콜슨(Josh Coalson)이 FLAC의 주요 개발자이다.
2003년 1월 29일, 자이포포러스 (지금은 Xiph.Org 재단이라 불리고 있다. 자유 코덱, 자유 포맷 등을 개발하는 단체이다.) Vorbis, Theora, Speex 및 기타 등등과 마찬가지로, 그들의 목록에 FLAC도 편입한다고 발표하였다.
FLAC 프로젝트는 다음과 같은 것을 포함한다.
"자유"란 말은 스트림 포맷 제작자의 허락 없이 누구나 그 포맷을 구현할 수 있다는 말이자, (Xiph.org가 FLAC 스펙의 권리를 보유하고 있다. 또한 호환성을 인증할 권리를 보유하고 있다.) 어떤 특허도 FLAC 포맷 및 인코드/디코드 방법을 커버하고 있지 않다는 말이다. 또한, 레퍼런스 구현이 자유 소프트웨어이라는 뜻도 된다. libFLAC 및 libFLAC++ 의 소스는 Xiph.org의 BSD 사용 허가서 하에서 배포된다. flac, metaflac 및 플러그인의 소스는 GNU 일반 공중 사용 허가서 하에서 배포된다.
프로젝트 목적에 대한 글에서 언급되었는 바, FLAC 프로젝트 내에서는 개발자들이 복사 방지 기능을 구현해 넣지 않는 것을 장려하고 있다.
FLAC은 오디오 데이터의 효율적인 압축을 위해 특수하게 설계되었다. 일반적인 무손실 압축 방식인 ZIP 및 gzip과는 다르다. CD 품질의 오디오에 대하여, ZIP은 10 - 20%의 압축률을 보여주나, FLAC은 대개 30 - 50% 압축률을 보여준다. 보통의 음악에 경우 그러한데, 목소리 녹음의 경우에는 압축률이 더 올라간다. 비트 레이트는 약 800 - 950 kbit/s이다.
손실 압축 코덱(Lossy codecs)은 80% 이상의 압축률을 보여준다. 원본 스트림의 데이터를 까먹기 때문이다. FLAC은 선형 예측 방법을 사용하는데, 오디오 샘플을 작고, 상관 관계가 없는 값들 (나머지라 부른다)의 수열로 변환한다. 이 수열은 골롬-라이스 코딩 (Golomb-Rice coding)을 사용하여 효율적으로 저장될 수 있다. 또한 FLAC은 소리 없는 구간 등 동일한 샘플의 블록들에 대해 반복 길이 부호화를 사용한다. 다른 무손실 압축 코덱과 비교하면, FLAC은 스트림 가능한 것이 특징이다. 또한 FLAC의 디코딩 시간은 비교적 빠른 축에 속하는데, 이것은 압축 레벨과 관계없다.
다른 무손실 압축 방식과 마찬가지로, FLAC은 콤팩트 디스크 등의 미디어 소유자가 소장하고 있는 오디오 작품을 장기간 보존하는 데 있어서, 매우 널리 쓰이는 포맷이다. 원본 미디어는 세월이 지나, 분실, 손상 등이 될 수 있지만, FLAC으로 복제된 오디오는 언제든 정확히 원본 미디어의 오디오 데이터와 동일하게 복구될 수 있다. MP3과 같은 손실 있는 코덱으로 압축된 데이터는 원본 미디어의 오디오 데이터와 동일하게 복구될 수 없다. CD를 리핑할 때 선택적으로 큐 시트 (음악 소프트웨어(.CUE 파일)을 생성할 수 있다. CD를 FLAC으로 완전히 리핑해두었다가, 훗날 이 CUE 파일의 도움을 받아 정확히 동일한 CD를 구워낼 수 있다. 트랙 순서, 프리갭, CD-Text 등을 정확하게 복원할 수 있다. 하지만 일부 오디오 CD에 들어 있는 가사, CD+G 그래픽스 등은 CUE 파일 및 대부분의 CD 리핑 애플리케이션의 범위 밖이며, 정확히 원본대로 복원시킬 수 없다.
유럽 방송 연합 (EBU)은 유로라디오(Euroradio) 네트웍에서 고품질의 오디오를 배포하는 데 FLAC 포맷을 사용하기로 하였다.
하이드로젠오디오 위키(Hydrogenaudio Wiki)에 무손실 코덱간 비교표 가 있다.
FLAC은 부동 소수점을 지원하는 것이 아니라 오직 고정 소수점만 지원한다. 4내지 32 비트 샘플 크기를 지닌 PCM을 처리할 수 있으며, 샘플링 레이트는 1 헤르츠 내지 1,048,570 Hz까지 1 Hz 단위로 처리할 수 있으며, 1 내지 8 채널을 처리할 수 있다. 채널은 스테레오나 5.1 채널 서라운드 사운드처럼 묶일 수 있는데, 채널간 상관 관계(correlation)을 이용하여 압축률을 높일 수 있다. 스트리밍 프로토콜에서 사용될 경우, FLAC은 CRC 첵섬을 사용하여, 잘못된 프레임을 골라낸다. 또한 그것의 STREAMINFO 메타데이터 헤더 내에 "본디 PCM"의 완전한 MD5 해시값도 갖고 있다.
FLAC의 라이스 파라미터(Rice parameter)는 0-16이다. 최대 8 채널의 오디오, 최대 192kHz까지의 다양한 샘플링 레이트, 다양한 비트-퍼-샘플 너비를 지원한다. FLAC은 또한 리플레이 게인을 지원한다.
FLAC은 libFLAC 코어 인코더 & 디코더 라이브러리로서 구현되었다. libFLAC API을 사용하는 레퍼런스 프로그램으로서 "flac"이라는 프로그램이 같이 들어있다. 이 코덱 API는 libFLAC++이라는 이름으로 C++ 버전으로서 존재한다.
FLAC의 레퍼런스 구현은 수많은 플랫폼 상에서 컴파일된다. 대부분의 유닉스 (솔라리스 등), 유닉스 계통 (리눅스, OS X, BSD 포함), 마이크로소프트 윈도, BeOS, OS/2 운영 체제에서 빌드된다. Autoconf/ Automake, MSVC, Watcom C, Xcode 등을 위한 빌드 시스템이 갖추어져 있다.
태깅(tagging) 기능을 위해, FLAC은 보비스 코멘트와 똑같은 시스템을 사용한다.
libFLAC API는 기본 FLAC 비트스트림(bitstream)을 더 추상화한 것으로서, 스트림(stream), 건너뛰기 가능한 스트림(seekable stream), 파일(file)로 구성된다. 대부분의 FLAC 애플리케이션은 libFLAC을 이용하되 파일 레벨 인터페이스를 이용한다.