将Float32格式的数据提取到int32

时间:2014-03-18 09:41:57

标签: python audio floating-point integer wav

如何将float32格式(区间为[-1, +1])的数据提取到int32中的[-2^31, 2^31-1]

这是我想做的事情(但更有效率,即如果可能的话,没有乘法/转换):

f = struct.unpack('f', data)   # data is in IEEE float32 format
f *= 2**31
out = int(myfloat)

示例:

这是浮动0.000000000:00 00 00 00

这是浮动1.000000000:00 00 80 3F

这是浮点-0.000000000:00 00 00 80

这是浮点数-1.000000000:00 00 80 BF

为什么这些数字用于编码1.000000?


注意:这对于音频应用非常有用,其中.wav 32位IEEE float必须与常规的32位整数.wav文件一起使用。

PS:我最近问了一个关于float numpy array的问题 - > int numpy数组转换在这里: From IEEE32 float to 32bit integer numpy array (example : audio .wav files),但现在我意识到这个问题不是特定于numpy,因此这里有一个更普遍的问题。

1 个答案:

答案 0 :(得分:1)

您可以将带有浮点数的列表添加到数组中,然后定义dtype,在本例中为“int32”。另请注意,在Numpy中,float的dtype是'float64'。

from numpy  import *


float_data_list = [1.2, 3.5, 5.1]



matrice = array(float_data_list, dtype ='int32' ) # define dtype
print matrice

output: [1 3 5]