2

javaでjack-audioを使用する方法を見つけようとしています。jnajack に基づいてラッパーを作成し、ジャックのポートから Java アプリにオーディオを取得することができました (元の jnajack は jack 1.9.8 では機能しません) が、データを操作する方法が見つかりません。さらにデータを操作List<FloatBuffer>するには、 に変換する必要がありbyte[]ます。

簡単に言えば...最初にデータをファイルに保存したいのですが、私が理解しているJavaサウンドAPIはTargetDataLineおよび/またはbyte[]. FloatBufferに変換するにはどうすればよいbyte[]ですか? 私が見つけることができる唯一の方法はfloatbuffer.get(float[])、どういうわけか(方法がわからない)に変換するfloat[]ことbyte[]です。

4

2 に答える 2

7

FloatBufferに変換するにはどうすればよいbyte[]ですか?

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 を掛けて 2 つの間で変換する必要があります。

これを行うためのきちんとした方法はbyte converted = Float.valueOf(original * 128).byteValue(). 必要に応じて、プリミティブのみでこれを行うことがおそらく可能であり、より高速になるはずです。

于 2011-09-04T12:13:43.377 に答える