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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
Random 在 Python 中的使用方法
Aug 09 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
python 已知平行四边形三个点,求第四个点的案例
Apr 12 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
如何解决python多种版本冲突问题
Oct 13 Python
Python实现简单的猜单词小游戏
Oct 28 Python
python执行js代码的方法
May 13 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
jquery 简单导航实现代码
2009/09/11 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
python检查指定文件是否存在的方法
2015/07/06 Python
python 串行执行和并行执行实例
2020/04/30 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
文体活动实施方案
2014/03/27 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python