/*

交差と変異



試行錯誤の続き。

*/
//------------------------------------------------------------------------------

//元になる音
Array SrcA=("c","c","c","c","c","c","c","r")
Array SrcB=("c","c","c","c","c","c","c","r")

//出力先
Array DstA
Array DstB

Str Buffer

//交差ポイント
Int CrossPoint

//カウンタ、インデックス
Int I
Int J

//------------------------------------------------------------------------------

//リピート指定
[4

//何回かまとめて実行させたい場合(1回ずつだと変化するまでが長すぎる)
[128

//交差
CrossPoint=Random(8)//交差ポイントを振る
//ポイント手前まで読む
For(I=0;I<CrossPoint;I++){
    DstA(I)=SrcA(I)
    DstB(I)=SrcB(I)
}
//ポイントから後を読む
For(I=CrossPoint;I<8;I++){
    DstA(I)=SrcB(I)
    DstB(I)=SrcA(I)
}

//変異
If(Random(8)==0){//ゼロの時だけ
Switch(DstA(CrossPoint)){//交差ポイントで変異する
Case("c"){DstA(CrossPoint)="b"}
Case("d"){DstA(CrossPoint)="e"}
Case("e"){DstA(CrossPoint)="a"}
Case("f"){DstA(CrossPoint)="d"}
Case("g"){DstA(CrossPoint)="g"}
Case("a"){DstA(CrossPoint)="c"}
Case("b"){DstA(CrossPoint)="f"}
Default{DstA(CrossPoint)="r"}
}
}

//次回リピート用にSrcを更新
SrcA=DstA
SrcB=DstB

]
//演奏確認
TR(1) o5 l1
For(J=0;J<8;J++){
    Buffer=Buffer+(DstA(J))
}
Print(Buffer)
Buffer
Buffer=""

/*

//前に音列いじってた時の名残
TR(2) o4 l1
For(J=0;J<8;J++){
    Buffer=Buffer+(SrcA(J))
}
Print(Buffer)
Buffer
Buffer=""

TR(3) o4 l1
For(J=0;J<8;J++){
    Buffer=Buffer+(SrcB(J))
}
Print(Buffer)
Buffer
Buffer=""

*/

TR(4) o3 l1
For(J=0;J<8;J++){
    Buffer=Buffer+(DstB(J))
}
Print(Buffer)
Buffer
Buffer=""

Print("")

]

//------------------------------------------------------------------------------