Python 从WAV文件捕获dB级别

Python 从WAV文件捕获dB级别,python,audio,wav,decibel,Python,Audio,Wav,Decibel,linux2上的Python 2.7.3(默认,2013年9月26日,16:35:25)[GCC 4.7.2] Linux Mint 14 使用Python,我读取wav并将数据放入文本文件。整个脚本如下。这是我的第一个Python脚本 micsec的值可以是000000到999999之间的任何值。我经常用lstrip('0')剥离前导零 如果值为000000,则以null结束。我正在使用额外的步骤将null更改为0 一步到位的最佳方法是什么 谢谢你的意见 !/usr/bin/python i

linux2上的Python 2.7.3(默认,2013年9月26日,16:35:25)[GCC 4.7.2] Linux Mint 14

使用Python,我读取wav并将数据放入文本文件。整个脚本如下。这是我的第一个Python脚本

micsec的值可以是000000到999999之间的任何值。我经常用
lstrip('0')
剥离前导零

如果值为000000,则以null结束。我正在使用额外的步骤将null更改为0

一步到位的最佳方法是什么

谢谢你的意见

!/usr/bin/python

import contextlib, datetime, math, os, time, wave, glob
from scipy.io.wavfile import read
from numpy import log10, sqrt, mean
import numpy as np

path = "/the/path/*.wav"
for fname in glob.glob(path):

print "process_wav is processing - " + fname

outfname = fname + ".txt"
mtime = datetime.datetime.fromtimestamp(os.path.getmtime(fname))
tm=0.000000

with contextlib.closing(wave.open(fname,'r')) as f:
channels = f.getnchannels()
sampwidth = f.getsampwidth()
comptype = f.getcomptype()
frames = f.getnframes()
rate = f.getframerate()
wav_duration = frames / float(rate)
frame_duration = round((wav_duration / frames),6)

samprate, wavdata = read(fname)
chunks = np.array_split(wavdata, frames)

hdr = (
"# audio file processed - " + fname +
"\n# this file name - " + outfname +    
"\n# audio file mod time-" + str(mtime) +
"\n# channels - " + str(channels) +
"\n# sampwidth - " + str(sampwidth) +
"\n# comptype - " + str(comptype) +
"\n# frames - " + str(frames) +
"\n# rate - " + str(rate) +
"\n# wav_duration - " + str(wav_duration) +
"\n# frame_dutation - " + "{0:0.6f}".format(frame_duration) +
"\n# chunk|wave_file_name|audio_file_timestamp|chunk_second|chunk_microsecond|chunk_time_in_audio|frame_duration|dB\r\n"
)

out = open(outfname,'w')
out.write(hdr)

for i,chunk in enumerate(chunks):
try:
sec = int("{0:0.6f}".format(round(float(tm),6)).split('.')[0])
micsec = "{0:0.6f}".format(round(float(tm),6)).split('.')[1].lstrip('0')
#handle 000000 - there has to be a better way
micsec = int(float(micsec)) if len(micsec)>=1 else 0
cm = mtime + datetime.timedelta(seconds=sec,microseconds=micsec)
out.write("{}|{}|{}|{}|{}|{}|{}|{}\n".format(i, fname, mtime, sec, micsec, cm, frame_duration, 20*log10( sqrt(mean(chunk**2)))))
tm += frame_duration
except ValueError as ex:
print("value error" + str(ex))
out.write(str(i) + str(ex))
except Exception,e:
print("ERROR" + str(e))
out.write(str(i) + str(e))

out.close()

这是一个类似的问题,python提供了一个答案:最近离题是什么?Op确实“描述了问题以及迄今为止为解决问题所做的工作。”如果他省略了“建议”一词,而是请求“读取wav文件并从wav中提取/计算dB”的帮助,那么这个问题本来是很好的,但它是无法解决的?@DeVadder No.如果他省略了“谁能帮我开始。。。python、perl、java、ruby、bash都是选项”,并将其替换为“我正在尝试使用X读取WAV文件,这是我到目前为止遇到的问题,这是我看到的问题,也是我试图解决的问题”“那就太好了。就目前而言,它是无法挽救的。@todwith1d我建议您选择您最喜欢的语言,或者a)阅读它的文档,看看它是否是音频文件的API,或者b)阅读(它们很容易阅读),然后在遇到特定问题时回到这里。因此,它不是您不想阅读的文档的替代品。