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 是否为真和/或设置为某个值,如果是,则获取它的给定索引,否则,返回 1 的浮点数。

所以

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

老实说,这很奇怪/奇怪。它真的应该检查是否amps[i]设置,然后抓住它。如果没有,则默认为1.f

于 2013-07-23T01:15:52.587 回答