1. 程式人生 > 程式設計 >Python對wav檔案的重取樣例項

Python對wav檔案的重取樣例項

例如從2channel,4.41k hz 重取樣到 1 channel,16k hz

def downsampleWav(src,dst,inrate=44100,outrate=16000,inchannels=2,outchannels=1):
 import os,wave,audioop
 if not os.path.exists(src):
  print ('Source not found!')
  return False
 
 if not os.path.exists(os.path.dirname(dst)):
  os.makedirs(os.path.dirname(dst))
 
 try:
  s_read = wave.open(src,'r')
  s_write = wave.open(dst,'w')
 except:
  print ('Failed to open files!')
  return False
 
 n_frames = s_read.getnframes()
 data = s_read.readframes(n_frames)
 
 try:
  converted = audioop.ratecv(data,2,inchannels,inrate,outrate,None)
  if outchannels == 1:
   converted = audioop.tomono(converted[0],1,0)
 except:
  print ('Failed to downsample wav')
  return False
 
 try:
  s_write.setparams((outchannels,'NONE','Uncompressed'))
  s_write.writeframes(converted)
 except:
  print ('Failed to write wav')
  return False
 
 try:
  s_read.close()
  s_write.close()
 except:
  print ('Failed to close wav files')
  return False
 
 return True
 

若in和out都是單通道:

def downsampleWav(src,inrate=48000,inchannels=1,'rb')
  params = s_read.getparams()
  nchannels,sampwidth,framerate,nframes = params[:4]
  print(nchannels,nframes)
  s_write = wave.open(dst,'wb')
 except:
  print ('Failed to open files!')
  return False
 
 n_frames = s_read.getnframes()
 data = s_read.readframes(n_frames)
 
 try:
  converted = audioop.ratecv(data,None)
  if outchannels == 1 and inchannels != 1:
   converted = audioop.tomono(converted[0],'Uncompressed'))
  s_write.writeframes(converted[0])
 except Exception as e:
  print(e)
  print ('Failed to write wav')
  return False
 
 try:
  s_read.close()
  s_write.close()
 except:
  print ('Failed to close wav files')
  return False
 
 return True

方案二

y為下采樣的結果,型別np.ndarray

You can use Librosa's load() function,

import librosa
y,s = librosa.load('test.wav',sr=8000) # Downsample 44.1kHz to 8kHz

The extra effort to install Librosa is probably worth the peace of mind.

Pro-tip: when installing Librosa on Anaconda,you need to install ffmpeg as well,so

pip install librosa
conda install -c conda-forge ffmpeg

以上這篇Python對wav檔案的重取樣例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。