谢谢阅读。我正在使用 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"
有人可以对此有所了解吗?