日曜日, 12月 31, 2006

「なでしこ」でフォトmusic No.6

今日は、鐘の音を集めたSoundFontを使ってみる。低い音でこの鐘の音を鳴らすと、まるで除夜の鐘のように響く。

//ここから
タイトル=除夜
音素画像=
音素数=108
楽器_C=3
楽器_R=
楽器_G=
楽器_B=
音階_C=
音階_R=
音階_G=
音階_B=
楽器_C_パラメータ=v.Random(120) REV(100) V(100) P(64)
楽器_R_パラメータ=
楽器_G_パラメータ=
楽器_B_パラメータ=
音符種類=1
乱数範囲=20-22
演奏速度=12
//ここまで



SoundFontプレイヤ(sfz)の演奏画面。



30分以上の曲になるので、mp3の方は最初の方の部分だけを掲載します。

除夜
http://db1.voiceblog.jp/data/mugen_blog/1167545250.mp3


 

土曜日, 12月 30, 2006

「なでしこ」でフォトmusic No.5

今日は、オーケストラ用のパーカッションを集めたSoundFontを使ってみる。ティンパニーの音で、雷が鳴り響く暗く寒い冬の雰囲気を作ってみた。

楽器の指定には、楽器名ではなく音色番号を直接指定してある。こんな音色の指定の仕方も可能だ。

//ここから
タイトル=Winter for 3 Timpani
音素画像=
音素数=100
楽器_C=
楽器_R=10
楽器_G=11
楽器_B=10
音階_C=
音階_R=
音階_G=
音階_B=
楽器_C_パラメータ=
楽器_R_パラメータ=v.Random(120) REV(80) V(100) P(64-50)
楽器_G_パラメータ=v.Random(120) REV(80) V(100) P(64)
楽器_B_パラメータ=v.Random(120) REV(80) V(100) P(64+50)
音符種類=2,4
//ここまで



SoundFontプレイヤ(sfz)の演奏画面。



Winter for 3 Timpani
http://db1.voiceblog.jp/data/mugen_blog/1167482867.mp3


  

金曜日, 12月 29, 2006

「なでしこ」でフォトmusic No.4

今日は、RGBのBの要素だけを使って音を作ってみる。ゲートタイムを長めにとってあるので、音が重なる。こういう使い方をすれば、一つの音だけでも、けっこう音楽っぽくなる。

//ここから
タイトル=BLUE
音素画像=
音素数=100
楽器_C=
楽器_R=
楽器_G=
楽器_B=SoundTrack
音階_C=
音階_R=
音階_G=
音階_B=
楽器_C_パラメータ=
楽器_R_パラメータ=
楽器_G_パラメータ=
楽器_B_パラメータ=v.Random(120) REV(80) V(100) P(64) q(400)
音符種類=2,4
//ここまで



BLUE
http://db1.voiceblog.jp/data/mugen_blog/1167395499.mp3



 

木曜日, 12月 28, 2006

「なでしこ」でフォトmusic No.3

今日は、アジアのパーカッションを集めたSoundFontを使ってみる。この、SoundFontではラ#・ラ・ソ#の音に能の打楽器がアサインされている。

//ここから
タイトル=大鼓・小鼓・太鼓による音あそび
音素画像=
音素数=100
楽器_C=
楽器_R=GrandPiano
楽器_G=GrandPiano
楽器_B=GrandPiano
音階_C=
音階_R="ラ#
音階_G="ラ
音階_B="ソ#
楽器_C_パラメータ=
楽器_R_パラメータ=v.Random(60) REV(80) V(100) P(64+50) o5
楽器_G_パラメータ=v.Random(60) REV(80) V(100) P(64) o5
楽器_B_パラメータ=v.Random(60) REV(80) V(100) P(64-50) o5
音符種類=2,4,8
//ここまで



SoundFontプレイヤ(sfz)の演奏画面。



大鼓・小鼓・太鼓による音あそび
http://db1.voiceblog.jp/data/mugen_blog/1167311606.mp3


 

水曜日, 12月 27, 2006

「なでしこ」でフォトmusic No.2

今日は、TinkleBellとAgogoという、ちょっと変わったベル系パーカッションの組み合わせを試してみる。

「絵音」は、楽器の組み合わせが、どんな音に聞こえるのかを簡単に試してみることができて便利です。

(パラメータ項目)

//ここから
タイトル=T-A-T
音素数=200
楽器_C=
楽器_R=TinkleBell
楽器_G=Agogo
楽器_B=TinkleBell
音階_C=
音階_R=
音階_G=
音階_B=
楽器_C_パラメータ=
楽器_R_パラメータ=v.Random(20) REV(80) V(100) P(64+50) o6
楽器_G_パラメータ=v.Random(20) REV(80) V(100) P(64) o5
楽器_B_パラメータ=v.Random(20) REV(80) V(100) P(64-50) o3
音符種類=2,4,8
乱数範囲=40-90
演奏速度=96
//ここまで



T-A-T(MP3)
http://db1.voiceblog.jp/data/mugen_blog/1167167918.mp3


 

火曜日, 12月 26, 2006

「なでしこ」でフォトmusic No.1

最初の曲は、パイプオルガンで演奏させる曲を作ってみる。音階を指定するパラメータのところには、音階素材として複数の音が指定できることを利用して、ここにバッハ風のフレーズを定義している。

各トラックには、リバーブを大きめに掛けて、カテドラルの雰囲気が出るようにしてみた。

(パラメータ項目)

