wav文件样本数据的问题在scipy中

时间:2013-07-15 20:47:24

标签: python numpy scipy wav

感谢阅读。我正在做一个带有numpy / scipy的Python音频操作的小项目。我会事先说我对真实细节中的音频内容不太熟悉。 (我接近这个的角度是神经网络。)

无论如何,我正在使用scipy.io.wavfile来读取和写入numpy数组中的wav文件。我的问题是音频帧的数据类型。我必须将数据规范化为-1到1之间的浮点数,这对于我的神经网络来说是个问题,而我最初遇到的一个问题就是从最终作为正确音频文件的所有内容中获取数据。我必须将所有样本转换为int16以获得具有正确长度的正确波形。

这很有意义,因为我的音频文件有16位的深度。

然而,现在,我正尝试在不同的音频文件上做同样的事情,24位深度,并以某种方式阅读后

stream = sp.read(audiofile, False)

生成的Stream的样本数字太多。我知道24位整数可存储的最大数量约为1600万。相反,我获得了数十亿的价值。我从该函数获得的数组是int32类型。 而且,我找不到将这些样本放回有效的wav文件的方法,这并不奇怪。我只是沉默,长度混乱而不是它是什么。

def convert_to_3D(sample, network, variance):
'''
Convert audio samples to virtual surround
'''
dtype = sample.dtype
sample = sample.astype(float)
# Normalize
sample = (sample/variance)
# Transform
resultStream = network.insert_input(sample)  
# Denormalize
resultStream = resultStream * variance
resultStream = np.rint(resultStream)
resultStream = resultStream.astype(dtype) #("int16")
return resultStream

def convert_file(filename, network):
stream = u.read(filename)    
variance = np.var(stream)
print "Varianz: ", variance
print "Converting..."
for i in range(len(stream)):
    stream[i] = convert_to_3D(stream[i], network, variance)
filename = filename.rsplit( ".", 1 )[0] + "_3D.wav" 
u.write(stream, filename )
print "File ", filename, " has been written"

有人可以对此有所了解吗?

0 个答案:

没有答案