bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

Haskellで遊ぼう = マルチメディア

1.マルチメディアの世界へ

Haskellの話は数学やロジックの話が多く、ゲームやアニメーション、はたまた、音楽の世界とは程遠いと思うかもしれないが、そんなことはない。本としては、少し古いのだが、The Haskell School of Expressionがある。これに、コンピュータ・グラフィックスやアニメーションの世界を実現するための基本的な素材から、簡単なアニメーションやゲームまで一通り書かれている。

この本の著者はエール大学のフダク(Hudak)教授である。エール大学のサイトに行くと、この本に関する簡単な紹介と、ソフトウェア(プログラムコード)、デモ、講義用のスライドなどがある。デモを見ると全体像をつかむことができると思う。
プログラムコードがzipファイルで提供されているので、これをダウンロードして実行してみる。
プログラムを実行するためには、OpenGLのモジュールをインストールする。そこで、

cabal install GLFW

を行う。
また、音楽を楽しみたい場合には

cabal install Haskore-vintage (最新のバージョンはHaskoreであるが、旧版を用いる)

も行う。

zipファイルを解凍するとsrcというディレクトリがある。この中に、マルチメディアのプログラムがあるので、これを試せばよい。ただ、この中にあるファイルのほとんどは、hsファイルではなく、lhsファイルである。lhsファイルは、ファイルへのパスを構成する一連のディレクトリの中に、日本語記述のディレクトリが含まれているとエラーとなる。従って、実行するときは、srcファイルを日本語が含まれていないディレクトリからなるパスに移動(とりあえずデスクトップが良い)する必要がある。

1.アニメーションからゲームへ

アニメーションの例は、animation.lhsに含まれている。まず、これをロードする。main1から8を実行するといろいろなアニメーションを見ることができる。特に、main8は万華鏡である。
また、ゲームはReactimate.lhsにある。これをロードして、test (paddleball 2)と入力すると、マウスを利用したゲームを楽しむことができる。遊んでいる最中のスナップショットは以下のとおりである。
f:id:bitterharvest:20140813110003p:plain
音楽用のプログラムを楽しみたいときは、importのところを最新のモジュール名に変える。

例えば、MDL.lhsの場合は次のようになる。

> import Music
> import Perform
> import Haskore ( MidiFile(..), MidiChannel, ProgNum, MEvent,
>                  MFType, Velocity, MEvent(..), MidiEvent(..),
>                  MetaEvent(..), Division(..), MTempo,
>                  outputMidiFile )
> import Data.List ( partition )           --修正
> import System.Cmd ( system )             --修正

また、Music.lhs, Perform.lhsは

> module Music where
> import Data.Ratio             --修正

MDLをロードして実行してみよう。
なお、テストのプログラムにWindows 8.1用が用意されていないので、プログラムの最後に以下を追加する。

> testWin81 m = do test m
>                  system "wmplayer test.mid"
>                  return ()

そして、testWin81 funkGrooveを実行する。midファイルが作られるので、聞くとよい。