从频率,和弦中播放python中的流声音

Mit*_*ops 5 python audio

我正在开发一个将吉他和弦转换为班卓琴和弦的应用程序,当我正在构建对象时,我还想制作一种音频"打印声明",它可以快速播放我标签/书写的和弦.

我发现自己非常困惑如何使用Python同时播放多个声音而不需要某种混音,或者包含所有的pygame,或者写入文件.

我正在寻找的东西可以......

  1. 取频率 - 像440一样产生A,880产生一个八度音程 - 作为一个可迭代的
  2. 无需写入磁盘即可通过midi乐器播放它们.

我有适当的功能,可以从音品转换为频率,给定乐器调音,并基于这些,我想说:

fretboard.play([440, 880])
Run Code Online (Sandbox Code Playgroud)

并听到音调.或者,如果我可以指定时间......

fretboard.play([(440,1), (880,1)])
Run Code Online (Sandbox Code Playgroud)

同时听到每一个.

简单地获得这种声音的最佳方法是什么,并且希望以某种方式让我排序其中的几个如果我想创建一些原始的旋律?

另外,如果这只是一种完全不同的编程,如果看起来我的问题很幼稚("嘿mittenchops,你需要了解更多关于频道!"),请告诉我,特别是如果你可以指导我学习资源.

小智 2

之前在寻找 Python 的声音分析时,我偶然发现了这个网站PythonInMusic,其中有很多 Python 的音乐软件链接。

再次回顾一下,我认为我会尝试使用实时输出 MIDI 音符的第一个东西称为PyFluidSynth。它是Python 的MIDI 合成器。以下是他们网站上的一些示例代码:

import time
import fluidsynth

fs = fluidsynth.Synth()
fs.start()

sfid = fs.sfload("example.sf2")
fs.program_select(0, sfid, 0, 0)

fs.noteon(0, 60, 30)
fs.noteon(0, 67, 30)
fs.noteon(0, 76, 30)

time.sleep(1.0)

fs.noteoff(0, 60)
fs.noteoff(0, 67)
fs.noteoff(0, 76)

time.sleep(1.0)

fs.delete()
Run Code Online (Sandbox Code Playgroud)

希望这能帮助您指明正确的方向!