2016-12-12 10 views
1

私はハスケルには少し新しく、初心者のプロジェクトとして少しの音楽ビジュアライザーを作ろうとしています。Haskell:名前付きパイプから固定量のデータを読み込みます。

私は通常、音楽プレーヤーとしてncmpcpp + mpdを使用しています。そのために、PCMデータを/tmp/mpd.fifoに送信するFIFOという名前のパイプがあります。

私がしたいのは、このファイルから一定量のPCMサンプルを読み込み、そのデータチャンクでFFTを実行し、出力を印刷してから繰り返します。私はHaskellのライブラリのData.Stream、Data.Bytestringを見てきましたが、名前付きパイプから固定サイズのデータ​​量を得る方法を理解することはできません。

私はこれを行う簡単な方法がなければならないと私はちょうど行方不明/何かを理解していないので、任意の助けに感謝します。

+1

'Data.ByteString'の' hGet'で何が問題になっていますか?読み込みたいバイト数を指定します。 – Alec

+0

@Alec:これを答えにしてもらえますか?また、名前付きパイプ(私は自分自身を知らない)から 'Handle'を得る方法を追加することも良いでしょう。 –

+0

それをするYeup!あなたのスニペットを使って完全に把握した後、答えとして投稿しました。 – Rigel

答えて

1

アレックが述べたように、これは実際には非常に簡単です。

単に名前付きパイプのハンドルを取得:

sourceHandle <- openFile "/path/to/pipe.fifo" ReadMode 

をしてからnバイトを読み取るためにData.ByteString.hGet sourceHandle nを使用しています。

このメソッドを使用した例は見当たらず、ハンドルはファイル全体のみを実行できるreadFileと同じように動作すると考えていました。だから私が仮定したように、私は何かが不足していた、ありがとう!

+0

嬉しいです!あなたが指定したバイト数またはEOFを得るまで、 'hGet'ブロック(またはそう考える)を言いたいことがあります。 IIRCハンドルは、UNIXベースのシステム上のファイル記述子と同等のものです。 – Alec

関連する問題