python 和linux環境下:音訊處理變頻變調的方法和框架
阿新 • • 發佈:2018-11-12
前戲——音樂基礎
- 聲音是靠波來傳播的,區別任何的聲音需要依據三個來區分:響度、音高和音色響度
- 音高:聲音具有確定的音高,聲音就可以使空氣以篤定的方式執行。低音就是頻率低。
- 一個樂音訊率是另外一個樂音的頻率的2倍,我就就稱為比它高八度,聲音的震動頻率=音源的振動頻率=鼓膜的震動頻率。耳朵最低頻率:16~20周/秒,最高20000周/秒
- 改變音源的質量也可以改變頻率
音色
- 傅立葉分析:把多種波看成由很多純音組成的波的方法
- 音高是由基頻決定的。
- 諧波:附加的純音是諧波。
- 頻譜:描述各種波的振幅的大小的圖叫做頻譜圖,這在聲學中是相當的重要的。
- 相位的差別:各個組元在初始時間上的差別
- 頻寬:共振器或者濾波器能夠產生效應的頻率範圍
- 分貝:用來比較兩個聲音的功率大小的衡量尺度
- 複合波:任何一個非正弦波都是複合波
- 方均根振幅:振幅平方後取均值然後開方。
- 功率:聲音的功率與方均根振幅成正比。
- 基頻:一個複合波重複的基頻,也是各個組元頻率的最大公因子。具有這個頻率的組元很有可能有很大的振幅。
- 諧波:是基頻的整數倍的波。
- 純音的波就是正弦波,
高潮——處理過程
SoundTouch:變頻變調
變頻變調:聲音的屬性
響度:(loudness):音量,與聲波的振幅有關係
音調:(pitch)聲調與聲音的頻率有關係——聲音訊率越大,音調就越高,否則就越低。
音色:(Quality)由物體結構的特性決定
A/D轉換(Analog-to-Digital Converter)
樣本sample:聲波
→ 取樣sampling
→ 量化quantization:將連續值離散化
→ 編碼coding:可由軟體或硬體晶片完成
→ (壓縮compress):mp3等格式
→ 二進位制1010…10
- PCM(Pulse-code modulation,脈衝編碼調製),是將模擬訊號數字化的一種經典方式,計算機、DVD以及數字電話等系統中的標準格式採用的就是PCM。它的基本原理就是以上流程產生PCM流。另外,可以調整PCM的以下屬性來達到不同的取樣需求:
- 取樣率(Sampling Rate):多久取樣一次。人耳所能辨識的聲音範圍是20-20KHZ,所以一般都選用44.1kHz、48kHz或者96kHz做為取樣率。
- 取樣深度(Bit Depth):量化的離散值的位數,越高越精準,如32Bit
- SoundTouch是一個用C++編寫的開源的音訊處理庫,可以改變音訊檔案或實時音訊流的節拍(Tempo)、音調(Pitch)、回放率(Playback Rates),還支援估算音軌的穩定節拍率(BPM rate)。ST的3個效果互相獨立,也可以一起使用。這些效果通過取樣率轉換、時間拉伸結合實現。 Tempo節拍:通過拉伸時間,改變聲音的播放速率而不影響音調。 Playback Rate回放率 :以不同的轉率播放唱片(DJ打碟?),通過取樣率轉換實現。 Pitch音調:在保持節拍不變的前提下改變聲音的音調,結合取樣率轉換+時間拉伸實現。如:增高音調的處理過程是:將原音訊拉伸時長,再通過取樣率轉換,同時減少時長與增高音調變為原時長。
- PCM(Pulse Code Modulation,脈衝編碼調製),.wav檔案中主要是這種格式,因此ST的示例都是處理wav音訊。mp3等格式經過了壓縮,需轉換為PCM後再用ST處理。
- 可實現實時音訊流處理:
輸入/輸出延遲約為100ms;實時處理44.1kHz/16bit的立體聲,需要133Mhz英特爾奔騰處理器或更好。
變頻變調工具:sonci
在linux下輸入命令:sonic
Usage: sonic [OPTION]... infile outfile
-c -- Modify pitch by emulating vocal chords vibrating
faster or slower.
-p pitch -- Set pitch scaling factor. 1.3 means 30% higher.
-q -- Disable speed-up heuristics. May increase quality.
-r rate -- Set playback rate. 2.0 means 2X faster, and 2X pitch.
-s speed -- Set speed up factor. 2.0 means 2X faster.
-v volume -- Scale volume by a constant factor.
- 處理音訊命令:
$ sonic -r 2 0.wav 00.wav
$ sonic -p 1.3 0.wav 000.wav
$ sonic -c 0.wav 00000.wav