2010-12-23 7 views
0

System.Runtime.InteropServices.Marshal.Copy()을 통해 오디오 입력에서 일부 원시 데이터를 수신하고 있으며 바이트 []에 저장되어 있습니다. 해당 바이트 []의 실제 데이터는 Int16 유형임을 알고 있습니다. 이 바이트 []를 마치 Int16 유형의 배열로 처리하고 그 요소를 처리하고 싶습니다.이 끝에는이 변경된 배열을 다른 함수로 바이트 []로 전달하고 싶습니다.byte []를 Int16 []으로 처리하는 방법?

내가 무엇을하려고하는지 궁금한 분들 : 마이크에서 들어오는 사운드에 에코 효과를 추가하려고합니다. 이전 버퍼의 웨이브 데이터를 현재 웨이브 데이터와 간단히 합치 려합니다. 완충액, 더 낮은 부피에서 그것을 섞는다.

EDIT : 바이트 [] 배열 바이트의 쌍으로서 INT16 번호 (258)를 저장 할 수있다 [1] [2]

0000 0001 0000 0010 
+1

하나의 Int16에서 2 바이트를 모두 결합하려고한다고 생각합니까? – Jan

+0

글쎄, 그 바이트 []의 옆에 앉아있는 개별 바이트 쌍이 Int16을 형성한다는 것을 알고 있습니다. –

+0

맞습니다. [1, 1]의 결과가 [1, 1] 또는 [257]이 될지 여부는 분명하지 않습니다. –

답변

4

넌 수없는 멀리 내가 아는.

Buffer.BlockCopy을 사용하여 데이터를 short[]에 복사하고 작업 한 다음 다시 복사하는 것이 좋습니다. 물론, 바이트가 적절한 엔디안 방식으로 배열되어 있다고 가정합니다 ...하지만 가능성이 있습니다.

또는 overload of Marshal.Copy which accepts a short[]을 사용하여 데이터를 복사하십시오.

+0

에서 marshal.copy 과부하를 발견했습니다. (귀하의 제안을 시도하고 더 깊이 생각합니다. 직장에서 집에 돌아 가면 이걸 들여다 보아라.) –

1

BitConverter.ToInt16을 사용하여 BitConverter을 사용하여 바이트를 Int16 요소로 처리 할 수 ​​있습니다. Buffer.BlockCopy을 사용하여 바이트 배열을 Int16 배열에 복사 할 수도 있습니다. 첫 번째 방법은 메모리 효율이 높고 두 번째 방법이 속도면에서 효율적입니다.

관련 문제