国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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文件的評論 (共 條)

分享到微博請遵守國家法律
东乌| 铅山县| 兴安盟| 顺平县| 宁德市| 寻甸| 甘肃省| 崇仁县| 航空| 六安市| 大连市| 岫岩| 广汉市| 桦川县| 类乌齐县| 招远市| 庆阳市| 明溪县| 泾源县| 汝州市| 屯门区| 湖州市| 绥阳县| 瓦房店市| 永州市| 永登县| 惠水县| 邢台县| 瑞安市| 安乡县| 会泽县| 杂多县| 满洲里市| 兴国县| 岳池县| 尉犁县| 栾城县| 浮山县| 柳河县| 大洼县| 平泉县|