我想用编程的方式来制作一些旋律。
我真的不关心音色,尽管如果我能让它听起来像老式的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) ])它将播放字母表歌曲的开头。
它并不是必须完全那样,我可以接受一些限制(例如,一次只能播放三个音符),但重点是我不想弄脏原始的声音数据,处理混合不同声音剪辑的细节,以便播放和弦,声音剪辑,等等。
发布于 2013-01-15 11:24:26
尝试使用Python前端的RTcmix。
它在OS上运行得最好,不过我在Ubuntu上使用它。这不是一个简单的构建过程,但你可以在他们的讨论列表中看到我的post,关于我在Ubuntu12.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。
请查看他们网站上的文档以获取更复杂的示例,或者查看my Github repo中关于算法合成的Metalevel注释的几个章节的实现。如果你感兴趣的不仅仅是演奏手写的音符,我强烈推荐你去读一读这本书。它是为Lisp/Common Music编写的,但我的资源库中有很多Python/RTcmix的翻译版本。
https://stackoverflow.com/questions/14036535
复制相似问题