Guest User

Untitled

a guest
Nov 24th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.21 KB | None | 0 0
  1. #ifndef SONG2_H
  2. #define SONG2_H
  3.  
  4. #include "atm_cmd_constants.h"
  5.  
  6. #ifndef ARRAY_SIZE
  7. #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
  8. #endif
  9.  
  10. #ifndef NUM_PATTERNS
  11. #define NUM_PATTERNS(struct_) (ARRAY_SIZE( ((struct_ *)0)->patterns_offset))
  12. #endif
  13.  
  14. #ifndef DEFINE_PATTERN
  15. #define DEFINE_PATTERN(pattern_id, values) const uint8_t pattern_id[] = values;
  16. #endif
  17.  
  18. /* channel pattern / bytes = 39*/
  19. #define pattern0_data { \
  20. ATM_CMD_M_SET_VOLUME(64), \
  21. ATM_CMD_M_SET_TEMPO(22), \
  22. ATM_CMD_M_CALL_REPEAT(6, 3), \
  23. ATM_CMD_M_CALL(7), \
  24. ATM_CMD_M_CALL_REPEAT(6, 3), \
  25. ATM_CMD_M_CALL(8), \
  26. ATM_CMD_M_CALL(10), \
  27. ATM_CMD_M_CALL(11), \
  28. ATM_CMD_M_CALL(10), \
  29. ATM_CMD_M_CALL(11), \
  30. ATM_CMD_M_CALL(10), \
  31. ATM_CMD_M_CALL(12), \
  32. ATM_CMD_M_CALL(10), \
  33. ATM_CMD_M_CALL(11), \
  34. ATM_CMD_M_CALL(10), \
  35. ATM_CMD_M_CALL(11), \
  36. ATM_CMD_M_CALL(10), \
  37. ATM_CMD_M_CALL(13), \
  38. ATM_CMD_I_STOP, \
  39. }
  40. DEFINE_PATTERN(pattern0_array, pattern0_data);
  41.  
  42. /* channel pattern / bytes = 27*/
  43. #define pattern1_data { \
  44. ATM_CMD_M_SET_VOLUME(50), \
  45. ATM_CMD_M_CALL_REPEAT(14, 12), \
  46. ATM_CMD_M_CALL_REPEAT(15, 4), \
  47. ATM_CMD_M_CALL_REPEAT(14, 12), \
  48. ATM_CMD_M_CALL_REPEAT(16, 4), \
  49. ATM_CMD_M_CALL_REPEAT(14, 10), \
  50. ATM_CMD_M_CALL_REPEAT(15, 2), \
  51. ATM_CMD_M_CALL_REPEAT(14, 10), \
  52. ATM_CMD_M_CALL_REPEAT(16, 2), \
  53. ATM_CMD_I_STOP, \
  54. }
  55. DEFINE_PATTERN(pattern1_array, pattern1_data);
  56.  
  57. /* channel pattern / bytes = 1*/
  58. #define pattern2_data { \
  59. ATM_CMD_I_STOP, \
  60. }
  61. DEFINE_PATTERN(pattern2_array, pattern2_data);
  62.  
  63. /* channel pattern / bytes = 13*/
  64. #define pattern3_data { \
  65. ATM_CMD_M_SET_VOLUME(64), \
  66. ATM_CMD_M_CALL_REPEAT(9, 7), \
  67. ATM_CMD_M_CALL(17), \
  68. ATM_CMD_M_CALL_REPEAT(18, 11), \
  69. ATM_CMD_M_CALL(19), \
  70. ATM_CMD_I_STOP, \
  71. }
  72. DEFINE_PATTERN(pattern3_array, pattern3_data);
  73.  
  74. /* pattern (drum) / bytes = 6*/
  75. #define pattern4_data { \
  76. ATM_CMD_M_SET_VOLUME(32), \
  77. ATM_CMD_M_DELAY_TICKS(1), \
  78. ATM_CMD_M_SET_VOLUME(0), \
  79. ATM_CMD_I_RETURN, \
  80. }
  81. DEFINE_PATTERN(pattern4_array, pattern4_data);
  82.  
  83. /* pattern (drum) / bytes = 7*/
  84. #define pattern5_data { \
  85. ATM_CMD_M_SET_VOLUME(32), \
  86. ATM_CMD_M_DELAY_TICKS(2), \
  87. ATM_CMD_I_RETURN, \
  88. }
  89. DEFINE_PATTERN(pattern5_array, pattern5_data);
  90.  
  91. /* pattern (tune) / bytes = 17*/
  92. #define pattern6_data { \
  93. ATM_CMD_I_NOTE_C4, \
  94. ATM_CMD_M_DELAY_TICKS(5), \
  95. ATM_CMD_I_NOTE_OFF, \
  96. ATM_CMD_M_DELAY_TICKS(4), \
  97. ATM_CMD_I_NOTE_C4, \
  98. ATM_CMD_M_DELAY_TICKS(3), \
  99. ATM_CMD_I_NOTE_OFF, \
  100. ATM_CMD_M_DELAY_TICKS(1), \
  101. ATM_CMD_I_NOTE_D4, \
  102. ATM_CMD_M_DELAY_TICKS(4), \
  103. ATM_CMD_I_NOTE_OFF, \
  104. ATM_CMD_M_DELAY_TICKS(4), \
  105. ATM_CMD_I_NOTE_D4_, \
  106. ATM_CMD_M_DELAY_TICKS(7), \
  107. ATM_CMD_I_NOTE_OFF, \
  108. ATM_CMD_M_DELAY_TICKS(4), \
  109. ATM_CMD_I_RETURN, \
  110. }
  111. DEFINE_PATTERN(pattern6_array, pattern6_data);
  112.  
  113. /* pattern (tune) / bytes = 9*/
  114. #define pattern7_data { \
  115. ATM_CMD_I_NOTE_F4, \
  116. ATM_CMD_M_DELAY_TICKS(8), \
  117. ATM_CMD_I_NOTE_OFF, \
  118. ATM_CMD_M_DELAY_TICKS(4), \
  119. ATM_CMD_I_NOTE_G4, \
  120. ATM_CMD_M_DELAY_TICKS(8), \
  121. ATM_CMD_I_NOTE_OFF, \
  122. ATM_CMD_M_DELAY_TICKS(12), \
  123. ATM_CMD_I_RETURN, \
  124. }
  125. DEFINE_PATTERN(pattern7_array, pattern7_data);
  126.  
  127. /* pattern (tune) / bytes = 9*/
  128. #define pattern8_data { \
  129. ATM_CMD_I_NOTE_A4_, \
  130. ATM_CMD_M_DELAY_TICKS(8), \
  131. ATM_CMD_I_NOTE_OFF, \
  132. ATM_CMD_M_DELAY_TICKS(5), \
  133. ATM_CMD_I_NOTE_G4, \
  134. ATM_CMD_M_DELAY_TICKS(11), \
  135. ATM_CMD_I_NOTE_OFF, \
  136. ATM_CMD_M_DELAY_TICKS(8), \
  137. ATM_CMD_I_RETURN, \
  138. }
  139. DEFINE_PATTERN(pattern8_array, pattern8_data);
  140.  
  141. /* pattern (tune) / bytes = 19*/
  142. #define pattern9_data { \
  143. ATM_CMD_M_CALL(4), \
  144. ATM_CMD_M_DELAY_TICKS(7), \
  145. ATM_CMD_M_CALL(4), \
  146. ATM_CMD_M_DELAY_TICKS(7), \
  147. ATM_CMD_M_CALL(4), \
  148. ATM_CMD_M_DELAY_TICKS(7), \
  149. ATM_CMD_M_CALL(4), \
  150. ATM_CMD_M_DELAY_TICKS(3), \
  151. ATM_CMD_M_CALL(4), \
  152. ATM_CMD_M_DELAY_TICKS(1), \
  153. ATM_CMD_M_CALL(4), \
  154. ATM_CMD_M_DELAY_TICKS(1), \
  155. ATM_CMD_I_RETURN, \
  156. }
  157. DEFINE_PATTERN(pattern9_array, pattern9_data);
  158.  
  159. /* pattern (tune) / bytes = 9*/
  160. #define pattern10_data { \
  161. ATM_CMD_I_NOTE_C4, \
  162. ATM_CMD_M_DELAY_TICKS(6), \
  163. ATM_CMD_I_NOTE_OFF, \
  164. ATM_CMD_M_DELAY_TICKS(2), \
  165. ATM_CMD_I_NOTE_A4_, \
  166. ATM_CMD_M_DELAY_TICKS(7), \
  167. ATM_CMD_I_NOTE_OFF, \
  168. ATM_CMD_M_DELAY_TICKS(1), \
  169. ATM_CMD_I_RETURN, \
  170. }
  171. DEFINE_PATTERN(pattern10_array, pattern10_data);
  172.  
  173. /* pattern (tune) / bytes = 9*/
  174. #define pattern11_data { \
  175. ATM_CMD_I_NOTE_C4, \
  176. ATM_CMD_M_DELAY_TICKS(7), \
  177. ATM_CMD_I_NOTE_OFF, \
  178. ATM_CMD_M_DELAY_TICKS(1), \
  179. ATM_CMD_I_NOTE_C5, \
  180. ATM_CMD_M_DELAY_TICKS(7), \
  181. ATM_CMD_I_NOTE_OFF, \
  182. ATM_CMD_M_DELAY_TICKS(1), \
  183. ATM_CMD_I_RETURN, \
  184. }
  185. DEFINE_PATTERN(pattern11_array, pattern11_data);
  186.  
  187. /* pattern (tune) / bytes = 13*/
  188. #define pattern12_data { \
  189. ATM_CMD_I_NOTE_A3_, \
  190. ATM_CMD_M_DELAY_TICKS(3), \
  191. ATM_CMD_I_NOTE_OFF, \
  192. ATM_CMD_M_DELAY_TICKS(2), \
  193. ATM_CMD_I_NOTE_D4_, \
  194. ATM_CMD_M_DELAY_TICKS(6), \
  195. ATM_CMD_I_NOTE_OFF, \
  196. ATM_CMD_M_DELAY_TICKS(2), \
  197. ATM_CMD_I_NOTE_D4, \
  198. ATM_CMD_M_DELAY_TICKS(2), \
  199. ATM_CMD_I_NOTE_OFF, \
  200. ATM_CMD_M_DELAY_TICKS(1), \
  201. ATM_CMD_I_RETURN, \
  202. }
  203. DEFINE_PATTERN(pattern12_array, pattern12_data);
  204.  
  205. /* pattern (tune) / bytes = 13*/
  206. #define pattern13_data { \
  207. ATM_CMD_I_NOTE_A3_, \
  208. ATM_CMD_M_DELAY_TICKS(3), \
  209. ATM_CMD_I_NOTE_OFF, \
  210. ATM_CMD_M_DELAY_TICKS(2), \
  211. ATM_CMD_I_NOTE_D5_, \
  212. ATM_CMD_M_DELAY_TICKS(5), \
  213. ATM_CMD_I_NOTE_OFF, \
  214. ATM_CMD_M_DELAY_TICKS(2), \
  215. ATM_CMD_I_NOTE_D5, \
  216. ATM_CMD_M_DELAY_TICKS(2), \
  217. ATM_CMD_I_NOTE_OFF, \
  218. ATM_CMD_M_DELAY_TICKS(2), \
  219. ATM_CMD_I_RETURN, \
  220. }
  221. DEFINE_PATTERN(pattern13_array, pattern13_data);
  222.  
  223. /* pattern (tune) / bytes = 17*/
  224. #define pattern14_data { \
  225. ATM_CMD_I_NOTE_C3, \
  226. ATM_CMD_M_DELAY_TICKS(1), \
  227. ATM_CMD_I_NOTE_OFF, \
  228. ATM_CMD_M_DELAY_TICKS(1), \
  229. ATM_CMD_I_NOTE_C4, \
  230. ATM_CMD_M_DELAY_TICKS(1), \
  231. ATM_CMD_I_NOTE_OFF, \
  232. ATM_CMD_M_DELAY_TICKS(1), \
  233. ATM_CMD_I_NOTE_C3, \
  234. ATM_CMD_M_DELAY_TICKS(1), \
  235. ATM_CMD_I_NOTE_OFF, \
  236. ATM_CMD_M_DELAY_TICKS(1), \
  237. ATM_CMD_I_NOTE_C4, \
  238. ATM_CMD_M_DELAY_TICKS(1), \
  239. ATM_CMD_I_NOTE_OFF, \
  240. ATM_CMD_M_DELAY_TICKS(1), \
  241. ATM_CMD_I_RETURN, \
  242. }
  243. DEFINE_PATTERN(pattern14_array, pattern14_data);
  244.  
  245. /* pattern (tune) / bytes = 17*/
  246. #define pattern15_data { \
  247. ATM_CMD_I_NOTE_A2_, \
  248. ATM_CMD_M_DELAY_TICKS(1), \
  249. ATM_CMD_I_NOTE_OFF, \
  250. ATM_CMD_M_DELAY_TICKS(1), \
  251. ATM_CMD_I_NOTE_A3_, \
  252. ATM_CMD_M_DELAY_TICKS(1), \
  253. ATM_CMD_I_NOTE_OFF, \
  254. ATM_CMD_M_DELAY_TICKS(1), \
  255. ATM_CMD_I_NOTE_A2_, \
  256. ATM_CMD_M_DELAY_TICKS(1), \
  257. ATM_CMD_I_NOTE_OFF, \
  258. ATM_CMD_M_DELAY_TICKS(1), \
  259. ATM_CMD_I_NOTE_A3_, \
  260. ATM_CMD_M_DELAY_TICKS(1), \
  261. ATM_CMD_I_NOTE_OFF, \
  262. ATM_CMD_M_DELAY_TICKS(1), \
  263. ATM_CMD_I_RETURN, \
  264. }
  265. DEFINE_PATTERN(pattern15_array, pattern15_data);
  266.  
  267. /* pattern (tune) / bytes = 15*/
  268. #define pattern16_data { \
  269. ATM_CMD_I_NOTE_D3, \
  270. ATM_CMD_M_DELAY_TICKS(1), \
  271. ATM_CMD_I_NOTE_D4, \
  272. ATM_CMD_M_DELAY_TICKS(1), \
  273. ATM_CMD_I_NOTE_OFF, \
  274. ATM_CMD_M_DELAY_TICKS(2), \
  275. ATM_CMD_I_NOTE_D3, \
  276. ATM_CMD_M_DELAY_TICKS(1), \
  277. ATM_CMD_I_NOTE_OFF, \
  278. ATM_CMD_M_DELAY_TICKS(1), \
  279. ATM_CMD_I_NOTE_D4, \
  280. ATM_CMD_M_DELAY_TICKS(1), \
  281. ATM_CMD_I_NOTE_OFF, \
  282. ATM_CMD_M_DELAY_TICKS(1), \
  283. ATM_CMD_I_RETURN, \
  284. }
  285. DEFINE_PATTERN(pattern16_array, pattern16_data);
  286.  
  287. /* pattern (tune) / bytes = 33*/
  288. #define pattern17_data { \
  289. ATM_CMD_M_CALL(4), \
  290. ATM_CMD_M_DELAY_TICKS(3), \
  291. ATM_CMD_M_CALL(4), \
  292. ATM_CMD_M_DELAY_TICKS(1), \
  293. ATM_CMD_M_CALL(4), \
  294. ATM_CMD_M_DELAY_TICKS(1), \
  295. ATM_CMD_M_CALL(4), \
  296. ATM_CMD_M_DELAY_TICKS(3), \
  297. ATM_CMD_M_CALL(4), \
  298. ATM_CMD_M_DELAY_TICKS(3), \
  299. ATM_CMD_M_CALL(4), \
  300. ATM_CMD_M_DELAY_TICKS(3), \
  301. ATM_CMD_M_CALL(4), \
  302. ATM_CMD_M_DELAY_TICKS(3), \
  303. ATM_CMD_M_CALL(4), \
  304. ATM_CMD_M_DELAY_TICKS(1), \
  305. ATM_CMD_M_CALL(4), \
  306. ATM_CMD_M_DELAY_TICKS(1), \
  307. ATM_CMD_M_CALL(4), \
  308. ATM_CMD_M_DELAY_TICKS(1), \
  309. ATM_CMD_M_CALL(4), \
  310. ATM_CMD_I_RETURN, \
  311. }
  312. DEFINE_PATTERN(pattern17_array, pattern17_data);
  313.  
  314. /* pattern (tune) / bytes = 13*/
  315. #define pattern18_data { \
  316. ATM_CMD_M_CALL(5), \
  317. ATM_CMD_M_DELAY_TICKS(2), \
  318. ATM_CMD_M_CALL(4), \
  319. ATM_CMD_M_DELAY_TICKS(3), \
  320. ATM_CMD_M_CALL(5), \
  321. ATM_CMD_M_DELAY_TICKS(2), \
  322. ATM_CMD_M_CALL(4), \
  323. ATM_CMD_M_DELAY_TICKS(3), \
  324. ATM_CMD_I_RETURN, \
  325. }
  326. DEFINE_PATTERN(pattern18_array, pattern18_data);
  327.  
  328. /* pattern (tune) / bytes = 21*/
  329. #define pattern19_data { \
  330. ATM_CMD_M_CALL(5), \
  331. ATM_CMD_M_DELAY_TICKS(2), \
  332. ATM_CMD_M_CALL(5), \
  333. ATM_CMD_M_CALL(4), \
  334. ATM_CMD_M_DELAY_TICKS(1), \
  335. ATM_CMD_M_CALL(5), \
  336. ATM_CMD_M_CALL(4), \
  337. ATM_CMD_M_DELAY_TICKS(1), \
  338. ATM_CMD_M_CALL(5), \
  339. ATM_CMD_M_CALL(4), \
  340. ATM_CMD_M_CALL(4), \
  341. ATM_CMD_M_DELAY_TICKS(16), \
  342. ATM_CMD_I_RETURN, \
  343. }
  344. DEFINE_PATTERN(pattern19_array, pattern19_data);
  345.  
  346. const PROGMEM struct score_data {
  347. uint8_t fmt;
  348. uint8_t num_patterns;
  349. uint16_t patterns_offset[20];
  350. uint8_t num_channels;
  351. uint8_t start_patterns[4];
  352. uint8_t pattern0[sizeof(pattern0_array)];
  353. uint8_t pattern1[sizeof(pattern1_array)];
  354. uint8_t pattern2[sizeof(pattern2_array)];
  355. uint8_t pattern3[sizeof(pattern3_array)];
  356. uint8_t pattern4[sizeof(pattern4_array)];
  357. uint8_t pattern5[sizeof(pattern5_array)];
  358. uint8_t pattern6[sizeof(pattern6_array)];
  359. uint8_t pattern7[sizeof(pattern7_array)];
  360. uint8_t pattern8[sizeof(pattern8_array)];
  361. uint8_t pattern9[sizeof(pattern9_array)];
  362. uint8_t pattern10[sizeof(pattern10_array)];
  363. uint8_t pattern11[sizeof(pattern11_array)];
  364. uint8_t pattern12[sizeof(pattern12_array)];
  365. uint8_t pattern13[sizeof(pattern13_array)];
  366. uint8_t pattern14[sizeof(pattern14_array)];
  367. uint8_t pattern15[sizeof(pattern15_array)];
  368. uint8_t pattern16[sizeof(pattern16_array)];
  369. uint8_t pattern17[sizeof(pattern17_array)];
  370. uint8_t pattern18[sizeof(pattern18_array)];
  371. uint8_t pattern19[sizeof(pattern19_array)];
  372. } score = {
  373. .fmt = ATM_SCORE_FMT_FULL,
  374. .num_patterns = NUM_PATTERNS(struct score_data),
  375. .patterns_offset = {
  376. offsetof(struct score_data, pattern0),
  377. offsetof(struct score_data, pattern1),
  378. offsetof(struct score_data, pattern2),
  379. offsetof(struct score_data, pattern3),
  380. offsetof(struct score_data, pattern4),
  381. offsetof(struct score_data, pattern5),
  382. offsetof(struct score_data, pattern6),
  383. offsetof(struct score_data, pattern7),
  384. offsetof(struct score_data, pattern8),
  385. offsetof(struct score_data, pattern9),
  386. offsetof(struct score_data, pattern10),
  387. offsetof(struct score_data, pattern11),
  388. offsetof(struct score_data, pattern12),
  389. offsetof(struct score_data, pattern13),
  390. offsetof(struct score_data, pattern14),
  391. offsetof(struct score_data, pattern15),
  392. offsetof(struct score_data, pattern16),
  393. offsetof(struct score_data, pattern17),
  394. offsetof(struct score_data, pattern18),
  395. offsetof(struct score_data, pattern19),
  396. },
  397. .num_channels = 4,
  398. .start_patterns = {
  399. 0x00, // Channel 0 entry track (SQUARE)
  400. 0x01, // Channel 1 entry track (SQUARE)
  401. 0x02, // Channel 2 entry track (SQUARE)
  402. 0x03, // Channel 3 entry track (NOISE)
  403. },
  404. .pattern0 = pattern0_data,
  405. .pattern1 = pattern1_data,
  406. .pattern2 = pattern2_data,
  407. .pattern3 = pattern3_data,
  408. .pattern4 = pattern4_data,
  409. .pattern5 = pattern5_data,
  410. .pattern6 = pattern6_data,
  411. .pattern7 = pattern7_data,
  412. .pattern8 = pattern8_data,
  413. .pattern9 = pattern9_data,
  414. .pattern10 = pattern10_data,
  415. .pattern11 = pattern11_data,
  416. .pattern12 = pattern12_data,
  417. .pattern13 = pattern13_data,
  418. .pattern14 = pattern14_data,
  419. .pattern15 = pattern15_data,
  420. .pattern16 = pattern16_data,
  421. .pattern17 = pattern17_data,
  422. .pattern18 = pattern18_data,
  423. .pattern19 = pattern19_data,
  424. };
  425.  
  426.  
  427. const PROGMEM struct sfx1_data {
  428. uint8_t fmt;
  429. uint8_t pattern0[9];
  430. } sfx1 = {
  431. .fmt = ATM_SCORE_FMT_MINIMAL_MONO,
  432. .pattern0 = {
  433. ATM_CMD_M_SET_TEMPO(22),
  434. ATM_CMD_M_SET_VOLUME(63),
  435. ATM_CMD_I_NOTE_F5,
  436. ATM_CMD_M_DELAY_TICKS(11),
  437. ATM_CMD_I_NOTE_OFF,
  438. ATM_CMD_M_DELAY_TICKS(11),
  439. ATM_CMD_I_STOP,
  440. },
  441. };
  442.  
  443. #endif
Add Comment
Please, Sign In to add comment