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 相关文章推荐
Django1.7+python 2.78+pycharm配置mysql数据库教程
Nov 18 Python
python 数据的清理行为实例详解
Jul 12 Python
Python输出各行命令详解
Feb 01 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
Python实现的生产者、消费者问题完整实例
May 30 Python
pytorch 数据集图片显示方法
Jul 26 Python
python scp 批量同步文件的实现方法
Jan 03 Python
Django logging配置及使用详解
Jul 23 Python
pandas 中对特征进行硬编码和onehot编码的实现
Dec 20 Python
django 利用Q对象与F对象进行查询的实现
May 15 Python
Python爬虫爬取有道实现翻译功能
Nov 27 Python
python热力图实现的完整实例
Jun 25 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
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
js JSON.stringify()基础详解
2019/06/19 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
轻化专业学生实习自我鉴定
2013/09/20 职场文书
电气技术员岗位职责
2013/11/19 职场文书
医护人员英文求职信范文
2013/11/26 职场文书
大学生最常用的自我评价
2013/12/07 职场文书
写求职信有什么意义
2014/02/17 职场文书
保密工作实施方案
2014/02/24 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
2015年大学生工作总结
2015/04/21 职场文书
雾霾停课通知
2015/04/24 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
小学思品教学反思
2016/02/20 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
小程序实现侧滑删除功能
2022/06/25 Javascript