/*
Minimal Generator

Dj Hino


ハードミニマルテクノって無機質なフレーズの繰り返しだけど、
もしかしてフレーズを全部ランダムにしてもそれっぽくなるんじゃね？と思ったので、
再生するたびにランダムなフレーズを生成して繰り返すだけのテクノマシーンを作ってみました。

何回か再生するとかなりカッコいい曲が出来たりして、意外と侮れないです。


ランダムになっている個所
1．ベースの音程
2．ランダムなフレーズ3種(1つは2分音符分、2つは4分音符分)
3．キックの音程とオカズのフレーズ
4．ハイハットとクラップの音程
*/
ResetGS

Tempo 150

CH(11) SysEx$ = f0,41,10,42,12,{40,1a,15,02},f7;
CH(12) SysEx$ = f0,41,10,42,12,{40,1b,15,02},f7;
CH(13) SysEx$ = f0,41,10,42,12,{40,1c,15,02},f7;
CH(14) SysEx$ = f0,41,10,42,12,{40,1d,15,02},f7;

//CuePoint={"TwmReverb(127,117,70,127)"}
Include(delay.h)
Include (unison.h)
Include(groove.h)
//MidiDelay({},3,!8)
//OctaveUnison (
//Swing16(6)

Function PhraseGenerator(Int Low, Int High, Int Len){
  STR A
  STR B
  For(Int I = 0; I<Len; I++){
    If(Random(0, 3) != 0){
      A = A + {EP }
	B = Random(40,127)
	A = A + B + { n}
      B = Random(Low,High)
      A = A + B
    }Else{
      A = A + {r}
    }
  }
  Result = A
}


Function KickGenerator(Int Len){
  STR A
  STR B
  For(Int I = 0; I<Len; I++){
    If(Random(0, 5) != 0){
      A = A + {c16}
    }Else{
      A = A + {r16}
    }
  }
  Result = A
}


TR 3
@ 39,1
V 127
v 127
EP 117
REV 0
CHO 0
Int pit = Random(25,35)

l8

[32r n(pit)]
[32r n(pit)]
[32r n(pit)]
[32r n(pit)]

TR 4
@ Random(1, 127)
V 127
v 127
EP 127
REV 10
CHO 0

STR Phrase1 = PhraseGenerator(40, 60, 8)
l16

[16Phrase1]
[16Phrase1]
[16Phrase1]
[16Phrase1]

TR 5
@ Random(1, 127)
V 127
v 127
EP 127
REV 10
CHO 0
STR Phrase2 = PhraseGenerator(50, 70, 16)

l16
[8r1]
[8Phrase2]
[8r1]
[8Phrase2]

TR 6
@ Random(1, 127)
V 127
v 127
EP 127
REV 10
CHO 0
STR Phrase3 = PhraseGenerator(70, 90, 16)

l16
[8r1]
[8r1]
[8Phrase3]
[8Phrase3]

TR 10
@ 27,90
V 127
v 127
EP 127
REV 0
CHO 30
BR 100
p Random(59,63)
<<
STR KickPhrase

[30c]
KickPhrase = KickGenerator(8)
KickPhrase

[30c]
KickPhrase = KickGenerator(8)
KickPhrase

[30c]
KickPhrase = KickGenerator(8)
KickPhrase

[30c]
KickPhrase = KickGenerator(8)
KickPhrase

TR 11
@ 27,90
V 127
v 127
EP 110
REV 0
CHO 0
BR 100
p Random(55, 70)
P 0
<<
[8r1]

[32r8f+8]

[32r8f+8]

[32r8f+8]

TR 12
@ 27,7
V 127
v 127
EP 100
REV 0
CHO 0
BR 100
p Random(59, 70)
<<
[8r1]
[8r1]

[32r8d+8]

[32r8d+8]


TR 13
@ 27,7
V 127
v 127
EP 50
REV 30
CHO 0
BR 100
p 69
<<
[8r1]
[8r1]
[8r1]
[128f+16]
