将numpy int16音频数组转换为float32

时间:2017-03-02 00:19:16

标签: python numpy audio

我有原始的二进制int16数据,我正在使用

转换为numpy数组

audio = np.fromstring(raw_data, dtype=np.int16)

数据是音频数据。当我将数据转换为float32时,音频会变形:

audio = audio.astype(np.float32, order='C')

我正在将音频保存到磁盘以使用SoundFile监听它:

soundfile.write('out.wav', audio, sample_rate)

如果我将音频直接写入磁盘而不用进行astype操作,则没有失真(即);

# no distortion
audio = np.fromstring(raw_data, dtype=np.int16)
soundfile.write('out.wav', audio, sample_rate)

# distortion
audio = np.fromstring(raw_data, dtype=np.int16)
audio = audio.astype(np.float32, order='C')
soundfile.write('out.wav', audio, sample_rate)

在这里转换数据类型的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

按照惯例,浮点音频数据被归一化到[-1.0,1.0]的范围,你可以通过缩放来做到这一点:

audio = audio.astype(np.float32, order='C') / 32768.0

这可能会解决您的问题,但您需要确保soundfile.write写入指示float32的wav标头。它可以根据数组的dtype自动执行。