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进阶教程之词典、字典、dict
Aug 29 Python
python执行外部程序的常用方法小结
Mar 21 Python
Python基于贪心算法解决背包问题示例
Nov 27 Python
教你用Python创建微信聊天机器人
Mar 31 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
python实现点击按钮修改数据的方法
Jul 17 Python
python根据多个文件名批量查找文件
Aug 13 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
PHP 变量的定义方法
2010/01/26 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
PHP加密解密类实例分析
2015/04/20 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
JS重载实现方法分析
2016/12/16 Javascript
浅谈javascript中的 “ && ” 和 “ || ”
2017/02/02 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
实例讲解React 组件
2020/07/07 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
Python生成数字图片代码分享
2017/10/31 Python
详解Python中where()函数的用法
2018/03/27 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
毕业设计计划书
2014/01/09 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
研究生论文答辩开场白
2015/05/27 职场文书