Conduitを使用する独自のWAVE
パーサーを作成していますので、パイプラインを通じて1つずつ値をストリームできます。Double変換のByteString表現
私はhGet
を経由して.wavファイルからサンプルを得る(nはwavファイルのサンプルあたりのバイト数です):
bytes <- hGet h n
これは私に二重の表現で延ByteStringを与えますサンプルの値。例えば:
"\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
に変換し、ライブラリのsampleToDouble
関数を使用してDouble
に変換する回避策を見つけました。これはうまくいきますが、この問題を解決するより直接的な方法があるのだろうかと思います。
別の可能な解決策は、ByteString.unpack
と[Word8]
にByteString
変換Word32
に[Word8]
を変換しData.Binary.IEEE754から変換関数を使用してFloat
この値を変換することであろう。これは良い解決策でしょうか? 1つの問題は、現在、[Word8]の4要素リストをWord32に変換する方法がわからないことです。
あなたは 'bytestring-lexing'ライブラリの' readDouble'を見ましたか? – liminalisht
それらは私に16進文字のように見えません。 –
@liminalisht私は持っています。しかし、私はパッケージをインストールするように見えることはできません。それはビットロトになっているようです... –