2012-12-26 41 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翻譯。