zero_tracker.c 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. #include <furi.h>
  2. #include "zero_tracker.h"
  3. #include "tracker_engine/tracker.h"
  4. // Channel row = {
  5. // .notes =
  6. // {
  7. // //
  8. // ROW_MAKE(NOTE_A4, 0, 0),
  9. // ROW_MAKE(NOTE_C3, 0, 0),
  10. // ROW_MAKE(NOTE_F2, 0, 0),
  11. // ROW_MAKE(NOTE_C3, 0, 0),
  12. // //
  13. // ROW_MAKE(NOTE_E4, 0, 0),
  14. // ROW_MAKE(NOTE_C3, 0, 0),
  15. // ROW_MAKE(NOTE_E4, 0, 0),
  16. // ROW_MAKE(NOTE_OFF, 0, 0),
  17. // //
  18. // ROW_MAKE(NOTE_A4, 0, 0),
  19. // ROW_MAKE(NOTE_A4, 0, 0),
  20. // ROW_MAKE(NOTE_A4, 0, 0),
  21. // ROW_MAKE(NOTE_OFF, 0, 0),
  22. // //
  23. // ROW_MAKE(NOTE_E5, 0, 0),
  24. // ROW_MAKE(NOTE_E5, 0, 0),
  25. // ROW_MAKE(NOTE_E5, 0, 0),
  26. // ROW_MAKE(NOTE_OFF, 0, 0),
  27. // //
  28. // ROW_MAKE(NOTE_D5, 0, 0),
  29. // ROW_MAKE(NOTE_C3, 0, 0),
  30. // ROW_MAKE(NOTE_F2, 0, 0),
  31. // ROW_MAKE(NOTE_C3, 0, 0),
  32. // //
  33. // ROW_MAKE(NOTE_C5, 0, 0),
  34. // ROW_MAKE(NOTE_C3, 0, 0),
  35. // ROW_MAKE(NOTE_C5, 0, 0),
  36. // ROW_MAKE(NOTE_OFF, 0, 0),
  37. // //
  38. // ROW_MAKE(NOTE_A4, 0, 0),
  39. // ROW_MAKE(0, 0, 0),
  40. // ROW_MAKE(0, 0, 0),
  41. // ROW_MAKE(0, 0, 0),
  42. // //
  43. // ROW_MAKE(NOTE_A4, 0, 0),
  44. // ROW_MAKE(NOTE_A4, 0, 0),
  45. // ROW_MAKE(NOTE_A4, 0, 0),
  46. // ROW_MAKE(NOTE_OFF, 0, 0),
  47. // //
  48. // ROW_MAKE(NOTE_B4, 0, 0),
  49. // ROW_MAKE(NOTE_D3, 0, 0),
  50. // ROW_MAKE(NOTE_G2, 0, 0),
  51. // ROW_MAKE(NOTE_D3, 0, 0),
  52. // //
  53. // ROW_MAKE(NOTE_E4, 0, 0),
  54. // ROW_MAKE(NOTE_D3, 0, 0),
  55. // ROW_MAKE(NOTE_E4, 0, 0),
  56. // ROW_MAKE(NOTE_OFF, 0, 0),
  57. // //
  58. // ROW_MAKE(NOTE_A4, 0, 0),
  59. // ROW_MAKE(NOTE_A4, 0, 0),
  60. // ROW_MAKE(NOTE_A4, 0, 0),
  61. // ROW_MAKE(NOTE_OFF, 0, 0),
  62. // //
  63. // ROW_MAKE(NOTE_E5, 0, 0),
  64. // ROW_MAKE(NOTE_E5, 0, 0),
  65. // ROW_MAKE(NOTE_E5, 0, 0),
  66. // ROW_MAKE(NOTE_OFF, 0, 0),
  67. // //
  68. // ROW_MAKE(NOTE_D5, 0, 0),
  69. // ROW_MAKE(NOTE_D3, 0, 0),
  70. // ROW_MAKE(NOTE_G2, 0, 0),
  71. // ROW_MAKE(NOTE_D3, 0, 0),
  72. // //
  73. // ROW_MAKE(NOTE_C5, 0, 0),
  74. // ROW_MAKE(NOTE_D3, 0, 0),
  75. // ROW_MAKE(NOTE_C5, 0, 0),
  76. // ROW_MAKE(NOTE_OFF, 0, 0),
  77. // //
  78. // ROW_MAKE(NOTE_A4, 0, 0),
  79. // ROW_MAKE(0, 0, 0),
  80. // ROW_MAKE(0, 0, 0),
  81. // ROW_MAKE(0, 0, 0),
  82. // //
  83. // ROW_MAKE(NOTE_A4, 0, 0),
  84. // ROW_MAKE(NOTE_A4, 0, 0),
  85. // ROW_MAKE(NOTE_A4, 0, 0),
  86. // ROW_MAKE(NOTE_OFF, 0, 0),
  87. // },
  88. // };
  89. Channel channels[] = {
  90. {
  91. .rows =
  92. {
  93. // 1/4
  94. ROW_MAKE(NOTE_C3, EffectArpeggio, EFFECT_DATA_2(4, 7)),
  95. ROW_MAKE(0, EffectArpeggio, EFFECT_DATA_2(4, 7)),
  96. ROW_MAKE(NOTE_C4, EffectSlideToNote, 0x20),
  97. ROW_MAKE(0, EffectSlideToNote, 0x20),
  98. //
  99. ROW_MAKE(0, EffectSlideToNote, 0x20),
  100. ROW_MAKE(0, EffectSlideToNote, 0x20),
  101. ROW_MAKE(0, EffectSlideToNote, 0x20),
  102. ROW_MAKE(0, EffectSlideToNote, 0x20),
  103. //
  104. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
  105. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
  106. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
  107. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
  108. //
  109. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
  110. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
  111. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
  112. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
  113. // 2/4
  114. ROW_MAKE(NOTE_C3, EffectSlideDown, 0x20),
  115. ROW_MAKE(0, EffectSlideDown, 0x20),
  116. ROW_MAKE(NOTE_C4, EffectVibrato, EFFECT_DATA_2(3, 3)),
  117. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  118. //
  119. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  120. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  121. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  122. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  123. //
  124. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  125. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  126. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  127. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  128. //
  129. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  130. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  131. ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
  132. ROW_MAKE(NOTE_OFF, EffectVibrato, EFFECT_DATA_2(3, 3)),
  133. // 3/4
  134. ROW_MAKE(NOTE_C3, EffectArpeggio, EFFECT_DATA_2(4, 7)),
  135. ROW_MAKE(0, EffectArpeggio, EFFECT_DATA_2(4, 7)),
  136. ROW_MAKE(NOTE_OFF, 0, 0),
  137. ROW_MAKE(0, 0, 0),
  138. //
  139. ROW_MAKE(0, 0, 0),
  140. ROW_MAKE(0, 0, 0),
  141. ROW_MAKE(0, 0, 0),
  142. ROW_MAKE(0, 0, 0),
  143. //
  144. ROW_MAKE(NOTE_C2, EffectPWM, 60),
  145. ROW_MAKE(0, EffectPWM, 32),
  146. ROW_MAKE(0, EffectPWM, 12),
  147. ROW_MAKE(NOTE_OFF, 0, 0),
  148. //
  149. ROW_MAKE(0, 0, 0),
  150. ROW_MAKE(0, 0, 0),
  151. ROW_MAKE(0, 0, 0),
  152. ROW_MAKE(0, 0, 0),
  153. // 4/4
  154. ROW_MAKE(NOTE_C3, EffectSlideDown, 0x20),
  155. ROW_MAKE(0, EffectSlideDown, 0x20),
  156. ROW_MAKE(0, EffectSlideDown, 0x20),
  157. ROW_MAKE(NOTE_OFF, 0, 0),
  158. //
  159. ROW_MAKE(0, 0, 0),
  160. ROW_MAKE(0, 0, 0),
  161. ROW_MAKE(0, 0, 0),
  162. ROW_MAKE(0, 0, 0),
  163. //
  164. ROW_MAKE(NOTE_C2, EffectPWM, 60),
  165. ROW_MAKE(0, EffectPWM, 32),
  166. ROW_MAKE(0, EffectPWM, 12),
  167. ROW_MAKE(NOTE_OFF, 0, 0),
  168. //
  169. ROW_MAKE(0, 0, 0),
  170. ROW_MAKE(0, 0, 0),
  171. ROW_MAKE(0, 0, 0),
  172. ROW_MAKE(0, 0, 0),
  173. },
  174. },
  175. };
  176. Pattern patterns[] = {
  177. {
  178. .channels = channels,
  179. },
  180. };
  181. uint8_t order_list[] = {
  182. 0,
  183. 0,
  184. };
  185. Song song = {
  186. .channels_count = 1,
  187. .patterns_count = 1,
  188. .patterns = patterns,
  189. .order_list_size = 2,
  190. .order_list = order_list,
  191. .ticks_per_second = 60,
  192. };
  193. int32_t zero_tracker_app(void* p) {
  194. UNUSED(p);
  195. Tracker* tracker = tracker_alloc();
  196. tracker_set_song(tracker, &song);
  197. tracker_start(tracker);
  198. while(1) {
  199. furi_delay_ms(1000);
  200. }
  201. tracker_stop(tracker);
  202. tracker_free(tracker);
  203. return 0;
  204. }