1. 程式人生 > >python 和linux環境下:音訊處理變頻變調的方法和框架

python 和linux環境下:音訊處理變頻變調的方法和框架

前戲——音樂基礎

  • 聲音是靠波來傳播的,區別任何的聲音需要依據三個來區分:響度、音高和音色響度
  • 音高:聲音具有確定的音高,聲音就可以使空氣以篤定的方式執行。低音就是頻率低。
  • 一個樂音訊率是另外一個樂音的頻率的2倍,我就就稱為比它高八度,聲音的震動頻率=音源的振動頻率=鼓膜的震動頻率。耳朵最低頻率:16~20周/秒,最高20000周/秒
  • 改變音源的質量也可以改變頻率

音色

  1. 傅立葉分析:把多種波看成由很多純音組成的波的方法
  2. 音高是由基頻決定的。
  3. 諧波:附加的純音是諧波。
  4. 頻譜:描述各種波的振幅的大小的圖叫做頻譜圖,這在聲學中是相當的重要的。
  5. 相位的差別:各個組元在初始時間上的差別
  6. 頻寬:共振器或者濾波器能夠產生效應的頻率範圍
  7. 分貝:用來比較兩個聲音的功率大小的衡量尺度
  8. 複合波:任何一個非正弦波都是複合波
  9. 方均根振幅:振幅平方後取均值然後開方。
  10. 功率:聲音的功率與方均根振幅成正比。
  11. 基頻:一個複合波重複的基頻,也是各個組元頻率的最大公因子。具有這個頻率的組元很有可能有很大的振幅。
  12. 諧波:是基頻的整數倍的波。
  13. 純音的波就是正弦波,

高潮——處理過程

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

感謝觀看