报错详情
GetData()方法解析
此方法使用剪辑中的样本数据填充数组。使用 offsetSamples 参数开始从剪辑中的特定位置开始读取,读取直到填满data数组(如果从偏移开始的读取长度大于剪辑长度,则读取将环绕, 即从剪辑的开头读取剩余的样本。)
错误解析
该错误反馈:传递给该方法一个非法的参数。此方法共有两个参数:
解决思路
- 检查第一个参数,其可能的错误原因是没有提前用new申请一块确定大小的空间;
- 重点在第二个参数,这个参数如果为负或为其他超出剪辑部分的值,就会直接导致出现上面的错误,只需注意此参数一定要保持在这部分剪辑的范围内即可解决此错误。
解决实例
出错时代码如下:
int sampleSize = 128;
float[] samples = new float[sampleSize];
int startPosition = Microphone.GetPosition(device) - (sampleSize + 1);
micRecord.GetData(samples, startPosition);
问题:在项目一开始的时候,Microphone.GetPosition(device)=0,此时参数2为 -129,是负数,不能作为一个此方法要求的开始位置。
修改后:
int sampleSize = 128;
float[] samples = new float[sampleSize];
if (Microphone.GetPosition(device) > sampleSize)
{
int startPosition = Microphone.GetPosition(device) - (sampleSize + 1);
micRecord.GetData(samples, startPosition);
}
此时进入方法时参数2一定在该剪辑片段的范围内,问题解决。
总结
麦克风报此错误肯定是因为两个参数不符合方法的要求,了解这两个参数的具体意义之后就很容易逐个解决了。
|