來自:join github today你想過用**來寫**嗎?這裡給大家介紹乙個國人寫的庫 musicpy,讓你用簡潔的語法通過樂理邏輯寫出優美的**。
這個庫可以讓你用非常簡潔的語法,來表達一段**的音符,節奏等等資訊,並且可以簡單地輸出成midi檔案的格式。這個庫裡面涉及到非常多的樂理知識,所以個人推薦至少要先了解一部分樂理再來使用會比較上手。相對地,如果你是乙個對樂理比較了解的人,那麼看完作者在wiki正在寫的教程之後你應該很快就上手了。
安裝
首先在musicpy資料夾裡開啟cmd, 跑一下pip install -r requirements.txt安裝依賴庫(如果本來就是pip install musicpy安裝的就不需要這一步, 作者也比較推薦直接pip install musicpy就行)
import 這個庫: from musicpy import *
詳細的musicpy資料結構,基礎語法以及使用教程,請看作者正在寫的wiki,作者會盡量把所有的細節都講清楚。
musicpy說明
在musicpy裡面,幾個基本的類是note(音符), chord(和弦)和scale(音階)。這幾個類是構成****的基礎。
在musicpy這門語言的資料結構設計中,音符類本身是等值為純數字的,也就是完全可以作為純數字使用。
和弦類是音符類的集合,也說明和弦類本身等值為乙個全部都是數字的集合,也可以作為向量,甚至矩陣來看待(比如多個和弦的連線走向就可以看作多個向量的拼接,因此也就有了行列數,也就是矩陣的形式)。
也因此在這門語言的資料結構設計中,音符類,和弦類,音階類都是可以進行數**算的,比如線性代數領域的運算,離散數學領域的運算等等。也可以在這門語言的資料結構的基礎上建立一整套樂理邏輯的演算法,結合純數學邏輯來進行多方面的**分析研究。
現代**領域的很多實驗性質的**,比如序列主義,偶然**,後現代主義**(比如極簡主義**),理論上全部都可以在這門語言的純數位化的資料結構的基礎上進行嚴格的創作。即使不提實驗性質的**,這門語言也可以寫任何的古典**,爵士**,流行**。
作者每隔兩三天就會更新一次這個庫的內容,具體的更新內容請大家看這個庫里的「更新日誌changelog.txt」,裡面有按照日期的每次更新的非常詳細的細節與說明。
初衷
作者開發這個語言主要的初衷有兩點:
第一,比起工程檔案和midi檔案單純儲存音符,力度,速度等單位化的資訊,如果能夠按照樂理上的角度來表示一段**從作曲上的角度是如何實現的,那就更加有表示的意義了。而且只要不是現代主義無調性**,大部分的**都是極其具有樂理上的規律性的,這些規律抽象成樂理邏輯語句可以大大地精簡化。(比如乙個midi檔案1000個音符,實際上按照樂理角度可能可以簡化到幾句**)。
第二,開發這個語言是為了讓作曲ai能夠在真正懂得樂理的情況下來作曲(而不是深度學習,喂大量的資料),這個語言也算是乙個介面,ai只要把樂理的語法搞懂了,那作曲就會擁有和人一樣的思維。我們可以把樂理上的規則,做什麼好不做什麼好告訴ai,這些東西還是可以量化的,所以這個樂理庫也可以作為乙個樂理介面,溝通人和ai之間的**。因此,比如想讓ai學習某個人的作曲風格,那麼在樂理上面也同樣可以量化這個人的風格,每種風格對應著一些不同的樂理邏輯規則,這些只要寫給ai,經過作者這個庫,ai就可以實現模仿那個人的風格了。如果是ai自己原創風格,那就是從各種複雜的作曲規則裡尋找可能性。
為何不用深度學習?
作者在想不用深度學習,神經網路這些東西,直接教給ai樂理和某個人的風格化的樂理規則,那麼ai或許可以做的比深度學習大資料訓練出來的更好。因為大資料訓練只是給ai模仿資料本身而已,這樣其實ai並沒有真正地和人類自己一樣理解作曲是什麼,樂理是什麼,所以作者才想通過這個庫實現把人的樂理同樣教給ai,讓ai真正意義上地理解樂理,這樣的話,作曲起來就不會生硬了,沒有機器和隨機的感覺了。所以作者寫這個庫的初衷之一就是避開深度學習那一套。但是感覺抽象出不同**人的樂理規則確實很有難度,作者會加油寫好這個演算法的qwq 另外其實也可以**人自己告訴ai他自己樂理上喜歡怎麼寫(也就是自己獨特的樂理偏好規則),那麼ai就會模仿的很到位,因為ai那時候確實懂得樂理了,作曲不可能會有機器感和隨機感,此時ai腦子裡想的就和**人腦子裡想的是完全一樣的東西。
ai不必完全按照我們給他的樂理邏輯規則來創作,我們可以設定乙個「偏好度」的概念給ai,ai在自己作曲時會有一定程度地偏好某種風格,但是除此之外會有自己在「符合正確樂理」的規則裡面找到的獨特的風格,這樣ai就可以說「受到了某些**人的影響下自己原創的作曲風格了」。當這個偏好度為0時,ai的作曲將會完全是自己通過樂理尋找到的風格,就像乙個人自己學習了樂理之後,開始摸索自己的作曲風格一樣。乙個懂得樂理的ai很容易找到自己獨特的風格來作曲,我們甚至都不需要給他資料來訓練,而只要教給ai樂理就行。
如何教ai樂理?
那麼怎麼教給ai樂理呢?在**上面,暫時不考慮現代主義**的範疇,那麼絕大部分的**都是遵循著一些很基本的樂理規則的。這裡的規則指的是,怎麼樣寫樂理上ok,怎麼樣寫犯了樂理上的錯誤。比如寫和聲的時候,四部同向往往是要避免的,尤其是在編曲時寫管弦樂的部分。比如寫乙個和弦,如果和弦裡面的音出現小二度(或者小九度)會聽著比較打架。比如當ai自己決定一首曲子要從a大調開始寫,那麼他應該從a大調音階裡按照級數來選取和弦,有可能適當地離調一下,加幾個副屬和弦,寫完主歌部分可能按照五度圈轉個調,或者大三度/小三度轉調,同主音大小調轉調等等。我們需要做的事情就是告訴ai作曲的時候怎麼寫是正確的,更進一步的,怎麼寫聽著比較有水平。
ai學好了樂理,不會忘記,也比較難犯錯,因此可以寫出真正屬於ai自己的**。他們會真正懂得**是什麼,樂理是什麼。因為這個庫的語言做的事情就是把樂理抽象成邏輯語句,那麼我們每次給ai「上課」,就是把人自己的樂理概念用這個庫的語言來表述,然後寫進ai的資料庫裡。通過這種方式,ai真正的學習到了樂理。這樣的作曲ai,不需要深度學習,不需要訓練集,不需要大資料,而與之相比,那些深度學習訓練出來的作曲ai實際上根本就不懂樂理是什麼,也沒有**的概念,他們只是從海量的訓練資料裡面照葫蘆畫瓢而已。還有乙個重點是,既然可以用具體的邏輯來描述的事情,其實是不需要機器學習的。如果是文字識別,影象分類這些比較難以用抽象的邏輯來描述的事情,那才是深度學習的用武之地。
結語
這個庫作者也上傳到pypi上了,大家pip install musicpy就可以使用了。
Python 國產庫推薦之 musicpy
你想過用 來寫 嗎?這裡給大家介紹乙個國人寫的庫 musicpy,讓你用簡潔的語法通過樂理邏輯寫出優美的 這個庫可以讓你用非常簡潔的語法,來表達一段 的音符,節奏等等資訊,並且可以簡單地輸出成midi檔案的格式。這個庫裡面涉及到非常多的樂理知識,所以個人推薦至少要先了解一部分樂理再來使用會比較上手。...
Python常用庫推薦
ipython ptpython,完美體驗 首先是安裝 pip install ipython ptpython 然後使用 ptipython 有什麼好處 1.ipython zkmxqwsi是非常強大的 python 增強工具 2.ptpython 提供了類似 ide 的自動補全功能 3.當你在命...
Python 常用的庫 推薦演算法
1 numpy 科學計算和資料分析 2 pandas 包含大量的庫和資料模型。包含操作大型資料集的工具,dataframe和series兩大資料結構 3 jieba中文分詞庫,三種分詞模式 精準模式,全模式,搜尋引擎模式,支援繁體分詞和自定義詞典 4 json 輕量級的資料交換格式,就是python...