8

我查了一些代码,似乎一切都在创建一些数学函数波,但我想要一个单音,或者一个用自定义单音制作的自定义波。

我读了这篇 我怎样才能产生不同频率的连续音调?

这与我的答案很接近。假设我将在上面的链接中使用 waveOutWrite,我似乎无法弄清楚 HWAVEOUT 中每个样本的 amp/freq 是如何计算的。

在链接的代码中是这样完成的: Samples[i] := round(vol*sin(omega*t));

假设我想要一个带有一些放大器的 15kHz 频率单音(不管哪个),如何计算 Sample[1]?

4

1 回答 1

9

连续(及时)正弦波可以定义为A*sin(2*PI*f*t),其中A是某个幅度,PI是 3.14...,f是以赫兹为单位的音调频率,t是以秒为单位的时间。

现在,由于您没有连续的时间,因此您的时间是离散的,因此您可以替换dt*itA*sin(2*PI*f*dt*i)其中dt是样本之间的时间,或者1/sample ratei样本数。您可以将其拼写为A*sin(2*PI*(f/Fs)*i). 请注意,一旦您选择了某个采样率Fs(以样本/秒或简单的 Hz 为单位),最高音调永远不会大于Fs/2Hz。

于 2011-12-11T10:00:57.953 回答