聲音的向量表示
原理
- 向量
表示時(shí)間區(qū)間上的音頻信號(hào)拳缠,
表示
時(shí)的聲壓
- 每個(gè)
稱(chēng)為樣本
- h(>0)為采樣時(shí)間
- 1/h為采樣率月培,典型的采樣率為
或
-
被稱(chēng)為比率因子
使用python的librosa庫(kù)可以讀取音頻信號(hào),并用matplotlib顯示波形
y,sr = librosa.load("MUSIC STEM.wav",sr=None) #y為長(zhǎng)度等于采樣率sr*時(shí)間的音頻向量
plt.figure()
librosa.display.waveplot(y, sr) #創(chuàng)建波形圖
plt.show() #顯示波形圖
結(jié)果
分析
音頻信號(hào)每一位分別對(duì)應(yīng)一個(gè)采樣點(diǎn),其位數(shù)等于“采樣率*音頻時(shí)長(zhǎng)(以秒為單位)”,記錄了每個(gè)樣本上音頻的振幅信息
縮放音頻信號(hào)
原理
音頻的響度由音頻信號(hào)每個(gè)樣本的數(shù)值絕對(duì)值大小決定,因此對(duì)音頻信號(hào)作代數(shù)乘法運(yùn)算松逊,可以增減音頻的響度
numpy數(shù)組提供的代數(shù)乘法功能可以用于增減音頻響度,并利用librosa庫(kù)將音頻向量寫(xiě)回文件
y=2*y #增加一倍振幅
y=0.5*y #減小振幅為原來(lái)一半
y=-y #翻轉(zhuǎn)振幅
y=10*y #大幅增加振幅
librosa.output.write_wav(dir,y,sr) #將音頻向量寫(xiě)回文件
結(jié)果
四種操作結(jié)果的波形分別如圖所示
- y=2*y時(shí)肯夏,得到的音頻響度略大于原音頻
- y=0.5*y時(shí)经宏,得到的音頻響度略小于原音頻
- y=-y時(shí),得到的音頻響度與原音頻一致
- y=10*y時(shí)驯击,得到的音頻響度遠(yuǎn)大于原來(lái)音頻
分析
- 音頻信號(hào)每個(gè)樣本的數(shù)值反應(yīng)了振動(dòng)離開(kāi)平衡點(diǎn)的距離烁兰,即振幅,振幅越大徊都,聲音具有的能量越大沪斟,聲音聽(tīng)起來(lái)響度就越大
- 對(duì)樣本數(shù)值進(jìn)行倍增,若倍增系數(shù)絕對(duì)值大于1則聲音響度增加,若倍增系數(shù)絕對(duì)值小于1則聲音響度下降
- 由于振動(dòng)離開(kāi)平衡點(diǎn)的距離是一個(gè)絕對(duì)值主之,因此倍增系數(shù)為負(fù)數(shù)時(shí)效果與倍增系數(shù)是其相反數(shù)時(shí)一致
線性組合和混音
原理
對(duì)多個(gè)音頻信號(hào)進(jìn)行線性運(yùn)算
可以實(shí)現(xiàn)混音
此時(shí)每個(gè)音頻信號(hào)
稱(chēng)為音軌
混合后的結(jié)果y稱(chēng)為混合
每個(gè)系數(shù)
是音軌在混合中的權(quán)重
numpy數(shù)組提供的線性運(yùn)算功能可以用于實(shí)現(xiàn)混音
再嘗試人聲與伴奏的混合务冕,取一段人聲軌和一段伴奏軌便贵,分別賦予權(quán)重(0.25,0.75)校摩、(0.5,0.5)败晴、(0.4,0.6)進(jìn)行線性混合
y=0.25*x1+0.75*x2
y=0.5*x1+0.5*x2
y=0.6*x1+0.4*x2
結(jié)果
波形圖如下所示:
得到的音頻為在伴奏上加上人聲的效果
分析
音頻是線性相加,得到的波形圖中無(wú)法直觀分出人聲和伴奏粤攒,但由于人聲和伴奏中各頻率諧波分量與伴奏中不同所森,線性相加在頻域被分配到了各頻率諧波上,所以可以在頻譜圖上清晰區(qū)分出來(lái)
為了得到足夠清晰的混音音頻夯接,需要不斷更改每個(gè)混音音軌的權(quán)重以得到最適合的混合模式
拓展
雖然人聲和伴奏中諧波分量基本不同焕济,但相同頻率上的相加也容易導(dǎo)致撞頻的發(fā)生,使得混合的人聲和伴奏難以區(qū)分盔几,因此對(duì)于雙聲道音頻晴弃,我們常常采用偏置的方法,為兩個(gè)聲道中人聲和伴奏設(shè)不同的權(quán)重(通常一個(gè)聲道人聲大问欠,一個(gè)聲道伴奏聲大)
形狀為(2,n)的numpy數(shù)組可以用于容納雙聲道音頻信號(hào)肝匆。兩個(gè)聲道分別取權(quán)重(0.4,0.6)、(0.6,0.4)進(jìn)行混合顺献,波形如下:
樂(lè)音
- 對(duì)于聲音信號(hào)p(t),若滿足
枯怖,其中周期T取值在0.0005秒到0.01秒之間注整,則p被視為樂(lè)音
- 周期長(zhǎng)短(決定頻率并)決定音高
- 每個(gè)周期內(nèi)波形的特點(diǎn)決定了音色
- 樂(lè)音的能量決定了響度,即聲壓
音高
原理
-
是中央A
- 一個(gè)八度在頻率上翻了一倍
- 十二平均律中度硝,每個(gè)半音在頻率上翻了
倍
- 每個(gè)半音的距離就是黑白鍵上兩個(gè)鍵之間的距離肿轨,從do到升do,各白鍵之間的差音為全全半全全全半蕊程,而每個(gè)全音中的半音被分到了黑鍵上
- 任意兩個(gè)音之間的距離稱(chēng)為音程椒袍,音程的單位是度,相同單音之間音程為1度藻茂,之后每差一個(gè)音級(jí)增加1度
實(shí)驗(yàn)步驟:
- 設(shè)置基頻f為440Hz驹暑,用numpy以440Hz生成正弦函數(shù)
- 每隔1/44100s設(shè)置一個(gè)采樣點(diǎn),每間隔1s生成1s的440Hz正弦波
- 在這基礎(chǔ)上辨赐,第n次生成時(shí)再生成1s頻率為
的正弦波优俘,與原正弦波線性相加進(jìn)行和弦,從而模擬小二度到純八度的所有音程
x=np.empty((0,)) #生成空數(shù)組
for i in range(0,13):
x1=np.linspace(0,1, num=44100, endpoint=True, dtype=float) #生成采樣點(diǎn)
x1=5*np.sin(2*np.pi*440*np.power(2,i/12)*x1)+5*np.sin(2*np.pi*440*x1) #生成波形與和弦
x2=np.zeros((44100,)) #留空部分
x=np.concatenate((x,x1,x2),axis=0) #連接數(shù)組
結(jié)果
生成的26s音頻中有13段不同音程的和弦掀序,有的和弦聽(tīng)起來(lái)和諧帆焕,有的和弦聽(tīng)起來(lái)不和諧
分析
- 小二度音程(相差一個(gè)半音)、大七度音程(相差五個(gè)全音一個(gè)半音)是極不協(xié)和音程
- 大二度音程(相差一個(gè)全音)不恭、小七度音程(相差五個(gè)全音)叶雹、三全音(三個(gè)全音)是不協(xié)和音程
- 小三度音程(相差一個(gè)全音一個(gè)半音)财饥、大三度音程(相差兩個(gè)全音)、小六度音程(相差四個(gè)全音)折晦、大六度音程(相差四個(gè)全音一個(gè)半音)是不完全協(xié)和音程
- 純四度音程(相差兩個(gè)全音一個(gè)半音)佑力、純五度音程(相差三個(gè)全音一個(gè)半音)是完全協(xié)和音程
- 純八度音程(相差六個(gè)全音)是極完全協(xié)和音程
音色
對(duì)于周期性信號(hào)
,每個(gè)分解信號(hào)為諧波或泛音
f為頻率
a與b為諧波系數(shù)
在K足夠大時(shí)筋遭,任意周期性信號(hào)都可以通過(guò)積分變換為這種形式
諧波振幅的配比決定了音色打颤,對(duì)于每個(gè)頻率由k決定的諧波,其諧波振幅為
漓滔,因此諧波振幅可以組成一個(gè)長(zhǎng)度為k的向量
编饺,足夠多的諧波以不同振幅數(shù)值混合可以組成不同音色
在220-11000Hz之間分別生成1、5响驴、10透且、20、50個(gè)頻段的正弦豁鲤、余弦信號(hào)秽誊,隨機(jī)生成諧波系數(shù)
結(jié)果
五種情況下混合波形圖如下所示:
得到一段每隔1s播放1s不同音色音頻的音頻文件
分析
- 使用不同足夠多的諧波以不同諧波系數(shù)混合可以組成不同音色音頻
- 現(xiàn)實(shí)中已知樂(lè)器也可以利用頻譜分析提取音色特征,供計(jì)算機(jī)再現(xiàn)
- 利用諧波原理可以制作各種各樣的電子合成器琳骡,供作曲家使用