Reputation: 3652
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
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
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