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

时间:2015-02-04 15:07:40

标签: ios .net c#-4.0 mono xamarin.ios

虽然我不太习惯在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在注释中指出它实际上包含一个指向帧长度浮点数组的指针数组。同样的前提适用,无论是从安全还是不安全的环境,我都希望能够将数据写入缓冲区。一个例子将非常有用。感谢和混淆道歉

1 个答案:

答案 0 :(得分:7)

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

  

试试这个:https://gist.github.com/rolfbjarne/dc947383a6c9172bc664

     

它会将麦克风输入与正弦波混合。