python的音樂(lè)函數(shù)庫(kù) python音樂(lè)模塊

如何用PYTHON代碼寫(xiě)出音樂(lè)

在python-midi庫(kù)中,每個(gè)樂(lè)譜用Pattern對(duì)象表示,樂(lè)譜中的每個(gè)音軌(通常音樂(lè)都有很多軌道組成,每種樂(lè)器是一個(gè)軌道)用Track對(duì)象表示。每個(gè)音符的開(kāi)端用midi.NoteOnEvent表示,結(jié)束用midi.NoteOffEvent表示,可以在參數(shù)中定義每個(gè)字符的音長(zhǎng)和音高

目前成都創(chuàng)新互聯(lián)公司已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、來(lái)安網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

【小項(xiàng)目-1】用Python進(jìn)行人聲伴奏分離和音樂(lè)特征提取

比如采樣率為22050,音頻文件有36s,那么x為長(zhǎng)度為22050*36=793800的float。

用到了python庫(kù) Spleeter

抽象地了解下原理吧

參考文章是這篇:Spleeter: a fast and efficient music source separation tool with pre-trained models

原理文章是這篇 SINGING VOICE SEPARATION: A STUDY ON TRAINING DATA

粗略掃了一眼,原理主要是用U-Net進(jìn)行分割,然后這個(gè)Python工具主要是利用了一個(gè)pre-trained的model。

參考鏈接:機(jī)器之心的一篇文章

縱軸表示頻率(從0到10kHz),橫軸表示剪輯的時(shí)間。由于我們看到所有動(dòng)作都發(fā)生在頻譜的底部,我們可以將頻率軸轉(zhuǎn)換為對(duì)數(shù)軸。

可以對(duì)頻率取對(duì)數(shù)。

感覺(jué)這個(gè)參數(shù)蠻有意思的

整個(gè)頻譜被投影到12個(gè)區(qū)間,代表音樂(lè)八度音的12個(gè)不同的半音(或色度), librosa.feature.chroma_stft 用于計(jì)算。

先對(duì)音頻進(jìn)行短時(shí)傅里葉變換

其中每行存儲(chǔ)一個(gè)窗口的STFT,大小為1025*1551

這里要注意理解怎么基于stft的結(jié)果來(lái)畫(huà)頻譜圖

沒(méi)太了解,感覺(jué)就大概知道有這么個(gè)量可以用到就行。

librosa.feature.spectral_centroid 計(jì)算信號(hào)中每幀的光譜質(zhì)心:

1. 先理解連續(xù)傅里葉變換

2. 再理解離散傅里葉變換

對(duì)連續(xù)函數(shù)進(jìn)行離散采樣

3. 最后進(jìn)入短時(shí)傅里葉變換

是先把一個(gè)函數(shù)和窗函數(shù)進(jìn)行相乘,然后再進(jìn)行一維的傅里葉變換。并通過(guò)窗函數(shù)的滑動(dòng)得到一系列的傅里葉變換結(jié)果,將這些結(jié)果豎著排開(kāi)得到一個(gè)二維的表象。

目前在python3下有哪些音樂(lè)處理庫(kù)

python3下音樂(lè)處理庫(kù):midi, pretty-midi, fluidsynth3, mingus等

還有第三方庫(kù):eyeD3, pydub, PyAudio, librosa等

Python爬蟲(chóng):想聽(tīng)榜單歌曲?只需要14行代碼即可搞定

雖然說(shuō)XPath比正則表達(dá)式用起來(lái)方便,但是沒(méi)有最方便,只有更方便。我們的BeautifulSoup庫(kù)就能做到更方便的爬取想要的東西。

使用之前,還是老規(guī)矩,先安裝BeautifulSoup庫(kù),指令如下:

其中文開(kāi)發(fā)文檔:

BeautifulSoup庫(kù)是一個(gè)強(qiáng)大的Python語(yǔ)言的XML和HTML解析庫(kù)。它提供了一些簡(jiǎn)單的函數(shù)來(lái)處理導(dǎo)航、搜索、修改分析樹(shù)等功能。

BeautifulSoup庫(kù)還能自動(dòng)將輸入的文檔轉(zhuǎn)換為Unicode編碼,輸出文檔轉(zhuǎn)換為UTF-8編碼。

所以,在使用BeautifulSoup庫(kù)的過(guò)程中,不需要開(kāi)發(fā)中考慮編碼的問(wèn)題,除非你解析的文檔,本身就沒(méi)有指定編碼方式,這才需要開(kāi)發(fā)中進(jìn)行編碼處理。

下面,我們來(lái)詳細(xì)介紹BeautifulSoup庫(kù)的使用規(guī)則。

下面,我們來(lái)詳細(xì)介紹BeautifulSoup庫(kù)的重點(diǎn)知識(shí)。

首先,BeautifulSoup庫(kù)中一個(gè)重要的概念就是選擇解釋器。因?yàn)槠涞讓右蕾?lài)的全是這些解釋器,我們有必要認(rèn)識(shí)一下。博主專(zhuān)門(mén)列出了一個(gè)表格:

從上面表格觀察,我們一般爬蟲(chóng)使用lxml HTML解析器即可,不僅速度快,而且兼容性強(qiáng)大,只是需要安裝C語(yǔ)言庫(kù)這一個(gè)缺點(diǎn)(不能叫缺點(diǎn),應(yīng)該叫麻煩)。

要使用BeautifulSoup庫(kù),需要和其他庫(kù)一樣進(jìn)行導(dǎo)入,但你雖然安裝的是beautifulsoup4,但導(dǎo)入的名稱(chēng)并不是beautifulsoup4,而是bs4。用法如下:

