Как выполнить побитовый оператор над байтовым массивом в C # - PullRequest
1 голос
/ 03 сентября 2010

Я использую C # и Microsoft.Xna.Framework.Audio;

Мне удалось записать звук в массив byte[], и я могу его воспроизвести.

Звук поступаеткак 8 bit беззнаковые данные, и я хотел бы преобразовать их в 16 bit монозвуковое аудио, чтобы я мог читать частоту, а что нет.

Я прочитал несколько мест, которые для выборки звука вы выполняете Bitwise Operator Or и shift the bits 8 places.

Я выполнил код следующим образом:

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

В результате я получил много отрицательных данных.

Из моегопонимание того, что это в основном должно быть положительным и будет представлять собой длину волны данных.

Любые предложения или помощь, очень ценная,

Приветствия.

MonkeyGuy.

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

Это объединяет два 8-разрядных целых числа без знака в одно 16-разрядное целое число со знаком:

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

Я думаю, что вам может понадобиться просто масштабировать каждое 8-разрядное целое число без знака до 16-разрядного целого числа со знаком:

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

alt text

0 голосов
/ 03 сентября 2010

Вы пытались преобразовать байт в короткий перед сдвигом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...