python中的函数wavfile_python – scipy.io:无法编写wavfile

scipy.io.wavfile中的

write函数要求输入数组具有形状(num_samples,num_channels).我怀疑你的阵列有形状(num_channels,num_samples).然后,写入尝试将num_samples放入写入WAV文件的结构中的16位字段中,但num_samples的值对于16位值而言太大. (请注意,如果num_samples足够小,则不会出现错误,但文件格式不正确.)

快速解决方法是编写数组的转置:

wavfile.write(outWaveFileName, 44100, stereoAudio.T)

例如,以下是一些演示错误的代码; x和y有形状(2,40000):

In [12]: x = (2*np.random.rand(2, 40000) - 1).astype(np.float32)

In [13]: y = (x*32767).astype('int16')

In [14]: from scipy.io import wavfile

In [15]: wavfile.write('foo.wav', 44100, y)

---------------------------------------------------------------------------

error Traceback (most recent call last)

in ()

----> 1 wavfile.write('foo.wav', 44100, y)

/Users/warren/anaconda/lib/python2.7/site-packages/scipy/io/wavfile.pyc in write(filename, rate, data)

351

352 fmt_chunk_data = struct.pack('

--> 353 bytes_per_second, block_align, bit_depth)

354 if not (dkind == 'i' or dkind == 'u'):

355 # add cbSize field for non-PCM files

error: ushort format requires 0 <= number <= USHRT_MAX

转置数组,以便wavfile.write的输入具有预期的形状:

In [16]: wavfile.write('foo.wav', 44100, y.T)

回读数据以验证它是否按预期工作:

In [22]: fs, z = wavfile.read('foo.wav')

In [23]: np.allclose(z, y.T)

Out[23]: True

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值