如何将谐波添加到正弦波中

How to Add Harmonics to Sine Waves

在不发布整个头文件和 cpp 文件的情况下,我这里有一些生成正弦波的代码:

void CAudioGenerate::GenereateSinewave() 
{
   if(!GenerateBegin())
      return;

   short audio[2];

   for(double time=0.;  time < m_duration;  time += 1. / m_sampleRate)
   {                 
      audio[0] = short(m_amplitude * sin(time * 2 * M_PI * m_freq1));
      audio[1] = short(m_amplitude * sin(time * 2 * M_PI * m_freq1));

      GenerateWriteFrame(audio);

// Progress
      if(!GenerateProgress(time / m_duration))
         break;
   }


   // Close generator
   GenerateEnd();
}

我想添加一些将振幅降低 1/2、1/3 和 1/4 的谐波。我认为我必须更改 m_amplitude 但我不完全确定哪个是正确的方法。

我考虑过添加 m_amplitude = m_amplitude*(1/time),但没有成功。

谐波与振幅无关。相反,谐波是 N=2,3,4... 频率 的波。混合不同的波只是添加组件的问题。

因此,对于二次谐波,代码为:

audio[0] = short(m_amplitude[0] * sin(time * 2 * M_PI * m_freq1))
         + short(m_amplitude[1] * sin(time * 4 * M_PI * m_freq1))
         + short(m_amplitude[2] * sin(time * 6 * M_PI * m_freq1));