如何使用scipy或常见替代方法读取和写入24位WAV文件?

pap*_*bla 5 python audio numpy wav scipy

通常,wav文件是或需要为24位,但我看不到使用scipy模块写入或读取24位wav文件的方法。wavfile.write()的文档指出,wav文件的分辨率由数据类型确定。那一定意味着不支持24位,因为我不知道24位整数数据类型。如果有必要使用替代方法,那就很常见了,这样文件就可以轻松交换,而无需其他人来安装附加模块。

import numpy as np
import scipy.io.wavfile as wavfile

fs=48000
t=1
nc=2
nbits=24
x = np.random.rand(t*fs,nc) * 2 - 1
wavfile.write('white.wav', fs, (x*(2**(nbits-1)-1)).astype(np.int32))
Run Code Online (Sandbox Code Playgroud)

Mat*_*ias 5

使用PySoundFile这非常容易:

import soundfile as sf

x = ...
fs = ...

sf.write('white.wav', x, fs, subtype='PCM_24')
Run Code Online (Sandbox Code Playgroud)

从浮点到 PCM 的转换是自动完成的。

另请参阅我的另一个答案


更新:

在 PySoundFile 版本 0.8.0 中,参数顺序sf.write()已更改。现在文件名位于第一位,数据数组是第二个参数。我在上面的例子中改变了这一点。