【发布时间】:2016-10-06 23:23:13
【问题描述】:
我正在将外部 C++ 函数从 dylib 导入 Unity C#。有问题的函数如下所示:
[DllImport ("librtcmix_embedded")]
unsafe private static extern int RTcmix_runAudio(void* k, void *outAudioBuffer, int nframes);
它接收一个指针并将音频信息写入固定大小缓冲区中的该指针。我有一个来自 Unity 的 C# 函数,它应该将此信息放入缓冲区:
void OnAudioFilterRead(float[] data, int channels)
理想情况下,在 OnAudioFilterRead 的主体中,我将能够声明一个固定大小的指针 int*(2048,Unity 的音频使用的样本数)并将其输入 RTcmix_runaudio 的 outAudioBuffer 参数,然后从中复制信息指向浮点数据数组的指针。
void OnAudioFilterRead(float[] data, int channels)
{
int *buffer = new int*(2048); //this line is not proper c#, how do I do this?
RTcmix_runAudio (null, buffer, 2048);
for(int i = 0; i<2048; i++){
data[i] = (float) buffer[i];
}
}
但是,我不知道如何在 C# 中获得大小为 2048 的正常工作指针。有什么帮助吗?我所有输入数组或使用固定结构的尝试都导致程序崩溃。
【问题讨论】:
标签: c# c++ pointers unity3d buffer