0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python國(guó)產(chǎn)庫(kù)推薦之musicpy:讓你用代碼來(lái)寫(xiě)音樂(lè)

數(shù)據(jù)分析與開(kāi)發(fā) ? 來(lái)源:數(shù)據(jù)分析與開(kāi)發(fā) ? 作者:數(shù)據(jù)分析與開(kāi)發(fā) ? 2020-12-16 11:26 ? 次閱讀

你想過(guò)用代碼來(lái)寫(xiě)音樂(lè)嗎?這里給大家介紹一個(gè)國(guó)人寫(xiě)的庫(kù) musicpy,讓你用簡(jiǎn)潔的語(yǔ)法通過(guò)樂(lè)理邏輯寫(xiě)出優(yōu)美的音樂(lè)。

這個(gè)庫(kù)可以讓你用非常簡(jiǎn)潔的語(yǔ)法,來(lái)表達(dá)一段音樂(lè)的音符,節(jié)奏等等信息,并且可以簡(jiǎn)單地輸出成midi文件的格式。

這個(gè)庫(kù)里面涉及到非常多的樂(lè)理知識(shí),所以個(gè)人推薦至少要先了解一部分樂(lè)理再來(lái)使用會(huì)比較上手。相對(duì)地,如果你是一個(gè)對(duì)樂(lè)理比較了解的人,那么看完作者在Wiki正在寫(xiě)的教程之后,你應(yīng)該很快就上手了。

(說(shuō)明:這個(gè)庫(kù)的作者還在持續(xù)開(kāi)發(fā)中,很有創(chuàng)意的一個(gè)庫(kù),向大家推薦)

安裝

首先在musicpy文件夾里打開(kāi)cmd, 跑一下pip install -r requirements.txt安裝依賴庫(kù)(如果本來(lái)就是pip install musicpy安裝的就不需要這一步, 作者也比較推薦直接pip install musicpy就行)

import 這個(gè)庫(kù):

from musicpy import *

作者自己做的介紹與使用教程視頻第一期:

https://www.bilibili.com/video/BV1754y197a9/

詳細(xì)的musicpy數(shù)據(jù)結(jié)構(gòu),基礎(chǔ)語(yǔ)法以及使用教程,請(qǐng)看作者正在寫(xiě)的Wiki,作者會(huì)盡量把所有的細(xì)節(jié)都講清楚。

Wiki的地址:https://github.com/Rainbow-Dreamer/musicpy/wiki

musicpy說(shuō)明

在musicpy里面,幾個(gè)基本的類(lèi)是note(音符), chord(和弦)和scale(音階)。這幾個(gè)類(lèi)是構(gòu)成音樂(lè)代碼的基礎(chǔ)。

在musicpy這門(mén)語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)中,音符類(lèi)本身是等值為純數(shù)字的,也就是完全可以作為純數(shù)字使用。

和弦類(lèi)是音符類(lèi)的集合,也說(shuō)明和弦類(lèi)本身等值為一個(gè)全部都是數(shù)字的集合,也可以作為向量,甚至矩陣來(lái)看待(比如多個(gè)和弦的連接走向就可以看作多個(gè)向量的拼接,因此也就有了行列數(shù),也就是矩陣的形式)。

也因此在這門(mén)語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)中,音符類(lèi),和弦類(lèi),音階類(lèi)都是可以進(jìn)行數(shù)學(xué)運(yùn)算的,比如線性代數(shù)領(lǐng)域的運(yùn)算,離散數(shù)學(xué)領(lǐng)域的運(yùn)算等等。也可以在這門(mén)語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上建立一整套樂(lè)理邏輯的算法,結(jié)合純數(shù)學(xué)邏輯來(lái)進(jìn)行多方面的音樂(lè)分析研究。

現(xiàn)代音樂(lè)領(lǐng)域的很多實(shí)驗(yàn)性質(zhì)的音樂(lè),比如序列主義,偶然音樂(lè),后現(xiàn)代主義音樂(lè)(比如極簡(jiǎn)主義音樂(lè)),理論上全部都可以在這門(mén)語(yǔ)言的純數(shù)字化的數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上進(jìn)行嚴(yán)格的創(chuàng)作。即使不提實(shí)驗(yàn)性質(zhì)的音樂(lè),這門(mén)語(yǔ)言也可以寫(xiě)任何的古典音樂(lè),爵士音樂(lè),流行音樂(lè)。

