我从"The Audio Programming Book"找到了这个示例C代码。
我基本上理解代码在做什么。它采用一系列值来表示一系列正弦波的振幅,并将它们相加以形成复杂的波。
除了读取行之外的所有内容我都很好:
a = amps ? amps[i] : 1.f;
我知道三元运算符基本上是If / Else语句,但我似乎无法弄清楚这是做什么的,因为'amps'在代码中没有定义。放大器重复使用放大器[]是没有意义的,似乎这是不可能的。我也无法在其他任何地方找到与其匹配的示例。
但是代码会编译,所以我完全不知道它是什么错误,以及它究竟在做什么。
如果有人可以解释这是做什么[是传统的If / Else表格],我将不胜感激。
float* TableGEN::fourier_table(int harms, float *amps, int length, float phase)
{
float a;
float *table = new float[length+2];
double w;
phase *= (float)pi*2;
memset(table, 0, (length+2)*sizeof(float) );
for(int i=0; i < harms; i++)
for(int n=0; n < length+2; n++)
{
a = amps ? amps[i] : 1.f;
w = (i+1)*(n*2*pi/length);
table[n] += (float) (a*cos(w+phase));
}
normalise_table(table, length , 1.0f );
return table;
}
由于
斯坦
答案 0 :(得分:1)
似乎正在检查amps是否为真和/或是否设置为某个东西,如果是,则抓住它的给定索引,否则返回1的浮点数。
所以
if (amps)
{
a = amps[i];
}
else
{
a = 1.f;
}
说实话,这是多么奇怪/奇怪。它应该检查是否设置了amps[i]
,然后抓住它。如果没有,则默认为1.f