我想以编程方式制作旋律。
我并不关心音色,但如果我能听起来像听起来很酷的老式8位音乐。
我希望能够播放音乐,只需指定每个音符的长度,播放时间(从歌曲的开头开始)及其音高。
我想以下列方式使用它:
from awesomeMelodyLibrary import play
# Perhaps play accepts an iterable of 3-tuples where
# the items of the tuple are (pitch, duration_of_note, when_to_play)
# and then it would play those notes.
play([ (440, 200, 0), # A4
(440, 200, 200),
(660, 200, 400), # E5
(660, 200, 600),
(740, 200, 800), # F#5
(740, 200,1000),
(660, 400,1200) ])
它将播放字母歌曲的开头。
它不一定就是这样,我会有一些限制(例如,同时只能演奏三个音符),但重点是我不想得到肮脏的原始声音数据,处理混合不同声音片段的细节,以便播放和弦,声音片段等。
答案 0 :(得分:1)
使用Python前端尝试RTcmix。
尽管我在Ubuntu上使用它,但它在OS X上效果最好。这不是一个简单的构建过程,但您可以在他们的讨论列表中看到我的post关于我在Ubuntu 12.04上的安装过程。
他们有各种各样的乐器。我最喜欢的一个是STRUM2,一个拔弦乐器。
以下是您在Python中播放一些笔记的方法。
from rtcmix import *
rtsetparams(44100, 2)
load("STRUM2")
noteOnset = 0 #in seconds
duration = 1.0 # in seconds
amplitude = 10000
pitch = 440 # specified in hertz
squish = 1
decay = 1.0
pan = .5
STRUM2(noteOnset, duration, amplitude, pitch, squish, decay, pan)
默认情况下以赫兹为单位,但此功能可以从MIDI键数转换为赫兹。
def keynumToHertz(keynum):
lowestfreq = 8.175 #C-1
return lowestfreq * math.pow(2.0, float(keynum)/12.0)
如果要以标准符号('Bb6', 'G#8', 'F-1', 'A4')
指定注释,则可以使用我编写的nameToNum
函数。找到它here。
查看其网站上的文档以获取更复杂的示例,或者查看我的Github repo,其中包含来自Metalevel的 Notes的几个章节的实现,这是一个关于算法组合的文本。如果你想做的不仅仅是玩手工指定的音符,我强烈推荐阅读那本书。它是为Lisp / Common Music编写的,但我的repo有很多Python / RTcmix翻译。