我有兴趣用 Python 生成一个根据变量改变频率的注释。我希望这个音符听起来尽可能“平滑”,而且我在声音合成领域经验很少。
我想要一个波(最初是正弦波,尽管如果有人有一个通用的解决方案那就太好了)实时响应频率变量。我知道许多解决方案会导致声音出现一些不连续性,即每次频率变化时都会创建一个新的正弦音调;我想尽可能避免这种情况,特别是因为我预计频率会发生很大变化。
(如果有什么区别,我计划进行实时频率输入,即从 slider 输入并根据此输入播放声音。)
我使用的是 Linux 设备(特别是 Raspberry Pi 1 B 型。)
最佳答案
你所说的效果称为频率调制。这是 FM 广播以及 FM 合成的基础。 This page更详细地显示了您需要执行的操作,但要回顾一下基础知识,您需要根据以下公式生成输出:
y = sin(2π⋅fc⋅t + β⋅sin(2π⋅fm⋅t))
其中 fc 是载波频率,fm 是调制频率。您可以使用 β 来表示调制的“量”。
以下代码将用 220 Hz 调制信号调制 440 Hz 载波信号:
import numpy
fs = 44100 # sampling frequency, Hz
fc = 440 # carrier frequency, Hz
fm = 220 # modulation frequency, Hz
T = 0.5 # seconds
twopi = 2*numpy.pi
t = numpy.linspace(0, T, int(T*fs), endpoint=False) # time variable
# Produce ramp from 0 to 1
beta = numpy.linspace(0, 1, int(T*fs))
output = numpy.sin(twopi*fc*t + beta*numpy.sin(twopi*fm*t))
输出声音是一个完全不同的故事。如果您使用的是 Jupyter 笔记本,这将可以实现听声音的技巧:
from IPython.display import Audio
Audio(output, rate=fs)
关于python - 使用Python生成滑动音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40317818/