如何将byte []转换为float []并返回Java?

时间:2013-10-19 12:52:04

标签: java android audio byte audiotrack

我正在通过InputStream从.wav文件中读取数据,而read()返回字节。我使用的声音处理库只接受float []进行处理。它完成后它给了我一个浮动[]。现在我需要再次以字节格式写入Android的AudioTrack。

如何将这些bytes转换为floats[],然后又转回byte[]?我搜索了一下,但一切似乎都有点与我的不同,所有的问题似乎都以不同的方式解决了......所以我现在有点迷失了。

如果在某种类型的库中已经提供了类似转换的内容,我也很高兴听到这个消息!

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用java.nio.ByteBuffer。它有很多有用的方法可以从字节数组中提取不同的类型,并且还应该处理大部分问题。

        byte[] data = new byte[36];
        ByteBuffer buffer = ByteBuffer.wrap(data);          
        float second = buffer.getFloat(); //This helps to 
        float x = 0;
        buffer.putFloat(x);

答案 1 :(得分:0)

你只需要复制这些位。 尝试使用BlockCopy。

 float[] fArray = new float[] { 1.0f, ..... };
 byte[] bArray= new byte[fArray.Length*4];
 Buffer.BlockCopy(fArray,0,bArray,0,bArray.Length);

* 4是因为每个浮点数是4个字节。