我试图使用webrtcvad来检测wav文件中的语音,为此我必须在32 pcm提供30 at的16位pcm。我想要做的是将我的wav切割成30 is的数据包,但是以这个文件为例(https://dl.dropboxusercontent.com/u/91396766/recording000001.wav):
audio software :
5,568 seconds, 16 bit, mono, 320000Hz-
https://docs.python.org/3/library/wave.html
w.getnframes() = 178176
w.getframerate() = 32000
w.getnchannels() = 1 = mono
w.getsampwidth() = 2 byte = 16 bits
len(w.readframes(w.getnframes())) = 356352, shouldn't it be 178176?
len(w.readframes(0)) = 1为什么len(w.readframes(w.getnframes()= 356352,应该是178176,因为
1/32000 = 0.00003125秒和0.00003125*175176 = 5.568秒
谢谢
编辑
测试脚本:
import wave
infile = 'recording000001.wav'
w = wave.open(infile, 'rb')
data = w.readframes(w.getnframes())
frequency = w.getframerate()
number_of_channels = w.getnchannels()
sample_width_in_bytes = w.getsampwidth()
print "{} is sampled at {}Hz, it has {} channel(s) and a sample width of {} bytes".format(infile, frequency, number_of_channels, sample_width_in_bytes)
print "it contains {} data".format(len(data))
print "for {} frames".format(w.getnframes())
print "one data length is {}".format(len(data[0]))
w.close()产出:
recording000001.wav is sampled at 32000Hz, it has 1 channel(s) and a sample width of 2 bytes
it contains 356352 data
for 178176 frames
one data length is 1发布于 2017-08-26 07:47:17
之后
w.rewind()
我试过了
len(w.readframes(0)) 0
这与你得到1的结果不同。
有趣的是,
len(w.readframes(1)) 2
但这是有意义的,以一种复杂的方式,因为确实有两个字节。(16位音频帧意味着每帧有2个字节。由于您正在对二进制对象调用len,因此我认为它返回实际字节数是有意义的。)
如果您想要处理您的音频数据,也许您应该研究像numpy这样的库来进一步分析或处理您的音频。
将numpy导入为np C= np.frombuffer(w.readframes(w.getnframes()),dtype="int16") c.shape (178175,) C= 100 c1 =122个 c100 = -132
这是原始波形数据。它位于(-2^15,2^15)或-32768到32,768的范围内。由于音频文件的第一部分在开始时是安静的,所以头几百帧中的小值是很有意义的。
https://stackoverflow.com/questions/45893013
复制相似问题