2

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

简而言之...首先我想将数据保存到文件中,但据我所知,java sound api 只能保存来自TargetDataLineand/or的数据byte[]。我怎样才能转换FloatBufferbyte[]?我能找到的唯一方法是以floatbuffer.get(float[])某种方式(不知道如何)转换float[]byte[].

4

2 回答 2

7

我怎样才能转换FloatBufferbyte[]

FloatBuffer floatbuffer;

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

您可能必须更改字节顺序

于 2011-09-04T14:58:03.930 回答
1

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

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

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

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

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

于 2011-09-04T12:13:43.377 回答