起因
sony xm降噪耳机系列都支持LDAC,我用的ihone不支持LDAC,也不想专门再弄个安卓设备听歌,于是就想在windows上用上LDAC,但是看了下似乎不是一件轻松的事。
在研究的同时,学习了一些关于音频方面的知识,这里记录下。
音频的录制、压缩、播放
录制
就是一个模拟信号到数字信号的过程。对于音频来说,有PCM和DSD两种存储方式。详见:
压缩
raw PCM通常数据体积比较大,由于磁盘容量的限制,网络带宽的限制,蓝牙传输速率的限制,便有了对PCM进行压缩的需求。
这里对应下我们平时对普通二进制文件的压缩和音频压缩的一些名词。
文件 | 音频 |
压缩算法 | 编码格式 |
压缩 | 编码 |
解压 | 解码 |
理论上音频也可以使用普通文件的压缩算法(gzip…),但是这些算法的压缩率达不到需求。而音频的压缩可能利用了PCM的一些特点,可能可以做到更高的压缩率。同时也正是对压缩率的需求,也使得音频编码格式分为了有损编码和无损编码两大类。
无损编码
无损指编码再解码后,可以得到完全一致的二进制内容。常见的无损编码有:
- flac (Free Lossless Audio Codec)
- alac (Apple Lossless Audio Codec)
- ldac (Sony)
其中ldac主要是为蓝牙传输设计的,后面会具体讲。
有损编码
很明显,有损编码自然就是说解码后得到的PCM和编码前的PCM相比会损失一些数据。自然地也就会比有损编码有着更高的压缩率。常见有损编码:
其中sbc和aptx主要是为蓝牙传输设计的,后面会具体讲。
这些有损编码中,aptx有着良好的压缩率和较低的失真(指编码带来的损耗), 它是由高通设计的,主要对手是索尼的ldac。
音频播放流程
一般情况
- 音乐播放器解码编码后的音频文件(mpc, flac…)得到PCM
- 音乐播放器将PCM交给音频驱动
- 驱动将PCM交给声卡,声卡进行数模转换得到模拟信号
- 声卡将模拟信号传输给耳机单元进行播放
通过蓝牙播放
- 音乐播放器解码编码后的音频文件(mpc, flac…)得到PCM
- 音乐播放器将PCM交给蓝牙驱动
- 蓝牙驱动将PCM交给蓝牙芯片,由蓝牙芯片通过硬件电路再进行编码(sbc, aac, aptx, ldac)
- 蓝牙芯片将编码后的数据通过无线信号传给蓝牙耳机
- 蓝牙耳机里的蓝牙芯片通过硬件电路再进行解码得到PCM
- 蓝牙耳机里的“声卡”(数模转换单元),进行数模转换得到模拟信号
- 耳机单元播放模拟信号
音频的一生 — 打通蓝牙无损播放!
音频从录制到通过蓝牙播放,经历的变化如下:
声波 —(录制)—> 模拟信号 ——> PCM ——> flac/mp3 ——> PCM ——> sbc/aac/ldac ——> PCM ——> 模拟信号 ——>声波
相比没有蓝牙的情况,蓝牙播放多了一次编码解码的过程。这一步使用的编码格式主要是sbc, aac, aptx和ldac。 其中蓝牙的规范要求所有的蓝牙设备都必须支持sbc编码。
因此想要用蓝牙耳机听到无损音乐,需要两次编码都采用无损编码才行。
- 你的音频文件需要是无损编码格式的。(flac, alac…)
- 蓝牙使用的编码需要是无损的。(现阶段貌似只有ldac)
蓝牙芯片对编码的支持
这里有一点需要注意,因为蓝牙对音频的编码解码是一个硬件过程,是需要蓝牙SOC支持相关协议的。目前我查到支持LDAC的蓝牙芯片有:
- CSR 8675
- QCC 51xx
并且因为解码和编码发生在不同的端,(发射端,接收端),因此自然也要求两端都需要支持相关协议(如ldac)。因为所有蓝牙设备都支持sbc,所以如果没法用其它更好的编码,就会用sbc。
windows 使用 ldac
windows对ldac的支持
windows的蓝牙驱动目前是没有ldac的,即使你的蓝牙芯片支持LDAC,也是没有打开的选项的,不知道是因为需要给索尼保护费还是因为需要用到ldac的场景太少了,毕竟无论是蓝牙耳机,还是蓝牙芯片,至此LDAC的都不多。
Alternative A2DP Driver
Alternative A2DP Driver这玩意是一个非官方的蓝牙A2DP驱动,里面实现了对ldac, aptx等编码的支持。
The Last Step
Great!!!!!! 现在只差一个支持ldac的蓝牙适配器插电脑上作为发射器就可以完全打通蓝牙无损播放了。经过我在互联网的搜索,居然只找到一款产品,而且还贵得要死….
My Question
但是在我了解到蓝牙编码的相关知识前,我就用了一个普通蓝牙适配器(99.999%不支持LDAC)加上Alternative A2DP Driver尝试了一把,发现里面LDAC居然是可以选择使用的。但是既然蓝牙编码是发生在蓝牙芯片的硬件过程,而我的适配器又不支持,那为什么这里还可以打开呢?给作业提了反馈问了下,不知道会不会有回复。