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在线运行代码助手
Jul 15 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
python+pyqt5实现图片批量缩放工具
Mar 18 Python
sklearn的predict_proba使用说明
Jun 28 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
PyTorch安装与基本使用详解
Aug 31 Python
python代数式括号有效性检验示例代码
Oct 04 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 Python
python爬取youtube视频的示例代码
Mar 03 Python
Python中的min及返回最小值索引的操作
May 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
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
Python文件的读写和异常代码示例
2017/10/31 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
对python中的高效迭代器函数详解
2018/10/18 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
小学体育教学反思
2014/01/31 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
预备党员的自我评价
2014/03/12 职场文书
社区护士演讲稿
2014/08/27 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
出差报告范文
2014/11/06 职场文书
2014年仓库工作总结
2014/11/20 职场文书
科技活动总结范文
2015/05/11 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
员工升职自我评价
2019/03/26 职场文书
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS