音乐指纹识别(一):音乐波形
現(xiàn)在大部分的手機(jī)音樂(lè)客戶端中如,網(wǎng)易音樂(lè),qq音樂(lè)中都有一個(gè)功能,可以通過(guò)聽(tīng)取一段音樂(lè)來(lái)識(shí)別這是哪一首歌曲。最早開(kāi)始有這個(gè)功能是在Shazam中看見(jiàn)的,現(xiàn)在關(guān)于如何識(shí)別音樂(lè)也有較多的資料,這里通過(guò)一些簡(jiǎn)要的分析來(lái)說(shuō)明聽(tīng)音識(shí)別歌曲是如何實(shí)現(xiàn)的。我們需要對(duì)計(jì)算機(jī)中的聲音進(jìn)行研究,獲取一種能夠代表這首歌曲的唯一標(biāo)識(shí),這就是我們通常說(shuō)的音樂(lè)指紋。
在把音樂(lè)進(jìn)行數(shù)字化后,以最原始的wav為例,計(jì)算機(jī)是使用一串?dāng)?shù)字來(lái)代表音樂(lè)的,通常來(lái)說(shuō),我們以一定的頻率(44100Hz)對(duì)聲音進(jìn)行采樣,存入文件時(shí),以兩個(gè)頻道的格式進(jìn)行存取。兩個(gè)頻道代表著左右聲道。
為了更加直觀,我們把wav的數(shù)據(jù)直接畫出來(lái)。
這里用到了讀取wav數(shù)據(jù)的庫(kù),wave 如果還沒(méi)有安裝 wave 可以使用命令進(jìn)行安裝:
pip install wave一下是繪制一個(gè)wav文件的代碼:
import wave as we import numpy as np import matplotlib.pyplot as plt from scipy.fftpack import fft,ifft import matplotlib.mlab as mlabdef wavread(path):wavfile = we.open(path,"rb")params = wavfile.getparams()framesra,frameswav= params[2],params[3]datawav = wavfile.readframes(frameswav)wavfile.close()datause = np.fromstring(datawav,dtype = np.short)datause.shape = -1,2datause = datause.Ttime = np.arange(0, frameswav) * (1.0/framesra)return datause,timedef main():path = 'night.wav'wavdata,wavtime = wavread(path)plt.title("Night.wav's Frames")plt.subplot(211)plt.plot(wavtime, wavdata[0],color = 'green')plt.subplot(212)plt.plot(wavtime, wavdata[1])plt.show()main()兩個(gè)聲道的聲音繪制成圖片:
這里我們使用的是wav文件的聲音格式,但是我們大部分的音樂(lè)是使用mp3的,我們還需要就mp3的數(shù)據(jù)進(jìn)行處理,下一節(jié)講下mp3的處理方式。
總結(jié)
以上是生活随笔為你收集整理的音乐指纹识别(一):音乐波形的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 鼠标单击_转:java 鼠标单
- 下一篇: blend窗口透明化软件的使用和下载