「なでしこ」でフォトmusic 修正版
「なでしこ」でフォトmusic作品集も15曲になったところで、プログラムの方をちょっと修正して使い勝手を良くしてみる。(主な修正点)
・パラメータをeoto.iniから読み込めるようにした。eoto.iniをエディタ等で作成しておけば、項目記入を簡略化できる。ただし、この場合はコメント等の記述はできない。
・画像ファイルの指定がない場合は、eoto.jpgをデフォルトにした。eoto.jpgがあ場合は、画像ファイルの選択を省略できる。
・楽譜表示ソフト等で楽器名を表示できるようにする情報(TrackName={曲名})をMMLに出すようにした。
//eoto 絵を素材に音を作る(修正版)
母艦="絵音"
入力項目=「タイトル=
音素画像=?f(写真|*.jpg|全て|*.*)
音素数=200
楽器_C=?(Koto|Shamisen|Shakuhachi|Marimba|GrandPiano|Flute|Violin)Koto
楽器_R=?(Koto|Shamisen|Shakuhachi|Marimba|GrandPiano|Flute|Violin)Koto
楽器_G=?(Koto|Shamisen|Shakuhachi|Marimba|GrandPiano|Flute|Violin)Koto
楽器_B=?(Koto|Shamisen|Shakuhachi|Marimba|GrandPiano|Flute|Violin)Koto
音階_C=レ/"ソ/"ラ/シ♭/レ/ミ♭/ソ/ラ/シ♭/`レ/`ミ♭/`ソ/`ラ
音階_R=レ/"ソ/"ラ/シ♭/レ/ミ♭/ソ/ラ/シ♭/`レ/`ミ♭/`ソ/`ラ
音階_G=レ/"ソ/"ラ/シ♭/レ/ミ♭/ソ/ラ/シ♭/`レ/`ミ♭/`ソ/`ラ
音階_B=レ/"ソ/"ラ/シ♭/レ/ミ♭/ソ/ラ/シ♭/`レ/`ミ♭/`ソ/`ラ
楽器_C_パラメータ=v.Random(60) REV(80) V(100) P(64) o5
楽器_R_パラメータ=v.Random(60) REV(80) V(100) P(64) o5
楽器_G_パラメータ=v.Random(60) REV(80) V(100) P(64) o5
楽器_B_パラメータ=v.Random(60) REV(80) V(100) P(64) o5
音符種類=2,4,8
乱数範囲=40-90
演奏速度=96
鍵盤表示アプリ=
楽譜表示アプリ=
」
もし(存在("eoto.ini")==1)ならば
読む(入力項目,"eoto.ini")
入力内容=項目記入(入力項目)
もし(入力内容@音素画像=="")ならば
入力内容@音素画像="eoto.jpg"
もし(入力内容@音素画像=="")ならば
言う("画像ファイルを選択してください")
入力内容=項目記入(入力項目)
もし(入力内容@鍵盤表示アプリ=="")ならば
入力内容@鍵盤表示アプリ="C:\Program Files\TMIDI Player\TMIDI.EXE"
もし(入力内容@楽譜表示アプリ=="")ならば
入力内容@楽譜表示アプリ="C:\Program Files\PrintMusic 2006J Demo\PrintMusic.exe"
楽器[1]=入力内容@楽器_C
楽器[2]=入力内容@楽器_R
楽器[3]=入力内容@楽器_G
楽器[4]=入力内容@楽器_B
音階[1]=区切(入力内容@音階_C "/")
音階[2]=区切(入力内容@音階_R "/")
音階[3]=区切(入力内容@音階_G "/")
音階[4]=区切(入力内容@音階_B "/")
PM[1]=入力内容@楽器_C_パラメータ
PM[2]=入力内容@楽器_R_パラメータ
PM[3]=入力内容@楽器_G_パラメータ
PM[4]=入力内容@楽器_B_パラメータ
範囲=区切(入力内容@乱数範囲 "-")
Ysize=10; Xsize=入力内容@音素数/Ysize; 画素数=Xsize*Ysize
画像WKとはイメージ; FN=入力内容@音素画像; 画像WKの画像=FN
画像FL=ファイル名抽出(FN)
画像リサイズ(画像WK,Xsize,Ysize)
表示("{画像FL} を 横={Xsize} 縦={Ysize} に変換しました (画素数={画素数})")
RGBリスト="連番,X座標,Y座標,色コード,R,G,B,音(C),音(R),音(G),音(B)"
N=0;Y=0
Ysize 回
X=0
Xsize 回
N=N+1
C=画像色取得(画像WK,X,Y); RGB分解(C,R,G,B)
RGBリスト[N,0]=N
RGBリスト[N,1]=X
RGBリスト[N,2]=Y
RGBリスト[N,3]=C
RGBリスト[N,4]=R
RGBリスト[N,5]=G
RGBリスト[N,6]=B
X=X+1
ここまで
Y=Y+1
ここまで
画像高速リサイズ(画像WK,Xsize*10,Ysize*10)
曲名=「{波カッコ}"{入力内容@タイトル}"{波カッコ閉じ}」
楽譜[0]="TrackName={曲名} Tempo={入力内容@演奏速度}"
4 回
もし(楽器[回数]!="")ならば
楽譜[回数]="TR({回数}) 音色({楽器[回数]}) {PM[回数]} "
ここまで
ここまで
P=1
Xsize*Ysize 回
T=1
4 回
もし(楽器[回数]!="")ならば
音長="l"&RandomSelect(入力内容@音符種類)
もし(音階[回数]!="")ならば
音程=(RGBリスト[P,T+2]%配列要素数(音階[T]))
音符="{音長}{音階[T,音程]}"
違えば
音程=(RGBリスト[P,T+2]%(範囲[1]-範囲[0]))+範囲[0]
音符="{音長}n({音程})"
ここまで
楽譜[回数]=楽譜[回数]&音符; RGBリスト[P,T+6]=音符
ここまで
T=T+1
ここまで
P=P+1
ここまで
4 回
もし(楽器[回数]!="")ならば
楽器名=「{波カッコ}"{楽器[回数]}"{波カッコ閉じ}」
楽譜[回数]=楽譜[回数]&" CH(16) TrackName={楽器名}"
ここまで
ここまで
RGB表示とはグリッド; そのW=560; そのアイテム=RGBリスト
表示(楽譜[0])
4 回
もし(楽器[回数]!="")ならば
表示(LEFT(楽譜[回数],72)&"・・・・")
ここまで
ここまで
PX=230;PY=20;PS=80
演奏開始ボタンとはボタン;そのX=PX+PS*0;そのY=PY
演奏開始ボタンをクリックした時は
MML演奏(楽譜)
鍵盤表示ボタンとはボタン;そのX=PX+PS*1;そのY=PY
鍵盤表示ボタンをクリックした時は
MML変換(楽譜,"temp.mid")
起動("{入力内容@鍵盤表示アプリ} temp.mid")
楽譜表示ボタンとはボタン;そのX=PX+PS*2;そのY=PY
楽譜表示ボタンをクリックした時は
MML変換(楽譜,"temp.mid")
起動("{入力内容@楽譜表示アプリ} temp.mid")
MIDI保存ボタンとはボタン;そのX=PX+PS*3;そのY=PY
MIDI保存ボタンをクリックした時は
MML変換(楽譜,保存ファイル選択("*.mid"))
終了ボタンとはボタン;そのX=PX+PS*4;そのY=PY
終了ボタンをクリックした時は
終了
●RandomSelect(N)
A=区切(N,",");R=配列要素数(A);戻る(A[乱数(R)])
●RGB分解(C,{参照渡し}R,{参照渡し}G,{参照渡し}B)
R=INT(C/(256*256))
G=INT((C-R*256*256)/256)
B=C-R*256*256-G*256
//ここまで
楽譜表示では、トラック毎の楽器名が下の画像のように表示できるようになった。
0 Comments:
コメントを投稿
<< Home