简体   繁体   中英

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.

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);

替代文字

您是否尝试过在转换前将字节转换为short?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM