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 29 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
python列表生成式与列表生成器的使用
Feb 23 Python
详解python异步编程之asyncio(百万并发)
Jul 07 Python
pandas分别写入excel的不同sheet方法
Dec 11 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
Python 多线程,threading模块,创建子线程的两种方式示例
Sep 29 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 Python
python批量生成条形码的示例
Oct 10 Python
python 下划线的多种应用场景总结
May 12 Python
Python tensorflow卷积神经Inception V3网络结构
May 06 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
基于mysql的bbs设计(一)
2006/10/09 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
PHP创建自己的Composer包方法
2018/04/09 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
Prototype 学习 Prototype对象
2009/07/12 Javascript
Prototype ObjectRange对象学习
2009/07/19 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
JS作用域深度解析
2016/12/29 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
构建Python包的五个简单准则简介
2015/06/15 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
基于python中__add__函数的用法
2019/11/25 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
社团活动总结范文
2014/04/26 职场文书
年终奖发放方案
2014/06/02 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python