我正试图在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[]
。
答案 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()
。如果需要的话,可能只使用原语来做到这一点,原语应该更快。