「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;
}
ありがとう
スタン