作者每隔兩三天就會(huì)更新一次這個(gè)庫(kù)的內(nèi)容,具體的更新內(nèi)容請(qǐng)大家看這個(gè)庫(kù)里的“更新日志Changelog.txt”,里面有按照日期的每次更新的非常詳細(xì)的細(xì)節(jié)與說(shuō)明。

更新日志的鏈接:

https://github.com/Rainbow-Dreamer/musicpy/blob/master/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97Changelog.txt

初衷

作者開(kāi)發(fā)這個(gè)語(yǔ)言主要的初衷有兩點(diǎn):

第一,比起工程文件和midi文件單純存儲(chǔ)音符,力度,速度等單位化的信息,如果能夠按照樂(lè)理上的角度來(lái)表示一段音樂(lè)從作曲上的角度是如何實(shí)現(xiàn)的,那就更加有表示的意義了。而且只要不是現(xiàn)代主義無(wú)調(diào)性音樂(lè),大部分的音樂(lè)都是極其具有樂(lè)理上的規(guī)律性的,這些規(guī)律抽象成樂(lè)理邏輯語(yǔ)句可以大大地精簡(jiǎn)化。(比如一個(gè)midi文件1000個(gè)音符,實(shí)際上按照樂(lè)理角度可能可以簡(jiǎn)化到幾句代碼)。

第二,開(kāi)發(fā)這個(gè)語(yǔ)言是為了讓作曲AI能夠在真正懂得樂(lè)理的情況下來(lái)作曲(而不是深度學(xué)習(xí),喂大量的數(shù)據(jù)),這個(gè)語(yǔ)言也算是一個(gè)接口,AI只要把樂(lè)理的語(yǔ)法搞懂了,那作曲就會(huì)擁有和人一樣的思維。我們可以把樂(lè)理上的規(guī)則,做什么好不做什么好告訴AI,這些東西還是可以量化的,所以這個(gè)樂(lè)理庫(kù)也可以作為一個(gè)樂(lè)理接口,溝通人和AI之間的音樂(lè)。因此,比如想讓AI學(xué)習(xí)某個(gè)人的作曲風(fēng)格,那么在樂(lè)理上面也同樣可以量化這個(gè)人的風(fēng)格,每種風(fēng)格對(duì)應(yīng)著一些不同的樂(lè)理邏輯規(guī)則,這些只要寫(xiě)給AI,經(jīng)過(guò)作者這個(gè)庫(kù),AI就可以實(shí)現(xiàn)模仿那個(gè)人的風(fēng)格了。如果是AI自己原創(chuàng)風(fēng)格,那就是從各種復(fù)雜的作曲規(guī)則里尋找可能性。

為何不用深度學(xué)習(xí)?

作者在想不用深度學(xué)習(xí),神經(jīng)網(wǎng)絡(luò)這些東西,直接教給AI樂(lè)理和某個(gè)人的風(fēng)格化的樂(lè)理規(guī)則,那么AI或許可以做的比深度學(xué)習(xí)大數(shù)據(jù)訓(xùn)練出來(lái)的更好。因?yàn)榇髷?shù)據(jù)訓(xùn)練只是給AI模仿數(shù)據(jù)本身而已,這樣其實(shí)AI并沒(méi)有真正地和人類(lèi)自己一樣理解作曲是什么,樂(lè)理是什么,所以作者才想通過(guò)這個(gè)庫(kù)實(shí)現(xiàn)把人的樂(lè)理同樣教給AI,讓AI真正意義上地理解樂(lè)理,這樣的話,作曲起來(lái)就不會(huì)生硬了,沒(méi)有機(jī)器和隨機(jī)的感覺(jué)了。

所以作者寫(xiě)這個(gè)庫(kù)的初衷之一就是避開(kāi)深度學(xué)習(xí)那一套。但是感覺(jué)抽象出不同音樂(lè)人的樂(lè)理規(guī)則確實(shí)很有難度,作者會(huì)加油寫(xiě)好這個(gè)算法的qwq 另外其實(shí)也可以音樂(lè)人自己告訴AI他自己樂(lè)理上喜歡怎么寫(xiě)(也就是自己獨(dú)特的樂(lè)理偏好規(guī)則),那么AI就會(huì)模仿的很到位,因?yàn)锳I那時(shí)候確實(shí)懂得樂(lè)理了,作曲不可能會(huì)有機(jī)器感和隨機(jī)感,此時(shí)AI腦子里想的就和音樂(lè)人腦子里想的是完全一樣的東西。

