windows - 如何使用 Delphi 播放单音或自定义波形?

标签 windows delphi playsound

我查了一些代码,好像所有东西都在创建一些数学函数波,但我想要一个单音,或者用自定义单音制作的自定义波。

我读过这个 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 ratei 是 sample 编号。您可以将其拼写为 A*sin(2*PI*(f/Fs)*i)。请注意,一旦您选择了特定的采样率 Fs(单位为样本/秒或简称为 Hz),最高音调永远不会大于 Fs/2 Hz。

关于windows - 如何使用 Delphi 播放单音或自定义波形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8462996/

相关文章:

c - 编译c项目时出现 fatal error LNK1120

python - 使用 wxPython 强制经典 Windows 主题

delphi - 为什么加载PNG图像格式图标会导致 "Out of system resources"异常?

c - C 中的 PlaySound 发出蜂鸣声但不播放 wav 文件

c++ - 信号量上的 WaitForSingleObject 不等待,立即返回

Java,无法在Windows上删除文件

windows - 如何让 Windows 8.1 知道我的 Delphi 应用程序想要支持 Per Monitor DPI?

multithreading - 如何将线程函数的地址作为回调传递给winapi?

audio - 使用类选择音频元素并播放它们

android - 播放Sound OnClick Android