c# - 如何将byte []视为Int16 []?

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

我正在通过System.Runtime.InteropServices.Marshal.Copy()从音频输入中接收一些原始数据,并将其存储在byte []中。我知道该byte []中的实际数据为Int16类型。我想将此byte []当作是Int16类型的数组,并对其元素进行循环,对其进行处理,最后,我希望将此更改后的数组作为byte []传递给另一个函数。

对于那些想知道我要做什么的人:我想尝试通过简单地将来自前一个缓冲区的波形数据与来自当前缓冲区的波形数据相加,从而将回声效果添加到传入声音(来自麦克风)中,降低音量。

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

0000 0001 0000 0010

最佳答案

据我所知,你不能。

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

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

关于c# - 如何将byte []视为Int16 []?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518299/

相关文章:

c# - 文本框的自定义外观

c# - .NET Core项目中 `wwwroot`文件夹的图标怎么改?

.net - 强制 .NET webservice 使用本地对象类,而不是代理类

javascript - 在if条件下播放mp3文件

基于java的音乐播放器仅识别.wav文件格式

android - Libgdx 不播放声音 android

c# - 通过反射遍历类型时如何过滤掉 <>c_DisplayClass 类型?

c# - 从 C++ 反序列化 protobuf 并在 C# 中重新序列化给出不同的输出

c# - 静态方法、抽象方法、接口(interface)方法比较?

.net - C# 7 : Why is tuple deconstruction not implemented through an interface?