AI不必完全按照我們給他的樂(lè)理邏輯規(guī)則來(lái)創(chuàng)作,我們可以設(shè)置一個(gè)“偏好度”的概念給AI,AI在自己作曲時(shí)會(huì)有一定程度地偏好某種風(fēng)格,但是除此之外會(huì)有自己在“符合正確樂(lè)理”的規(guī)則里面找到的獨(dú)特的風(fēng)格,這樣AI就可以說(shuō)“受到了某些音樂(lè)人的影響下自己原創(chuàng)的作曲風(fēng)格了”。當(dāng)這個(gè)偏好度為0時(shí),AI的作曲將會(huì)完全是自己通過(guò)樂(lè)理尋找到的風(fēng)格,就像一個(gè)人自己學(xué)習(xí)了樂(lè)理之后,開(kāi)始摸索自己的作曲風(fēng)格一樣。一個(gè)懂得樂(lè)理的AI很容易找到自己獨(dú)特的風(fēng)格來(lái)作曲,我們甚至都不需要給他數(shù)據(jù)來(lái)訓(xùn)練,而只要教給AI樂(lè)理就行。

如何教AI樂(lè)理?

那么怎么教給AI樂(lè)理呢?在音樂(lè)上面,暫時(shí)不考慮現(xiàn)代主義音樂(lè)的范疇,那么絕大部分的音樂(lè)都是遵循著一些很基本的樂(lè)理規(guī)則的。這里的規(guī)則指的是,怎么樣寫(xiě)樂(lè)理上ok,怎么樣寫(xiě)犯了樂(lè)理上的錯(cuò)誤。比如寫(xiě)和聲的時(shí)候,四部同向往往是要避免的,尤其是在編曲時(shí)寫(xiě)管弦樂(lè)的部分。比如寫(xiě)一個(gè)和弦,如果和弦里面的音出現(xiàn)小二度(或者小九度)會(huì)聽(tīng)著比較打架。比如當(dāng)AI自己決定一首曲子要從A大調(diào)開(kāi)始寫(xiě),那么他應(yīng)該從A大調(diào)音階里按照級(jí)數(shù)來(lái)選取和弦,有可能適當(dāng)?shù)仉x調(diào)一下,加幾個(gè)副屬和弦,寫(xiě)完主歌部分可能按照五度圈轉(zhuǎn)個(gè)調(diào),或者大三度/小三度轉(zhuǎn)調(diào),同主音大小調(diào)轉(zhuǎn)調(diào)等等。我們需要做的事情就是告訴AI作曲的時(shí)候怎么寫(xiě)是正確的,更進(jìn)一步的,怎么寫(xiě)聽(tīng)著比較有水平。

AI學(xué)好了樂(lè)理,不會(huì)忘記,也比較難犯錯(cuò),因此可以寫(xiě)出真正屬于AI自己的音樂(lè)。他們會(huì)真正懂得音樂(lè)是什么,樂(lè)理是什么。因?yàn)檫@個(gè)庫(kù)的語(yǔ)言做的事情就是把樂(lè)理抽象成邏輯語(yǔ)句,那么我們每次給AI“上課”,就是把人自己的樂(lè)理概念用這個(gè)庫(kù)的語(yǔ)言來(lái)表述,然后寫(xiě)進(jìn)AI的數(shù)據(jù)庫(kù)里。通過(guò)這種方式,AI真正的學(xué)習(xí)到了樂(lè)理。這樣的作曲AI,不需要深度學(xué)習(xí),不需要訓(xùn)練集,不需要大數(shù)據(jù),而與之相比,那些深度學(xué)習(xí)訓(xùn)練出來(lái)的作曲AI實(shí)際上根本就不懂樂(lè)理是什么,也沒(méi)有音樂(lè)的概念,他們只是從海量的訓(xùn)練數(shù)據(jù)里面照葫蘆畫(huà)瓢而已。還有一個(gè)重點(diǎn)是,既然可以用具體的邏輯來(lái)描述的事情,其實(shí)是不需要機(jī)器學(xué)習(xí)的。如果是文字識(shí)別,圖像分類(lèi)這些比較難以用抽象的邏輯來(lái)描述的事情,那才是深度學(xué)習(xí)的用武之地。

結(jié)語(yǔ)

這個(gè)庫(kù)作者也上傳到 pypi 上了,大家 pip install musicpy 就可以使用了。

