“无法将 'float' 转换为 float**” 错误
Posted
技术标签:
【中文标题】“无法将 \'float\' 转换为 float**” 错误【英文标题】:"Cannot convert 'float' to float**" error“无法将 'float' 转换为 float**” 错误 【发布时间】:2011-11-30 08:19:28 【问题描述】:我已将来自麦克风输入的样本写入Float32
数组,现在我想将该样本数组转换为 WAV 文件。
Apparently a good way to do it 是使用来自the DIRAC library 的实用程序类,因为它的EAFWrite
类有一个writeFloats
方法应该可以解决问题。
当我调用 EAFWrite 的 writeFloats 方法时,我收到“无法将 'float' 转换为 float**”错误。这是电话:
[mWriter writeFloats:128 fromArray:mySession];
数组是这样初始化的:
Float32 mySession[10000000] = 0;
你觉得哪里不对?这是关于指针的问题吗?
【问题讨论】:
【参考方案1】:查看writeFloats:fromArray:
源代码(它包含在库中,doncha kno)显示data
参数实际上应该是一个数组指针数组,每个通道有一个数组指针。大概你在之前的消息中指定了一个频道给mWriter
,所以现在你可以这样做:
Float32 *channelsData[1] = mySession ;
[mWriter writeFloats:128 fromArray:channelsData];
或者如果你想变得非常棘手:
[mWriter writeFloats:128 fromArray:(Float32 *[]) mySession ];
【讨论】:
刚刚从 DIRAC 的 Stephan 那里听说,他会同意 rob mayoff。我将粘贴他的答案:writeFloats
需要一个二维数组。如果是单声道数据,这将被声明为 float **data = new float*[1];
data[0] = new float[numFrames];
然后你可以用实际数据填充它,如下所示:for (long s=0; s<numFrames; s++)
data[0][s] = micInputArray[s];
零表示它是第一个通道。原因是-writeFloats
支持任意数量的通道。如果只有一个频道,这看起来过于复杂,但如果有多个频道,这是一种常见且非常方便的频道布局。以上是关于“无法将 'float' 转换为 float**” 错误的主要内容,如果未能解决你的问题,请参考以下文章