“无法将 '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**” 错误的主要内容,如果未能解决你的问题,请参考以下文章