如何将byte []视为Int16 []?

时间:2010-12-23 11:22:53

标签: c# .net audio c#-4.0 bytearray

我通过System.Runtime.InteropServices.Marshal.Copy()从音频输入接收一些原始数据,并将其存储在byte []中。该字节[]中的实际数据我知道是Int16类型。我想把这个byte []看作是一个Int16类型的数组,并在其元素上循环,处理它,并在结束时我想把这个改变的数组作为byte []传递给另一个函数。

对于那些想知道我正在尝试做什么的人:我想尝试通过简单地将来自前一个缓冲区的波形数据与来自当前缓冲区的波形数据相加来对输入声音(来自麦克风)添加回声效果,以较低的体积混合。

编辑:byte []数组可能存储一个int16号码258作为一对字节[1] [2]

0000 0001 0000 0010

2 个答案:

答案 0 :(得分:4)

据我所知,你不能。

我建议您使用Buffer.BlockCopy将数据复制到short[],对其进行处理,然后将其复制回来。当然,这假设字节以适当的字节顺序排列......但很可能它们将是。

或者......使用overload of Marshal.Copy which accepts a short[]将数据复制到开头。

答案 1 :(得分:1)

您可以使用BitConverter使用BitConverter.ToInt16将字节视为Int16元素。您还可以使用Buffer.BlockCopy将字节数组复制到Int16数组。第一个是内存效率更高,第二个是速度更快。