将 16 位音频样本转换为字符
Converting 16 bit audio sample to char
我正在使用矩阵创建器板,我正在尝试为他们的麦克风阵列 C++ 代码制作一个 python 包装器。
库有一个读取函数,returns一个包含 128 个样本的 uint16_t
数组。
我试图将它与 ALSA readi
函数进行比较,该函数将缓冲区写入用户作为参数传递给的 char
数组函数。
问题是当单个char
只有8位宽时,ALSA如何将16位样本写入char数组?
我怎么能用 uint16_t
数组做同样的事情并将它传递给 python 所以我会得到与 ALSA readi
函数相同的结果?
uint16 可以作为 2 个字节 (uint8) 传递,c++ 代码可能使用联合,以便可以将数据保存为 uint16,而 USB 代码可以将数据作为字节传递。
至于python代码,这是我用来将8位字节转换为uint16的函数
def convert_int8_int16(self, byte_array):
new_array = [0]*(len(byte_array)/2)
for i in range(len(byte_array)/2):
new_array[i] = byte_array.pop(0)*256 + byte_array.pop(0)
return new_array
这将遍历字节数组并将值添加到新的 uint16 数组。
我正在使用矩阵创建器板,我正在尝试为他们的麦克风阵列 C++ 代码制作一个 python 包装器。
库有一个读取函数,returns一个包含 128 个样本的 uint16_t
数组。
我试图将它与 ALSA readi
函数进行比较,该函数将缓冲区写入用户作为参数传递给的 char
数组函数。
问题是当单个char
只有8位宽时,ALSA如何将16位样本写入char数组?
我怎么能用 uint16_t
数组做同样的事情并将它传递给 python 所以我会得到与 ALSA readi
函数相同的结果?
uint16 可以作为 2 个字节 (uint8) 传递,c++ 代码可能使用联合,以便可以将数据保存为 uint16,而 USB 代码可以将数据作为字节传递。
至于python代码,这是我用来将8位字节转换为uint16的函数
def convert_int8_int16(self, byte_array):
new_array = [0]*(len(byte_array)/2)
for i in range(len(byte_array)/2):
new_array[i] = byte_array.pop(0)*256 + byte_array.pop(0)
return new_array
这将遍历字节数组并将值添加到新的 uint16 数组。