Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what is actually stored after converting audio to byte array in java?

Tags:

java

audio

Actually i am implementing audio steganography using the LSB replacement algorithm. I am converting the audio to byte array using the following code:

    File src = new File("C:\\test.wav");
    AudioInputStream ais = AudioSystem.getAudioInputStream(src);
    byte[] data = new byte[ais.available()];
    int n = ais.read(data);

Now the thing is that this audio file is a 16bit sample length, dual channel and LittleEndian; i checked this using the "isBigEndian()" function. Thus, i want to know how are the samples stored in the byte array so that i know which bits to replace.

like image 215
Manas Sharma Avatar asked Nov 04 '22 02:11

Manas Sharma


1 Answers

How are you converting audio to a byte array?

What is actually stored is an array of samples. If you have a clean single tone of a certain frequency you would get an array that follows a sine curve. Here is an example of what you will see for a perfect sine wave:

127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,186,189,192,194,197,200,202,205,207,209,212,214,216,218,221,223,225,227,229,230,232,234,235,237,239,240,241,243,244,245,246,247,248,249,250,250,251,252,252,253,253,253,253,253,254,253,253,253,253,253,252,252,251,250,250,249,248,247,246,245,244,243,241,240,239,237,235,234,232,230,229,227,225,223,221,218,216,214,212,209,207,205,202,200,197,194,192,189,186,184,181,178,175,172,169,166,163,160,157,154,151,148,145,142,139,136,133,130,127,123,120,117,114,111,108,105,102,99,96,93,90,87,84,81,78,75,72,69,67,64,61,59,56,53,51,48,46,44,41,39,37,35,32,30,28,26,24,23,21,19,18,16,14,13,12,10,9,8,7,6,5,4,3,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,2,3,3,4,5,6,7,8,9,10,12,13,14,16,18,19,21,23,24,26,28,30,32,35,37,39,41,44,46,48,51,53,56,59,61,64,67,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123

If you have a 16-bit stream you should use a short[] to store it so you don't need to worry about big/little endian. If you choose to use a byte[] it will be twice the size as the number of audio samples and two consecutive bytes would need to be combined to represent one sample.

like image 92
user624056 Avatar answered Nov 08 '22 09:11

user624056