python - 使用Python生成滑动音

标签 python audio

我有兴趣用 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/

相关文章:

python - 在 Python 中比较矩阵并存储结果

python - 如何从训练图像及其标签创建 caffemodel 文件?

python - 在python中计算直到每月1号或15号的时间

c# - 使用naudio动态播放音频文件

audio - 是否有 MP3 文件的快速启动等效项?

python - 时间复杂度: growing list in nested for-loops

python - Python 中的 Selenium : Select the second element with given link text

Android 如何找到分贝

Android 自动音频播放 - 看不到按钮

python - 使用 pyDub 生成静音