2013年3月14日星期四

蓝牙音频音质探讨

简介

本文简单介绍了蓝牙无线音频技术 A2DP,并从技术角度探讨其最理想情况下的音质。

1. 蓝牙 A2DP 简介

我们先从蓝牙核心规范说起,蓝牙 1.0 的音频传输带宽只有 64kbit/s,8kHz 采样率 8 位采样精度,仅适用于电话。后来进行了升级,目前支持最广泛的蓝牙 2.0/2.1 + EDR 连接速率为 3Mbit/s,实际可用数据传输速率为 2.1Mbit/s(A2DP 与文件传输共享)。蓝牙 3.0 引入了高速数据传输新特性,最高数据传输速率为 24Mbit/s,但是数据传输是通过 WiFi 进行的,支持该特性的设备会标记为“蓝牙 3.0 + HS”。市面上支持蓝牙 3.0 的设备,如果没有标记“蓝牙 3.0 + HS”,数据传输速率并不会提升,由于功耗限制耳机实际上不可能支持 WiFi 传输。最新的是蓝牙 4.0 是一个混合体,包括传统蓝牙,高速蓝牙与低功耗蓝牙三个子集,相当于 2.1 加上 3.0+HS 与低功耗蓝牙。低功耗蓝牙多用于可穿戴设备。

A2DP(Advanced Audio Distribution Profile) 是蓝牙的子协议,蓝牙耳机、音箱等都是通过此协议传输音频数据流的,蓝牙音频所能使用的数据带宽也是由此协议定义。

2013年3月13日星期三

虚拟环绕声技术

简介

本文简单介绍了环绕声基础知识,还介绍了各种双声道虚拟环绕声(多声道)的技术。最近突然对虚拟环绕声感兴趣,整理了一下相关知识。

1 何为环绕声

普通的立体声只能分清左右两个方向的声音,而环绕声还能让人声音的前后左右各个方位,更有空间感仿佛置身于现场。常见的环绕声主要有 5.1 声道与 7.1 声道两种,要重现环绕声也相应的需要 6 个或者 8 个音箱。

电影中最常见的环绕声格式是杜比数字DTS,两者是竞争对手关系,电影 DVD 中一般包含有其中一种或者两种音轨都有。此外,这两种格式也有多个不同的版本,这里就不作详细介绍。

除了这两种格式之外,部分蓝光光盘也提供 LPCM 格式的音轨,这是一种未经压缩的音频格式,体积最大。压缩后的音频解码成 PCM 格式才能播放,所以这种格式无需解码。理论上 LPCM 格式无压缩音质好,无需解码,是最理想的格式,但由于光盘容量是有限的,音频体积大会挤占视频的空间。可以计算 96kHz 采样率,24 位采样精度,7.1 声道的 LPCM 音轨每秒数据量是

2013年3月11日星期一

Android JB icu 汉字排序结果异常






问题

在 Android 4.1,系统语言设置为中文,当使用如下 SQL 语句查询 SQLite 数据库时,排序结果与之前的 Android 版本不同。

SELECT file_path FROM table ORDER BY file_path COLLATE LOCALIZED

以上语句对查询结果进行了排序,并且排序是按照本地化的规则,就是说不仅对 ASCII 字符排序,也会考虑到汉字的排序规则。旧版的 Android 都是遵循英文在前面,中文排在后面的规则,但 4.1 中却是中文排在英文前面。


原因

LOCALIZED 字符比较使用的是 icu 的多语言支持库,代码位于 Android 源码目录下的 external/icu4c 目录。经过一番研究后发现是 Android 4.1 把排序规则更改了(使用 icu 原始数据包排序正常),新增了两条汉字排序规则使汉字排在前面,规则文件位于 external/icu4c/data/coll/zh.txt

" [reorder Hani]"
" [reorder Hani Bopo]"

修改方法

把 external/icu4c/data/coll/zh.txt 中新增那两句话去掉,重新生成 icudt48l-default.dat 数据文件,步骤说明在 external/icu4c/stubdata/readme.txt

具体步骤:首先设置 ANDROID_BUILD_TOP 环境变量为你 Android 源码目录,然后运行 icu_dat_generator.py 就会生成新的数据文件 icudt48l-default.dat。把新的文件 push 到 /system/usr/icu/icudt48l.dat,重启即可看到效果。