フィボナッチ・ミュージック
artonさんのところで見かけたのを、そのままお借りしています。すみません。JRubyにして動かしています。
# cf. http://arton.no-ip.info/diary/20070807.html#p01 require 'java' def fib(n, r = [0,1]) r[n] ||= fib(n - 2, r) + fib(n - 1, r) end class Array alias put []= def []=(i, n) put(i, n) end end MidiSystem = javax.sound.midi.MidiSystem synthesizer = MidiSystem.getSynthesizer() #システム既定のシンセサイザー synthesizer.open channels = synthesizer.getChannels() #16チャネルとか32チャネルとかある。多声を使うなら使える。 cha = channels[0] #とりあえずモノフォニーでいいや p = 56 if ARGV.size > 0 p = ARGV[0].to_i end cha.programChange(p) #1-128でプリセットされた音色を選択 s = 1 1.upto(100) do |n| x = fib(n) cha.noteOff(s) #指定音高の停止 puts x x %= 19 #レンジを絞る x += 40 #下駄を履かせる(西尾さんの真似。というか全部真似だけど) cha.noteOn(x, 50) #音高、音量。音高は0−127。60がMid C s = x sleep(0.2) end synthesizer.close