Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.89 KB | None | 0 0
  1. defmodule Techno2 do
  2. @part_list [:drum, :bass, :syn1, :syn2]
  3. @part_channel_map %{ drum: "K", bass: "A" , syn1: "D" , syn2: "E"}
  4. @kick "@10c"
  5. @hihat "@12c"
  6.  
  7. def gen_blocks(list) do
  8. list
  9. |> Enum.map(fn b -> gen_block(b) end )
  10. end
  11.  
  12. def to_mml(music) do
  13. music
  14. |> List.flatten
  15. |> Enum.reduce("", fn e, acc -> acc <> e <> "\n" end)
  16. end
  17.  
  18. def gen_block(block) do
  19. @part_list
  20. |> Enum.map( fn part -> gen_part(part, block) end)
  21. end
  22.  
  23. def gen_units(units) do
  24. units
  25. |> Enum.map( fn unit -> gen_unit(unit) end)
  26. end
  27.  
  28.  
  29. def gen_music() do
  30. [:header,
  31. :intro, :amelo, :bmelo, :amelo2, :bmelo2,
  32. :intro, :amelo, :amelo2, :bmelo2, :bmelo2,
  33. :outro]
  34. |> gen_blocks()
  35. |> to_mml()
  36. end
  37.  
  38. # header part
  39. def gen_part(part, phrases) when is_list(phrases) do
  40. phrases
  41. |> Enum.map(fn phrase -> gen_phrase(part, phrase) end)
  42. end
  43.  
  44. def gen_part(:drum, :header) do gen_part(:drum, [:drum_header]) end
  45. def gen_part(:bass, :header) do gen_part(:bass, [:bass_header]) end
  46. def gen_part(:syn1, :header) do gen_part(:syn1, [:syn1_header]) end
  47. def gen_part(:syn2, :header) do gen_part(:syn2, [:syn2_header]) end
  48.  
  49. # intro part
  50. def gen_part(:drum, :intro) do gen_part(:drum, [:drum_11, :drum_12]) end
  51. def gen_part(:bass, :intro) do gen_part(:bass, [:bass_11, :bass_12]) end
  52. def gen_part(:syn1, :intro) do gen_part(:syn1, [:rest , :syn1_intro]) end
  53. def gen_part(:syn2, :intro) do gen_part(:syn2, [:rest , :syn2_intro]) end
  54.  
  55. # amelo part
  56. def gen_part(:drum, :amelo) do gen_part(:drum, [:drum_11, :drum_12]) end
  57. def gen_part(:bass, :amelo) do gen_part(:bass, :intro) end
  58. def gen_part(:syn1, :amelo) do gen_part(:syn1, [:syn1_11, :syn1_12]) end
  59. def gen_part(:syn2, :amelo) do gen_part(:syn2, [:rest, :rest]) end
  60.  
  61. # bmelo part
  62. def gen_part(:drum, :bmelo) do gen_part(:drum, [:drum_21, :drum_22]) end
  63. def gen_part(:bass, :bmelo) do gen_part(:bass, [:bass_21, :bass_22]) end
  64. def gen_part(:syn1, :bmelo) do gen_part(:syn1, [:syn1_21, :syn1_22]) end
  65. def gen_part(:syn2, :bmelo) do gen_part(:syn2, [:rest, :rest]) end
  66.  
  67. # amelo part
  68. def gen_part(:drum, :amelo2) do gen_part(:drum, [:drum_11, :drum_12]) end
  69. def gen_part(:bass, :amelo2) do gen_part(:bass, :intro) end
  70. def gen_part(:syn1, :amelo2) do gen_part(:syn1, [:syn1_11, :syn1_12]) end
  71. def gen_part(:syn2, :amelo2) do gen_part(:syn2, [:syn2_11, :syn2_12]) end
  72.  
  73. # bmelo part
  74. def gen_part(:drum, :bmelo2) do gen_part(:drum, [:drum_21, :drum_22]) end
  75. def gen_part(:bass, :bmelo2) do gen_part(:bass, [:bass_21, :bass_22]) end
  76. def gen_part(:syn1, :bmelo2) do gen_part(:syn1, [:syn1_21, :syn1_22]) end
  77. def gen_part(:syn2, :bmelo2) do gen_part(:syn2, [:syn2_21, :syn2_22]) end
  78.  
  79. # outro part
  80. def gen_part(:drum, :outro) do gen_part(:drum, [:drum_11]) end
  81. def gen_part(:bass, :outro) do gen_part(:bass, [:bass_11]) end
  82. def gen_part(:syn1, :outro) do gen_part(:syn1, [:syn1_outro]) end
  83. def gen_part(:syn2, :outro) do gen_part(:syn2, [:syn2_outro]) end
  84.  
  85. # header
  86. def gen_phrase(part, phrase) do
  87. channel = @part_channel_map[part]
  88. phrase = gen_phrase(phrase)
  89. "#{channel} #{phrase}"
  90. end
  91. def gen_phrase(:rest) do gen_units([:rest, :rest]) end
  92. def gen_phrase(:drum_header) do gen_header(1, 50, 2) end
  93. def gen_phrase(:bass_header) do gen_header(3, 13, 2, 31) end
  94. def gen_phrase(:syn1_header) do gen_header(4, 13, 2, 3) <> "l16 M16,1,30,4,15" end
  95. def gen_phrase(:syn2_header) do gen_header(3, 13, 2, 3) <> "l16 M16,1,30,4,15 D-18" end
  96.  
  97. # drum
  98. def gen_phrase(:drum_11) do gen_units([:drum_1_1, :drum_1_1]) end
  99. def gen_phrase(:drum_12) do gen_units([:drum_1_1, :drum_1_2]) end
  100. def gen_phrase(:drum_21) do gen_units([:drum_2_1, :drum_2_1]) end
  101. def gen_phrase(:drum_22) do gen_units([:drum_2_1, :drum_2_2]) end
  102.  
  103. # bass
  104. def gen_phrase(:bass_11) do gen_units([:bass_1_1, :bass_1_1]) end
  105. def gen_phrase(:bass_12) do gen_units([:bass_1_1, :bass_1_2]) end
  106. def gen_phrase(:bass_21) do gen_units([:bass_2_1, :bass_2_1]) end
  107. def gen_phrase(:bass_22) do gen_units([:bass_2_1, :bass_2_2]) end
  108.  
  109. # syn1
  110. def gen_phrase(:syn1_intro) do "g1&>g1<" end
  111. def gen_phrase(:syn1_outro) do "g1&<g1>" end
  112. def gen_phrase(:syn1_11) do gen_units([:syn1_1_1, :syn1_1_1]) end
  113. def gen_phrase(:syn1_12) do gen_units([:syn1_1_1, :syn1_1_2]) end
  114. def gen_phrase(:syn1_21) do gen_units([:syn1_2_1, :syn1_2_2]) end
  115. def gen_phrase(:syn1_22) do gen_units([:syn1_2_1, :syn1_2_3]) end
  116.  
  117. # syn2
  118. def gen_phrase(:syn2_intro) do "b-1&>b-1<" end
  119. def gen_phrase(:syn2_outro) do "b-1& g-1 " end
  120. def gen_phrase(:syn2_11) do gen_units([:syn2_1_1, :syn2_1_1]) end
  121. def gen_phrase(:syn2_12) do gen_units([:syn2_1_1, :syn2_1_2]) end
  122. def gen_phrase(:syn2_21) do gen_units([:syn2_1_1, :syn2_1_2]) end
  123. def gen_phrase(:syn2_22) do gen_units([:syn2_1_1, :syn2_1_2]) end
  124.  
  125.  
  126. # header
  127. def gen_header() do "C192 T140 " end
  128. def gen_header(o, v, q) do gen_header() <> "o#{o} v#{v} q#{q} " end
  129. def gen_header(o, v, q, at) do gen_header(o,v,q) <> "@#{at} " end
  130.  
  131. # units
  132. def gen_unit(:rest) do "r4r4r4r4 " end
  133. def gen_unit(:drum_1_1) do "[#{@kick}4]4 " end
  134. def gen_unit(:drum_1_2) do "[#{@kick}8]4 [#{@kick}16]8 " end
  135. def gen_unit(:drum_2_1) do "[#{@kick}8#{@hihat}8]4 " end
  136. def gen_unit(:drum_2_2) do "[#{@kick}8#{@hihat}8]2 [#{@kick}16#{@hihat}16]4 " end
  137.  
  138. def gen_unit(:bass_1_1) do "K0l16[gc>dg<]4 " end
  139. def gen_unit(:bass_1_2) do "K7l16[gc>dg<]4 " end
  140. def gen_unit(:bass_2_1) do "K0l16[gg-gg-]4 " end
  141. def gen_unit(:bass_2_2) do "K7l16[gggg]4 " end
  142.  
  143. def gen_unit(:syn1_1_1) do "K0 l16 [c&g&e-&g&]4 " end
  144. def gen_unit(:syn1_1_2) do "K0 l16 [g&b&>c-&d+&<]4 " end
  145. def gen_unit(:syn1_2_1) do "K0 g2.& g+4 " end
  146. def gen_unit(:syn1_2_2) do "K0 b2.& a+4" end
  147. def gen_unit(:syn1_2_3) do "K0 g1" end
  148.  
  149. def gen_unit(:syn2_1_1) do "K0 l16 [gc>dg<]4 " end
  150. def gen_unit(:syn2_1_2) do "K0 l16 [gc>dg<]4 " end
  151. def gen_unit(:syn2_2_1) do "K0 g4e4d4c4 " end
  152. def gen_unit(:syn2_2_2) do "K-8 g4e-4d4c4 " end
  153.  
  154. end
  155.  
  156. Techno2.gen_music()
  157. |> IO.puts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement