五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

python生成midi之算法部分1

2021-06-08 23:05 作者:GXTon_阿通  | 我要投稿

生成midi的算法應(yīng)該有很多,

不過,目前我想到的一個算法是根據(jù)相似度.

原理大概如下:把相似的程度看做距離.

地圖上,如果你想描述一個地點.就必須要找參照.

如果想要去超市,

那你可以說,最近的超市在小區(qū)的南門的對面,它的旁邊有一棵樹.

上面的這種說法就是相對的,目的地是超市.

描述他,用到了小區(qū)和樹這兩個參照.當然,如果想要更加準確的位置,你可以說出更多的參照物.

也可以說出距離,比如超市距離小區(qū)4m,距離樹3m.

那么同理,(我們把距離看做相似度)

音樂也一樣,只要我們先找好一個自己喜歡的音樂片段(這里就是樹和小區(qū)).

然后隨機生成一些音符,如果這些音符和你喜歡的曲子很相似,那么生成的就是好音樂了.

相反如果你生成的音符和噪聲很相似,那么就不是好的音樂了.

這樣需要找很多你喜歡的曲子,然后慢慢訓練.

還有另一種,就是音樂自身是有規(guī)律的,比如一個建筑.

故宮的每個房間雖然都有所不同,但是它們是相似的,整體和部分之間是很融洽的,也就是各個部分之間相似度很高.

我們可以找一首曲子,然后把它按照合理的節(jié)奏進行拆分(這是一個難點)

拆分成多個部分,求取各個部分之間的相似度.

然后,自己生成一首曲子,如果自己生成的曲子,各個部分相似度也和目標一致,

那么,就初步認為這個是一首好的曲子.

當然,上面的兩種算法都是基于概率的,即便是滿足了上面的兩條,也未必是一首好的曲子.

不過它至少滿足了一些初級的條件.

下面開始實現(xiàn)上面的思想,用Python編寫代碼:

首先把midi文件的根音符找出來排成一個1維的序列.作圖,下面就是這個曲子的震動波形了,大體可以看出一點趨勢.然后根據(jù)這個趨勢,選取分段的間隔(我這里簡化了,如果嚴格來說實際上可以設(shè)成一個變量).我這里選擇的是23,每隔23個音符,就分成一段.

圖一 曲子震動趨勢

然后把序列進行分割,(按照節(jié)奏合理的分割)

之后求取各個部分之間的相似度:

根據(jù)上面每23個音符分成一段,然后求取各段與第一段的相似程度.

這里我就簡化了,只是求取第一部分與其他幾部分的相似程度,并作圖.

從下面圖中也可以看到一定的趨勢(建議大家用超級簡單的曲子,這樣容易找到規(guī)律)

圖二 相似度

根據(jù)上面兩幅圖,大體找到了趨勢,

然后隨機生成一些序列,讓這個序列滿足上面的要求,基本符合上面的趨勢.

(當然,還可以找更多的曲子做參照,找到其他更多的特性)

目前,打算用Python字典去做,

先生成多個包含23個數(shù)字的序列,然后求取相似度.

使各個相似度滿足圖2中的趨勢.






python生成midi之算法部分1的評論 (共 條)

分享到微博請遵守國家法律
宝清县| 莱阳市| 洛川县| 军事| 宝山区| 鄂尔多斯市| 旺苍县| 南召县| 裕民县| 虞城县| 五家渠市| 弥勒县| 常熟市| 新野县| 威远县| 同心县| 扎鲁特旗| 六盘水市| 金溪县| 洛浦县| 柯坪县| 九江市| 疏勒县| 枣阳市| 秦安县| 彰化县| 东光县| 安达市| 开阳县| 华宁县| 岐山县| 上犹县| 大英县| 兖州市| 河源市| 连云港市| 大石桥市| 云梦县| 彭阳县| 屏山县| 大埔区|