Как трактовать байт [] как Int16 []? - PullRequest
0 голосов
/ 23 декабря 2010

Я получаю некоторые необработанные данные с аудиовхода через System.Runtime.InteropServices.Marshal.Copy(), и они сохраняются в байте []. Фактические данные в этом байте [], я знаю, имеют тип Int16. Я хотел бы обработать этот byte [] так, как если бы он был массивом типа Int16 и зацикливался на его элементах, обрабатывал его, и в конце этого я хотел бы передать этот измененный массив как byte [] в другую функцию.

Для тех, кому интересно, что я пытаюсь сделать: я хотел бы попробовать добавить эффект эха к входящему звуку (с микрофона), просто сложив волновые данные из предыдущего буфера с волновыми данными из текущего буфера , смешивая его в меньшем объеме.

РЕДАКТИРОВАТЬ: массив байтов [] может хранить число int16 258 как пару байтов [1] [2]

0000 0001 0000 0010

Ответы [ 2 ]

4 голосов
/ 23 декабря 2010

Насколько я знаю, вы не можете.

Я предлагаю вам использовать Buffer.BlockCopy, чтобы скопировать данные в short[], поработать с ними, а затем скопировать обратно.Конечно, это предполагает, что байты упорядочены в соответствующем порядке байтов ... но вполне вероятно, что они будут иметь такой вид.* для копирования данных в начало.

1 голос
/ 23 декабря 2010

Вы можете использовать BitConverter для обработки байтов как элементов Int16, используя BitConverter.ToInt16.Вы также можете использовать Buffer.BlockCopy для копирования массива байтов в массив Int16.Первый - более эффективный с точки зрения памяти, а второй - с более высокой скоростью.

...