JUNO-G の音色定義ファイルを作る
初版 2019/09/02 18:19
改訂 2019/09/03 21:35
JUNO-Gを演奏させるプログラムを作りやすくするため、音色定義ファイルを作ってみる。
完成したデータ(JUNO-G.h)がこれです。全部で768行あります。
サクラの音色指定(プログラムチェンジ)は次のように書きます。
@(PC#,MSb,LSB)
この( )の中に書いてある配列に名前を付けておけば、プログラムも書きやすくなりますし、音色のイメージもわかりやすくなります。
まずはプリセット音色の定義がか書いてあるマニュアルのページから、コピペしてグループ毎のテキストデータを作ります。グループAだと、こんな感じのデータになります。
awkで整形してCSVデータ(pr-set_1.csv)を作ります。
[pr_convert.awk]
BEGIN{
OFS=","
}
{
if (NF==7){ct=$(NF-1) "." $NF; nm=$2 $3 $4;}
if (NF==6){ct=$NF; nm=$2 " " $3 " " $4;}
if (NF==5){ct=$NF; nm=$2 " " $3;}
if (NF==4){ct=$NF; nm=$2;}
sn=nm
gsub("& ","",sn)
gsub(/['!?().\/]/,"",sn)
gsub(/[ +&-]/,"_",sn)
if (substr(sn,1,1)<="9"){sn="_" sn}
print st,NR,nm,sn,ct
}
$1 グループ
$2 PC#
$3 音色名
$4 サクラ用の音色変数名
$5 カテゴリー
awk -f pr_convert.awk -v st="A" PR-A.txt > pr-set.csv
awk -f pr_convert.awk -v st="B" PR-B.txt >> pr-set.csv
awk -f pr_convert.awk -v st="C" PR-C.txt >> pr-set.csv
awk -f pr_convert.awk -v st="D" PR-D.txt >> pr-set.csv
awk -f pr_convert.awk -v st="E" PR-E.txt >> pr-set.csv
awk -f pr_convert.awk -v st="F" PR-F.txt >> pr-set.csv
連番を振っておきます。
awk '{print NR "," $0}' pr-set.csv > pr-set_1.csv
このCSVデータから音色の定義ファイルを作ります。
[JUNO-G_PR.awk]
{
if ($2=="A"){lsb=64}
if ($2=="B"){lsb=65}
if ($2=="C"){lsb=66}
if ($2=="D"){lsb=67}
if ($2=="E"){lsb=68}
if ($2=="F"){lsb=69}
print "Array " $5 "=(" $3 ",87," lsb ") // " $4
}
awk -f JUO-G_pr.awk pt-set_1.csv > JUNO-G.h
サクラで内容をチェックしてみます。
音色名の重複がかなりあるので、重複しているほうの名前の前に"_"を付けて、名前が一意になるようにします。
ということで、サクラではこんな感じのプログラムが書けるようになります。
Include(JUNO-G.h)
System.RandomSeed=0001
@(Warm_Strings)
Tempo=30
v.Random=24 t.Random=240 q(Random(90,160))
[(16*16) Time(Random(16)+1:Random(4)+1:0) n(Random(12,96))]
Int TM=Time/TimeBase*(600000/Tempo)/10000 Print("演奏は "+TM/60+" 分 "+ TM%60+" 秒)
CSVデータを表計算ソフトに読み込めば、簡易な音色データベースになります。音色を探したり、音色名をコピペしたりと、便利に使えます。
テキスト処理ならawkですよ。awkは大好きな言語です。
#プログラミング #JUNO-G #サクラ #awk
mugen
様々なプログラミング言語を使って、音楽を自動作曲しています。
使用している言語
・awk
・COBOL
・JavaScript
・R
・サクラ
・ドリトル
・なでしこ
https://yamazawa.bandcamp.com/
17人がフォロー中
-
Visits
109,565
-
Items
1,160
-
Lab Logs
100
-
Likes
779
Since August 2019