Unity Error executing result=instance->m_Sound->lock()An invalid parameter was passed to this func(代

Posted 珞珈大胖强TURBO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity Error executing result=instance->m_Sound->lock()An invalid parameter was passed to this func(代相关的知识,希望对你有一定的参考价值。

报错详情

GetData()方法解析


此方法使用剪辑中的样本数据填充数组。使用 offsetSamples 参数开始从剪辑中的特定位置开始读取,读取直到填满data数组(如果从偏移开始的读取长度大于剪辑长度,则读取将环绕, 即从剪辑的开头读取剩余的样本。)

错误解析

该错误反馈:传递给该方法一个非法的参数。此方法共有两个参数:

解决思路

  1. 检查第一个参数,其可能的错误原因是没有提前用new申请一块确定大小的空间;
  2. 重点在第二个参数,这个参数如果为负或为其他超出剪辑部分的值,就会直接导致出现上面的错误,只需注意此参数一定要保持在这部分剪辑的范围内即可解决此错误。

解决实例

出错时代码如下:

int sampleSize = 128;
float[] samples = new float[sampleSize];//参数1
int startPosition = Microphone.GetPosition(device) - (sampleSize + 1);//参数2
micRecord.GetData(samples, startPosition);//使用方法

问题:在项目一开始的时候,Microphone.GetPosition(device)=0,此时参数2为 -129,是负数,不能作为一个此方法要求的开始位置。

修改后:

int sampleSize = 128;
float[] samples = new float[sampleSize];//参数1
if (Microphone.GetPosition(device) > sampleSize)
{
    int startPosition = Microphone.GetPosition(device) - (sampleSize + 1);//参数2
    micRecord.GetData(samples, startPosition);//使用方法
}

此时进入方法时参数2一定在该剪辑片段的范围内,问题解决。

总结

麦克风报此错误肯定是因为两个参数不符合方法的要求,了解这两个参数的具体意义之后就很容易逐个解决了。

以上是关于Unity Error executing result=instance->m_Sound->lock()An invalid parameter was passed to this func(代的主要内容,如果未能解决你的问题,请参考以下文章

Unity Error executing result=instance->m_Sound->lock()An invalid parameter was passed to this func(代

unity 脚本执行顺序设置 Script Execution Order Settings

Execution Order of Event Functions, unity 3d 事件函数的执行顺序

““make: *** [executable] Error 1”是啥意思?

impdp ORA-29913: error in executing ODCIEXTTABLEOPEN callout

后台任务中的 net_http_client_execution_error