【python】【sox】音頻降採樣與改變位深度

這篇文章介紹如何使用python對音頻進行降採樣。
手上有一批48k採樣率的音頻,需要將到16k。這裏使用python的librosa庫來完成。一行代碼搞定:

y_48k, sr = librosa.load(wav_filename, 48000) # 讀取原音頻
y_16k = librosa.resample(y=y_48k, orig_sr=48000, targe_sr=16000) # 降採樣

批量降採樣,代碼如下

# coding: utf-8
###########################################################
# TODO: 將VCTK/下的音頻48k,降採樣爲16k,並保存到VCTK_16K/目錄下
###########################################################
import librosa  
import glob  
from tqdm import tqdm 
import os 

for wav in tqdm(glob.glob('VCTK/*/*.wav')):
	audio_48k, sr = librosa.load(wav, 48000)
	audio_16k = librosa.resample(y=audio_48k, orig_sr=sr, target_sr=16000)
	new_filename = wav.replace('VCTK', 'VCTK_16K')
	new_file_path = new_filename.split(os.sep)[0] + '/' + new_filename.split(os.sep)[1]+'/'
	if not os.path.exists(new_file_path):
		os.makedirs(new_file_path)
	librosa.output.write_wav(new_filename, audio_16k, 16000)

除此之外,還可以利用linux系統的sox工具進行處理

示例

降採樣:

sox input.wav -r 16000 output.wav

位深 變爲16位:

sox input.wav -b 16 output.wav

同時實現降採樣與改變採樣深度

sox input.wav -b 16 -r 16000 output.wav

顯示音頻的信息:

soxi input.wav

輸出:

Input File     : 'id11700.wav'
Channels       : 1
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:02.01 = 88463 samples = 150.447 CDDA sectors
File Size      : 177k
Bit Rate       : 706k
Sample Encoding: 16-bit Signed Integer PCM

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章