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)
使用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()已更改。现在文件名位于第一位,数据数组是第二个参数。我在上面的例子中改变了这一点。