//ここから
タイトル=X'masのためのオルガン集から
音素数=100
楽器_C=
楽器_R=ChurchOrgan
楽器_G=ChurchOrgan
楽器_B=ChurchOrgan
音階_C=
音階_R=`ドシ/`ド`レ/ミラ/`ドラ/ファミ/レド/ミ`ド/シラ/ソ#`ファ/`ミ`レ
音階_G=`ドシ/`ド`レ/ミラ/`ドラ/ファミ/レド/ミ`ド/シラ/ソ#`ファ/`ミ`レ
音階_B=`ドシ/`ド`レ/ミラ/`ドラ/ファミ/レド/ミ`ド/シラ/ソ#`ファ/`ミ`レ
楽器_C_パラメータ=
楽器_R_パラメータ=v.Random(20) REV(120) V(100) P(64+30) o6
楽器_G_パラメータ=v.Random(20) REV(120) V(100) P(64) o5
楽器_B_パラメータ=v.Random(20) REV(120) V(100) P(64-30) o3
音符種類=2,4,8,8
乱数範囲=40-90
演奏速度=96
//ここまで



X'masのためのオルガン集から(MP3)
http://db1.voiceblog.jp/data/mugen_blog/1167139803.mp3


 

月曜日, 12月 25, 2006

「なでしこ」でフォトmusic作品集

せっかく「絵音」のプログラムができた(本当はもっとかっこよく作りたいところではある)ので、このプログラムを使って作品をいくつか作ってみたい。

作品毎に、項目記入で指定するパラメータ(MMLを生成するためのロジックに使っているパラメータ)を載せるので、この部分をテキストファイルとして保存しておくと便利だ。

実行する時は、項目記入の画面でこのファイルを指定して読み込めば、作成したロジックで曲が再現される。

この項目記入で読み込むテキストは、項目名=値 という形式になっているので、テキストエディタで編集することも可能だ。

項目名がプログラムで指定している名前と同じ場合だけ、パラメータファイルの当該項目との入れ替えが行われる。ということは、項目名が該当しないと、単なるコメントとして扱われる。これは、結構便利かもしれない。

例えば、下のような項目記入画面を、メニューにあるファイル→保存で保存してみる。



すると、次のようなテキストとして保存される。

タイトル=これを保存すると・・・・
音素画像=
音素数=200
楽器_C=Shamisen
楽器_R=Koto
楽器_G=Koto
楽器_B=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
鍵盤表示アプリ=
楽譜表示アプリ=

明日から、「絵音」を使った作品集を少し作ってみることにする。できた音楽をMP3形式で載せる他、項目記入で設定したテキストデータも一緒に載せるので、この部分をテキストファイルとして保存し、項目記入の画面でこのファイルを読み込めば、同じような感じの音楽が生成されるはずだ。ただし、元になる画像は当然違うはずなので、音程などは画像毎に違うものになる。
 

日曜日, 12月 24, 2006

「なでしこ」でフォトmusic その12

なでしこ」は、作ったプログラムを実行ファイル(EXE形式)に変換することができるようになっている。

実行ファイルへの変換
http://nadesi.com/doc/reference/function/1-2-convexe.htm

ということで、昨日のプログラム(eoto.neko)を実行形式に変換してみた。

まず、「なでしこ」のエディタ画面のメニューから、ファイル→実行ファイル作成 を選ぶと下のような画面になる。



ここで、作成ボタンを押すと、実行ファイル名を指定する画面が出るので、例えば、eoto.exe のようなファイル名を指定する。すると、下の画面の、eoto.exe と dnako.dll の2つのファイルが生成される。



ただし、この2つのファイルだけでは実行できないので、「なでしこ」フォルダから以下のフォルダをコピーする。

dSakura.dll
plug-insフォルダ
Includeフォルダ

以上のファイルを、上の画像のように一つのフォルダにまとめて配布すれば、「なでしこ」をインストールしていない環境でも、eoto.exe を実行することができる。
 

土曜日, 12月 23, 2006

「なでしこ」でフォトmusic その11

今日も、昨日のプログラムを少しV-UPしてみる。主に、パラメータを保存しておく場合に便利なように考えてみた。

(変更点)
・パラメータに曲のタイトルを指定できるようにした。
・画像ファイルを指定しなかった場合は再入力を求めるようにした。
・縮小画像サイズの指定を画素数に変更。(Y方向は10ピクセルに固定)
・鍵盤表示と楽譜表示のアプリを指定しなかった場合は標準のアプリを自動設定。

例えば、下のようなものをテキストファイルとして名前を付けて保存しておく。

// 「絵音」パラメータファイル 
タイトル=2台のマリンバのための詩曲
音素数=600
楽器_C=
楽器_R=Marimba
楽器_G=Marimba
楽器_B=
音階_C=
音階_R=
音階_G=
音階_B=
楽器_C_パラメータ=
楽器_R_パラメータ=v.Random(60) REV(80) V(100) P(64-60)
楽器_G_パラメータ=v.Random(60) REV(80) V(100) P(64+60)
楽器_B_パラメータ=
音符種類=2,4,8
乱数範囲=40-90
演奏速度=96
// ここまで

これを、項目記入のメニューにある「開く」で読み出せば、下のように展開される。面白い曲ができたら、こんな感じでパラメータに名前を付けて保存しておけば、作品集を作ることもできる。



項目記入で入力したタイトルをMIDIのメタイベントとして出力しているので、MIDI再生のアプリケーションによっては、ここで指定したタイトルを表示する。



ということで、昨日のものをちょっと変更したプログラム。

