我将pcm音频存储在字节数组中。每个样本为16位。我想使每个样本音频为8位。
谁能建议一个好的算法来做到这一点?
我没有提到比特率,因为我认为它对算法并不重要-对吗?
最佳答案
我现在不明白为什么仅取高字节是不够的,即丢弃每个样本的低8位。
当然,这假设样本是线性的;如果不是,那么您可能需要在删除位之前进行一些操作以使其线性化。
short sixteenBit = 0xfeed;
byte eightBit = sixteenBit >> 8;
// eightBit is now 0xfe.
正如AShelly在评论中所建议的那样,四舍五入可能是一个好主意,即如果我们要丢弃的字节大于其最大值的一半,则加1。
eightBit += eightBit < 0xff && ((sixteenBit & 0xff) > 0x80);
针对0xff的测试实现了钳位,因此我们不必冒将0添加到0xff并将其包装到0x00的风险。