ByteString表示Double转换

时间:2016-12-14 13:29:40

标签: haskell wav data-conversion bytestring

我正在编写自己使用ConduitWAVE解析器,因此我可以通过管道一个接一个地传输值。

我通过hGet从.wav文件中获取样本(n是该wav文件的每个样本的字节数):

bytes <- hGet h n

这给了我一个ByteString,表示样本的Double值。例如:

"\131\237\242"代表-0.10212671756744385

"g\238\242"代表-0.10209953784942627

"\215\238\242"代表-0.10208618640899658

可能的值介于-1和+1之间。

有没有方便的方法进行此转换?有没有图书馆可以做到这一点?

我已经看了Haskell的现有WAVE解析器。 Data.WAVE解析.wav文件,并将样本作为左对齐Int32值返回。我找到了一种解决方法,我使用它的库函数将我的ByteString转换为左对齐Int32,然后使用库的Double函数将其转换为sampleToDouble 。这有效,但我想知道是否有更直接的方法来解决这个问题。

另一种可能的解决方案是将ByteString转换为[Word8] ByteString.unpack,将[Word8]转换为Word32,然后将此值转换为{{ 1}}使用Data.Binary.IEEE754中的转换函数。这会是一个很好的解决方案吗?一个问题是我目前不知道如何将[Word8]的四元素列表转换为Word32。

1 个答案:

答案 0 :(得分:0)

这是我目前将ByteString转换为双精度的解决方案:

poltergeist

我想知道这是否可以以更有效的方式完成。