我正在打电话给非管理的Aubio库dll(Aubio.org), 我想知道处理Aubio samplebuffer的好方法。
它的定义如下:
// Buffer for real values
struct _fvec_t {
uint length; // length of buffer
uint channels; // number of channels
float **data; // data array of size [length] * [channels]
};
Aubio为我创建了结构,并且数据库设置正确,所以我得到了一个IntPtr。 我需要从C#代码读取/写入数据指针。
for (int chan_idx = 0; chan_idx < my_fvec.channels; ++chan_idx)
for (int i=0; i<something; i++)
my_fvec.data[chan_idx][i] = SomeRandomValue();
将C#结构“映射”到fvec_t类型的正确方法是什么,以便我可以正确访问数据成员来读/写它?
(或者我应该使用Marshal.Copy,我如何使用指针数组执行此操作?)
答案 0 :(得分:0)
我想你可以定义一个托管结构和PtrToStructure你有什么,修改,然后StructureToPtr(回到同一个位置),但它可能就是这么简单,因为内存已经分配了所有,只是读出数组的intptr,然后使用Copy:
将float数组写入它们