将 WAV 格式从 32 位浮点数更改为 16 位 PCM

Jay*_*Heo 3 python audio signals numpy scipy

我正在尝试将我的 32 位浮点采样 WAVE 文件转换为 16 位整数 WAVE 文件。

我想从范围从 -1.414 到 1.414 的超声波正弦波生成 16 位整数 WAV 文件。在SciPy.io.wavfile 中,输出格式根据我生成的类型数组固定。但是我通过将 '32767' 与强制转换相乘以获取整数格式值,将我的 32 位浮点格式数组更改为 16 位,但结果频率根本不相似。

有什么方法可以使用 SciPy 库将我的 32 位浮点数更改为 16 位 PCM?

mic*_*rer 6

不确定是否SciPy用于此,但您可以轻松地将数据转换为 16 位整数,然后使用您喜欢的任何音频包将其写入wav文件。

将您的数据除以 1.414,使其在 [-1, 1] 范围内,然后将其乘以 32767,使其在 int16 变量的范围内。然后使用numpy.astype(). 解决方案如下所示:

import numpy as np

float32_data /=1.414
float32_data *= 32767
int16_data = float32_data.astype(np.int16)
Run Code Online (Sandbox Code Playgroud)