JUNO-G の音色定義ファイルを作る
初版 2019/09/02 18:19
改訂 2019/09/03 21:35
JUNO-Gを演奏させるプログラムを作りやすくするため、音色定義ファイルを作ってみる。
完成したデータ(JUNO-G.h)がこれです。全部で768行あります。
![](https://muuseo-jp.s3-ap-northeast-1.amazonaws.com/uploads/1567413139457-s8rv6tynh6i-24ced8fc9b8bbb708219f155c88fa1bb/JUNO-G_h.jpg)
サクラの音色指定(プログラムチェンジ)は次のように書きます。
@(PC#,MSb,LSB)
この( )の中に書いてある配列に名前を付けておけば、プログラムも書きやすくなりますし、音色のイメージもわかりやすくなります。
まずはプリセット音色の定義がか書いてあるマニュアルのページから、コピペしてグループ毎のテキストデータを作ります。グループAだと、こんな感じのデータになります。
![](https://muuseo-jp.s3-ap-northeast-1.amazonaws.com/uploads/1567413471982-jvdelsvwilt-24ced8fc9b8bbb708219f155c88fa1bb/PR-A_s.jpg)
![](https://muuseo-jp.s3-ap-northeast-1.amazonaws.com/uploads/1567413478249-78lv4ra7cxl-24ced8fc9b8bbb708219f155c88fa1bb/jJUO-G_t.jpg)
awkで整形してCSVデータ(pr-set_1.csv)を作ります。
![](https://muuseo-jp.s3-ap-northeast-1.amazonaws.com/uploads/1567413575849-1l98lotvc97-24ced8fc9b8bbb708219f155c88fa1bb/JUNO-G_d.jpg)
[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
サクラで内容をチェックしてみます。
![](https://muuseo-jp.s3-ap-northeast-1.amazonaws.com/uploads/1567414367826-fdtw8fnd3rm-24ced8fc9b8bbb708219f155c88fa1bb/sakura_def.jpg)
音色名の重複がかなりあるので、重複しているほうの名前の前に"_"を付けて、名前が一意になるようにします。
ということで、サクラではこんな感じのプログラムが書けるようになります。
![](https://muuseo-jp.s3-ap-northeast-1.amazonaws.com/uploads/1567415693406-2t0qhyy1onm-24ced8fc9b8bbb708219f155c88fa1bb/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%89%E4%B8%80%E6%99%82%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB01.jpg)
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+" 秒)
![](https://muuseo-jp.s3-ap-northeast-1.amazonaws.com/uploads/1567415739278-38519fhxrib-24ced8fc9b8bbb708219f155c88fa1bb/20190902_180730351.jpg)
CSVデータを表計算ソフトに読み込めば、簡易な音色データベースになります。音色を探したり、音色名をコピペしたりと、便利に使えます。
![](https://muuseo-jp.s3-ap-northeast-1.amazonaws.com/uploads/1567417681853-3sg6a5c998-00062db03fafe0c7bf21bcf223610647/calc.jpg)
テキスト処理ならawkですよ。awkは大好きな言語です。
#プログラミング #JUNO-G #サクラ #awk
![File](https://d17x1wu3749i2y.cloudfront.net/2019/08/01/18/45/52/659413ae-4e5b-45a3-99ba-7831945efb12/file.jpg)
mugen
様々なプログラミング言語を使って、音楽を自動作曲しています。
使用している言語
・awk
・COBOL
・JavaScript
・R
・サクラ
・ドリトル
・なでしこ
https://yamazawa.bandcamp.com/
17人がフォロー中
-
Visits
101,008
-
Items
1,157
-
Lab Logs
100
-
Likes
776
Since August 2019
![Default](https://d3caz7hhiepl95.cloudfront.net/assets/user/default-6344dcd9594efe2c770024a51c383175.png)