从floatbuffer转换为byte []

时间:2011-09-04 11:48:10

标签: java floatbuffer

我正试图在java中找到一种使用jack-audio的方法。我已经设法创建基于jnajack的包装器来获取从jacks的端口到java应用程序的音频(原始的jnajack不能与jack 1.9.8一起使用),但是我找不到操作数据的方法。我开始使用List<FloatBuffer>,为了进一步处理数据,我需要将其转换为byte[]

简单来说......首先我要将数据保存到文件中,但据我所知,java sound api只能保存来自TargetDataLine和/或byte[]的数据。如何将FloatBuffer转换为byte[]?我能找到的唯一方法是floatbuffer.get(float[])以某种方式(不知道如何)将float[]转换为byte[]

2 个答案:

答案 0 :(得分:5)

  

如何将FloatBuffer转换为byte[]

FloatBuffer floatbuffer;

ByteBuffer byteBuffer = ByteBuffer.allocate(floatbuffer.capacity() * 4);
byteBuffer.asFloatBuffer().put(floatbuffer);
byte[] bytearray = byteBuffer.array();

您可能需要更改byte order

答案 1 :(得分:1)

因此,jnajack使用与标准java声音api函数不同的音频数据表示。

我没有在jnajack的规格中看到它,但我想它代表音频在-1和1之间浮动。

我不太熟悉Java Sound API,但我可以想象它使用的字节介于-128到127之间。

换句话说,你必须通过乘以128来在两者之间进行转换。

我会说这样做的好方法是byte converted = Float.valueOf(original * 128).byteValue()。如果需要的话,可能只使用原语来做到这一点,原语应该更快。