Rubyでバイナリのfloatを扱うには

スクリプト言語は計算用途に最適ではないといわれます.しかし,

  • 実行時間+プログラムを書く時間

で考えれば,数回しか使わないプログラムなら書いてしまった方が早いでしょう.


音声や信号処理に便利なライブラリとして,Speech Signal Processing Toolkit (SPTK)があります.
このSPTKはfloatのバイナリ配列を標準入出力でやり取りするのですが,ここにRubyを組み合わせたい.

Rubyでfloatのバイナリファイルを扱うには,

いろいろ試した結果,こうすればバイナリ32bit,floatの入出力ができます.この例は標準入力を標準出力へパイプしているだけです.
希望の唄/風

#!/usr/bin/env ruby

STDIN.binmode
STDOUT.binmode

while bytes = STDIN.read(4)
  x =  bytes.unpack("f")[0]
  STDOUT.write [x].pack("f")
end