我用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发布于 2020-12-13 01:00:39
默认情况下,numpy.array会创建64位浮点数(numpy.float64)数组,但是WAVE文件格式不是为32位浮点数设计的。
你可以使用类似这样的东西:
np.array(r.tolist(), dtype=np.float32)最初在Multimedia Multimedia Programming Interface and Data Specifications 1.0 (1991)中,WAVE文件只支持少数几种数据格式,其中被广泛使用的是Microsoft Pulse Code Modulation (PCM16位定点编码)。数据点被表示为整数。
1994年,随着新的多媒体数据类型和数据技术的出现,许多新的格式被引入,但仍然没有正式注册的浮点编解码器。几年后,在1998年,RFC 2361已经列出了波形格式0x0003 (IEEE:float),但没有提供实现细节。
目前大多数音频播放器支持32位浮点采样编码,但很少支持64位浮点采样。ffmpeg等编码器或MPlayer等播放器支持64位PCM编码,无需任何修改即可转换并播放您的r2.wav。
https://stackoverflow.com/questions/65264662
复制相似问题