无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Python生成音樂 之 數(shù)組生成midi文件

2021-01-25 21:03 作者:GXTon_阿通  | 我要投稿


上一章中講到如何利用mido讀取midi文件,并把midi文件中的音符,也就是一首曲子的音符轉(zhuǎn)換成二維數(shù)組.

這一部分還是有些bug,以后會逐漸完善....

今天我們開啟新的一章,

就是通過二維數(shù)組,轉(zhuǎn)換成midi文件.

這是一個比較大的課題.我想分成幾步講,希望有人能夠耐心的看望我這雜亂的代碼.

第一步:

如何生成midi文件,先從簡單的開始:

怎樣生成只有一個音符的曲子.如果會了,

就可以通過循環(huán),把一個一維的數(shù)組,生成含有多個音符的曲子.

就要我們深究一下midi這個庫了.

官網(wǎng)給了一個例子:https://mido.readthedocs.io/en/latest/midi_files.html#creating-a-new-file

上面代碼:

1.? mid = MidiFile()?

? ? 代表創(chuàng)建一個對象,對象的名字叫做mid(這個名字是我們自己寫的),這里是類的思想.

2.track = MidiTrack()

? ? 創(chuàng)建一個音軌,track.通常一個音軌是用來存入一個樂器的.

? ? 如果有多個樂器,可以建立多個音軌,加入到mid中. 這里就簡單點,創(chuàng)建一個音軌.

3.mid.tracks.append(track)

? ? 把音軌track加入到mid中.這里就好像mid是一本書,track是書的一頁. 上面這幾步都是常規(guī)的套路.一般都是需要這樣寫的.

4.track.append(Message('program_change', program=12, time=0))

? ? 代表向音軌track中加入一些屬性,包括節(jié)拍,速度,調(diào)式等等,具體用法和參數(shù),可以查找Message函數(shù)的用法.

5.track.append(Message('note_on', note=64, velocity=64, time=32))

? ? track.append(Message('note_off', note=64, velocity=127, time=32))

? ? 這兩行實際上是一對兒,有on和off構(gòu)成,代表了一個動作,就是彈奏鋼琴的一個按鍵.然后就是代表了一個音符的產(chǎn)生.

6.mid.save('new_song.mid')

? ? 這里save()函數(shù)就是生成了一個曲子,名字叫做"new_song.mid"

效果類似:

第二步:

但是,如果某一時刻,有多個按鍵同時按下,就需要通過循環(huán),讓一個序列都加入到midi文件.

這個序列包含了某一時刻同時按下的幾個按鍵.?

就是這樣的效果:

第三步:

如果想要生成一首曲子,就是達(dá)到下面效果:

就需要在外面再套入一層循環(huán):

第四步:

主函數(shù)的調(diào)用.

比如array_note

=[[1,2,3],[4,5,6],[7,8,9]]

array2

=[40,50,70]

傳入進(jìn)去,然后就可以生成midi文件了.

第五步:

當(dāng)然可以用上一章的程序讀取midi文件,

然后把得到的數(shù)組,傳進(jìn)去,就會生成曲子...

不過曲子的速度要調(diào)整一下,否則可能會太快...


一邊寫,一邊改,可能會有很多問題.我會持續(xù)更新它的...

目前程序就不上傳了,如果哪天整理好了,在上傳到github吧...

有需要可以向我要哈...我努力完善吧...

Python生成音樂 之 數(shù)組生成midi文件的評論 (共 條)

分享到微博請遵守國家法律
武宣县| 长宁县| 乌拉特前旗| 公主岭市| 许昌县| 弥勒县| 新乡县| 壤塘县| 宁强县| 申扎县| 康马县| 自贡市| 罗田县| 闽清县| 灵石县| 平利县| 广南县| 驻马店市| 龙海市| 太仆寺旗| 彭水| 龙游县| 环江| 长顺县| 枝江市| 绥化市| 榆中县| 栾川县| 五河县| 澜沧| 广东省| 垣曲县| 大新县| 榆林市| 宜兰市| 蒙自县| 万载县| 北宁市| 合作市| 浮山县| 泰州市|