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获取电脑硬件信息及状态的实现方法
Aug 29 Python
Python实现简单登录验证
Apr 13 Python
Python pandas常用函数详解
Feb 07 Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 Python
Python中pymysql 模块的使用详解
Aug 12 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
Python类如何定义私有变量
Feb 03 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
python interpolate插值实例
Jul 06 Python
django form和field具体方法和属性说明
Jul 09 Python
python3 字符串str和bytes相互转换
Mar 23 Python
Python+pyaudio实现音频控制示例详解
Jul 23 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中inlcude()性能对比详解
2012/09/16 PHP
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
Python中文字符串截取问题
2015/06/15 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
python中私有函数调用方法解密
2016/04/29 Python
Python 装饰器使用详解
2017/07/29 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
应届生.NET方向面试题
2015/05/23 面试题
学生处主任岗位职责
2013/12/01 职场文书
社团招新策划书
2014/02/04 职场文书
父母对孩子的寄语
2014/04/09 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
中学清明节活动总结
2014/07/04 职场文书
公司周年庆典标语
2014/10/07 职场文书
车间主任岗位职责
2015/02/03 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
vue中div禁止点击事件的实现
2022/04/02 Vue.js