python分割8KHz16Bit44Header的Wave文件

#encoding=GBK

import os

import sys

import string

from struct import pack, unpack

‘‘‘

[52 49 46 46]   [char ]  [4bytes]‘RIFF‘       –RIFF file identification

[E4 6C 00 00]   [int  ]  [4bytes]<length>     –File length field

[57 41 56 45]   [char ]  [4bytes]‘WAVE‘       –WAVE chunk identification

[66 6D 74 20]   [char ]  [4bytes]‘fmt‘        –format sub-chunk identification

[10 00 00 00]   [int  ]  [4bytes]flength      –length of format sub-chunk

[01 00]         [short]  [2bytes]format       –format specifier

[01 00]         [short]  [2bytes]chans        –number of channels

[40 1F 00 00]   [int  ]  [4bytes]sampsRate    –sample rate in Hz

[80 3E 00 00]   [int  ]  [4bytes]bpsec        –bytes per second

[02 00]         [short]  [2bytes]bpsample     –bytes per sample

[10 00]         [short]  [2bytes]bpchan       –bits per channel

[64 61 74 61]   [char ]  [4bytes]‘data‘       –data sub-chunk identification

[C0 6C 00 00]   [int  ]  [4bytes]dlength      –length of data sub-chuk

#30 00 00 00 -- 00 00 00 30 -- 0 * 16^0 + 3 * 16^1                        = 48

#40 1F 00 00 -- 00 00 1F 40 -- 0 * 16^0 + 4 * 16^1 + 15 * 16^2 + 1 * 16^3 = 8000

wavheader = ‘4si4s4sihhiihh4si‘

https://docs.python.org/release/2.6.6/library/struct.html?highlight=pack#struct.pack

‘‘‘

class normalWave():

headerIde = ‘4si4s4sihhiihh4si‘

wavename  = ""

waveobj   = ""

wavelen   = 0

def __init__(self, wavename):

self.wavename = wavename

self.waveobj = open(self.wavename,"rb")

def getheaderinfo(self):

self.waveobj.seek(0)

sequ = list(unpack(self.headerIde, self.waveobj.read(44)))

self.wavelen = round(sequ[-1] * 1.0 / sequ[-6] / 2.0, 8)

return sequ

def getchildwave(self, headerdata, name, cutstime, cutetime, expandTime):

expandTime = expandTime / 1000.0

if cutstime > 0:

cutstime = cutstime - expandTime if cutstime - expandTime >= 0 else cutstime

if cutetime <= 0 or cutetime <= cutstime:

return

else:

cutetime = cutetime + expandTime if cutetime + expandTime <= self.wavelen else cutetime

dataLen = (int)(round((cutetime - cutstime) * 8000 * 2, 8))

sBytes = (int)(round(cutstime * 8000 * 2, 8)) + 44

if sBytes % 2 != 0:

sBytes += 1

if dataLen % 2 != 0:

dataLen -= 1

#print cutstime,cutetime, self.wavelen, sBytes - 44,sBytes, dataLen

if dataLen <= 0: return

headerdata[1] = dataLen + 36

headerdata[-1] = dataLen

child = open(name,"w")

child.write(pack(self.headerIde, *headerdata))

self.waveobj.seek(sBytes)

child.write(self.waveobj.read(dataLen))

child.close()

def close(self):

self.waveobj.close()

def cutwavbyInfo(wavename, cutinfolist, expandTime, dir):

for line in cutinfolist:

childname = ""

stime     = 0.0

etime     = 0.0

childArr = line.strip().split("\t")

if len(childArr) < 2:continue

childname = dir + "/" + childArr[0]

timeArr = childArr[1].replace("[","").replace("]","").split(",")

if len(timeArr) < 2:continue

stime = string.atof(timeArr[0])

etime = string.atof(timeArr[1])

wave = normalWave(wavename)

header = wave.getheaderinfo()

wave.getchildwave(header, childname, stime, etime, expandTime)

wave.close()

def readCutInfoFile(file, dir, expandTime):

os.system("rm -rf " + dir + "; mkdir " + dir)

fileObj = open(file,"r")

index = 0

wavpath = ""

childlist = []

for line in fileObj:

line = line.strip()

if line == ".":

cutwavbyInfo(wavpath, childlist, expandTime, dir)

index = 0

wavpath = ""

childlist = []

else:

index += 1

if index == 1:

wavpath = line

else:

childlist.append(line)

if len(wavpath) > 0 and len(childlist) > 0:

cutwavbyInfo(wavpath, childlist, expandTime, dir)

if __name__ == ‘__main__‘:

if len(sys.argv) != 4:

print "Usage cutInfoFile[in] cutWavDir[in] expandTime[in]"

