我从“The Audio Programming Book”中找到了这个示例 C 代码。
我基本上了解代码在做什么。它采用一组值来表示一系列正弦波的幅度,并将它们加在一起以创建一个复杂的波。
我对所有内容都满意,除了以下内容:
a = amps ? amps[i] : 1.f;
我知道三元运算符基本上是 If/Else 语句,但我似乎无法弄清楚它到底在做什么,因为代码前面没有定义“amps”。amps 重复使用 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;
}
谢谢
斯坦