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实现竖排打印传单手机号码易撕条
Mar 16 Python
Python命令行参数解析模块getopt使用实例
Apr 13 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 Python
Python 绘图和可视化详细介绍
Feb 11 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
python仿抖音表白神器
Apr 08 Python
Django  ORM 练习题及答案
Jul 19 Python
什么是Python包的循环导入
Sep 08 Python
教你怎么用Python操作MySql数据库
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时区转换转换函数
2014/01/07 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
详解node child_process模块学习笔记
2018/01/24 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
Python与Redis的连接教程
2015/04/22 Python
Python 功能和特点(新手必学)
2015/12/30 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
python读取与处理netcdf数据方式
2020/02/14 Python
python实现二分查找算法
2020/09/18 Python
Python创建文件夹与文件的快捷方法
2020/12/08 Python
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
北大自主招生自荐信
2013/10/19 职场文书
机电专业毕业生推荐信
2013/11/10 职场文书
松材线虫病防治方案
2014/06/15 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
2015年教学工作总结
2015/04/02 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript