2010-12-23 83 views
0

我正在通過System.Runtime.InteropServices.Marshal.Copy()從音頻輸入接收一些原始數據,並將其存儲在一個字節[]中。該字節[]中的實際數據我知道是Int16類型。我想把這個byte []看作是一個Int16類型的數組,並且遍歷它的元素,處理它,並且在這個結尾,我想把這個改變過的數組作爲byte []傳遞給另一個函數。如何將int []作爲Int16 []處理?

對於那些想知道我在做什麼的人:我想嘗試通過簡單地將來自前一緩衝區的波形數據與來自當前波形數據相加來爲來話聲音(來自麥克風)添加回聲效果緩衝液,以較低的體積將其混合。

編輯:字節[]陣列可以存儲INT16號258爲一對的字節[1] [2]

0000 0001 0000 0010 
+1

我想你想在一個Int16中結合每兩個字節,對吧? – Jan 2010-12-23 11:26:16

+0

好吧,我知道該字節[]中的各個字節對彼此相鄰形成一個Int16。 – 2010-12-23 11:28:26

回答

4

你不能,就我所知。

我建議您使用Buffer.BlockCopy將數據複製到short[],對其進行處理,然後將其複製回來。當然,這假定字節按照適當的排列順序排列......但它們很可能是。可以使用overload of Marshal.Copy which accepts a short[]複製數據到開始。

1

可以使用BitConverter將字節視爲使用BitConverter.ToInt16的Int16元素。您也可以使用Buffer.BlockCopy將字節數組複製到Int16的數組。第一個是更高效的內存,第二個更高效。