You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

435 lines
11KB

  1. #!/usr/bin/python2.5
  2. #
  3. # Copyright 2012 Olivier Gillet.
  4. #
  5. # Author: Olivier Gillet (olivier@mutable-instruments.net)
  6. #
  7. # This program is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation, either version 3 of the License, or
  10. # (at your option) any later version.
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. #
  18. # -----------------------------------------------------------------------------
  19. #
  20. # Lookup table definitions.
  21. import numpy
  22. lookup_tables = []
  23. drum_map_nodes = []
  24. """----------------------------------------------------------------------------
  25. Drum map nodes
  26. ----------------------------------------------------------------------------"""
  27. nodes = [
  28. [
  29. 255, 0, 0, 0, 0, 0, 145, 0,
  30. 0, 0, 0, 0, 218, 0, 0, 0,
  31. 72, 0, 36, 0, 182, 0, 0, 0,
  32. 109, 0, 0, 0, 72, 0, 0, 0,
  33. 36, 0, 109, 0, 0, 0, 8, 0,
  34. 255, 0, 0, 0, 0, 0, 72, 0,
  35. 0, 0, 182, 0, 0, 0, 36, 0,
  36. 218, 0, 0, 0, 145, 0, 0, 0,
  37. 170, 0, 113, 0, 255, 0, 56, 0,
  38. 170, 0, 141, 0, 198, 0, 56, 0,
  39. 170, 0, 113, 0, 226, 0, 28, 0,
  40. 170, 0, 113, 0, 198, 0, 85, 0
  41. ],
  42. [
  43. 229, 0, 25, 0, 102, 0, 25, 0,
  44. 204, 0, 25, 0, 76, 0, 8, 0,
  45. 255, 0, 8, 0, 51, 0, 25, 0,
  46. 178, 0, 25, 0, 153, 0, 127, 0,
  47. 28, 0, 198, 0, 56, 0, 56, 0,
  48. 226, 0, 28, 0, 141, 0, 28, 0,
  49. 28, 0, 170, 0, 28, 0, 28, 0,
  50. 255, 0, 113, 0, 85, 0, 85, 0,
  51. 159, 0, 159, 0, 255, 0, 63, 0,
  52. 159, 0, 159, 0, 191, 0, 31, 0,
  53. 159, 0, 127, 0, 255, 0, 31, 0,
  54. 159, 0, 127, 0, 223, 0, 95, 0
  55. ],
  56. [
  57. 255, 0, 0, 0, 127, 0, 0, 0,
  58. 0, 0, 102, 0, 0, 0, 229, 0,
  59. 0, 0, 178, 0, 204, 0, 0, 0,
  60. 76, 0, 51, 0, 153, 0, 25, 0,
  61. 0, 0, 127, 0, 0, 0, 0, 0,
  62. 255, 0, 191, 0, 31, 0, 63, 0,
  63. 0, 0, 95, 0, 0, 0, 0, 0,
  64. 223, 0, 0, 0, 31, 0, 159, 0,
  65. 255, 0, 85, 0, 148, 0, 85, 0,
  66. 127, 0, 85, 0, 106, 0, 63, 0,
  67. 212, 0, 170, 0, 191, 0, 170, 0,
  68. 85, 0, 42, 0, 233, 0, 21, 0
  69. ],
  70. [
  71. 255, 0, 212, 0, 63, 0, 0, 0,
  72. 106, 0, 148, 0, 85, 0, 127, 0,
  73. 191, 0, 21, 0, 233, 0, 0, 0,
  74. 21, 0, 170, 0, 0, 0, 42, 0,
  75. 0, 0, 0, 0, 141, 0, 113, 0,
  76. 255, 0, 198, 0, 0, 0, 56, 0,
  77. 0, 0, 85, 0, 56, 0, 28, 0,
  78. 226, 0, 28, 0, 170, 0, 56, 0,
  79. 255, 0, 231, 0, 255, 0, 208, 0,
  80. 139, 0, 92, 0, 115, 0, 92, 0,
  81. 185, 0, 69, 0, 46, 0, 46, 0,
  82. 162, 0, 23, 0, 208, 0, 46, 0
  83. ],
  84. [
  85. 255, 0, 31, 0, 63, 0, 63, 0,
  86. 127, 0, 95, 0, 191, 0, 63, 0,
  87. 223, 0, 31, 0, 159, 0, 63, 0,
  88. 31, 0, 63, 0, 95, 0, 31, 0,
  89. 8, 0, 0, 0, 95, 0, 63, 0,
  90. 255, 0, 0, 0, 127, 0, 0, 0,
  91. 8, 0, 0, 0, 159, 0, 63, 0,
  92. 255, 0, 223, 0, 191, 0, 31, 0,
  93. 76, 0, 25, 0, 255, 0, 127, 0,
  94. 153, 0, 51, 0, 204, 0, 102, 0,
  95. 76, 0, 51, 0, 229, 0, 127, 0,
  96. 153, 0, 51, 0, 178, 0, 102, 0
  97. ],
  98. [
  99. 255, 0, 51, 0, 25, 0, 76, 0,
  100. 0, 0, 0, 0, 102, 0, 0, 0,
  101. 204, 0, 229, 0, 0, 0, 178, 0,
  102. 0, 0, 153, 0, 127, 0, 8, 0,
  103. 178, 0, 127, 0, 153, 0, 204, 0,
  104. 255, 0, 0, 0, 25, 0, 76, 0,
  105. 102, 0, 51, 0, 0, 0, 0, 0,
  106. 229, 0, 25, 0, 25, 0, 204, 0,
  107. 178, 0, 102, 0, 255, 0, 76, 0,
  108. 127, 0, 76, 0, 229, 0, 76, 0,
  109. 153, 0, 102, 0, 255, 0, 25, 0,
  110. 127, 0, 51, 0, 204, 0, 51, 0
  111. ],
  112. [
  113. 255, 0, 0, 0, 223, 0, 0, 0,
  114. 31, 0, 8, 0, 127, 0, 0, 0,
  115. 95, 0, 0, 0, 159, 0, 0, 0,
  116. 95, 0, 63, 0, 191, 0, 0, 0,
  117. 51, 0, 204, 0, 0, 0, 102, 0,
  118. 255, 0, 127, 0, 8, 0, 178, 0,
  119. 25, 0, 229, 0, 0, 0, 76, 0,
  120. 204, 0, 153, 0, 51, 0, 25, 0,
  121. 255, 0, 226, 0, 255, 0, 255, 0,
  122. 198, 0, 28, 0, 141, 0, 56, 0,
  123. 170, 0, 56, 0, 85, 0, 28, 0,
  124. 170, 0, 28, 0, 113, 0, 56, 0
  125. ],
  126. [
  127. 223, 0, 0, 0, 63, 0, 0, 0,
  128. 95, 0, 0, 0, 223, 0, 31, 0,
  129. 255, 0, 0, 0, 159, 0, 0, 0,
  130. 127, 0, 31, 0, 191, 0, 31, 0,
  131. 0, 0, 0, 0, 109, 0, 0, 0,
  132. 218, 0, 0, 0, 182, 0, 72, 0,
  133. 8, 0, 36, 0, 145, 0, 36, 0,
  134. 255, 0, 8, 0, 182, 0, 72, 0,
  135. 255, 0, 72, 0, 218, 0, 36, 0,
  136. 218, 0, 0, 0, 145, 0, 0, 0,
  137. 255, 0, 36, 0, 182, 0, 36, 0,
  138. 182, 0, 0, 0, 109, 0, 0, 0
  139. ],
  140. [
  141. 255, 0, 0, 0, 218, 0, 0, 0,
  142. 36, 0, 0, 0, 218, 0, 0, 0,
  143. 182, 0, 109, 0, 255, 0, 0, 0,
  144. 0, 0, 0, 0, 145, 0, 72, 0,
  145. 159, 0, 0, 0, 31, 0, 127, 0,
  146. 255, 0, 31, 0, 0, 0, 95, 0,
  147. 8, 0, 0, 0, 191, 0, 31, 0,
  148. 255, 0, 31, 0, 223, 0, 63, 0,
  149. 255, 0, 31, 0, 63, 0, 31, 0,
  150. 95, 0, 31, 0, 63, 0, 127, 0,
  151. 159, 0, 31, 0, 63, 0, 31, 0,
  152. 223, 0, 223, 0, 191, 0, 191, 0
  153. ],
  154. [
  155. 226, 0, 28, 0, 28, 0, 141, 0,
  156. 8, 0, 8, 0, 255, 0, 8, 0,
  157. 113, 0, 28, 0, 198, 0, 85, 0,
  158. 56, 0, 198, 0, 170, 0, 28, 0,
  159. 8, 0, 95, 0, 8, 0, 8, 0,
  160. 255, 0, 63, 0, 31, 0, 223, 0,
  161. 8, 0, 31, 0, 191, 0, 8, 0,
  162. 255, 0, 127, 0, 127, 0, 159, 0,
  163. 115, 0, 46, 0, 255, 0, 185, 0,
  164. 139, 0, 23, 0, 208, 0, 115, 0,
  165. 231, 0, 69, 0, 255, 0, 162, 0,
  166. 139, 0, 115, 0, 231, 0, 92, 0
  167. ],
  168. [
  169. 145, 0, 0, 0, 0, 0, 109, 0,
  170. 0, 0, 0, 0, 255, 0, 109, 0,
  171. 72, 0, 218, 0, 0, 0, 0, 0,
  172. 36, 0, 0, 0, 182, 0, 0, 0,
  173. 0, 0, 127, 0, 159, 0, 127, 0,
  174. 159, 0, 191, 0, 223, 0, 63, 0,
  175. 255, 0, 95, 0, 31, 0, 95, 0,
  176. 31, 0, 8, 0, 63, 0, 8, 0,
  177. 255, 0, 0, 0, 145, 0, 0, 0,
  178. 182, 0, 109, 0, 109, 0, 109, 0,
  179. 218, 0, 0, 0, 72, 0, 0, 0,
  180. 182, 0, 72, 0, 182, 0, 36, 0
  181. ],
  182. [
  183. 255, 0, 0, 0, 0, 0, 0, 0,
  184. 0, 0, 0, 0, 0, 0, 0, 0,
  185. 255, 0, 0, 0, 218, 0, 72, 36,
  186. 0, 0, 182, 0, 0, 0, 145, 109,
  187. 0, 0, 127, 0, 0, 0, 42, 0,
  188. 212, 0, 0, 212, 0, 0, 212, 0,
  189. 0, 0, 0, 0, 42, 0, 0, 0,
  190. 255, 0, 0, 0, 170, 170, 127, 85,
  191. 145, 0, 109, 109, 218, 109, 72, 0,
  192. 145, 0, 72, 0, 218, 0, 109, 0,
  193. 182, 0, 109, 0, 255, 0, 72, 0,
  194. 182, 109, 36, 109, 255, 109, 109, 0
  195. ],
  196. [
  197. 255, 0, 0, 0, 255, 0, 191, 0,
  198. 0, 0, 0, 0, 95, 0, 63, 0,
  199. 31, 0, 0, 0, 223, 0, 223, 0,
  200. 0, 0, 8, 0, 159, 0, 127, 0,
  201. 0, 0, 85, 0, 56, 0, 28, 0,
  202. 255, 0, 28, 0, 0, 0, 226, 0,
  203. 0, 0, 170, 0, 56, 0, 113, 0,
  204. 198, 0, 0, 0, 113, 0, 141, 0,
  205. 255, 0, 42, 0, 233, 0, 63, 0,
  206. 212, 0, 85, 0, 191, 0, 106, 0,
  207. 191, 0, 21, 0, 170, 0, 8, 0,
  208. 170, 0, 127, 0, 148, 0, 148, 0
  209. ],
  210. [
  211. 255, 0, 0, 0, 0, 0, 63, 0,
  212. 191, 0, 95, 0, 31, 0, 223, 0,
  213. 255, 0, 63, 0, 95, 0, 63, 0,
  214. 159, 0, 0, 0, 0, 0, 127, 0,
  215. 72, 0, 0, 0, 0, 0, 0, 0,
  216. 255, 0, 0, 0, 0, 0, 0, 0,
  217. 72, 0, 72, 0, 36, 0, 8, 0,
  218. 218, 0, 182, 0, 145, 0, 109, 0,
  219. 255, 0, 162, 0, 231, 0, 162, 0,
  220. 231, 0, 115, 0, 208, 0, 139, 0,
  221. 185, 0, 92, 0, 185, 0, 46, 0,
  222. 162, 0, 69, 0, 162, 0, 23, 0
  223. ],
  224. [
  225. 255, 0, 0, 0, 51, 0, 0, 0,
  226. 0, 0, 0, 0, 102, 0, 0, 0,
  227. 204, 0, 0, 0, 153, 0, 0, 0,
  228. 0, 0, 0, 0, 51, 0, 0, 0,
  229. 0, 0, 0, 0, 8, 0, 36, 0,
  230. 255, 0, 0, 0, 182, 0, 8, 0,
  231. 0, 0, 0, 0, 72, 0, 109, 0,
  232. 145, 0, 0, 0, 255, 0, 218, 0,
  233. 212, 0, 8, 0, 170, 0, 0, 0,
  234. 127, 0, 0, 0, 85, 0, 8, 0,
  235. 255, 0, 8, 0, 170, 0, 0, 0,
  236. 127, 0, 0, 0, 42, 0, 8, 0
  237. ],
  238. [
  239. 255, 0, 0, 0, 0, 0, 0, 0,
  240. 36, 0, 0, 0, 182, 0, 0, 0,
  241. 218, 0, 0, 0, 0, 0, 0, 0,
  242. 72, 0, 0, 0, 145, 0, 109, 0,
  243. 36, 0, 36, 0, 0, 0, 0, 0,
  244. 255, 0, 0, 0, 182, 0, 0, 0,
  245. 0, 0, 0, 0, 0, 0, 0, 109,
  246. 218, 0, 0, 0, 145, 0, 72, 72,
  247. 255, 0, 28, 0, 226, 0, 56, 0,
  248. 198, 0, 0, 0, 0, 0, 28, 28,
  249. 170, 0, 0, 0, 141, 0, 0, 0,
  250. 113, 0, 0, 0, 85, 85, 85, 85
  251. ],
  252. [
  253. 255, 0, 0, 0, 0, 0, 95, 0,
  254. 0, 0, 127, 0, 0, 0, 0, 0,
  255. 223, 0, 95, 0, 63, 0, 31, 0,
  256. 191, 0, 0, 0, 159, 0, 0, 0,
  257. 0, 0, 31, 0, 255, 0, 0, 0,
  258. 0, 0, 95, 0, 223, 0, 0, 0,
  259. 0, 0, 63, 0, 191, 0, 0, 0,
  260. 0, 0, 0, 0, 159, 0, 127, 0,
  261. 141, 0, 28, 0, 28, 0, 28, 0,
  262. 113, 0, 8, 0, 8, 0, 8, 0,
  263. 255, 0, 0, 0, 226, 0, 0, 0,
  264. 198, 0, 56, 0, 170, 0, 85, 0
  265. ],
  266. [
  267. 255, 0, 0, 0, 8, 0, 0, 0,
  268. 182, 0, 0, 0, 72, 0, 0, 0,
  269. 218, 0, 0, 0, 36, 0, 0, 0,
  270. 145, 0, 0, 0, 109, 0, 0, 0,
  271. 0, 0, 51, 25, 76, 25, 25, 0,
  272. 153, 0, 0, 0, 127, 102, 178, 0,
  273. 204, 0, 0, 0, 0, 0, 255, 0,
  274. 0, 0, 102, 0, 229, 0, 76, 0,
  275. 113, 0, 0, 0, 141, 0, 85, 0,
  276. 0, 0, 0, 0, 170, 0, 0, 0,
  277. 56, 28, 255, 0, 0, 0, 0, 0,
  278. 198, 0, 0, 0, 226, 0, 0, 0
  279. ],
  280. [
  281. 255, 0, 8, 0, 28, 0, 28, 0,
  282. 198, 0, 56, 0, 56, 0, 85, 0,
  283. 255, 0, 85, 0, 113, 0, 113, 0,
  284. 226, 0, 141, 0, 170, 0, 141, 0,
  285. 0, 0, 0, 0, 0, 0, 0, 0,
  286. 255, 0, 0, 0, 127, 0, 0, 0,
  287. 0, 0, 0, 0, 0, 0, 0, 0,
  288. 63, 0, 0, 0, 191, 0, 0, 0,
  289. 255, 0, 0, 0, 255, 0, 127, 0,
  290. 0, 0, 85, 0, 0, 0, 212, 0,
  291. 0, 0, 212, 0, 42, 0, 170, 0,
  292. 0, 0, 127, 0, 0, 0, 0, 0
  293. ],
  294. [
  295. 255, 0, 0, 0, 0, 0, 218, 0,
  296. 182, 0, 0, 0, 0, 0, 145, 0,
  297. 145, 0, 36, 0, 0, 0, 109, 0,
  298. 109, 0, 0, 0, 72, 0, 36, 0,
  299. 0, 0, 0, 0, 109, 0, 8, 0,
  300. 72, 0, 0, 0, 255, 0, 182, 0,
  301. 0, 0, 0, 0, 145, 0, 8, 0,
  302. 36, 0, 8, 0, 218, 0, 182, 0,
  303. 255, 0, 0, 0, 0, 0, 226, 0,
  304. 85, 0, 0, 0, 141, 0, 0, 0,
  305. 0, 0, 0, 0, 170, 0, 56, 0,
  306. 198, 0, 0, 0, 113, 0, 28, 0
  307. ],
  308. [
  309. 255, 0, 0, 0, 113, 0, 0, 0,
  310. 198, 0, 56, 0, 85, 0, 28, 0,
  311. 255, 0, 0, 0, 226, 0, 0, 0,
  312. 170, 0, 0, 0, 141, 0, 0, 0,
  313. 0, 0, 0, 0, 0, 0, 0, 0,
  314. 255, 0, 145, 0, 109, 0, 218, 0,
  315. 36, 0, 182, 0, 72, 0, 72, 0,
  316. 255, 0, 0, 0, 0, 0, 109, 0,
  317. 36, 0, 36, 0, 145, 0, 0, 0,
  318. 72, 0, 72, 0, 182, 0, 0, 0,
  319. 72, 0, 72, 0, 218, 0, 0, 0,
  320. 109, 0, 109, 0, 255, 0, 0, 0
  321. ],
  322. [
  323. 255, 0, 0, 0, 218, 0, 0, 0,
  324. 145, 0, 0, 0, 36, 0, 0, 0,
  325. 218, 0, 0, 0, 36, 0, 0, 0,
  326. 182, 0, 72, 0, 0, 0, 109, 0,
  327. 0, 0, 0, 0, 8, 0, 0, 0,
  328. 255, 0, 85, 0, 212, 0, 42, 0,
  329. 0, 0, 0, 0, 8, 0, 0, 0,
  330. 85, 0, 170, 0, 127, 0, 42, 0,
  331. 109, 0, 109, 0, 255, 0, 0, 0,
  332. 72, 0, 72, 0, 218, 0, 0, 0,
  333. 145, 0, 182, 0, 255, 0, 0, 0,
  334. 36, 0, 36, 0, 218, 0, 8, 0
  335. ],
  336. [
  337. 255, 0, 0, 0, 42, 0, 0, 0,
  338. 212, 0, 0, 0, 8, 0, 212, 0,
  339. 170, 0, 0, 0, 85, 0, 0, 0,
  340. 212, 0, 8, 0, 127, 0, 8, 0,
  341. 255, 0, 85, 0, 0, 0, 0, 0,
  342. 226, 0, 85, 0, 0, 0, 198, 0,
  343. 0, 0, 141, 0, 56, 0, 0, 0,
  344. 170, 0, 28, 0, 0, 0, 113, 0,
  345. 113, 0, 56, 0, 255, 0, 0, 0,
  346. 85, 0, 56, 0, 226, 0, 0, 0,
  347. 0, 0, 170, 0, 0, 0, 141, 0,
  348. 28, 0, 28, 0, 198, 0, 28, 0
  349. ],
  350. [
  351. 255, 0, 0, 0, 229, 0, 0, 0,
  352. 204, 0, 204, 0, 0, 0, 76, 0,
  353. 178, 0, 153, 0, 51, 0, 178, 0,
  354. 178, 0, 127, 0, 102, 51, 51, 25,
  355. 0, 0, 0, 0, 0, 0, 0, 31,
  356. 0, 0, 0, 0, 255, 0, 0, 31,
  357. 0, 0, 8, 0, 0, 0, 191, 159,
  358. 127, 95, 95, 0, 223, 0, 63, 0,
  359. 255, 0, 255, 0, 204, 204, 204, 204,
  360. 0, 0, 51, 51, 51, 51, 0, 0,
  361. 204, 0, 204, 0, 153, 153, 153, 153,
  362. 153, 0, 0, 0, 102, 102, 102, 102
  363. ],
  364. [
  365. 170, 0, 0, 0, 0, 255, 0, 0,
  366. 198, 0, 0, 0, 0, 28, 0, 0,
  367. 141, 0, 0, 0, 0, 226, 0, 0,
  368. 56, 0, 0, 113, 0, 85, 0, 0,
  369. 255, 0, 0, 0, 0, 113, 0, 0,
  370. 85, 0, 0, 0, 0, 226, 0, 0,
  371. 141, 0, 0, 8, 0, 170, 56, 56,
  372. 198, 0, 0, 56, 0, 141, 28, 0,
  373. 255, 0, 0, 0, 0, 191, 0, 0,
  374. 159, 0, 0, 0, 0, 223, 0, 0,
  375. 95, 0, 0, 0, 0, 63, 0, 0,
  376. 127, 0, 0, 0, 0, 31, 0, 0
  377. ]
  378. ]
  379. for i, p in enumerate(nodes):
  380. drum_map_nodes.append(('%d' % i, p))
  381. """----------------------------------------------------------------------------
  382. Euclidean patterns
  383. ----------------------------------------------------------------------------"""
  384. def Flatten(l):
  385. if hasattr(l, 'pop'):
  386. for item in l:
  387. for j in Flatten(item):
  388. yield j
  389. else:
  390. yield l
  391. def EuclidianPattern(k, n):
  392. pattern = [[1]] * k + [[0]] * (n - k)
  393. while k:
  394. cut = min(k, len(pattern) - k)
  395. k, pattern = cut, [pattern[i] + pattern[k + i] for i in xrange(cut)] + \
  396. pattern[cut:k] + pattern[k + cut:]
  397. return pattern
  398. table = []
  399. for num_steps in xrange(1, 33):
  400. for num_notes in xrange(32):
  401. num_notes = int(round(float(num_notes) / 31 * num_steps))
  402. bitmask = 0
  403. for i, bit in enumerate(Flatten(EuclidianPattern(num_notes, num_steps))):
  404. if bit:
  405. bitmask |= (1 << i)
  406. table.append(bitmask)
  407. lookup_tables32 = [('euclidean', table)]
  408. """----------------------------------------------------------------------------
  409. Phase increment for tempo.
  410. ----------------------------------------------------------------------------"""
  411. control_rate = 8000
  412. width = 1 << 32
  413. tempo_values = numpy.arange(0, 512.0)
  414. lookup_tables32.append(
  415. ('tempo_phase_increment', width * tempo_values * 8 / (60 * control_rate) / 2)
  416. )