西行 Ver.2
初版 2019/08/20 08:08
改訂 2019/08/20 08:32
アルバム「西行」の製作に使った「なでしこ」で書いたプログラムのソースコードです。
// 西行 Ver.2
!"lib.nako"を取り込む
母艦のタイトルは "西行"
和歌=読む("和歌.txt"); S_UTA=""
行数(和歌) 回
S_UTA=S_UTA&和歌[回数]&"|"
調弦=読む("調弦.txt"); S_CGN=""
行数(調弦) 回
S_CGN=S_CGN&調弦[回数]&"|"
調歌=読む("調歌.txt"); S_CUT=""
行数(調歌) 回
S_CUT=S_CUT&調歌[回数]&"|"
DN=尋ねる("データ名")
もし(DN!="")なら
PE=読む("{デスクトップ}{DN}.ini")
違えば
PE=項目記入(「データ名=temp
乱数SEED=
TEMPO=48
和歌選択=?({S_UTA})つきみればかぜにさくらのえだなえてはなよとつぐるここちこそすれ
調弦選択=?({S_CGN})平調子/'レ"ソ'/レ/"ソ/"ラ/"シ♭/レ/ミ♭/ソ/ラ/シ♭/`レ/`ミ♭/`ソ/`ラ
歌_1音階=?({S_CUT})ソ/ラ/シ♭/`ド/`レ/`ソ
歌_2音階=?({S_CUT})ソ/ラ/シ♭/`ド/`レ/`ソ
歌_1音符=2 2 4 2 1
歌_2音符=1 2 4 2 2
箏_1音符=2 2 2 4 1
箏_2音符=4 2 2 2 1
前奏小節=16
前奏速度=0
前奏箏_1=2 4 8 8
前奏箏_2=2 2 4
歌_1選択=
歌_2選択=//
箏_1選択=
箏_2選択=
」)
PM=PE
TR1=PM@歌_1選択; TR2=PM@歌_2選択; TR3=PM@箏_1選択; TR4=PM@箏_2選択;
調弦=区切(PM@調弦選択,"/"); 音階_1=区切(PM@歌_1音階,"/"); 音階_2=区切(PM@歌_2音階,"/")
和歌=PM@和歌選択; 文字=文字列分解(和歌)
表示("[データ名]{改行}{PM@データ名}"); 表示("[選択した和歌]{改行}{和歌}"); 表示("[選択した調弦]{改行}{調弦[0]}");
配列削除(調弦,0)
もし(PM@乱数SEED!="")ならば
SEED=PM@乱数SEED
違えば
5 回
SEED=SEED+ASC(文字[回数-1]);表示("{文字[回数-1]} {ASC(文字[回数-1])}")
乱数初期化(SEED)
表示("[乱数の種]{改行}{SEED}");
utau_1=""; utau_2=""; koto_1=""; koto_2=""; u_L[1]=0; u_L[2]=0;
文字数(和歌) 回
N1=音階_1[ASC(文字[回数-1])%(配列要素数(音階_1))]; L1=RandomSelect(PM@歌_1音符);
N2=音階_2[ASC(文字[回数-1])%(配列要素数(音階_2))]; L2=RandomSelect(PM@歌_2音符);
utau_1=utau_1&『Lyric={"』&文字[回数-1]&『"} 』&N1&L1&" "
utau_2=utau_2&『Lyric={"』&文字[回数-1]&『"} 』&N2&L2&" "
u_L[1]=u_L[1]+1/L1; u_L[2]=u_L[2]+1/L2;
伴奏L=CEIL(配列最大値(u_L))+2;
koto_1=Compose1(伴奏L,"4/4",PM@箏_1音符,配列結合(調弦," "))
koto_2=Compose1(伴奏L,"4/4",PM@箏_2音符,配列結合(調弦," "))
utau_1Z="[{PM@前奏小節} r1]"
utau_2Z="[{PM@前奏小節} r1]"
koto_1Z=Compose1(PM@前奏小節,"4/4",PM@前奏箏_1,配列結合(調弦," "))
koto_2Z=Compose1(PM@前奏小節,"4/4",PM@前奏箏_2,配列結合(調弦," "))
楽譜=「Tempo={PM@TEMPO+PM@前奏速度} TrackName={波カッコ}"{PM@和歌選択}"{波カッコ閉じ}
{TR1}TR(1) 音色(Oboe) P(64-12) REV(40) CHO(5) M(50) q(100) v.Random(50) t.Random(12) {utau_1Z} Tempo={PM@TEMPO} r{RandomSelect("1 2")} r4 {utau_1}
{TR2}TR(2) 音色(Oboe) P(64+12) REV(40) CHO(5) M(50) q(100) v.Random(50) t.Random(12) {utau_2Z} Tempo={PM@TEMPO} r{RandomSelect("1 2")} r4 {utau_2}
{TR3}TR(3) 音色(Koto) P(64-32) REV(20) v.Random(50) t.Random(2) q(100) {koto_1Z} r2 {koto_1}
{TR4}TR(4) 音色(Koto) P(64+32) REV(20) v.Random(50) t.Random(2) q(100) {koto_2Z} r2 {koto_2}
」
メモ記入("{楽譜}")
保存(楽譜,"{デスクトップ}{PM@データ名}.mml")
保存(PE,"{デスクトップ}{PM@データ名}.ini")
MML変換(楽譜,"{デスクトップ}{PM@データ名}.mid"); 起動("{デスクトップ}{PM@データ名}.mid")
●Compose1(小節数,拍子,音長,音高)
拍子=区切(拍子,"/"); m=小節数*拍子[0]*(4/拍子[1])
SC=""; tt=0; 音階=区切(音高," ")
(tt<m)の間
tw=区切(RandomSelect(音長),"/")
配列要素数(tw)回
もし(tt>=m)ならば
抜ける
もし(数字か判定(音階[0])=真)ならば
n="n("&Random(EVAL(音階[0]),EVAL(音階[1]))&")"
違えば
n=RandomSelect(音高)
tm=tw[回数-1]; to=tt; tt=tt+(1/tm)*4
もし(tt>m)ならば
tm=1/(m-to)*4
l=tm
もし((tt>m)&&(m-to)==0.75)ならば
l="8."; tt=m
もし((tt>m)&&(m-to)==1.50)ならば
l="4."; tt=m
もし((tt>m)&&(m-to)==1.75)ならば
l="4.."; tt=m
SC=SC&n&l&" "
戻る(SC)
春歌 Ⅱ 生成パラメータ
データ名=1-2
乱数SEED=
TEMPO=40
和歌選択=はるかぜのはなをちらすとみるゆめはさめてもむねのさわぐなりけり
調弦選択=楽調子/'レソ'/レ/ソ/ラ/ド/レ/ファ/ソ/ラ/`ド/`レ/`ファ/`ソ/`ラ
歌_1音階=``ド/`ラ/`ソ/`ファ/`レ/`ド/ラ
歌_2音階=`ソ/`ファ/`レ/`ド/ラ/ソ/ファ
歌_1音符=2 2 4 2 1
歌_2音符=1 2 4 2 2
箏_1音符=8 8 2 4 1
箏_2音符=4 2 2 2 1
前奏小節=24
前奏速度=8
前奏箏_1=8 8 2 4 8 8
前奏箏_2=2 2 4
#プログラミング #なでしこ
mugen
様々なプログラミング言語を使って、音楽を自動作曲しています。
使用している言語
・awk
・COBOL
・JavaScript
・R
・サクラ
・ドリトル
・なでしこ
https://yamazawa.bandcamp.com/
17人がフォロー中
-
Visits
107,928
-
Items
1,160
-
Lab Logs
100
-
Likes
777
Since August 2019