0

「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;
}

ありがとう

スタン

4

1 に答える 1

1

amps が真であるか、および/または何かに設定されているかどうかをチェックしているようです。

そう

if (amps)
{
   a = amps[i];
}
else
{
   a = 1.f;
}

正直に言うと、これは不安定/奇妙です。が設定されているかどうかを実際に確認してamps[i]から、それを取得する必要があります。そうでない場合は、デフォルトで1.f

于 2013-07-23T01:15:52.587 に答える