您所说的效果称为频率调制。这是调频广播和调频合成的基础。 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)