如何利用python創造歌曲?

1,122 views
Skip to first unread message

Neil Lin

unread,
Jul 7, 2014, 10:35:09 PM7/7/14
to pyth...@googlegroups.com
鋼琴每個鍵代表1個音階;電腦可以播歌,python可以控制音階播放嗎?
例如;輸入1會發出Do、輸入2會發出Re...之類的

knot

unread,
Jul 11, 2014, 10:41:19 PM7/11/14
to pyth...@googlegroups.com
沒試過,但如我要寫我會試試看以下的library
1)SDL2.0,python有binding

2)JUCE framework 不過這是C++,但有有網友用cython開發,所以python應該也可行
     JUCE是最重量級的音樂framework

3)kivy framework
    有現成的音樂app可以參考 https://www.youtube.com/watch?v=XEMKfafouD4
    找一下kivy garden


Neil Lin於 2014年7月8日星期二UTC+8上午10時35分09秒寫道:

knot

unread,
Jul 11, 2014, 10:51:35 PM7/11/14
to pyth...@googlegroups.com
現成的music app(kivy framework)
https://github.com/stocyr/IcarusTouch

補充一下
1,2,3都是跨平台,也就是andorid也能用
1,2我沒用過,3我還算熟如果你要用kivy我倒是可以幫的上忙



Neil Lin於 2014年7月8日星期二UTC+8上午10時35分09秒寫道:

Neil Lin

unread,
Jul 14, 2014, 9:27:20 PM7/14/14
to pyth...@googlegroups.com
我的概念是,如果可以,就是利用程式製作聲音再轉到喇吧,如果我輸入1 2 1 2 (也可以直接寫在程式裡),就會產生Do Re Do Re...

Neil Lin於 2014年7月8日星期二UTC+8上午10時35分09秒寫道:

水鏡

unread,
Jul 14, 2014, 11:26:57 PM7/14/14
to pyth...@googlegroups.com
參考一下這篇Blog


利用python與numpy

這應該是您需要的東西


best regards,

Eric


--
這是 Google 網上論壇針對「python.tw」群組發送的訂閱通知郵件。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 pythontw+u...@googlegroups.com
如要在這個群組張貼留言,請傳送電子郵件到 pyth...@googlegroups.com
請前往以下網址造訪這個群組:http://groups.google.com/group/pythontw
如需更多選項,請前往:https://groups.google.com/d/optout



--
如果想長久地享受幸福,就要在最短距離抓住幸福才行。
Best regards,
Eric Chen

knot

unread,
Jul 15, 2014, 3:07:09 AM7/15/14
to pyth...@googlegroups.com
所謂用程式制作聲音一般來說分二種
一種單純的synthesizer(合成器)也就是以單一波形(如正弦波)透過各種演算法破壞波形(lfo,hfo),模擬聲音表情 (attack time,release time,decay time ,vibrato,distortion),再經由空間效果器(chorus reverb),再透過octave(昇降音)產土聲音,像早期很假的midi,或限在的電子音樂都是,但同榢都是合成器,取樣的波形跟演算法會嚴重影蠁聲音的品質,如果你耍的只是midi(musical instrument digital interface),基本上你只要找個開源的midi音源(如Yamaha),python 所需要的只是控制midi訊諕(其實就是文字訊號)基本上python就夠了,完全沒有效能問題

可是如果你要作的是合成器,大型取樣樂器或是拼貼音樂這些需要即時音頻處理的音樂時,就需要第三方audio library,如果你要作的需要即時演奏,那就又得考慮latency(即時運算產生delay導改彈奏延遲)的問題,因為python 本身很慢,所以完全得依賴第三方庫進行運算,除非你的取樣音源本身很小,channel 數不多,又沒有即時運算(如鼓機,簡單的synth sequencer)

knot

unread,
Jul 15, 2014, 3:27:45 AM7/15/14
to pyth...@googlegroups.com
如果你本身沒有合成器或數位編曲的概念,要靠合成器的基楚波形做出有質感的音樂不容易,我反而建議你從midi開始,至少先對數位樂器有些基本的概念,你才會有个廣𣷸的了解:到底自己的需求需不需要第三方音𩐳頻處理,還有這些audio library 到底能為你做什麼

th2912117

unread,
Sep 8, 2014, 2:04:22 PM9/8/14
to pyth...@googlegroups.com
我只知道C++有個庫叫Clam,功能跟你要的一樣,我之前配Qt有做過小鋼琴XD
http://clam-project.org/
Python我沒用過這類的東西,上Google挖了一下:
http://stackoverflow.com/questions/569321/simple-cross-platform-midi-library-for-python
https://wiki.python.org/moin/PythonInMusic
供參考。

th2912117

unread,
Sep 8, 2014, 2:22:45 PM9/8/14
to pyth...@googlegroups.com
不過Python有個內建模塊,winsound(不確定其他平台能不能用,似乎是Windows限定?)
下面的程式能夠撥放8個音階,源程式來自 這裡

import winsound

doremi = [261.63, 293.66, 329.63, 349.23, 392.00, 440.00, 493.88, 523.25]

for note in doremi :
    winsound.Beep(int(note+.5), 500)
Reply all
Reply to author
Forward
0 new messages