我正在寻找一种在java中使用jack-audio的方法。我已经设法创建了基于jnajack的包装器,将音频从jacks的端口传输到java应用程序(最初的jnajack不支持jack 1.9.8),但我找不到一种处理数据的方法。我得到了一个List<FloatBuffer>,为了进一步的数据操作,我需要把它转换成byte[]。
简单来说..。首先,我想将数据保存到一个文件中,但据我所知,java sound只能保存来自TargetDataLine和/或byte[]的数据。如何将FloatBuffer转换为byte[]?我能找到的唯一方法是floatbuffer.get(float[]),然后以某种方式(不知道如何)将float[]转换为byte[]。
发布于 2011-09-04 22:58:04
如何将
FloatBuffer转换为byte[]?
FloatBuffer floatbuffer;
ByteBuffer byteBuffer = ByteBuffer.allocate(floatbuffer.capacity() * 4);
byteBuffer.asFloatBuffer().put(floatbuffer);
byte[] bytearray = byteBuffer.array();您可能需要更改byte order。
发布于 2011-09-04 20:13:43
因此,jnajack使用与标准java声音api函数不同的音频数据表示。
我在jnajack的规范中看不到它,但我想它代表的是在-1和1之间浮动的音频。
我不太熟悉Java Sound API,但我可以想象它使用的字节范围在-128到127之间。
换句话说,你必须通过乘以128在两者之间进行转换。
我想说做这件事的最好方法是byte converted = Float.valueOf(original * 128).byteValue()。如果需要,可以只使用原语来实现,这应该会更快。
https://stackoverflow.com/questions/7298997
复制相似问题