从floatbuffer转换为byte

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

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

如何将FloatBuffer转换为byte[]

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

您可能必须更改字节顺序 。

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

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

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

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

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

Interesting Posts