从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()
。 如果需要,可能只使用原语来实现这一点,原语应该更快。