Python对wav文件的重采样实例


Posted in Python onFebruary 25, 2020

例如从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], 2, 1, 0)
 except:
  print ('Failed to downsample wav')
  return False
 
 try:
  s_write.setparams((outchannels, 2, outrate, 0, '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, dst, inrate=48000, outrate=16000, inchannels=1, 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, 'rb')
  params = s_read.getparams()
  nchannels, sampwidth, framerate, nframes = params[:4]
  print(nchannels,sampwidth, framerate,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, 2, inchannels, inrate, outrate, None)
  if outchannels == 1 and inchannels != 1:
   converted = audioop.tomono(converted[0], 2, 1, 0)
 except:
  print ('Failed to downsample wav')
  return False
 
 try:
  s_write.setparams((outchannels, 2, outrate, 0, 'NONE', '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文件的重采样实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python正则表达式抓取成语网站
Nov 20 Python
给Python初学者的一些编程技巧
Apr 03 Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
对pandas replace函数的使用方法小结
May 18 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
python对XML文件的操作实现代码
Mar 27 Python
Python3实现飞机大战游戏
Apr 24 Python
基于python实现把json数据转换成Excel表格
May 07 Python
Python调用飞书发送消息的示例
Nov 10 Python
python实现打砖块游戏
Feb 25 #Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 #Python
Django 设置多环境配置文件载入问题
Feb 25 #Python
python中resample函数实现重采样和降采样代码
Feb 25 #Python
python实现的分层随机抽样案例
Feb 25 #Python
Python可变对象与不可变对象原理解析
Feb 25 #Python
Python 使用 environs 库定义环境变量的方法
Feb 25 #Python
You might like
php面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
JavaScript prototype属性深入介绍
2012/11/27 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python实现感知器算法详解
2017/12/19 Python
python+opencv识别图片中的圆形
2020/03/25 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
MySQL面试题
2014/01/12 面试题
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
护理专业应届毕业生推荐信
2013/11/15 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
土地转让协议书
2014/09/27 职场文书
工程承包协议书范本
2014/09/29 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
工程质量保证书
2015/05/09 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android
python可视化之颜色映射详解
2021/09/15 Python
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL