最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

分享到微博請遵守國家法律
永春县| 宜良县| 墨玉县| 宾川县| 呼和浩特市| 余干县| 自贡市| 荥经县| 双流县| 海晏县| 当涂县| 沭阳县| 五河县| 香港 | 巴楚县| 布尔津县| 前郭尔| 满城县| 长治县| 马边| 无极县| 林西县| 道真| 雷波县| 沧源| 故城县| 山西省| 尉犁县| 乌拉特中旗| 囊谦县| 偃师市| 彭阳县| 盖州市| 罗城| 平江县| 类乌齐县| 策勒县| 深圳市| 平凉市| 库尔勒市| 乾安县|