「なでしこ」でフォトmusic その1
「なでしこ」の画像処理もかなりわかったきたので、今日からは「絵を素材に音を作る」プログラムにチャレンジしてみる。最初は、画像の色コードから音を作ってみる。大きな画像だと長い曲ができてしまうので、できる音が200個ぐらいになるように画像を縮小する。この縮小画像の色コードから、一定のアルゴリズムで音を生成して、ピアノで演奏させてみる。
音を作るアルゴリズムは、非常に単純だ。まず、色コードを60で割って、余りを求める。これで、0~59の数ができるので、これに40をプラスして、40~99までのノート番号に変換する。
プログラムは下記のような流れになっている。
・素材になる画像ファイルを選択する
・画像を、横が20pixel縦が10pixelに縮小する(200の音素材を作る)
・画像をSCANして、200個の色コードを配列に入れる
・画像の確認のために縮小した画像を10倍に拡大する
・MMLの初期設定
・色コードから音符(ノート番号が40~99)を200個生成
・MMLの内容を表示
・演奏ボタンを押すと演奏開始
今日は、今まで使ったことのない命令をいくつか使っている。
「行揃」命令は、テキストを指定の桁数で改行を入れて折り返す。この命令を使えば、長いテキストを、画面におさまるように整形することができる。
行揃え
http://nadesi.com/doc/cmd/doc.cgi?mode=cmd&id=780
「画像高速リサイズ」命令は、画像を補正処理なしてリサイズする。
画像高速リサイズ
http://nadesi.com/doc/cmd/doc.cgi?mode=cmd&id=2163
この命令を使うことで、縮小画像のピクセルをそのまま拡大することができる。プログラムでは元のサイズを10倍にしているので、1ピクセルを10ピクセルに拡大して画像を確認することが可能だ。
もう一つ、「サクラ」にあるRandomSelect相当の関数を作ってみた。これがあると、音符の長さをランダムに作る時に非常に便利だ。
//フォトmusic 1 ピアノのための絵音
Xsize=20; Ysize=10
言う("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択("*.jpg"); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={Xsize} 縦={Ysize} に変換しました")
RGBリスト="連番,X座標,Y座標,色コード"
N=0;Y=0
Ysize 回
X=0
Xsize 回
N=N+1
C=画像色取得(画像WK,X,Y)
RGBリスト[N,0]=N
RGBリスト[N,1]=X
RGBリスト[N,2]=Y
RGBリスト[N,3]=C
X=X+1
ここまで
Y=Y+1
ここまで
画像高速リサイズ(画像WK,Xsize*10,Ysize*10)
楽譜[0]="Tempo=120"
楽譜[1]="TR(1) @(GrandPiano) v.Random(40) REV(80) "
Xsize*Ysize 回
音程=(RGBリスト[回数-1,3]%60)+40;音長=RandomSelect("4,8")
楽譜[1]=楽譜[1]&"n({音程}){音長}"
ここまで
表示(行揃(楽譜,80))
演奏ボタンとはボタン
演奏ボタンをクリックした時は
楽譜をMML演奏
●RandomSelect(N)
A=区切(N,",");R=配列要素数(A);戻る(A[乱数(R)])
//ここまで
「ピアノのための絵音」MP3で聞いてみる
http://db1.voiceblog.jp/data/mugen_blog/1165914389.mp3
0 Comments:
コメントを投稿
<< Home