print " cutInfoFile: x_1.wav\t[0,2.23]"

print " expandTime : 50/100/200(ms)"

sys.exit(-1)

readCutInfoFile(sys.argv[1],sys.argv[2],string.atoi(sys.argv[3]))

时间: 2024-10-13 07:35:54

python分割8KHz16Bit44Header的Wave文件的相关文章

【转】Python处理wave文件

#本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在繁忙的生活中,我们经常会听些歌来放松一下自己,我们经常会从各种播放软件中听自己喜欢的歌,并且往往我们会下载一部分歌曲,而现在音频的种类也相当繁多,像是Wav,Mp3,FLAC,AAC等等很多格式,最近由于需要做一个能够分析Wav格式音频的波形来取得一些数据比如获取人录音时是否说完等等用途.本周先对解析Wav并

python分割sql文件

之前用joomla帮一学校做了个网站,然后要部署到他们到服务器上,他们只提供了sftp和phpmyadmin的账号,上传网站文件倒是挺顺利的,但后来用phpmyadmin导入mysql数据就遇到问题了:由于他们设置的phpmyadmin最大只能导入2M的sql文件,如果太大会导致无法导入成功,但是我的sql文件有17M呀--------- 没得办法,只能分割sql文件了,初学python,于是就当练习,用python写了个分割sql文件的脚本: #由于导出的sql文件总共95张表,每张表前都有这

Selenium+Python参数化:读取TXT文件

概述 从Selenium模块化一文中,可以看出参数化的必要性,本文来介绍下读取外部txt文件的方法. 如何打开文件 打开文件有以下两个函数可以应用: 1.open(file_name,access_mode) file_name: 文件路径及名称: access_mode :访问方式,具体参数如下,,未提供参数,则默认为r: r:表示读取: w:表示写入: a:表示添加: +: 表示读写: b:表示2进制访问; 2.file函数 file()内建函数它的功能等于open(),如下根据文档说明可知

python写一个脚本解析文件

Python写一个脚本解析文件 ----基于Red Hat Enterprise Linux Server release 6.4 (Santiago):python 2.6.6 需求: 1.去掉空行 2.去掉空行后输出到一个新文件 附加需求(排版):1.'-'缩进n个字符 '-'缩进2n个字符 以此类推 2.'-'开头的所有句子输出在一行 '-'开头的句子输出在一行 以此类推 --------------------------------------------分隔线------------

python 按每行读取文件怎么去掉换行符

python按每行读取文件后,会在每行末尾带上换行符,这样非常不方便后续业务处理逻辑,需要去掉每行的换行符,怎么去掉呢?看下面的案例: >>> a = "hello world\n" >>> print a #可以看到hello world下面空了一格 hello world >>> a.split() #通过split方法将字符转换成列表 ['hello', 'world'] #从列表中取第一个字符 >>> a.

Python中基本的读文件和简单数据处理

Python中基本的读文件和简单数据处理 暂无评论 DataQuest上面的免费课程(本文是Python基础课程部分),里面有些很基础的东西(csv文件读,字符串预处理等),发在这里做记录.涉及下面六个案例: Find the lowest crime rate(读取csv文件,字符串切分,for循环和if判断过滤数据) Discover weather pattern in LA(for循环和if判断进行频数统计) Building a Spell Checker(词频统计,字符串预处理,字典

src/MD2.c:31:20: 错误:Python.h:没有那个文件或目录

一.前言 在CentOS 上安装fabric时出现问题,首先已安装pip, 用pip执行以下命令pip install 出现以下问题 [plain] view plain copy [[email protected] /]$ sudo pip install fabric Requirement already satisfied (use --upgrade to upgrade): fabric in /usr/lib/python2.6/site-packages/Fabric-1.3.

使用pyinstaller把Python程序转化为exe文件

在实际应用中,有时候我们需要把python程序转化为exe文件,以方便使用 首先,使用pip直接安装pyinstaller,几乎一键安装,非常方便. 安装好以后,cd 定位到安装路径下,pyinsytanller -v即可查看pyinstaller的版本,如果不希望每次把需要转化的文件拷贝到安装路径或者输入一大串的路径,最好是只环境变量吧. 下面是一些简单的使用. --onefile         制作独立的可执行程序 --onedir         制作出的档案存放在同一个文件夹下(默认值

解决 Python.h:没有那个文件或目录 错误的方法

http://www.cnblogs.com/yuxc/archive/2012/05/13/2498019.html ———————————————————————————————————————————————————————— 今天在实验室的ubuntu机子上安装Eventlet,在安装依赖包greenlet时出现错误,出现编译错误. 错误如下: In file included from greenlet.c:5:0: greenlet.h:8:20: 致命错误: Python.h:没有