作者從去年的10月份開(kāi)始開(kāi)發(fā)musicpy,目前這個(gè)項(xiàng)目還在初期進(jìn)度,不過(guò)已經(jīng)有一套比較完整的樂(lè)理邏輯語(yǔ)法了。這個(gè)庫(kù)的使用教程視頻作者會(huì)持續(xù)更新。作者之前發(fā)的專(zhuān)欄也有一部分的使用教學(xué)。

GitHub鏈接:https://github.com/Rainbow-Dreamer/musicpy

責(zé)任編輯:xj

原文標(biāo)題:Python 國(guó)產(chǎn)庫(kù)推薦之 musicpy

文章出處:【微信公眾號(hào):數(shù)據(jù)分析與開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4798

    瀏覽量

    68725
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4798

    瀏覽量

    84798

原文標(biāo)題:Python 國(guó)產(chǎn)庫(kù)推薦之 musicpy

文章出處:【微信號(hào):DBDevs,微信公眾號(hào):數(shù)據(jù)分析與開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用Python進(jìn)行串口通信的案例

    當(dāng)然!以下是一個(gè)使用Python進(jìn)行串口通信的簡(jiǎn)單示例。這個(gè)示例展示了如何配置串口、發(fā)送數(shù)據(jù)以及接收數(shù)據(jù)。我們將使用 pyserial 庫(kù),這是一個(gè)非常流行的用于串口通信的Python庫(kù)
    的頭像 發(fā)表于 11-22 09:11 ?259次閱讀

    NVIDIA發(fā)布cuPyNumeric加速計(jì)算庫(kù)

    該加速計(jì)算庫(kù)幫助科研人員無(wú)縫地?cái)U(kuò)展到強(qiáng)大的計(jì)算集群,并且無(wú)需修改 Python 代碼,推進(jìn)科學(xué)發(fā)現(xiàn)。
    的頭像 發(fā)表于 11-21 10:05 ?274次閱讀

    如何使用Python構(gòu)建LSTM神經(jīng)網(wǎng)絡(luò)模型

    構(gòu)建一個(gè)LSTM(長(zhǎng)短期記憶)神經(jīng)網(wǎng)絡(luò)模型是一個(gè)涉及多個(gè)步驟的過(guò)程。以下是使用Python和Keras庫(kù)構(gòu)建LSTM模型的指南。 1. 安裝必要的庫(kù) 首先,確保已經(jīng)安裝了
    的頭像 發(fā)表于 11-13 10:10 ?429次閱讀

    全志T507-H國(guó)產(chǎn)平臺(tái)Ubuntu系統(tǒng)正式發(fā)布,您的應(yīng)用開(kāi)發(fā)更便捷!

    Python、MQTT、Qt等技術(shù)和工具時(shí),其優(yōu)勢(shì)尤為明顯。(1)Python:Ubuntu為Python提供了豐富的開(kāi)發(fā)環(huán)境和資源。開(kāi)發(fā)者可以在Ubuntu安裝Python解釋器、
    發(fā)表于 10-29 09:39

    Python常用函數(shù)大全

    Python 世界里,有一些寶藏函數(shù)和模塊,它們可以編程更輕松、代碼更高效。這篇文章將帶你一一認(rèn)識(shí)這些神器,
    的頭像 發(fā)表于 10-27 17:20 ?285次閱讀

    Python庫(kù)解析:通過(guò)庫(kù)實(shí)現(xiàn)代理請(qǐng)求與數(shù)據(jù)抓取

    Python中,有多個(gè)庫(kù)可以幫助你實(shí)現(xiàn)代理請(qǐng)求和數(shù)據(jù)抓取。這些庫(kù)提供了豐富的功能和靈活的API,使得可以輕松地發(fā)送HTTP請(qǐng)求、處理響應(yīng)、解析HTML/XML/JSON數(shù)據(jù),以及進(jìn)
    的頭像 發(fā)表于 10-24 07:54 ?188次閱讀

    pytorch和python的關(guān)系是什么

    在當(dāng)今的人工智能領(lǐng)域,Python已經(jīng)成為了最受歡迎的編程語(yǔ)言之一。Python的易學(xué)易用、豐富的庫(kù)和框架以及強(qiáng)大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語(yǔ)言。而在深度學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 08-01 15:27 ?2055次閱讀

    python寫(xiě)驗(yàn)證環(huán)境cocotb

    本文介紹了cocotb的安裝、python tb文件的寫(xiě)法、xrun仿真cocotb的腳本等,我們來(lái)看看體驗(yàn)如何。
    的頭像 發(fā)表于 07-24 09:38 ?568次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>python</b>寫(xiě)驗(yàn)證環(huán)境cocotb

    pycharm進(jìn)行python爬蟲(chóng)的步驟

    提供了許多有用的功能,如代碼自動(dòng)完成、調(diào)試和版本控制等。您可以從JetBrains的官方網(wǎng)站下載PyCharm,并根據(jù)您的需求選擇免費(fèi)社區(qū)版或付費(fèi)專(zhuān)業(yè)版。 創(chuàng)建一個(gè)新的Python項(xiàng)目 打開(kāi)
    的頭像 發(fā)表于 07-11 10:11 ?887次閱讀

    深度學(xué)習(xí)常用的Python庫(kù)

    深度學(xué)習(xí)作為人工智能的一個(gè)重要分支,通過(guò)模擬人類(lèi)大腦中的神經(jīng)網(wǎng)絡(luò)來(lái)解決復(fù)雜問(wèn)題。Python作為一種流行的編程語(yǔ)言,憑借其簡(jiǎn)潔的語(yǔ)法和豐富的庫(kù)支持,成為了深度學(xué)習(xí)研究和應(yīng)用的首選工具。本文將深入探討
    的頭像 發(fā)表于 07-03 16:04 ?666次閱讀

    來(lái)寫(xiě)個(gè)代碼,改變的電機(jī)轉(zhuǎn)速

    一、KV值"KV值"是一個(gè)常用的參數(shù),它表示電機(jī)的轉(zhuǎn)速常數(shù)。KV值定義為電機(jī)在無(wú)負(fù)載條件下,每增加1伏特電壓時(shí),電機(jī)轉(zhuǎn)速增加的轉(zhuǎn)數(shù)(rpm)。換句話說(shuō),KV值是電機(jī)轉(zhuǎn)速與供電電壓之間的比例系數(shù)。即:KV=2000RPM/24V=83.3二、電機(jī)U、V、W三相線上如何調(diào)整電壓值:MOS的導(dǎo)通時(shí)間與關(guān)斷時(shí)間步驟1:假設(shè)我們要調(diào)整U+V-之間的
    的頭像 發(fā)表于 07-03 08:10 ?966次閱讀
    <b class='flag-5'>來(lái)寫(xiě)</b>個(gè)<b class='flag-5'>代碼</b>,改變<b class='flag-5'>你</b>的電機(jī)轉(zhuǎn)速

    FHT4644國(guó)產(chǎn)替代必然性崛起還不來(lái)了解一下芯片這些事嗎

    FHT4644國(guó)產(chǎn)替代必然性崛起還不來(lái)了解一下芯片這些事嗎 國(guó)產(chǎn)芯片崛起,國(guó)內(nèi)發(fā)展環(huán)境變得更加穩(wěn)定,國(guó)產(chǎn)芯片F(xiàn)HT4644通過(guò)性能實(shí)驗(yàn)測(cè)
    發(fā)表于 06-24 17:38

    ESP32下如何加自定義Python庫(kù)

    我看官方有提供Micropython的bin文件,但我想根據(jù)自己外設(shè)擴(kuò)充一下Python庫(kù),這個(gè)應(yīng)該從哪里入手? 之前做過(guò)RTT系統(tǒng)的python庫(kù)擴(kuò)充,RTT有提供Micropyth
    發(fā)表于 06-18 06:27

    Pyserial庫(kù)來(lái)進(jìn)行與stm32的串口通信,write方法給32發(fā)數(shù)據(jù)時(shí)會(huì)出現(xiàn)數(shù)據(jù)的錯(cuò)誤和缺失怎么解決?

    我使用的是Pyserial庫(kù)來(lái)進(jìn)行與stm32的串口通信,python可以很好地接收32發(fā)來(lái)的數(shù)據(jù),但是我write方法給32發(fā)數(shù)據(jù)時(shí)會(huì)出現(xiàn)數(shù)據(jù)的錯(cuò)誤和缺失,同樣的32程序我串口調(diào)
    發(fā)表于 03-12 07:32

    Python智能家居系統(tǒng)代碼介紹

    Python智能家居系統(tǒng)是一種基于Python編程語(yǔ)言開(kāi)發(fā)的智能家居控制系統(tǒng),在現(xiàn)代家庭中得到了越來(lái)越廣泛的應(yīng)用。本文將詳細(xì)介紹Python智能家居系統(tǒng)的代碼實(shí)現(xiàn),包括系統(tǒng)的結(jié)構(gòu)與功能
    的頭像 發(fā)表于 01-25 09:46 ?1392次閱讀