如果没有发布整个标题和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)
,但这不起作用。
答案 0 :(得分:2)
谐波与幅度无关。相反,谐波是具有频率 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));