<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>atppp&#039;s Blog &#187; mp3</title>
	<atom:link href="http://blog.wuxinan.net/archives/tag/mp3/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.wuxinan.net</link>
	<description></description>
	<lastBuildDate>Tue, 08 Dec 2009 08:20:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>MP3 和 ID3</title>
		<link>http://blog.wuxinan.net/archives/507</link>
		<comments>http://blog.wuxinan.net/archives/507#comments</comments>
		<pubDate>Tue, 24 Feb 2009 23:35:32 +0000</pubDate>
		<dc:creator>atppp</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[id3]]></category>
		<category><![CDATA[mp3]]></category>

		<guid isPermaLink="false">http://blog.wuxinan.net/?p=507</guid>
		<description><![CDATA[这是一个纯技术笔记贴，只供我自己和某些人参考，不解决任何实际问题。 1. MP3 数据量 MPEG audio frame header 可参考比如这里。MP3 最常见的的格式是：MPEG version 1, Layer 3, 44.1 kHz，所以 frame header 的前两个字节一般是 0xFF 0xFB。 音频数据一般用 CD 音质：立体声，44.1 kHz 采样，16 bits ADC，数据量 1411 kbps。MP3 有损压缩到 192 kbps 一般足够普通音响使用，最高可以支持 320 kbps。 无损音频压缩一般可以压缩到一半（700 kbps 左右），常见格式 APE, Apple Lossless, FLAC。 2. MP3 的元数据 ID3 Tag 有两种常见的 MP3 Tag 用来存储歌曲信息：id3v1（文件末尾 128 个字节，以“TAG”开头）和 id3v2（一般在文件头，长度不定，以“ID3”开头）。id3v2 [...]]]></description>
			<content:encoded><![CDATA[<p>这是一个纯技术笔记贴，只供我自己和某些人参考，不解决任何实际问题。</p>
<p><span style="text-decoration: underline;">1. MP3 数据量</span></p>
<p>MPEG audio frame header 可参考比如<a href="http://www.datavoyage.com/mpgscript/mpeghdr.htm">这里</a>。MP3 最常见的的格式是：MPEG version 1, Layer 3, 44.1 kHz，所以 frame header 的前两个字节一般是 <code>0xFF 0xFB</code>。</p>
<p>音频数据一般用 CD 音质：立体声，44.1 kHz 采样，16 bits ADC，数据量 1411 kbps。MP3 有损压缩到 192 kbps 一般足够普通音响使用，最高可以支持 320 kbps。</p>
<p>无损音频压缩一般可以压缩到一半（700 kbps 左右），常见格式 APE, Apple Lossless, FLAC。</p>
<p><span style="text-decoration: underline;">2. MP3 的元数据 ID3 Tag</span></p>
<p>有两种常见的 MP3 Tag 用来存储歌曲信息：<a href="http://www.id3.org/ID3v1">id3v1</a>（文件末尾 128 个字节，以“TAG”开头）和 id3v2（一般在文件头，长度不定，以“ID3”开头）。id3v2 有过至少三个版本，最流行的是 <a href="http://www.id3.org/id3v2.3.0">id3v2.3</a>（1999 年发布），最新的是 <a href="http://www.id3.org/id3v2.4.0-structure">id3v2.4</a>（2000 年发布）。id3 读写库：<a href="http://id3lib.sourceforge.net/">id3lib</a>（比较老），libid3tag（from <a href="http://www.underbit.com/products/mad/">MAD</a>）等。这些库一般优先使用 id3v2 的数据，如果某些域没有数据，再从 id3v1 里取。</p>
<p>id3v2 的 frame 数据长度要求至少一个字节。如果没有歌名信息，那么歌名这个 frame 应该去掉而不是留下 0 字节的歌名域（有些 mp3 管理器有这个问题）。有些 id3 读取库严格执行标准，碰到 id3v2 中出现 0 字节的 frame 不容错而是直接忽略掉整个 id3v2，造成无法读取部分 mp3 歌名（比如 libid3tag 以及基于它的 EasyTAG）。</p>
<p><span style="text-decoration: underline;">3. ID3 Tag 的编码问题</span></p>
<p>id3v1 采用 ISO-8859-1 编码，在理论上，它是无法正确存储中文歌名的。id3v2.3 除了可以使用 ISO-8859-1 编码外，也可以使用带 BOM 的 UTF-16（原规定是 UCS-2，编码信息存储在文本 frame 数据第一个字节，<a href="http://www.id3.org/id3v2.3.0">id3v2.3</a> 3.3 节）。尽管如此，很多中文 mp3 还是用 GBK 编码（并号称自己是 ISO-8859-1 编码）写入 id3v2.3，所以会和 id3v1 一样有编码问题（<a href="http://en.wikipedia.org/wiki/Mojibake">mojibake</a>）。对于这类 mp3 文件，大多数 Windows 的播放器在中文区域下都可以正确显示中文歌名；但是 Mac 和 Linux 下一般要进行 mp3 tag 编码转换，比如：<a href="http://easytag.sourceforge.net/">EasyTAG</a>，<a href="http://www.sinomac.com/ID3Mod/index.php">ID3Mod</a>，<a href="http://nlyrics.sourceforge.net">nLyrics</a>。有些 tag 编码转换程序只能写入 id3v2.4，这个并不是最理想的，后面会解释。另外，针对 ISO-8859-1 编码的 tag，某些播放器会猜编码。歌名越长，猜中几率越高，但是一个字的歌名常常猜不对。</p>
<p>id3v2.4 除了可以用 UTF-16 外，也可以使用了 UTF-8 编码（<a href="http://www.id3.org/id3v2.4.0-structure">id3v2.4</a> 第 4 章）。电脑上的播放器现在应该都支持 id3v2.4，但是某些播放器（特别是便携设备上的）由于 codebase 的关系，可能还在使用只支持到 id3v2.3 的 id3 库。这些播放器一般不会直接忽略掉 id3v2.4 的 tag，但是不能读取 UTF-8 编码的歌名。这样看来，为避免编码问题，最好的做法是：用 UTF-16 编码写入 id3v2.3，并且删掉 id3v1；假如 tag 转换程序只能写入 id3v2.4，应该使用带 BOM 的 UTF-16 编码（<a href="http://www.id3.org/id3v2.4.0-structure">id3v2.4</a> 第 4 章：text encoding description byte = <code>0x01</code>）。</p>
<p>补：Windows 资源管理器和 Windows Media Player 对 id3v2 的 Unicode 编码支持很差，上述做法不适用（谢谢 neturalyu 留言提醒）。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wuxinan.net/archives/507/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