運(yùn)行之后,輸出文本如下:

基礎(chǔ)的用法很簡(jiǎn)單,這里不在贅述。從現(xiàn)在開(kāi)始,我們來(lái)詳細(xì)學(xué)習(xí)BeautifulSoup庫(kù)的所有重要知識(shí)點(diǎn),第一個(gè)就是節(jié)點(diǎn)選擇器。

所謂節(jié)點(diǎn)選擇器,就是直接通過(guò)節(jié)點(diǎn)的名稱(chēng)選擇節(jié)點(diǎn),然后再用string屬性就可以得到節(jié)點(diǎn)內(nèi)的文本,這種方式獲取最快。

比如,基礎(chǔ)用法中,我們使用h1直接獲取了h1節(jié)點(diǎn),然后通過(guò)h1.string即可得到它的文本。但這種用法有一個(gè)明顯的缺點(diǎn),就是層次復(fù)雜不適合。

所以,我們?cè)谑褂霉?jié)點(diǎn)選擇器之前,需要將文檔縮小。比如一個(gè)文檔很多很大,但我們獲取的內(nèi)容只在id為blog的p中,那么我們先獲取這個(gè)p,再在p內(nèi)部使用節(jié)點(diǎn)選擇器就非常合適了。

HTML示例代碼:

下面的一些示例,我們還是使用這個(gè)HTML代碼進(jìn)行節(jié)點(diǎn)選擇器的講解。

這里,我們先來(lái)教會(huì)大家如何獲取節(jié)點(diǎn)的名稱(chēng)屬性以及內(nèi)容,示例如下:

運(yùn)行之后,效果如下:

一般來(lái)說(shuō)一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)有可能很多,通過(guò)上面的方式獲取,只能得到第一個(gè)。如果要獲取一個(gè)標(biāo)簽的所有子節(jié)點(diǎn),這里有2種方式。先來(lái)看代碼:

運(yùn)行之后,效果如下:

如上面代碼所示,我們有2種方式獲取所有子節(jié)點(diǎn),一種是通過(guò)contents屬性,一種是通過(guò)children屬性,2者遍歷的結(jié)果都是一樣的。

既然能獲取直接子節(jié)點(diǎn),那么獲取所有子孫節(jié)點(diǎn)也是肯定可以的。BeautifulSoup庫(kù)給我們提供了descendants屬性獲取子孫節(jié)點(diǎn),示例如下:

運(yùn)行之后,效果如下:

同樣的,在實(shí)際的爬蟲(chóng)程序中,我們有時(shí)候也需要通過(guò)逆向查找父節(jié)點(diǎn),或者查找兄弟節(jié)點(diǎn)。

BeautifulSoup庫(kù),給我們提供了parent屬性獲取父節(jié)點(diǎn),同時(shí)提供了next_sibling屬性獲取當(dāng)前節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn),previous_sibling屬性獲取上一個(gè)兄弟節(jié)點(diǎn)。

示例代碼如下:

運(yùn)行之后,效果如下:

對(duì)于節(jié)點(diǎn)選擇器,博主已經(jīng)介紹了相對(duì)于文本內(nèi)容較少的完全可以這么做。但實(shí)際的爬蟲(chóng)爬的網(wǎng)址都是大量的數(shù)據(jù),開(kāi)始使用節(jié)點(diǎn)選擇器就不合適了。所以,我們要考慮通過(guò)方法選擇器進(jìn)行先一步的處理。

find_all()方法主要用于根據(jù)節(jié)點(diǎn)的名稱(chēng)、屬性、文本內(nèi)容等選擇所有符合要求的節(jié)點(diǎn)。其完整的定義如下所示:

【實(shí)戰(zhàn)】還是測(cè)試上面的HTML,我們獲取name=a,attr={"class":"aaa"},并且文本等于text="Python板塊"板塊的節(jié)點(diǎn)。

示例代碼如下所示:

運(yùn)行之后,效果如下所示:

find()與find_all()僅差一個(gè)all,但結(jié)果卻有2點(diǎn)不同:

1.find()只查找符合條件的第一個(gè)節(jié)點(diǎn),而find_all()是查找符合條件的所有節(jié)點(diǎn)2.find()方法返回的是bs4.element.Tag對(duì)象,而find_all()返回的是bs4.element.ResultSet對(duì)象

下面,我們來(lái)查找上面HTML中的a標(biāo)簽,看看返回結(jié)果有何不同,示例如下:

運(yùn)行之后,效果如下:

首先,我們來(lái)了解一下CSS選擇器的規(guī)則:

1..classname:選取樣式名為classname的節(jié)點(diǎn),也就是class屬性值是classname的節(jié)點(diǎn)2.#idname:選取id屬性為idname的節(jié)點(diǎn)3.nodename:選取節(jié)點(diǎn)名為nodename的節(jié)點(diǎn)

一般來(lái)說(shuō),在BeautifulSoup庫(kù)中,我們使用函數(shù)select()進(jìn)行CSS選擇器的操作。示例如下:

這里,我們選擇class等于li1的節(jié)點(diǎn)。運(yùn)行之后,效果如下:

因?yàn)?,我們需要?shí)現(xiàn)嵌套CSS選擇器的用法,但上面的HTML不合適。這里,我們略作修改,僅僅更改

當(dāng)前文章:python的音樂(lè)函數(shù)庫(kù) python音樂(lè)模塊
瀏覽路徑:http://muchs.cn/article24/hgieje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化虛擬主機(jī)、電子商務(wù)、自適應(yīng)網(wǎng)站、服務(wù)器托管Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作