Python np数组转换为列表和返回是不一样的



我用python-sounddevice模块做了一个录音机,但记录是NumPy数组,所以我把它们转换成列表,然后再转换回来,但它不起作用:

import sounddevice as sd, numpy as np, scipy.io.wavfile as wavf
fs = 48000
sd.default.samplerate = fs
sd.default.channels = 2
r = sd.rec(2*fs)
sd.wait()
wavf.write("C:\...\r.wav", fs, r) # works
wavf.write("C:\...\r2.wav", fs, np.array(r.tolist())) # doesn't work

默认情况下,numpy.array创建一个64位浮点数组(numpy.float64(,但WAVE文件格式不是为32位浮点设计的。

你可以使用类似的东西:

np.array(r.tolist(), dtype=np.float32)

WAVE文件最初是在1991年的《多媒体多媒体编程接口和数据规范1.0》(Multimedia Multimedia Programming Interface and Data Specification 1.0(中,只支持少数几种数据格式,其中被广泛使用的是Microsoft脉冲编码调制(PCM(16位定点编码。数据点用整数表示。

1994年,随着新的多媒体数据类型和数据技术的出现,许多新的格式被引入,但仍然没有浮点编解码器被正式注册。几年后的1998年,RFC 2361已经列出了波形格式0x0003(IEEE:foat(,尽管没有实现细节。

目前,大多数音频播放器支持32位浮点采样编码,但很少支持64位浮点采样。诸如ffmpeg之类的编码器或诸如MPlayer之类的播放器支持64位PCM编码,并且应该能够在不进行任何修改的情况下转换和播放r2.wav

相关内容

  • 没有找到相关文章

最新更新