インストール
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 |