アルバム「Apparition」制作ノート
フランスの詩人 Stephane MALLARME (1842-1898) 16行詩 「Apparition」 を素材に使っ た作品。 16 行ある詩編を、 韻を踏んでいる2行を一組にして全部で8曲の構成にしてみ ました。 ボーカル (ソプラノ)と古風な2台のハープによる演奏になっています。
[生成アルゴリズム ]
全音階 (Whole Tone) による音列と曲毎に決めた音符長のセットから曲を自動生成しまし た。 音符毎の音程と長さは対応する文字コードから決定しています。
[プログラム ] (RScript)
mus_c=function( part=c( 1,2) ,tempo=120,ts="4,4",scle="c d e f g a b",octv=5,lgth="2
4",q=100,qf=0,fluc=0,inst=1,script="R Music Generator",pan=0,vrnd=20,msr=NA,sp="
",sdef="0,0,0,0,0,0,0",rev=0,cho=0){
script=iconv(gsub("¥n", "",script),"UTF-8","SHIFT_JIS")
data=as.numeric(charToRaw(script))
for(i in 1:length(part)){
if(is.na(pan[i])==T)pan[i]=pan[1]
if(is.na(inst[i])==T)inst[i]=inst[1]
if(is.na(octv[i])==T)octv[i]=octv[1]
if(is.na(scle[i])==T)scle[i]=scle[1]
if(is.na(lgth[i])==T)lgth[i]=lgth[1]
if(is.na(q[i])==T)q[i]=q[1]
if(is.na(qf[i])==T)qf[i]=qf[1]
if(is.na(sp[i])==T)sp[i]=sp[1]
if(is.na(fluc[i])==T)fluc[i]=fluc[1]
if(is.na(vrnd[i])==T)vrnd[i]=vrnd[1]
if(is.na(rev[i])==T)rev[i]=rev[1]
if(is.na(cho[i])==T)cho[i]=cho[1]
}
nnum=length(data)
tone=matrix(nrow=length(part),ncol=256)
leng=matrix(nrow=length(part),ncol=256)
for(i in 1:length(part)){
set.seed(sum(data))
for(j in 1:256){
tone[i,j]=sample(strsplit(scle[i]," ")[[1]],1)
leng[i,j]=sample(strsplit(lgth[i]," ")[[1]],1)
}
}
not=matrix(nrow=length(part),ncol=nnum)
len=matrix(nrow=length(part),ncol=nnum)
mml=c()
for(i in 1:length(part)){
not[i,]=tone[i,data]
len[i,]=leng[i,data]
mml[i]=paste("o",octv[i],"¥n",sep="")
for(j in 1:nnum){
if (data[j]==32 & sp[i]!=""){note=sp[i]} else {note=not[i,j]}
mml[i]=paste(mml[i],"l",len[i,j],"q",q[i]+qf[i]*RandomSelect(c(-1,1)),note," ",sep="")
}
}
seed=paste("System.RandomSeed=",sum(data),sep="")
kflg=paste("KeyFlag=(",sdef,")",sep="")
titl=paste("TrackName={",'"',script, '"',"}",sep="")
tmpo=paste("TimeSignature=",ts," Tempo=",tempo,sep="")
trk=c()
for(i in 1:length(part)){
trk[ i] =paste( "TR=",part[ i] ," P=",64+pan[ i] ," @",inst[ i] ," v.Random=",vrnd[ i] ,"
t.Random=",fluc[i]," REV=",rev[i]," CHO=",cho[i]," ",mml[i],sep="")
}
if( is.na( msr) ==T) { ptime=""} else{ ptime=paste( "PlayFrom( -1:3:0) PlayTo( ",msr+1,":1:0)
",sep="")}
md=data.frame(code=data)
for(i in 1:length(part)){
md[paste("note_",i,sep="")]=not[i,]; md[paste("lgth_",i,sep="")]=len[i,];
}
return(list(seed,kflg,titl,tmpo,paste(trk,collapse="¥n"),ptime,md))
}
play=function(score){
write( paste( score[ 1:ifelse( is.data.frame( score[ [ length( score) ] ] ) ==T,length( score) -1,length
(score))],sep="¥n"),file="tmp.mml")
shell("csakura -p tmp.mml> nul")
}score=mus_c(
part=c(1,2,3),
tempo=48,
ts="4,4",
scle=c("d a d e f g a b >c< >d<","'de' a g a d e f g a b >c< >d< <a> 'cdga' 'de' 'fad'","d e f g a b >
c< >d< <a> 'de' 'fad'"),
octv=c(6,5,5),
lgth=c("1 4 2 4","4 1 2 4","4 2 1 4"),
q=c(98,98,98),
qf=c(0,20,20),
fluc=c(10,30,30),
inst=c(55,47,47),
pan=c(0,-32,+32),
vrnd=c(20,60,60),
rev=c(80,80,80),
cho=c(2,2,2),
#msr =32,
sp=c("r","",""),
sdef="-1,-1,0,0,0,-1,-1", # -1,-1,0,0,0,-1,-1 -1,0,0,0,-1,0,0
script="
La lune s'attristait. Des seraphins en pleurs
Revant, l'archet aux doigts, dans le calme des fleurs
"
play(score)
lgth=
1 "1 4 2 4","4 1 2 4","4 2 1 4"
2 "1 2 4 4","4 2 1 4","4 1 2 4"
3 "1 4 4 2","1 4 4 2","4 1 4 2"
4 "2 4 4 1","4 2 4 1","2 4 4 1"
5 "2 4 4 1","2 4 4 1","4 2 4 1"
6 "4 2 4 1","4 2 4 1","2 4 4 1"
7 "4 4 2 1","4 2 4 1","4 4 2 1"
8 "4 2 1 4","4 1 2 4","2 4 1 4"
script=
1 " La lune s'attristait. Des seraphins en pleurs Revant, l'archet aux doigts, dans le calme des fleurs"
2 " Vaporeuses, tiraient de mourantes violes De blancs sanglots glissant sur l'azur des corolles."
3 " C'etait le jour beni de ton premier baiser. Ma songerie aimant a me martyriser"
4 " S'enivrait savamment du parfum de tristesse Que meme sans regret et sans deboire laisse"
5 " La cueillaison d'un Reve au coeur qui l'a cueilli. J'errais donc, l'oeil rive sur le pave vieilli"
6 " Quand avec du soleil aux cheveux, dans la rue Et dans le soir, tu m'es en riant apparue"
7 " Et j'ai cru voir la fee au chapeau de clarte Qui jadis sur mes beaux sommeils d'enfant gate"
8 " Passait, laissant toujours de ses mains mal fermees Neiger de blancs bouquets d'etoiles
parfumees."
[アートワーク ]
[R] で描いたローレンツアトラクタの3Dプロットを画像処理して作成しました。