user717572
user717572

Reputation: 3652

How to convert byte[] to float[] and back in Java?

I'm reading data from .wav files through InputStream, and read() returns bytes. A sound processing library I use, only accepts float[] to process. After it it done it gives me a float[] back. Now I need to write to the Android's AudioTrack in byte format again.

How do I convert these bytes to floats[], and back to byte[]? I've searched a bit, but everything seemed to be kinda a different situation to mine, and all problems seemed to be solved in different ways... so i'm kinda lost right now.

If something like this conversion is already offered in some kind of library, i'd be glad to hear about that too!

Thanks!

Upvotes: 3

Views: 3473

Answers (2)

Deepak Bhatia
Deepak Bhatia

Reputation: 6276

You can use of java.nio.ByteBuffer. It has a lot of useful methods for pulling different types out of a byte array and should also handle most of your issues.

        byte[] data = new byte[36];
        ByteBuffer buffer = ByteBuffer.wrap(data);          
        float second = buffer.getFloat(); //This helps to 
        float x = 0;
        buffer.putFloat(x);

Upvotes: 1

Lior Ohana
Lior Ohana

Reputation: 3527

You just need to copy the bits. Try using BlockCopy.

 float[] fArray = new float[] { 1.0f, ..... };
 byte[] bArray= new byte[fArray.Length*4];
 Buffer.BlockCopy(fArray,0,bArray,0,bArray.Length);

The *4 is since each float is 4 bytes.

Upvotes: 0

Related Questions