【发布时间】:2025-11-27 22:15:01
【问题描述】:
在没有发布整个头文件和 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),但没有奏效。
【问题讨论】:
-
这似乎是一道数学题而不是编程题。
-
我对信号处理几乎一无所知,但你不能通过生成两个波并添加(或减去)它们来做到这一点吗?参见例如this image(关于如何生成方波,但我猜可以用来生成任何形状)。
-
我做了一点信号处理,但我不知道谐波(不同频率的声音)会如何持续影响您的幅度。不同的频率在不同的点上会相加和相减。
-
我制作了一个 2f 谐波的图像,并展示了幅度如何同时变大和变小:i.imgur.com/Sc89xMo.jpg
-
现在..如果你和两个声音在相同频率下反向同步......第二个反向声音的幅度较小,你会有效地降低幅度......但在代码中 -为什么不让你的 m_amplitude 更小呢?
标签: c++ signal-processing