Search code examples
c#xna

How to perform a Bitwise Operator on a byte array in C#


I am using C# and Microsoft.Xna.Framework.Audio;

I have managed to record some audio into a byte[] array and I am able to play it back.

The audio comes in as 8 bit unsigned data, and I would like to convert it into 16 bit mono signed audio so I can read the frequency what not.

I have read a few places that for sound sampling you perform a Bitwise Operator Or and shift the bits 8 places.

I have performed the code as follows;

soundArray[i] = (short)(buffer[i] | (buffer[i + 1] << 8));

What I end up with is a lot of negative data.

From my understanding it would mostly need to be in the positive and would represent a wave length of data.

Any suggestions or help greatly appreciated,

Cheers.

MonkeyGuy.


Solution

  • This combines two 8-bit unsigned integers into one 16-bit signed integer:

    soundArray[i] = (short)(buffer[i] | (buffer[i + 1] << 8));
    

    I think what you might want is to simply scale each 8-bit unsigned integer to a 16-bit signed integer:

    soundArray[i] = (short)((buffer[i] - 128) << 8);
    

    alt text