//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
鍵盤表示アプリ=
楽譜表示アプリ=

入力内容=項目記入(入力項目)

もし(入力内容@音素画像=="")ならば
 言う("画像ファイルを選択してください")
 入力内容=項目記入(入力項目)
もし(入力内容@鍵盤表示アプリ=="")ならば
 入力内容@鍵盤表示アプリ="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=0
Xsize*Ysize 回
 T=1
 4 回
  もし(楽器[回数]!="")ならば
   音長="l"&RandomSelect(入力内容@音符種類)
   もし(音階[回数]!="")ならば
    音程=(RGBリスト[P,T+2]%配列要素数(音階[T]))
    音符="{音長}{音階[T,音程]}"
   違えば
    音程=(RGBリスト[P,T+2]%(範囲[1]-範囲[0]))+範囲[0]
    音符="{音長}n({音程})"
   ここまで
   楽譜[回数]=楽譜[回数]&音符; RGBリスト[P+1,T+6]=音符
  ここまで
  T=T+1
 ここまで
 P=P+1
ここまで

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

//ここまで
 

金曜日, 12月 22, 2006

「なでしこ」でフォトmusic その10

なでしこ」でフォトmusicシリーズも、かなりいいところまできた。そこで、今日は、MMLを生成させるパラメータの数をさらに増やしてみる。

パラメータ項目を簡単に説明する。

色コードがTR(1)、赤(R)がTR(2)、緑(G)がTR(3)、青(B)がTR(4)のように対応する。

音素画像
 ・音に変換する素材になる画像を指定する。
 ・入力欄をダブルクリックするとファイル選択画面が出る。

画素縦横
 ・音に変換するための縮小画像数を、縦サイズ/横サイズ で指定する。
 ・縦サイズ*横サイズが音符の数になる。
 ・MMLは、この縮小画像の先頭から横方向にSCANして作成される

楽器_?
 ・色コードおよびRGBに対応する楽器名をGMの音色名で指定する。
 ・入力欄をダブルクリックするといくつかの名前を選択すことができる。
 ・楽器の名前を指定しない(NULL)と、当該トラックは生成されない。
 ・色コードやRGBの好きなものに楽器を割り当て、ソロから4重奏までが可能。

音階_?
 ・色コードおよびRGBに対応する音階を「/」で区切ってMML形式で指定する。
 ・音階の数はいくつあっても良い。この中からランダムに音が選ばれる。
 ・区切りの中に音列(複数の音)を指定することもできる。
 ・この欄を空白にすると、乱数範囲で指定したノート番号をランダムに生成する。

楽器_?_パラメータ
 ・楽器毎のパンやボリュームなどをMML形式で指定する。

音符種類
 ・音符の種類(n部音符)を「,」で区切って指定。
 ・2,2,2,4 と指定すれば、2部音符と4部音符が3:1の割合でランダムに作成される。

乱数範囲
 ・音階を指定しなかった場合の、ランダムな音の範囲をノート番号で指定する。

演奏速度
 ・テンポ(Tempo=)を指定する。

鍵盤表示アプリ
 ・鍵盤表示ボタンで実行するアプリケーションを指定する。

楽譜表示アプリ
 ・楽譜表示ボタンで実行するアプリケーションを指定する。



//フォトmusic_10
母艦="絵音"

入力項目=「音素画像=?f(写真|*.jpg|全て|*.*)
画素縦横=10/20
楽器_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
鍵盤表示アプリ=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_パラメータ

範囲=区切(入力内容@乱数範囲 "-")

縦横=区切(入力内容@画素縦横 "/")
Xsize=縦横[1]; Ysize=縦横[0]; 画素数=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]="Tempo={入力内容@演奏速度}"

4 回
 もし(楽器[回数]!="")ならば
  楽譜[回数]="TR({回数}) 音色({楽器[回数]}) {PM[回数]} "
 ここまで
ここまで

P=0
Xsize*Ysize 回
 T=1
 4 回
  もし(楽器[回数]!="")ならば
   音長="l"&RandomSelect(入力内容@音符種類)
   もし(音階[回数]!="")ならば
    音程=(RGBリスト[P,T+2]%配列要素数(音階[T]))
    音符="{音長}{音階[T,音程]}"
   違えば
    音程=(RGBリスト[P,T+2]%(範囲[1]-範囲[0]))+範囲[0]
    音符="{音長}n({音程})"
   ここまで
   楽譜[回数]=楽譜[回数]&音符; RGBリスト[P+1,T+6]=音符
  ここまで
  T=T+1
 ここまで
 P=P+1
ここまで

RGB表示とはグリッド; そのW=520; RGB表示のアイテム=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");ファイル完全削除("temp.mid")

