使用 AVAudioPCMBuffer 将浮点值写入 C# 中的浮点指针数组(不安全或安全)

Write float values to Pointer Array of float in C# (unsafe or safe) using AVAudioPCMBuffer

虽然我不太习惯在 C# 中使用不安全的上下文,但我知道有时我可能不得不使用它。

为了正确处理它,为了将字节值写入 IntPtr,我可以从安全上下文中编写以下内容:

for (int i = 0; i < counter; i++) 
{
    System.Runtime.InteropServices.Marshal.WriteByte (data, i, 0);
}

我如何在不安全的上下文中执行相同的操作?

更具体地说,我实际上是在尝试将浮点值写入一个实际上是浮点数组指针的 Intptr 变量。我没有看到任何重载能够使用 System.Runtime.InteropServices 从安全上下文处理写入浮点数据。

我尝试了以下但出现错误:

malloc:对象 0x17e9eca4 的 *** 错误:释放对象的校验和不正确 - 对象可能在释放后被修改。

var data = (float*)buffer.FloatChannelData;

for (int i = 0; i < buffer.FrameLength; i++) 
{
    data [i] = 0.0f;
    *data++ = 0.0f; // also tried this but got the same error
}

非常感谢您的帮助。

其他详细信息:

我正在尝试将数据写入 Xamarin.IOS 中的 AudioPCMBuffers。我认为缓冲区包含一个 float 数组,但正如@Passant 在评论中指出的那样,它实际上包含一个指向 framelength 浮点数数组的指针数组。同样的前提适用,无论是从安全还是不安全的上下文,我都希望能够将数据写入缓冲区。一个例子会很有帮助。感谢并为造成的混乱道歉

Rolf's 问题的答案在这里:

Try this: https://gist.github.com/rolfbjarne/dc947383a6c9172bc664

It will mix mic input with a sine wave.