研究用ゲームプロトタイプ(https://sites.google.com/site/117florian/fang-song-da-xue-yan-jiupurototaipu)

コンセプトは「触って気持ちいい」です。
というかー、OpenJDK由来のソフトウェアシンセサイザレイテンシでかすぎてどうにもならないというかー。これ、JavaSoundをsampleで使うと気にならないのかなぁ。こっちもレイテンシでかそうなんだけど。


細工はひどく単純で、javax.sound.midiパッケージをテストで使ってみるためのサンプルになってます。

  • バスドラムは4分音符
  • 4拍で1小節
  • 小節単位にコードがC→F→G7→C→(戻る)を繰り返す
  • マウスのどれかのボタンが押されたら次のクオンタイズタイミング(16分音符)でコード内のどれかの音をランダムで弾く
  • ランダムには偏りがあって、「基音」をなるべく多く弾くようになっている

で、てきとーにマウスボタンを叩いていると音楽のように聞こえるという。
実際にはクオンタイズはしないで、ボタンを押したときに音を出したかったんだけど、環境によっては凄いレイテンシがでかいので仕方なくクオンタイズする方向で。押したときにすぐ出ないと気持ちよくないんだけど、ずれたタイミングになるよりはなんぼかまし。クオンタイズのタイミングも実は結構試行錯誤があって、「四分音符で出すのが一番いいんじゃなかろうか?」とまで考えたのは秘密。さすがに四分音符だと音楽として単純すぎるので。
Javaのリアルタイム性に依存しますが、だいたい120BPM(500ms)で動いています。これぐらいが気持ちいいかな、と。
さて、これをどうゲームにしたもんだか。研究は「ゲームの面白さを測定する」だから、おもちゃのままだとまずいんだよね。
(追記)
javax.sound.midi.Synthesizerつかえねー。正確にはjavax.sound.midi.MidiSystem.getSynthesizer()の戻り値の実装が激しく使えない。JDKでは動くのにJREでは動かなかったり(昔は動いていたのが削除されてるらしい)、レイテンシが馬鹿にならないくらいでかかったり。少なくともこれで音ゲーを作ろうとか考えちゃダメです。
とほほ。javax.sound.sampledはまだなんぼか使えるからこっちにするか……。容量でかくなるんだよなぁ。