2010-01-24 61 views
1

我正在構建一個純紅寶石WAV文件讀/寫庫,深入瞭解Ruby功能。目前,它可以很好地處理16位音頻,因爲我可以使用String.unpack('s*')將各個音頻樣本拉出到帶符號整數的數組中。然而,我在解決24位音頻問題時遇到了麻煩。在這種情況下,每個樣本的長度是3個字節。在這種情況下,你會推薦什麼打包/解壓字符串,並且我可能必須徹底改變我的方法(使用填充或類似的方法)?使用Ruby解壓縮3字節/ 24位數據塊

回答

2

正如您使用unpack("s+"),我假設您的示例是在大端。這是一個不太快但可行的解決方案。

>> "ABCDEF".scan(/.../).map {|s| (s.reverse + 0.chr).unpack("V")}.flatten 
=> [4276803, 4474182] #=> [0x414243, 0x444546] in HEX 
+0

'[4276803,4474182] .map {| s | [s] .pack(「VX」)。reverse} .join'似乎是相反的。 – 2010-01-25 03:46:45

+1

看起來像我的樣品竟然是小端,所以我不需要相反。 '.chr'是關鍵......它需要被填充以便解包才能正常工作。非常感謝。 – 2010-01-25 04:36:26