[英]How to treat a byte[] as Int16[]?
我正在通过System.Runtime.InteropServices.Marshal.Copy()
从音频输入中接收一些原始数据,并将其存储在byte []中。 我知道byte []中的实际数据是Int16类型的。 我想将此byte []当作是Int16类型的数组,并对其元素进行循环,对其进行处理,最后,我希望将此更改后的数组作为byte []传递给另一个函数。
对于那些想知道我要做什么的人:我想尝试通过简单地将来自前一个缓冲区的波形数据与来自当前缓冲区的波形数据相加,将回声效果添加到传入声音(来自麦克风)中,将其混合降低音量。
编辑:byte []数组可能将int16数字258存储为一对字节[1] [2]
0000 0001 0000 0010
据我所知,你不能。
我建议您使用Buffer.BlockCopy
将数据复制到short[]
,对其进行处理,然后再将其复制回去。 当然,这假定字节以适当的字节序排列...但是很可能会这样。
或者,使用Marshal.Copy
的重载,该重载接受short[]
将数据复制到开始。
您可以使用BitConverter
治疗字节使用Int16的元素BitConverter.ToInt16
。 您还可以使用Buffer.BlockCopy
将字节数组复制到Int16s数组。 第一个是内存效率更高,第二个是速度效率更高。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.