Pygame 中訪問音訊取樣資料的模組。

2021-08-13 07:05:49 字數 2375 閱讀 9503

pygame.sndarray

pygame 中訪問音訊取樣資料的模組。

函式pygame.sndarray.array  ——  將乙個音訊取樣複製到乙個陣列內

pygame.sndarray.samples  ——  將乙個音訊取樣引用到乙個陣列內

pygame.sndarray.make_sound  ——  將乙個陣列轉變成乙個音訊物件

pygame.sndarray.use_arraytype  ——  設定用於音訊陣列的陣列系統

pygame.sndarray.get_arraytype  ——  獲取當前正在使用的陣列型別

pygame.sndarray.get_arraytypes  ——  獲取當前正在工作的陣列系統型別

以上函式用於在數字陣列和音訊物件之間進行相互轉換。

本模組僅當 pygame 可以使用 numpy 或 numeric 模組時是有效的(numeric 相對過時了,請使用最新的 numpy)。

音訊資料是由每秒數千個取樣組成,而且每個取樣都是特定時刻的音波的振幅。例如,在 22-khz 格式裡,音訊陣列的第 5 個元素是音波在 5/22000 秒後的振幅。

每個取樣是乙個 8 位或者 16 位的整數,這取決於資料格式。乙個立體聲檔案裡每個取樣有兩個值,而單聲道檔案裡每個取樣只有乙個值。

支援的陣列系統有:

numpy

numeric(過時,將在 pygame 1.9.3 中棄用)

複製**

如果安裝了 numpy 模組,那麼預設使用的是 numpy 陣列。否則將會被設定成 numeric(如果有安裝),但會產生乙個反對的警告(說這玩意兒快過時了,建議使用 numpy 代替)。

如果 numpy 和 numeric 都沒有安裝,本模組會產生乙個 importerror 錯誤。

通過使用 use_arraytype() 函式,可以改變使用的陣列型別(將字串 "numpy" 或 "numeric" 作為引數)。

注意:numpy 和 numeric 並不是完全相容。對於某一種陣列型別來說的乙個正確操作,可能在另外一種陣列型別中會產生不同的效果,甚至導致徹底的崩潰。

此外,相比於 numeric,numpy 可以使用無符號 16 位整數。如果音訊取樣型別需要,16 位的音訊資料可以被當做無符號整數使用。而 numeric 則總是使用有符號整數表示取樣資料。這十分重要,請務必牢記。

在 pygame 1.8 中加入對 numpy 的支援,並於 pygame 1.9.2 開始反對使用 numeric 。

函式詳解

pygame.sndarray.array()

將乙個音訊取樣複製到乙個陣列內。

array(sound) -> array

建立乙個新的陣列用於儲存音訊資料,並將取樣值複製到陣列內。

這個陣列將一直保持由 pygame.mixer.get_init() 所返回的格式。

pygame.sndarray.samples()

將乙個音訊取樣引用到乙個陣列內。

samples(sound) -> array

建立乙個直接引用音訊物件內的取樣的新陣列。修改這個陣列將會改變音訊。

這個陣列將一直保持由 pygame.mixer.get_init() 所返回的格式。

pygame.sndarray.make_sound()

將乙個陣列轉變成乙個音訊物件。

make_sound(array) -> sound

mixer 模組必須先初始化,且陣列格式必須與 mixer 音訊格式相似。

pygame.sndarray.use_arraytype()

設定用於音訊陣列的陣列系統。

use_arraytype (arraytype) -> none

使用模組函式所要求的陣列型別。目前支援的陣列型別為:

numpy

numeric(過時,將在 pygame 1.9.3 中棄用)

複製**

如果要求的型別不被支援,會產生乙個 valueerror 的錯誤。

pygame.sndarray.get_arraytype()

獲取當前正在使用的陣列型別。

get_arraytype () -> str

返回當前正在使用的陣列的型別。

此函式返回的是 get_arraytypes() 的返回元組內的乙個值,而且會表明哪種陣列模組型別被用於建立該陣列。

pygame.sndarray.get_arraytypes()

獲取當前正在工作的陣列系統型別

get_arraytypes () -> tuple

檢查哪個陣列系統是可使用的然後返回相應的字串元組。

元組的值可以被直接用於 pygame.sndarray.use_arraytype() 函式。如果沒有發現受支援的陣列系統型別,返回 none。

音訊中的取樣率和位元率的關係

取樣頻率,也稱為取樣速度或者取樣率,定義了每秒從連續訊號中提取並組成離散訊號的取樣個數,它用赫茲 hz 來表示。取樣頻率的倒數是取樣週期,它是取樣之間的時間間隔。通俗的講取樣頻率是指計算機每秒鐘採集多少個訊號樣本。如音訊取樣頻率是指錄音裝置在一秒鐘內對聲音頻號的取樣次數,取樣頻率越高聲音的還原就越真...

C語言 PCM音訊資料處理 降低取樣率

用一麥克風錄製的pcm資料,為16bit 48khz 單聲道,而我希望得到的是16khz取樣率的pcm資料,那就通過降低取樣率的方法,去實現48000hz到16000hz取樣率的轉換。轉換原理比較簡單,48000hz降到16000hz,實際上降了3倍,同一時間的單位區間內,48000hz取樣了3個點...

Matlab訪問struct中資料

這幾天在用matlab,做深度學習,一直想訪問struct中的資料,但是每次都是只能訪問到乙個,有些苦悶。在網上搜了一圈,也沒有發現,後來在官網上發現了乙個方法,看來,matlab的文件還是很可靠的。特此在這裡mark一下。建立乙個 1 3 的結構體 s,其中包含字段 f s 1 f 1 s 2 f...