c - 使用 add + shift 将 pcm16 转换为 pcm14

标签 c linux audio pcm

我正在研究一种声音转换算法,其中接收到一组带符号的短裤。
在算法的给定点,它将样本从 16 位转换为 14 位,它是这样进行的:

int16_t sample = (old_sample + 2) >> 2;

对我来说,很明显需要进行移位,因为我们想去掉最低 2 位有效位,但是那里的 +2 呢?

最佳答案

向下移动会丢失最低有效两位。如果你只是移动,那么它总是会向下舍入,即使底部的两位都被设置了。如果设置了较大的丢失位,则将 2 舍入相加。

(还值得注意的是,减少位数的更好方法是使用 dithering ,即在减少样本大小之前添加随机(且非常小)的噪声量;这避免了以下问题,因为声音是周期性的,对于特定频率,舍入通常最终会持续上升或持续下降,导致声音出现明显的失真。链接的维基百科文章解释得比我更好!)

关于c - 使用 add + shift 将 pcm16 转换为 pcm14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3188445/

相关文章:

c# - 播放任何声音文件(或至少播放普通音频文件)

c - 如何提高 USB cdc 设备的速度?

java - 压缩和解压缩字符串

c - scanf 未将值传递给变量

c - 测试输入值类型的函数

java - JSch Esc 命令和编码

ruby-on-rails - 如何在 Rails 的目录结构中查找文件

linux - Git Bare 存储库失败。缺少必要的对象。无法提交/推送

javascript - PhoneGap (JS) - 多音频流

audio - 使用 WebRTC 的 P2P 音频广播