Poweramp 64-bit 内部处理流水线 —— 引擎底层为什么音质好
Poweramp v3 引擎重写的核心
v2 时代的 Poweramp 是用 Java 写的,性能和精度都受限。v3 线(目前仍在迭代)用 C++ 原生重写了整个音频处理管线,带来三个关键升级:
| 升级 | 说明 |
|---|---|
| 64-bit 内部处理 | 所有 DSP 运算在 Float64 精度下完成,最后才下采样到输出设备格式 |
| AAudio 原生支持 | 直接对接 Android 8.0+ 的 AAudio API |
| USB Exclusive Driver | 自研 USB 独占驱动,绕过 Android 音频栈 |
处理流水线
源文件(MP3/FLAC/DSD 等)
↓ 解码
↓ 升位到 Float32 / Float64
↓ DSP 处理(EQ / Bass / Treble / Stereo / Reverb / Limiter)
↓ 重采样(如有)
↓ Dither(如需降位)
↓ 格式转换(到输出设备的规格)
↓ USB Exclusive / AAudio → 硬件
关键在升位那一步——不管源文件是 16bit 还是 24bit,Poweramp 先升到 Float32 甚至 Float64 再做所有 DSP 运算。这样:
- EQ 增益不引入量化噪声:在 16bit 信号上直接 +6dB EQ 会丢一位精度;但在 Float64 上做,精度几乎无损
- 多次 DSP 叠加不失真:EQ + Bass + Stereo + Limiter 四路处理,在升位的信号上做就不会有累计误差
- 最后下采样时精度可控:配合 Dither 抖动,下采样到 16bit 时量化噪声被分散
Float32 vs Float64 的区别
- Float32:单精度浮点,约 7 位有效十进制数
- Float64:双精度浮点,约 15 位有效十进制数
Poweramp 在内部 DSP 环节用 Float64,在解码和输出环节用 Float32。这样既保证了处理精度,又不会太吃 CPU。
为什么这很重要
很多其他 Android 播放器要么不做升位(直接在源文件位深上做 DSP,精度损失大),要么升位但不做正确 Dither(下采样时量化失真明显)。Poweramp 的完整 Float64 DSP + 正确 Dither 是"音质好"的技术基础——不是玄学,是实实在在的信号处理工程。
与 DVC 的配合
DVC(Direct Volume Control)让 Poweramp 在整数位层面做音量衰减——这个操作也受益于 Float64 处理管线:音量衰减的精度是 1/65536 级别的,远好于系统音量的 1dB 步进(约 1/5000)。
下一页:Float32 采样与稳定性