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第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
详解flask表单提交的两种方式
Jul 21 Python
Python 迭代,for...in遍历,迭代原理与应用示例
Oct 12 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
Python SSL证书验证问题解决方案
Jan 13 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
如何向scrapy中的spider传递参数的几种方法
Nov 18 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 Python
pyqt5实现井字棋的示例代码
Dec 07 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
python 将Excel转Word的示例
Mar 02 Python
用python批量解压带密码的压缩包
May 31 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 pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
js 事件小结 表格区别
2007/08/13 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
python的几种开发工具介绍
2007/03/07 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
母校寄语大全
2014/04/10 职场文书
销售顾问工作计划书
2014/09/15 职场文书
2014年财政所工作总结
2014/11/22 职场文书
2014年保洁工作总结
2014/11/24 职场文书
早上好问候语大全
2015/11/10 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android