我有原始的二进制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)
在这里转换数据类型的正确方法是什么?
答案 0 :(得分:4)
按照惯例,浮点音频数据被归一化到[-1.0,1.0]的范围,你可以通过缩放来做到这一点:
audio = audio.astype(np.float32, order='C') / 32768.0
这可能会解决您的问题,但您需要确保soundfile.write
写入指示float32的wav标头。它可以根据数组的dtype自动执行。