English

MDPW for JRuby

Install

Note

Sequence

Chord

Music piece

Visitor


Download
mdpw30.zip

戻る

インストール

今回初めてJRubyを使用する方はJRuby(Ruby)をインストールしてください。 Download mdpw30.zipを解凍するとmdpw.jarがありますので JAVAのクラスパスに足してください。さらに"jruby"フォルダ内に"mdpw.rb"がありますので、 インクルードする必要があります。
Top of this page| Next step

音の作り方

音はクラスMnで作る必要があります。作成時の引数は前から ピッチ(0-127), 長さ(positive double), 強さ(0-127) 音色 (0 - 127, 129) となります。
require "mdpw"
n = Mn.new(60,1,32,1)


p = MidiFilePlayer.new
p.init('note.mid')
p.setTempo(120)
p.play(n)
p.end()

Top of this page| Next step

音列の作り方

音列はクラスMsでつくります。このクラスは"Array"クラスを継承していますので同じメソッドが使用できます。
require "mdpw"
seq = Ms.new([Mn.new(60,1,64,1), Mn.new(62,1,64,1), Mn.new(64,1,64,1) ])

p = MidiFilePlayer.new
p.init('seq.mid')
p.setTempo(120)
p.play(seq)
p.end()

Top of this page| Next step

和音の作り方

和音はクラスMcを使用して作ります。やはり"Array"クラスを継承しています。 和音という名前ですが、音列を含むことも出来ます。
require "mdpw"
chord = Mc.new([Mn.new(60,1,64,1), Mn.new(64,1,64,1), Mn.new(67,1,64,1) ])

p = MidiFilePlayer.new
p.init('chord.mid')
p.setTempo(120)
p.play(chord)
p.end()

Top of this page| Next step

曲の作り方

曲は音列と和音を組み合わせて作ります。 これらは入れ子に出来ます。 メロディーを音列にして記述し、和音を列にして伴奏を作ります。 これらを和音に入れれば組み合わせて演奏されます。
require "mdpw"
seq = Ms.new([Mn.new(60,1,64,1), Mn.new(62,1,64,1), Mn.new(64,1,64,1) , Mn.new(65,1,-64,1) ])
chord = Mc.new([Mn.new(60,2,32,1), Mn.new(64,2,120,1), Mn.new(67,2,1,1)])

mp = Ms.new([seq, seq])
cp = Ms.new([chord, chord, chord, chord])
sample = Mc.new([mp , cp])

p = MidiFilePlayer.new
p.init('sample.mid')
p.setTempo(120)
p.play(sample)
p.end()


Top of this page| Next step

Visitor

"Crescendo" visitorを実装した例です。 メソッド"proccess"で音に対する処理を記述します。第一引数が処理対象の音です。 第二引数は音の出現するタイミングが入ります。
require "mdpw"

class Crescendo < Visitor
  def initialize(d, sv, en)
    @duration = d
    @startv = sv
    @endv = en
  end
  def process(mn, d)
    mn.setVelocity((@endv - @startv)*d/@duration+@startv)
  end
end

seq = Ms.new([Mn.new(60,1,64,1), Mn.new(62,1,64,1), Mn.new(64,1,64,1) ])
v = Crescendo.new(seq.getDuration(), 32, 120)

seq.visit(v)

p = MidiFilePlayer.new
p.init('visitor.mid')
p.setTempo(120)
p.play(seq)
p.end()

Top of this page