dee*_*eef 2 python audio numpy
我有原始二进制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)
Run Code Online (Sandbox Code Playgroud)
在这里转换数据类型的正确方法是什么?
按照惯例,浮点音频数据被归一化为[-1.0,1.0]的范围,您可以通过缩放来实现:
audio = audio.astype(np.float32, order='C') / 32768.0
Run Code Online (Sandbox Code Playgroud)
这可能为您解决了该问题,但是您需要确保soundfile.write编写了一个指示float32的wav标头。它可以根据数组的dtype自动执行此操作。