2012-12-26 33 views
1

我想以编程方式制作旋律一点点。乐趣和简单的旋律API

在API /库中有没有任何不错的简单原型可以让我变得有趣的旋律?

我不认为我已经能够找到任何我想要的抽象级别的库。

我真的不在乎音色,虽然如果我能让它听起来像古老的8位音乐,这将是很酷的。

我希望能够通过简单地指定每个音符的时间长度,播放时间(从歌曲的开头开始)和音高来播放音乐。

因此,举例来说,如果这样的真棒音频/旋律库是Python的存在,我可能会以如下方式使用它:

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) ]) 

而且,它还将发挥字母表歌曲的开头。

它并不一定完全是这样,我会很好,有一些限制(例如,能够同时只播放三个音符),但重点是我不想用原始声音数据弄脏,处理混合不同声音片段的细节以播放和弦,声音片段等。

选择语言并不太重要; Python会很好,但是Ruby,Java,Haskell,Racket,C/C++,甚至HTML5 + javascript等等都很好。对语言选择的唯一真正的限制是有一个易于使用和原型的成熟的gui库,因为我也想制作一些简单的交互式应用程序来制作声音。如果在OS X Lion,Windows 7和Ubuntu上支持该库,就像我在不同时间使用它们所做的那样(如果不是全部都是这样的话),我希望它能够支持OS X Lion,Windows 7和Ubuntu。支持,Windows 7和Ubuntu的支持将更加重要)。此外,如果可以使用默认的Raspbian安装轻松设置Raspberry Pi,那将是一个甜蜜的奖励。实际上,如果它在Pi上运行,我可能不需要OS X或Windows支持。

回答

1

尝试使用Python前端的RTcmix。

它在OS X上效果最好,但我在Ubuntu上使用它。这不是一个简单的构建过程,但您可以在我们的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与从元层次,在算法组成的文本注意几个章节实现的文档。如果你不仅仅想玩手工指定的笔记,而是强烈推荐阅读这本书。它是为Lisp/Common Music编写的,但是我的repo有很多Python/RTcmix翻译。