使用Python

时间:2016-10-29 09:43:30

标签: python audio

我有兴趣在Python中生成一个基于变量更改频率的注释。我希望这个音符听起来像是“顺畅”。尽可能我在声音合成领域几乎没有经验。

我想要一个波浪(最初正弦,尽管如果有人有一般解决方案会很好)实时响应频率变量。我知道许多解决方案会在声音中产生一些不连续性,即每次频率变化时都会产生新的正弦音调;我想尽可能避免这种情况,特别是因为我预计频率会发生很大变化。

(如果有任何不同,我打算进行实时频率输入,即从滑块输入并根据此输入播放声音。)

我正在使用Linux设备(特别是Raspberry Pi 1型号B.)

1 个答案:

答案 0 :(得分:2)

您所谈论的效果称为频率调制。这是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)