如何将麦克风采集的8-bit unsigned int数据转换为有符号十进制值
8位无符号麦克风采样值转有符号十进制实现方案
转换原理
你获取的是8-bit unsigned int(uint8)格式的音频采样数据,值域范围为0 ~ 255,要转换为有符号十进制值,只需遵循8位音频采样的通用偏移规则:这类麦克风输出的无符号采样默认以128为零点偏移量,转换为8位有符号整数(int8,值域-128 ~ +127)的公式统一为:
有符号采样值 = 原始无符号值 - 128
实现步骤
- 遍历所有uint8格式的原始采样数据
- 对每个元素执行上述减法计算,得到的结果就是对应的有符号十进制数值
- 如果后续需要做音频存储、滤波等处理,可直接将计算结果存储为int8格式的数组使用
代码示例
Python实现
# 原始uint8采样数据 raw_samples = [61, 251, 199, 251, 56, 252, 138, 252, 211, 252, 18, 253, 91, 253, 194, 253, 25, 254, 54, 254, 19, 254, 190, 253, 80, 253, 249, 252, 233, 252, 46, 253, 180, 253, 54, 254, 136, 254, 157, 254, 110, 254, 38, 254, 208, 253, 117, 253, 68, 253, 57, 253, 83, 253, 163, 253, 20, 254, 151, 254, 51, 255, 215, 255, 105, 0, 207, 0, 246, 0, 249, 0, 10, 1, 64, 1, 162, 1, 4, 2, 64, 2, 97, 2, 111, 2, 110, 2, 89, 2, 40, 2, 241, 1, 199, 1, 178, 1, 192, 1, 241, 1, 45, 2, 77, 2, 70, 2, 45, 2, 36, 2, 83, 2, 176, 2, 21, 3, 121, 3, 229, 3, 87, 4, 185, 4, 225, 4, 197, 4, 129, 4, 26, 4, 150, 3, 7, 3, 128, 2, 55, 2, 65, 2, 134, 2, 223, 2, 25, 3, 41, 3, 28, 3, 255, 2, 234, 2, 240, 2, 25, 3, 62, 3, 92, 3, 146, 3, 219, 3, 65, 4, 149, 4, 164, 4, 130, 4, 51, 4, 195, 3, 69, 3, 164, 2, 244, 1, 75, 1, 187, 0, 81, 0, 240, 255, 135, 255, 19, 255, 155, 254, 64, 254, 22, 254, 58, 254, 146, 254, 217, 254, 248, 254, 215, 254, 144, 254, 92, 254, 84, 254, 141, 254, 229, 254, 39, 255, 96, 255, 170, 255, 248, 255, 69, 0, 117, 0, 128, 0, 137, 0, 131, 0] # 批量转换 signed_samples = [x - 128 for x in raw_samples]
C语言实现
#include <stdint.h> // 原始uint8采样数据 uint8_t raw_samples[] = {/* 填入你的采样数据 */}; int sample_cnt = sizeof(raw_samples) / sizeof(raw_samples[0]); int8_t signed_samples[sample_cnt]; for (int i = 0; i < sample_cnt; i++) { signed_samples[i] = (int8_t)(raw_samples[i] - 128); }
效果验证
可以用示例数据快速验证转换正确性:
- 原始值
61→ 61 - 128 =-67 - 原始值
251→ 251 - 128 =123 - 原始值
128→ 128 - 128 =0(对应麦克风采样的零点)
内容的提问来源于stack exchange,提问作者Pokaboom
相关产品推荐
相关产品推荐

