1
我正在编写一个程序来注释.wav文件,所以我需要播放它们并了解它们的持续时间。我可以使用winsound
模块播放(使用SND_ASYNC
),但我不能使用wave
模块读取文件,因为我不支持使用的文件的压缩。如何获取波形模块在python中不支持的.WAV文件的持续时间?
我应该使用另一个模块来获取.WAV文件的持续时间,还是应该使用一个模块来播放和获取有关文件的信息?我应该使用哪些模块?
我正在编写一个程序来注释.wav文件,所以我需要播放它们并了解它们的持续时间。我可以使用winsound
模块播放(使用SND_ASYNC
),但我不能使用wave
模块读取文件,因为我不支持使用的文件的压缩。如何获取波形模块在python中不支持的.WAV文件的持续时间?
我应该使用另一个模块来获取.WAV文件的持续时间,还是应该使用一个模块来播放和获取有关文件的信息?我应该使用哪些模块?
看着评论,这有效(我为自己的可读性做了一些改变)。谢谢@Aya!
import os
path="c:\\windows\\system32\\loopymusic.wav"
f=open(path,"rb")
# read the ByteRate field from file (see the Microsoft RIFF WAVE file format)
# https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
# ByteRate is located at the first 28th byte
f.seek(28)
a = f.read(4)
# convert string a into integer/longint value
# a is little endian, so proper conversion is required
byteRate = 0
for i in range(4):
byteRate += a[i] * pow(256, i)
# get the file size in bytes
fileSize = os.path.getsize(path)
# the duration of the data, in milliseconds, is given by
ms = ((fileSize - 44) * 1000))/byteRate
print "File duration in miliseconds : " % ms
print "File duration in H,M,S,mS : " % ms/(3600 * 1000) % "," % ms/(60 * 1000) % "," % ms/1000 % "," ms % 1000
print "Actual sound data (in bytes) : " % fileSize - 44
f.close()
先解压,先让它支持Python吗? – Raptor
我不知道该怎么做。我们在这里谈论5000个文件。 – Lewistrick
[this](http://stackoverflow.com/a/7842081/172176)是否有效? – Aya