我查了一些代码,好像所有东西都在创建一些数学函数波,但我想要一个单音,或者用自定义单音制作的自定义波。
我读过这个 How can I generate continuous tones of varying frequencies?
这与我的答案很接近。 假设我要像上面的链接一样使用 waveOutWrite,我似乎无法弄清楚如何为 HWAVEOUT 中的每个样本计算放大器/频率。
在链接中的代码中,它是这样完成的:
样本[i] := round(vol*sin(omega*t));
假设我想要一个 15kHz 频率的单音和一些放大器(无论哪个放大器),如何计算 Sample[1]?
最佳答案
连续(及时)正弦波可以定义为 A*sin(2*PI*f*t)
,其中 A
是某个幅度,PI
是 3.14...,f
是以赫兹为单位的音调频率,t
是以秒为单位的时间。
现在,因为你没有连续时间,因为你的时间是离散的,你用 dt*i
代替 t
并得到 A* sin(2*PI*f*dt*i)
,其中 dt
是样本之间的时间或 1/sample rate
和 i
是 sample 编号。您可以将其拼写为 A*sin(2*PI*(f/Fs)*i)
。请注意,一旦您选择了特定的采样率 Fs
(单位为样本/秒或简称为 Hz),最高音调永远不会大于 Fs/2
Hz。
关于windows - 如何使用 Delphi 播放单音或自定义波形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8462996/