我遇到了一个问题,需要将一个2D的numpy数组写成一个波形文件(音频)。
根据文档,我应该写入一个2D的int16 numpy数组。
我得到以下输出:
根据文档,我应该写入一个2D的int16 numpy数组。
https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.io.wavfile.write.html
16-bit PCM -32768 +32767 int16
我的numpy数组取值范围为(-1, 1),格式为float32,因此首先将其转换为16位整数
stereoAudio = ((stereoAudio * bits16max)).astype('int16')
print "argmax : " + str(np.amax(stereoAudio))
print "argmin : " + str(np.amin(stereoAudio))
outWaveFileName = "out/file.wav"
print "writing " + outWaveFileName
wavfile.write(outWaveFileName,44100,stereoAudio)
我得到以下输出:
argmax : 4389
argmin : -4381
writing out/file.wav
Traceback (most recent call last):
File "/Users/me/file.py", line 132, in <module>
wavfile.write(outWaveFileName,44100,stereoAudio)
File "//anaconda/lib/python2.7/site-packages/scipy/io/wavfile.py", line 353, in write
bytes_per_second, block_align, bit_depth)
error: ushort format requires 0 <= number <= USHRT_MAX
由于我的值在16位格式下介于-4391和4389之间,所以应该没问题。但我的数据看起来被解释为ushort。