将16位音频样本转换为char

时间:2017-03-28 14:26:40

标签: python c++ casting alsa

我正在使用矩阵创建器板,我正在尝试为他们的mic数组C ++代码创建一个python包装器。

该库有一个read函数,它返回一个包含128个样本的uint16_t数组。

我正在尝试将它与 ALSA readi函数进行比较,该函数将缓冲区写入用户作为参数传递给函数的char数组。

问题是当单char只有8位宽时, ALSA 如何将16位样本写入char数组? 我怎么能用uint16_t数组做同样的事情并将它传递给python所以我会得到与 ALSA readi函数相同的结果?

1 个答案:

答案 0 :(得分:0)

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数组。