python pcm音频添加头转成Wav格式文件的方法


Posted in Python onJanuary 09, 2019

如下所示:

''''' 
add Head Infomation for pcm file 
'''
import sys 
import struct 
import os 
__author__ = 'bob_hu, hewitt924@gmail.com'
__date__ = 'Dec 19,2011'
__update__ = 'Dec 19,2011'
def geneHeadInfo(sampleRate,bits,sampleNum): 
  ''''' 
  生成头信息,需要采样率,每个采样的位数,和整个wav的采样的字节数 
  '''
  rHeadInfo = '\x52\x49\x46\x46'
  fileLength = struct.pack('i',sampleNum + 36) 
  rHeadInfo += fileLength 
  rHeadInfo += '\x57\x41\x56\x45\x66\x6D\x74\x20\x10\x00\x00\x00\x01\x00\x01\x00'
  rHeadInfo += struct.pack('i',sampleRate) 
  rHeadInfo += struct.pack('i',sampleRate * bits / 8) 
  rHeadInfo += '\x02\x00'
  rHeadInfo += struct.pack('H',bits) 
  rHeadInfo += '\x64\x61\x74\x61'
  rHeadInfo += struct.pack('i',sampleNum) 
  return rHeadInfo 
if __name__ == '__main__': 
  if len(sys.argv) != 5: 
  print "usage: python %s inFile sampleRate bits outFile" % sys.argv[0] 
  sys.exit(1) 
  fout = open(sys.argv[4],'wb') #用二进制的写入模式 
  #fout.write(struct.pack('4s','\x66\x6D\x74\x20'))
  #写入一个长度为4的串,这个串的二进制内容为 66 6D 74 20 
  #Riff_flag,afd,fad,afdd, = struct.unpack('4c',fin.read(4))
  #读入四个字节,每一个都解析成一个字母 
  #open(sys.argv[4],'wb').write(struct.pack('4s','fmt '))
  #将字符串解析成二进制后再写入 
  #open(sys.argv[4],'wb').write('\x3C\x9C\x00\x00\x57')
  #直接写入二进制内容:3C 9C 00 00 57 
  #fout.write(struct.pack('i',6000)) #写入6000的二进制形式 
  #check whether inFile has head-Info 
  fin = open(sys.argv[1],'rb') 
  Riff_flag, = struct.unpack('4s',fin.read(4)) 
  if Riff_flag == 'RIFF': 
  print "%s 有头信息" % sys.argv[1] 
  fin.close() 
  sys.exit(0) 
  else: 
  print "%s 没有头信息" % sys.argv[1] 
  fin.close() 
  #采样率 
  sampleRate = int(sys.argv[2]) 
  #bit位 
  bits = int(sys.argv[3]) 
  fin = open(sys.argv[1],'rb') 
  startPos = fin.tell() 
  fin.seek(0,os.SEEK_END) 
  endPos = fin.tell() 
  sampleNum = (endPos - startPos) 
  print sampleNum 
  headInfo = geneHeadInfo(sampleRate,bits,sampleNum) 
  fout.write(headInfo) 
  fin.seek(os.SEEK_SET) 
  fout.write(fin.read()) 
  fin.close() 
  fout.close()

以上这篇python pcm音频添加头转成Wav格式文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python登录pop3邮件服务器接收邮件的方法
Apr 30 Python
python机器学习之贝叶斯分类
Mar 26 Python
python实现C4.5决策树算法
Aug 29 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
Python爬虫实现验证码登录代码实例
May 10 Python
python3 反射的四种基本方法解析
Aug 26 Python
Python线程threading模块用法详解
Feb 26 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
python 提高开发效率的5个小技巧
Oct 19 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
python基于tkinter制作下班倒计时工具
Apr 28 Python
python基于C/S模式实现聊天室功能
Jan 09 #Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 #Python
Python 利用pydub库操作音频文件的方法
Jan 09 #Python
Python简单过滤字母和数字的方法小结
Jan 09 #Python
使用python批量化音乐文件格式转换的实例
Jan 09 #Python
python+ffmpeg批量去视频开头的方法
Jan 09 #Python
Python实现简易过滤删除数字的方法小结
Jan 09 #Python
You might like
用PHP伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
PHP 变量的定义方法
2010/01/26 PHP
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
php常用的url处理函数总结
2014/11/19 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
python并发编程之线程实例解析
2017/12/27 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Python中的CSV文件使用"with"语句的方式详解
2018/10/16 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
python实现根据文件格式分类
2019/10/31 Python
什么是python类属性
2020/06/10 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
幼儿园中班教师寄语
2014/04/03 职场文书
争先创优演讲稿
2014/09/15 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
优秀英文求职信范文
2015/03/19 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
导游词之杭州西湖
2019/09/19 职场文书
亲情作文之母爱
2019/09/25 职场文书