English

MDPW for Jython(Pyhton)

インストール

音列

和音

Visitor


ダウンロード
mdpw30.zip

戻る

インストール

今回初めてJythonを使用する方は Jython(Python) をインストールしてください。 mdpw30.zip をダウンロードして解凍するとjythonというフォルダが含まれています。 そのフォルダにはjython用のサンプルとmdpwというjython用のライブラリを含むフォルダがあります。 サンプルを実行するためのWindows用のバッチファイルも含まれています。例はJythonを"c:\java\jython2.2.1"にインストールした例です。 第一行目のsetをインストール先に応じて書き換えてください。
set PYTHONHOME="c:\java\jython2.2.1"
@echo off

set ARGS=

:loop
if [%1] == [] goto end
    set ARGS=%ARGS% %1
    shift
    goto loop
:end

java.exe -Dpython.home=%PYTHONHOME% -classpath "%PYTHONHOME%\jython.jar;..\mdpw.jar;%CLASSPATH%" org.python.util.jython %ARGS%

Top of this page| Next step

音の作り方

まずは音が一つなるだけの例です。音はmnという関数を用いて作ります。引数は一つ目からピッチ(高さ:0-127), デュレーション(長さ:正のdouble), ベロシティ(強さ:0 - 127), プログラムナンバー(音色:0 - 127, 129) の順に指定します。 音を鳴らすにはmidifile_player()を使います。
from mdpw import * 

nC1 = mn(64,1,64,1)

p = midifile_player()
p.init("note.mid")
p.setTempo(120)
p.play(nC1)
p.end()


Top of this page| Next step

音列の作り方

音列はmsという関数を用いて作ります。msの返り値はlistのサブクラスでその要素は,音列和音になります。 それらに対する操作はlistと同じように行えます。 音を鳴らすにはやはりmidifile_player()を使います。
from mdpw import * 
  
C = 64
D = 66
E = 68
v = 64
nC1 = mn(C,1,v,1)
nD1 = mn(D,1,v,1)
nE1 = mn(E,1,v,1)

seq = ms([nC1, nD1, nE1])
p = midifile_player()
p.init("seq.mid")
p.setTempo(120)
p.play(seq)
p.end()

Top of this page| Next step

和音

和音は mcという関数を用いて作ります。msの返り値はlistのサブクラスです。 音を鳴らすにはやはりmidifile_player()を使います。
from mdpw import * 
  
C = 64
E = 68
G = 71
v = 64
nC1 = mn(C,1,v,1)
nE1 = mn(E,1,v,1)
nG1 = mn(G,1,v,1)

chord = mc([nC1, nE1, nG1])
p = midifile_player()
p.init("chord.mid")
p.setTempo(120)
p.play(chord)
p.end()



Top of this page| Next step

曲の作り方

音列と和音を組み合わせることで曲を作ることが出来ます。
from mdpw import * 
  
C = 64
D = 66
E = 68
G = 71

sv = 96
cv = 64
nC1 = mn(C,1,sv,1)
nD1 = mn(D,1,sv,1)
nE1 = mn(E,1,sv,1)
nR1 = mn(E,1,0,1)
nC2 = mn(C-12,2,cv,2)
nE2 = mn(E-12,2,cv,2)
nG2 = mn(G-12,2,cv,2)

seq = ms([nC1, nD1, nE1, nR1])
chord = mc([nC2, nE2, nG2])

piece = mc([ms([seq,seq]),ms([chord, chord,chord,chord])])
p = midifile_player()
p.init("piece.mid")
p.setTempo(120)
p.play(piece)
p.end()

Top of this page| Next step

Visitor

だんだん音の大きくなるクレッシェンドをvistorを用いて実現する例です。 メソッド"proccess"に音を処理する処理を書くことでvisitorを適用する。proccessの第一引数は処理対象の音、第二引数は処理時のその音のタイミングが 入ります。
from mdpw import *


class crescendo(visitor):
  def __init__(self, d, sv, ev):
   self.setVelocities(sv, ev)
   self.setDuration(d)
  def setDuration(self, d):
    self.duration = d
  def setVelocities(self, sv, ev):
    self.startv = sv
    self.endv = ev
  def process(self, n, d):
    n.setVelocity((self.endv-self.startv)*d/self.duration+self.startv)
  
    
C = 64
D = 66
E = 68
v = 64
nC1 = mn(C,1,v,1)
nD1 = mn(D,1,v,1)
nE1 = mn(E,1,v,1)
seq = ms([nC1, nD1, nE1])
vi = crescendo(seq.getDuration(), 32, 115)
p = midifile_player()
p.init("seq.mid")
p.setTempo(120)
p.play(seq.visit(vi))
p.end()
後は貴方のアイデア次第で、音楽プログラミングをお楽しみ下さい。
Top of this page