楽譜表示ボタンとはボタン;そのX=PX+PS*2;そのY=PY
楽譜表示ボタンをクリックした時は
 MML変換(楽譜,"temp.mid")
 起動("{入力内容@楽譜表示アプリ} 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

//ここまで
 

木曜日, 12月 21, 2006

「なでしこ」でフォトmusic その9

今日は昨日までのプログラムをさらにV-UPして、MMLを生成させるパラメータを実行時に指定できるようにしてみた。

パラメータ項目を簡単に説明する。

色コードがTR(1)、赤(R)がTR(2)、緑(G)がTR(3)、青(B)がTR(4)のように対応する。

音素画像
 音に変換する素材になる画像を指定する。
 入力欄をダブルクリックするとファイル選択画面が出る。

楽器_?
 色コードおよびRGBに対応する楽器名をGMの音色名で指定する。
 入力欄をダブルクリックするといくつかの名前を選択すことができる。
 楽器の名前を指定しない(NULL)と、当該トラックは生成されない。
 色コードやRGBの好きなものに楽器を割り当て、ソロから4重奏までが可能。

音階_?
 色コードおよびRGBに対応する音階を「/」で区切ってMML形式で指定する。
 音階の数はいくつあっても良い。この中からランダムに音が選ばれる。
 区切りの中に音列(複数の音)を指定することもできる。

楽器_?_パラメータ
 楽器毎のパンやボリュームなどをMML形式で指定する。

音符種類
 音符の種類(n部音符)を「,」で区切って指定。
 2,2,2,4 と指定すれば、2部音符と4部音符が3:1の割合でランダムに作成される。

演奏速度
 テンポ(Tempo=)を指定する。



//フォトmusic_9
母艦="絵音"

入力項目=「音素画像=?f(写真|*.jpg|全て|*.*)
楽器_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
演奏速度=96

入力内容=項目記入(入力項目)

楽器[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_パラメータ

Xsize=20; Ysize=10

画像WKとはイメージ; FN=入力内容@音素画像; 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={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]="Tempo={入力内容@演奏速度}"

4 回
 もし(楽器[回数]!="")ならば
  楽譜[回数]="TR({回数}) 音色({楽器[回数]}) {PM[回数]} "
 ここまで
ここまで

P=0
Xsize*Ysize 回
 T=1
 4 回
  もし(楽器[回数]!="")ならば
   音程=(RGBリスト[P,T+2]%配列要素数(音階[T]))
   音長=RandomSelect(入力内容@音符種類)
   音符=音階[T,音程]&音長
   楽譜[回数]=楽譜[回数]&音符; RGBリスト[P+1,T+6]=音符
  ここまで
  T=T+1
 ここまで
 P=P+1
ここまで

RGB表示とはグリッド; そのW=520; RGB表示のアイテム=RGBリスト
表示(楽譜[0])
4 回
 もし(楽器[回数]!="")ならば
  表示(LEFT(楽譜[回数],72)&"・・・・")
 ここまで
ここまで

PX=230;PY=20;PS=80
鍵盤表示アプリ="C:\Program Files\TMIDI Player\TMIDI.EXE"
楽譜表示アプリ="C:\Program Files\PrintMusic 2006J Demo\PrintMusic.exe"

演奏開始ボタンとはボタン;そのX=PX+PS*0;そのY=PY
演奏開始ボタンをクリックした時は
 MML演奏(楽譜)

鍵盤表示ボタンとはボタン;そのX=PX+PS*1;そのY=PY
鍵盤表示ボタンをクリックした時は
 MML変換(楽譜,"temp.mid")
 起動("{鍵盤表示アプリ} temp.mid");ファイル完全削除("temp.mid")

楽譜表示ボタンとはボタン;そのX=PX+PS*2;そのY=PY
楽譜表示ボタンをクリックした時は
 MML変換(楽譜,"temp.mid")
 起動("{楽譜表示アプリ} 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

//ここまで

 

水曜日, 12月 20, 2006

「なでしこ」でフォトmusic その8

今日は、昨日までのプログラムをちょっとV-UPして、演奏開始ボタン以外の機能ボタンを付けてみる。

演奏開始・・・・MML演奏命令で演奏
鍵盤表示・・・・TEMPファイル経由で外部のMIDIプレイヤーを起動
楽譜表示・・・・TEMPファイル経由で外部の楽譜ソフトを起動
MIDI保存・・・・ファイル名を指定してMIDI形式で保存
終了・・・・プログラム終了

//フォトmusic_8
母艦="尺八・箏・三絃・十七絃のための絵音"

Xsize=20; Ysize=10

言う("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択("*.jpg"); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={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)

音階[1]=区切(『"レ/"ミ♭/"ソ/"ラ/"シ♭/レ/ミ♭/ソ/ラ/シ♭/`ド/`レ/`ミ♭』 "/")
音階[2]=区切(『レ/"ソ/"ラ/シ♭/レ/ミ♭/ソ/ラ/シ♭/`レ/`ミ♭/`ソ/`ラ』 "/")

楽譜[0]="Tempo=96"
楽譜[1]="TR(1) 音色(Shakuhachi) v.Random(60) REV(80) V(100) P(64-00) o6 "
楽譜[2]="TR(2) 音色(Koto) v.Random(40) REV(80) V(080) P(64-40) o5 "
楽譜[3]="TR(3) 音色(Shamisen) v.Random(40) REV(80) V(100) P(64-00) o5 "
楽譜[4]="TR(4) 音色(Koto) v.Random(40) REV(80) V(080) P(64+40) o4 "

P=0
Xsize*Ysize 回
 T=1
 4 回
  音程=(RGBリスト[P,T+2]%13); 音長=RandomSelect("2,4,8")
  もし(T==1)ならば
   音符=音階[1,音程]&音長
  違えば
   音符=音階[2,音程]&音長
  ここまで
  楽譜[T]=楽譜[T]&音符; RGBリスト[P+1,T+6]=音符
  T=T+1
 ここまで
 P=P+1
ここまで

RGB表示とはグリッド; そのW=520; RGB表示のアイテム=RGBリスト
表示(楽譜[0])
4 回
 表示(LEFT(楽譜[回数],72)&"・・・・")
ここまで

PX=230;PY=20;PS=80
鍵盤表示アプリ="C:\Program Files\TMIDI Player\TMIDI.EXE"
楽譜表示アプリ="C:\Program Files\PrintMusic 2006J Demo\PrintMusic.exe"

演奏開始ボタンとはボタン;そのX=PX+PS*0;そのY=PY
演奏開始ボタンをクリックした時は
 MML演奏(楽譜)

鍵盤表示ボタンとはボタン;そのX=PX+PS*1;そのY=PY
鍵盤表示ボタンをクリックした時は
 MML変換(楽譜,"temp.mid")
 起動("{鍵盤表示アプリ} temp.mid");ファイル完全削除("temp.mid")

楽譜表示ボタンとはボタン;そのX=PX+PS*2;そのY=PY
楽譜表示ボタンをクリックした時は
 MML変換(楽譜,"temp.mid")
 起動("{楽譜表示アプリ} 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

//ここまで



鍵盤表示ボタンで起動した、TMIDI Playerの画面



「なでしこ」でアルゴリズム作曲したMIDIデータを、Visualにチェックできるので、なかなか便利だ。
 

火曜日, 12月 19, 2006

「なでしこ」でフォトmusic その7

今日は昨日のプログラムをちょっと修正する。昨日のプログラムでは、尺八のパートの音階が琴と同じになっているので、尺八のパートがちょっと不自然だ。

そこで、琴の音階(平調子)と尺八の音階を分けてみた。これで、かなり本物の尺八っぽい音になる。

//フォトmusic_7
母艦="尺八・箏・三絃のための絵音"

Xsize=20; Ysize=10

言う("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択("*.jpg"); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={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)

音階[1]=区切(『"レ/"ミ♭/"ソ/"ラ/"シ♭/レ/ミ♭/ソ/ラ/シ♭/`ド/`レ/`ミ♭』 "/")
音階[2]=区切(『レ/"ソ/"ラ/シ♭/レ/ミ♭/ソ/ラ/シ♭/`レ/`ミ♭/`ソ/`ラ』 "/")

楽譜[0]="Tempo=96"
楽譜[1]="TR(1) 音色(Shakuhachi) v.Random(60) REV(100) V(100) P(64-00) o6 "
楽譜[2]="TR(2) 音色(Koto) v.Random(40) REV(80) V(080) P(64-40) o5 "
楽譜[3]="TR(3) 音色(Shamisen) v.Random(40) REV(80) V(100) P(64-00) o5 "
楽譜[4]="TR(4) 音色(Koto) v.Random(40) REV(80) V(060) P(64+40) o5 "

P=0
Xsize*Ysize 回
 T=1
 4 回
  音程=(RGBリスト[P,T+2]%13); 音長=RandomSelect("2,4,8")
  もし(T==1)ならば
   音符=音階[1,音程]&音長
  違えば
   音符=音階[2,音程]&音長
  ここまで
  楽譜[T]=楽譜[T]&音符; RGBリスト[P+1,T+6]=音符
  T=T+1
 ここまで
 P=P+1
ここまで

RGB表示とはグリッド; そのW=520; RGB表示のアイテム=RGBリスト
//表示(楽譜[0])
4 回
 表示(LEFT(楽譜[回数],72)&"・・・・")
ここまで

演奏開始ボタンとはボタン
演奏開始ボタンをクリックした時は
 MML演奏(楽譜)

●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

//ここまで



「尺八・箏・三絃のための絵音」MP3で聞いてみる
http://db1.voiceblog.jp/data/mugen_blog/1166533866.mp3
 

月曜日, 12月 18, 2006

「なでしこ」でフォトmusic その6

昨日までは、RGBのそれぞれの音に楽器を対応させてみたのだが、もう一つカラーコードの値も使うことができる。そこで、今日は、このカラーコードにも楽器を割り当ててみる。

トラック1(C)・・・・尺八
トラック2(R)・・・・琴
トラック3(G)・・・・三味線
トラック4(B)・・・・十七絃

//フォトmusic_6
母艦のタイトル="尺八・箏・三絃・十七絃のための絵音"

Xsize=20; Ysize=10

言う("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択("*.jpg"); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={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]="Tempo=96"
楽譜[1]="TR(1) 音色(Shakuhachi) v.Random(40) REV(80) V(100) P(64-00) o5 "
楽譜[2]="TR(2) 音色(Koto) v.Random(40) REV(80) V(080) P(64-40) o5 "
楽譜[3]="TR(3) 音色(Shamisen) v.Random(40) REV(80) V(100) P(64-00) o5 "
楽譜[4]="TR(4) 音色(Koto) v.Random(40) REV(80) V(060) P(64+40) o4 "

P=0
Xsize*Ysize 回
 T=1
 4 回
  音程=(RGBリスト[P,T+2]%13); 音長=RandomSelect("2,4,8")
  音符=音階[音程]&音長
  楽譜[T]=楽譜[T]&音符; RGBリスト[P+1,T+6]=音符
  T=T+1
 ここまで
 P=P+1
ここまで

RGB表示とはグリッド; そのW=520; RGB表示のアイテム=RGBリスト
//表示(楽譜[0])
4 回
 表示(LEFT(楽譜[回数],72)&"・・・・")
ここまで

演奏開始ボタンとはボタン
演奏開始ボタンをクリックした時は
 MML演奏(楽譜)

●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

//ここまで



「尺八・箏・三絃・十七絃のための絵音」MP3で聞いてみる
http://db1.voiceblog.jp/data/mugen_blog/1166442555.mp3
 

日曜日, 12月 17, 2006

「なでしこ」でフォトmusic その5

今日は、昨日と同じアルゴリズムをRGB毎に楽器を変えてやってみる。

トラック1(R)・・・・十三絃
トラック2(G)・・・・三絃
トラック3(B)・・・・十七絃

トラック3は、琴の音色を1オクターブ下げて、十七絃の雰囲気を出してみた。

//フォトmusic_5
母艦のタイトル="箏・三絃・十七絃のための絵音"

Xsize=20; Ysize=10

言う("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択("*.jpg"); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={Xsize} 縦={Ysize} に変換しました")

RGBリスト="連番,X座標,Y座標,色コード,R,G,B,音(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]="Tempo=96"
楽譜[1]="TR(1) 音色(Koto) v.Random(40) REV(80) V(080) P(64-40) o5 "
楽譜[2]="TR(2) 音色(Shamisen) v.Random(40) REV(80) V(100) P(64-00) o5 "
楽譜[3]="TR(3) 音色(Koto) v.Random(40) REV(80) V(060) P(64+40) o4 "
P=0
Xsize*Ysize 回
 T=1
 3 回
  音程=(RGBリスト[P,T+3]%13); 音長=RandomSelect("2,4,8")
  音符=音階[音程]&音長
  楽譜[T]=楽譜[T]&音符; RGBリスト[P+1,T+6]=音符
  T=T+1
 ここまで
 P=P+1
ここまで

RGB表示とはグリッド; そのW=480; RGB表示のアイテム=RGBリスト
表示(楽譜[0])
3 回
 表示(LEFT(楽譜[回数],72)&"・・・・")
ここまで

演奏ボタンとはボタン
演奏ボタンをクリックした時は
 MML演奏(楽譜)


●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

//ここまで



「箏・三絃・十七絃のための絵音」MP3で聞いてみる
http://db1.voiceblog.jp/data/mugen_blog/1166282552.mp3
 

土曜日, 12月 16, 2006

「なでしこ」でフォトmusic その4

なでしこ」でフォトmusic、昨日までは、RGBの値を一定の範囲のノートナンバーに変換していたのだが、この方法では音階がいわゆる12音階になってしまう。これはこれで面白いのだが、今日は、ある決まった音階の中から音を選ぶようにしてみる。

方法は、前にやった「文字を素材に音を作る」で使った方法と同じだ。最初は、琴の調弦の「平調子」の音階を作り、RGBの値に、この13個の音を対応させてみる。

//フォトmusic 4 三面の箏のための絵音

Xsize=20; Ysize=10

言う("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択("*.jpg"); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={Xsize} 縦={Ysize} に変換しました")

RGBリスト="連番,X座標,Y座標,色コード,R,G,B,TR(1),TR(2),TR(3)"

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]="Tempo=96"
楽譜[1]="TR(1) P(64-40) @(Koto) v.Random(40) REV(80) "
楽譜[2]="TR(2) P(64-00) @(Koto) v.Random(40) REV(80) "
楽譜[3]="TR(3) P(64+40) @(Koto) v.Random(40) REV(80) "
P=0
Xsize*Ysize 回
 T=1
 3 回
  音程=(RGBリスト[P,T+3]%13); 音長=RandomSelect("2,4,8"); 音符=音階[音程]&音長
  楽譜[T]=楽譜[T]&音符; RGBリスト[P+1,T+6]=音符
  T=T+1
 ここまで
 P=P+1
ここまで

RGB表示とはグリッド; そのW=480; RGB表示のアイテム=RGBリスト
表示(楽譜[0])
3 回
 表示(LEFT(楽譜[回数],72)&"・・・・")
ここまで

演奏ボタンとはボタン
演奏ボタンをクリックした時は
 楽譜をMML演奏

●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

//ここまで



「三面の箏のための絵音」MP3で聞いてみる
http://db1.voiceblog.jp/data/mugen_blog/1166177645.mp3
 

金曜日, 12月 15, 2006

「なでしこ」でフォトmusic その3

なでしこ」でフォトmusic、なかなか面白い曲ができあがる。今日は、昨日のプログラムをちょっとバージョンアップしてみる。

バージョンアップ項目

・色コードからRGBの値を求めるための処理関数(RGB分解)を作成
・絵から生成した音をトラック毎にグリッドを使って表示
・上記の処理で音の確認ができるのでMMLは最初の方だけを表示
・楽器の一つをビブラフォンに変更

といったところです。


//フォトmusic 3 ビブラフォンと2台のマリンバのための絵音

Xsize=20; Ysize=10

言う("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択("*.jpg"); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={Xsize} 縦={Ysize} に変換しました")

RGBリスト="連番,X座標,Y座標,色コード,R,G,B,TR(1),TR(2),TR(3)"

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]="Tempo=120"
楽譜[1]="TR(1) P(64-40) 音色(Marimba) v.Random(40) REV(80) "
楽譜[2]="TR(2) P(64-00) 音色(Vibraphone) v.Random(40) REV(80) "
楽譜[3]="TR(3) P(64+40) 音色(Marimba) v.Random(40) REV(80) "
P=0
Xsize*Ysize 回
 T=1
 3 回
  音程=(RGBリスト[P,T+3]%60)+40; 音長=RandomSelect("2,4,8")
  音符="n({音程}){音長}"
  楽譜[T]=楽譜[T]&音符; RGBリスト[P+1,T+6]=音符
  T=T+1
 ここまで
 P=P+1
ここまで

RGB表示とはグリッド; そのW=480; RGB表示のアイテム=RGBリスト

表示(楽譜[0])
3 回
 表示(LEFT(楽譜[回数],72)&"・・・・")
ここまで

演奏ボタンとはボタン
演奏ボタンをクリックした時は
 楽譜をMML演奏


●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

//ここまで



「ビブラフォンと2台のマリンバのための絵音」MP3で聞いてみる
http://db1.voiceblog.jp/data/mugen_blog/1166100695.mp3
 

木曜日, 12月 14, 2006

「なでしこ」でフォトmusic その2

今日の「なでしこ」でフォトmusicは、音の素材をピクセル毎のRGBの値にしてみる。ということは、ピクセル毎に3つの音ができる。

これを、3つのトラックに配分して、各トラックをマリンバで演奏させてみる。


//フォトmusic 2 3台のマリンバのための絵音

Xsize=20; Ysize=10

言う("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択("*.jpg"); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={Xsize} 縦={Ysize} に変換しました")

RGBリスト="連番,X座標,Y座標,色コード,R,G,B"

N=0;Y=0
Ysize 回
 X=0
 Xsize 回
  N=N+1
  C=画像色取得(画像WK,X,Y)
  R=INT(C/(256*256)); G=INT((C-R*256*256)/256); B=C-R*256*256-G*256
  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]="Tempo=120"
楽譜[1]="TR(1) P(64-40) @(Marimba) v.Random(40) REV(80) "
楽譜[2]="TR(2) P(64-00) @(Marimba) v.Random(40) REV(80) "
楽譜[3]="TR(3) P(64+40) @(Marimba) v.Random(40) REV(80) "
P=0
Xsize*Ysize 回
 T=1
 3 回
  音程=(RGBリスト[P,T+3]%60)+40; 音長=RandomSelect("4,8")
  楽譜[T]=楽譜[T]&"n({音程}){音長}"
  T=T+1
 ここまで
 P=P+1
ここまで

表示(楽譜[0]); 表示(楽譜[1]); 表示(楽譜[2]); 表示(楽譜[3])

演奏ボタンとはボタン
演奏ボタンをクリックした時は
 楽譜をMML演奏


●RandomSelect(N)
 A=区切(N,",");R=配列要素数(A);戻る(A[乱数(R)])

//ここまで



「3台のマリンバのための絵音」MP3で聞いてみる
http://db1.voiceblog.jp/data/mugen_blog/1166028410.mp3
 

水曜日, 12月 13, 2006

「なでしこ」でフォト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
 

火曜日, 12月 12, 2006

「なでしこ」でRGB分解

なでしこ」では、RGB関数でR,G,Bの値から色コードを作ることができるのだが、色コードからR,G,Bの値を取得する関数がない(ようだ)。

画像ファイルから取得した色コードをR,G,Bに分解しておけば、この値を利用した処理もできそうだ。

ということで、昨日のプログラムをちょっとV-UPして、各ピクセルのR,G,Bの値も計算して配列に入れてみる。

//RGBリスト

Xsize=40; Ysize=30

表示("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択(); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={Xsize} 縦={Ysize} に変換しました")

RGBリスト="連番,X座標,Y座標,色コード,R,G,B"

N=0;Y=0
Ysize 回
 X=0
 Xsize 回
  N=N+1
  C=画像色取得(画像WK,X,Y)
  R=INT(C/(256*256))
  G=INT((C-R*256*256)/256)
  B=C-R*256*256-G*256
  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
ここまで

RGB表示とはグリッド; RGB表示のアイテム=RGBリスト

//ここまで


 

月曜日, 12月 11, 2006

「なでしこ」で全ピクセルの情報を表示

今日は、前にやった色情報の取得を画像の全ピクセルについてやってみる。といっても何百万画素もの巨大な画像の情報を表示させるのも大変だ。

そこで、まず画像を40×30=1200ピクセルぐらいに縮小し、この色情報を取得してみる。方法は、縦(Y)方向と横(X)方向に順番にスキャンして、対象となったピクセルの色情報を取得し、これを配列に入れていく。

問題は、この取得した情報の表示方法だ。配列の数が1200個もあるので、これを表示命令で画面に出すのは難しい。実は「なでしこ」には、こんな配列の情報を表示させるのにぴったりの仕組みがあるのだ。それは、表計算ソフトのようにグリッド形式で表示するという方法だ。

グリッド
http://nadesi.com/doc/reference/gui/7-0-grid.htm

では、さっそく試してみることにする。

//RGBリスト

Xsize=40; Ysize=30

表示("画像を選択してください")
画像WKとはイメージ; FN=ファイル選択(); 画像WKの画像=FN
画像リサイズ(画像WK,Xsize,Ysize)
表示("{ファイル名抽出(FN)} を 横={Xsize} 縦={Ysize} に変換しました")

RGBリスト="連番,X座標,Y座標,色コード"

N=0;Y=0
Ysize 回
 X=0
 Xsize 回
  N=N+1
  RGBリスト[N,0]=N
  RGBリスト[N,1]=X
  RGBリスト[N,2]=Y
  RGBリスト[N,3]=画像色取得(画像WK,X,Y)
  X=X+1
 ここまで
 Y=Y+1
ここまで

RGB表示とはグリッド; RGB表示のアイテム=RGBリスト

//ここまで



こんな、表計算のようなプログラムが、驚くほど簡単にできてしまう。凄い!
 

日曜日, 12月 10, 2006

「なでしこ」でカラーネームを使う(続)

昨日は、色定数を拡張する方法を試してみたのだが、色の名前を毎回定義するのはちょっと大変だ。

「サクラ」で使っているGMの音色名のように、定義ファイルを予め作っておき、これをIncludeできるようにすれば、定数を簡単に使うことができる。

なでしこ」で、これと同じことをやるには、Include命令に相当する「取り込む」命令を使えば良い。

取り込む
http://nadesi.com/doc/cmd/doc.cgi?mode=cmd&id=189

それでは、早速この機能を使ってみることにする。まずは、下のプログラムを「色定数.nako」という名前で保存する。

//色定数
!Black =$000000
!Dimgray =$696969
!Gray =$808080
!Darkgray =$A9A9A9
!Silver =$C0C0C0
!Lightgrey =$D3D3D3
!Gainsboro =$DCDCDC
!Whitesmoke =$F5F5F5
!White =$FFFFFF
!Snow =$FFFAFA
!Ghostwhite =$F8F8FF
!Floralwhite =$FFFAF0
!Seashell =$FFF5EE
!Ivory =$FFFFF0
!Oldlace =$FDF5E6
!Linen =$FAF0E6
!Lavenderblush =$FFF0F5
!Mistyrose =$FFE4E1
!Antiquewhite =$FAEBD7
!Papayawhip =$FFEFD5
!Blanchedalmond =$FFEBCD
!Bisque =$FFE4C4
!Moccasin =$FFE4B5
!Navajowhite =$FFDEAD
!Peachpuff =$FFDAB9
!Pink =$FFC0CB
!Lightpink =$FFB6C1
!Hotpink =$FF69B4
!Deeppink =$FF1493
!Crimson =$DC143C
!Red =$FF0000
!Orangered =$FF4500
!Tomato =$FF6347
!Coral =$FF7F50
!LightCoral =$F08080
!Lightsalmon =$FFA07A
!Salmon =$FA8072
!Darksalmon =$E9967A
!RosyBrown =$BC8F8F
!Indianred =$CD5C5C
!FireBrick =$B22222
!Brown =$A52A2A
!Darkred =$8B0000
!Maroon =$800000
!Saddlebrown =$8B4513
!Sienna =$A0522D
!DarkGoldenrod =$B8860B
!Chocolate =$D2691E
!Peru =$CD853F
!Goldenrod =$DAA520
!Darkorange =$FF8C00
!Sandybrown =$F4A460
!Orange =$FFA500
!Gold =$FFD700
!Yellow =$FFFF00
!Khaki =$F0E68C
!Palegoldenrod =$EEE8AA
!Beige =$F5F5DC
!Cornsilk =$FFF8DC
!Lightyellow =$FFFFE0
!Lightgoldenrodyellow=$FAFAD2
!Lemonchiffon =$FFFACD
!Wheat =$F5DEB3
!Burlywood =$DEB887
!Tan =$D2B48C
!Slategray =$708090
!Lightslategray =$778899
!Lightsteelblue =$80C4DE
!Steelblue =$4682B4
!Royalblue =$4169E1
!Darkkhaki =$BDB76B
!Olive =$808000
!Olivedrab =$6B8E23
!Yellowgreen =$9ACD32
!Limegreen =$32CD32
!Lime =$00FF00
!Lawngreen =$7CFC00
!Chartreuse =$7FFF00
!Greenyellow =$ADFF2F
!Springgreen =$00FF7F
!Mediumspringgreen =$00FA9A
!Aquamarine =$7FFFD4
!Mediumaquamarine =$66CDAA
!Palegreen =$98FB98
!LightGreen =$90EE90
!Mediumseagreen =$3CB371
!Darkseagreen =$8FBC8F
!Forestgreen =$228B22
!Green =$008000
!Darkgreen =$006400
!Darkolivegreen =$556B2F
!Seagreen =$2E8B57
!DarkSlategray =$2F4F4F
!Teal =$008080
!Darkcyan =$008B8B
!Cadetblue =$5F9EA0
!Lightseagreen =$20B2AA
!Darkturquoise =$00CED1
!Mediumturquoise =$48D1CC
!Turquoise =$40E0D0
!Aqua =$00FFFF
!Cyan =$00FFFF
!LightCyan =$E0FFFF
!HoneyDew =$F0FFF0
!Mintcream =$F5FFFA
!Azure =$F0FFFF
!Aliceblue =$F0F8FF
!Lavender =$E6E6FA
!Paleturquoise =$AFEEEE
!Powderblue =$B0E0E6
!Lightblue =$ADD8E6
!Skyblue =$87CEFA
!Lightskyblue =$87CEEB
!Deepskyblue =$00BFFF
!Dodgerblue =$1E90FF
!Cornflowerblue =$6495ED
!Mediumslateblue =$7B68EE
!Slateblue =$6A5ACD
!Mediumpurple =$9370DB
!Blueviolet =$8A2BE2
!Darkslateblue =$483D8B
!Indigo =$4B0082
!Purple =$800080
!Darkmagenta =$8B008B
!Darkviolet =$9400D3
!Darkorchid =$9932CC
!Mediumorchid =$BA55D3
!Orchid =$DA70D6
!Plum =$DDA0DD
!Thistle =$D8BFD8
!Violet =$EE82EE
!Fuchsia =$FF00FF
!Magenta =$FF00FF
!Mediumvioletred =$C71585
!Palevioletred =$DB7093
!Blue =$0000FF
!Mediumblue =$0000CD
!Darkblue =$00008B
!Navy =$000080
!Midnightblue =$191970
//ここまで



これが出来てしまえば、後は、プログラムで次のように書いておけば、HTMLと同じ色定数が使えるようになる。

!"色定数.nako"を取り込む