Python音乐合成器中振荡器

Python音乐合成器中振荡器,第1张

概述略述数字声音首先,音符是数字声音将产生的声音。简而言之,数字声音只是从计算机以一定速度传送给扬声器的数字序列。关于CD音频,每秒会通过一些电路(DAC)将44100个数字(每个值都在-32,768到32,767之间)馈送到扬声器,这意味着CD音频采样率为44,100Hz,位深度为16位(有符号整数)。因此,

略述
数字声音
首先,音符是数字声音将产生的声音。简而言之,数字声音只是从计算机以一定速度传送给扬声器的数字序列。

关于CD音频,每秒会通过一些电路(DAC)将44100个数字(每个值都在-32,768到32,767之间)馈送到扬声器,这意味着CD音频采样率为44,100Hz,位深度为16位(有符号整数)。

因此,要生成声音,我们要做的就是创建一个有意义的整数流,并将该流指向扬声器或文件。这种指向的细微差别可以由库来处理。

延迟迭代
延迟迭代就像普通迭代一样,但是仅在需要时才评估值,例如,仅在按下键时才需要播放音符,因此可以在按下键时评估音符的值,而不是在此之前。

对于序列的延迟迭代,我们可以使用两种不同的Python功能:

生成器
迭代器

所有生成器都是迭代器,而对象只有在其类定义中实现了__next__和__iter__函数时,它才是迭代器。可以使用生成器表达式来实现生成器,例如:

看起来像列表推导式,但带有常规方括号或生成器函数,例如:

这是一个具有yIEld而不是return的函数,这就是使其成为生成器的原因。一旦有了生成器或迭代器,就可以通过调用其上的下一个函数从其获取值,如下所示:

使用生成器和迭代器,我们可以生成无限的整数流,这些整数流可以馈送到扬声器或文件之类的某些输出,如果没有这些功能,则内存需求将非常高。

合成
合成器是一种可以从头开始产生(合成)自己声音的东西。合成器是一种电子仪器,可以是模拟的或数字的。

合成器可以具有不同种类的控制器,例如压敏垫或键盘,这些控制器将控制信号发送到合成器,然后合成器将声音合成,然后将声音发送到扬声器进行播放。

为了简化合成器,可以理解为它由产生声音的组件(例如振荡器)和对声音进行塑形的组件(例如包络线和LFO(低频振荡器))组成,甚至可能还包括为声音添加效果的组件(例如颤音, 或颤音)。

振荡器
振荡器可能是合成器最重要的组成部分,它是生成一系列在一定间隔后重复的数字序列的组件。 最简单的振荡器是产生正弦波的振荡器。

正弦波以2π的时间周期重复,因此,如果我们必须以512 Hz的采样率生成1 Hz的信号,则必须在0到2π之间的数字线上创建512个分度,并且在每个分度处应用数学正弦函数,它为我们提供了该分频的正弦波输出样本。

由于我们不想一次生成所有样本,因此我们可以在需要下一个样本时,将输入到sin的步长增加一个步长,因此可以通过以下方式计算步长:

使用math和itertools库,我们现在可以使用上述公式创建一个正弦波发生器。

上面的函数返回一个生成器,因此要评估生成器的前512个样本,我们可以使用以下代码

在上面的代码段中,我正在使用python列表推到式来获取以512 Hz采样的1 Hz正弦波的前512个采样。

这是它的外观:

注意:对于所有其他曲线图和波形生成,我将使用44,100 Hz的采样率。

振荡器参数
在振荡器中,有几个参数是可以控制的,最明显的是振荡器的频率,改变它会给我们带来不同的提示。 例如:当调至音乐会音高时,即当A4的频率为440 Hz时,中音C或C4的频率为261.625565 Hz。

除了频率以外,我们还可以控制振幅,这样可以给我们带来诸如颤音的效果,或者仅仅是普通的旧音量控制。我们可以通过将振荡器的输出值乘以0到1之间的数字来控制它。

另一个不太明显的相位是相位,它可以给我们带来诸如移相器的效果。这可以通过在正弦函数输入中添加一个介于0到360之间的值的相位角来实现。

上面的所有三个图都是通过使用此函数获得的:

我们的振荡器正好适合4条线,但是如果我们可以即时调整这三个参数,那就更好了,即,无需在每次调整时都创建新的发生器,这将使我们能够将振荡器与 其他振荡器获得各种有趣的声音,这涵盖了合成器中发生的很多事情。

代码构建振荡器 | 方波声音 | 锯齿波声音 | 三角波声音 | 频域波形 | 叠加波 | 保存 | 完整代码

详情参阅http://viadean.com/py_syn_osc.html

总结

以上是内存溢出为你收集整理的Python音乐合成器中振荡器全部内容,希望文章能够帮你解决Python音乐合成器中振荡器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1186121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存