今天來講講一個音檔的組成,以及 Web 可以支援的格式有哪些。
開始之前說個題外話,找資料的過程中發現 演算法筆記 有一整個 section 都在介紹 Audio 相關的技術,涵蓋了資訊、聲學與合成器的基本介紹,也介紹許多當前有趣的應用,很接近我當初寫這系列的初衷,如果等不及了想多看看,或是本系列沒提到的其他領域,很推薦先從這邊下手去找。
一個音檔可以分成兩個部分:audio coding format (audio data)、metadata。
Audio File Format 是指音檔的副檔名 (filename extension),可以分成三種類型:未壓縮、無損壓縮、有損壓縮。
group | description | format |
---|---|---|
未壓縮 uncompressed | 完全沒有壓縮,直接存放由 PCM 等類比轉數位技術得到的資料,常用來儲存原始錄音。 | .wav, .aiff, .au |
無損壓縮 lossless compressed | 透過一些方法減少檔案大小、同時又不影響到原始音質,例如:移除無聲響的部分 (像是黑白圖片只存黑的部分一樣),一般而言檔案大小會是未壓縮的一半。 | .flac, .wv , .ape, .m4a... |
有損壓縮 lossy compressed | 根據人類聆聽的特性(心理聲學),在不易察覺的前提下移除、簡化部分 audio data。以 bit rate 代表壓縮的程度。 | .mp3, .aac |
Audio Coding Format 是一種表示音訊資料的格式,常見的有:MP3、AAC、Vorbis、FLAC...等。可以是單純的 bitstream ,也可以是一個 container format。
container format 存放了 encoded 的原始資料,透過 audio codec 進行 encoding 與 decoding。一般而言,一種 audio 檔案格式通常只會支援一種 codec。若內部使用的 container 有支援、或是使用 video 檔案格式只存 audio,亦可以支援多種 codec。像是 Matroska (MKV) 可以兼容任何 coding format。
audio file format | container format / audio coding format | note |
---|---|---|
.wav | none | PCM or LPCM |
.aiff | none | PCM or LPCM |
.au | G729 | 亦可是 μ-law, a-law 壓縮的 PCM |
.flac | FLAC | |
.wv | WavPack | |
.ape | Monkey's Audio | |
.m4a | AAC or ALAC | |
.mp3 | none | |
.aac | ADTS or ADIF |
Audio Codec 是指將原始資料 encoding 與 deconding 的轉換器,它包含了幾種意義:
檔案本身可以帶 metadata 描述,像是曲名、作者等相關資訊,而有些格式的 container 可以自帶 metadata header 描述取樣率 (sample rate)、位元深度 (bit depth) 等資訊,例如:.wav、.aiff。其中特別的是 .mp3,mp3 是利用新增一個 chunk 儲存曲名等資訊,播放器識別到這個異常的區塊會自動忽略。
各家瀏覽器支援的格式都不同,主因是 codecs 的專利問題。事實上不是所有的 codecs 都是免費、開源,從上面的 coding format 比較表與這份開源的 codec 表可以看得出來,因此各瀏覽器實作 HTML5 Audio 與 Video 時,codecs 專利成了最主要的考量。
file format | video codecs | audio codecs | MIME types | note |
---|---|---|---|---|
.webm | VP8 / VP9 | Vorbis / Opus | video/webm , audio/webm |
IE9 不支援 |
.ogg | Theora | Vorbis / Opus | video/ogg , audio/ogg , application/ogg |
application/ogg 用在不知道檔案是 video 或 audio 時,但其實 video 也可以只包含 audio 資訊 |
.mp4 | H.264 | AAC / MP3 | MPEG 是有專利的,但看起來 firefox 與 chrome 仍堅決要支援 | |
.mp3 | MP3 | audio/mpeg | ||
.wav / .aiff | WAVE PCM codec 1 | audio/wave (建議), audio/wav , audio/x-wav , audio/x-pn-wav |
這樣看下來,Audio 建議用 .mp3
、Video 建議用 .mp4
(XD),如果很在意音質又可以捨棄 IE 的話,.flac
會是個好選擇。
今天就先這樣了 Orz