首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从floatbuffer转换为byte[]

从floatbuffer转换为byte[]
EN

Stack Overflow用户
提问于 2011-09-04 19:48:10
回答 2查看 3.8K关注 0票数 2

我正在寻找一种在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[]

EN

回答 2

Stack Overflow用户

发布于 2011-09-04 22:58:04

如何将FloatBuffer转换为byte[]

代码语言:javascript
复制
FloatBuffer floatbuffer;

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

您可能需要更改byte order

票数 6
EN

Stack Overflow用户

发布于 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()。如果需要,可以只使用原语来实现,这应该会更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7298997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档