SG пре 3 година
родитељ
комит
73bd42d778
1 измењених фајлова са 377 додато и 112 уклоњено
  1. 377 112
      zero_tracker.c

+ 377 - 112
zero_tracker.c

@@ -2,90 +2,178 @@
 #include "zero_tracker.h"
 #include "tracker_engine/tracker.h"
 
+// Channel p_0_channels[] = {
+//     {
+//         .rows =
+//             {
+//                 // 1/4
+//                 ROW_MAKE(NOTE_C3, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+//                 ROW_MAKE(0, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+//                 ROW_MAKE(NOTE_C4, EffectSlideToNote, 0x20),
+//                 ROW_MAKE(0, EffectSlideToNote, 0x20),
+//                 //
+//                 ROW_MAKE(0, EffectSlideToNote, 0x20),
+//                 ROW_MAKE(0, EffectSlideToNote, 0x20),
+//                 ROW_MAKE(0, EffectSlideToNote, 0x20),
+//                 ROW_MAKE(0, EffectSlideToNote, 0x20),
+//                 //
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+//                 //
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
+//                 // 2/4
+//                 ROW_MAKE(NOTE_C3, EffectSlideDown, 0x20),
+//                 ROW_MAKE(0, EffectSlideDown, 0x20),
+//                 ROW_MAKE(NOTE_C4, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 //
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 //
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 //
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 ROW_MAKE(NOTE_OFF, EffectVibrato, EFFECT_DATA_2(3, 3)),
+//                 // 3/4
+//                 ROW_MAKE(NOTE_C3, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+//                 ROW_MAKE(0, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+//                 ROW_MAKE(NOTE_OFF, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 //
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 //
+//                 ROW_MAKE(NOTE_C2, EffectPWM, 60),
+//                 ROW_MAKE(0, EffectPWM, 32),
+//                 ROW_MAKE(0, EffectPWM, 12),
+//                 ROW_MAKE(NOTE_OFF, 0, 0),
+//                 //
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 // 4/4
+//                 ROW_MAKE(NOTE_C3, EffectSlideDown, 0x20),
+//                 ROW_MAKE(0, EffectSlideDown, 0x20),
+//                 ROW_MAKE(0, EffectSlideDown, 0x20),
+//                 ROW_MAKE(NOTE_OFF, 0, 0),
+//                 //
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 //
+//                 ROW_MAKE(NOTE_C2, EffectPWM, 60),
+//                 ROW_MAKE(0, EffectPWM, 32),
+//                 ROW_MAKE(0, EffectPWM, 12),
+//                 ROW_MAKE(NOTE_OFF, 0, 0),
+//                 //
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//                 ROW_MAKE(0, 0, 0),
+//             },
+//     },
+// };
+
 Channel p_0_channels[] = {
     {
         .rows =
             {
-                // 1/4
-                ROW_MAKE(NOTE_C3, EffectArpeggio, EFFECT_DATA_2(4, 7)),
-                ROW_MAKE(0, EffectArpeggio, EFFECT_DATA_2(4, 7)),
-                ROW_MAKE(NOTE_C4, EffectSlideToNote, 0x20),
-                ROW_MAKE(0, EffectSlideToNote, 0x20),
                 //
-                ROW_MAKE(0, EffectSlideToNote, 0x20),
-                ROW_MAKE(0, EffectSlideToNote, 0x20),
-                ROW_MAKE(0, EffectSlideToNote, 0x20),
-                ROW_MAKE(0, EffectSlideToNote, 0x20),
+                ROW_MAKE(NOTE_A4, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+                ROW_MAKE(NOTE_C3, 0, 0),
+                ROW_MAKE(NOTE_F2, 0, 0),
+                ROW_MAKE(NOTE_C3, 0, 0),
                 //
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+                ROW_MAKE(NOTE_E4, 0, 0),
+                ROW_MAKE(NOTE_C3, 0, 0),
+                ROW_MAKE(NOTE_E4, EffectPWM, 50),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_A4, 0, 0),
+                ROW_MAKE(0, EffectPWM, 55),
+                ROW_MAKE(0, EffectPWM, 45),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_E5, 0, 0),
+                ROW_MAKE(0, EffectPWM, 55),
+                ROW_MAKE(0, EffectPWM, 45),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(NOTE_C3, EffectSlideDown, 0x30),
+                ROW_MAKE(NOTE_F2, 0, 0),
+                ROW_MAKE(NOTE_C3, 0, 0),
+                //
+                ROW_MAKE(NOTE_C5, 0, 0),
+                ROW_MAKE(NOTE_C3, 0, 0),
+                ROW_MAKE(NOTE_C5, 0, 0),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_A4, 0, 0),
+                ROW_MAKE(0, 0, 0),
+                ROW_MAKE(0, 0, 0),
                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
                 //
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
                 ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
-                // 2/4
-                ROW_MAKE(NOTE_C3, EffectSlideDown, 0x20),
-                ROW_MAKE(0, EffectSlideDown, 0x20),
-                ROW_MAKE(NOTE_C4, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                //
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                //
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                //
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                ROW_MAKE(NOTE_OFF, EffectVibrato, EFFECT_DATA_2(3, 3)),
-                // 3/4
-                ROW_MAKE(NOTE_C3, EffectArpeggio, EFFECT_DATA_2(4, 7)),
-                ROW_MAKE(0, EffectArpeggio, EFFECT_DATA_2(4, 7)),
                 ROW_MAKE(NOTE_OFF, 0, 0),
-                ROW_MAKE(0, 0, 0),
                 //
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
+                ROW_MAKE(NOTE_B4, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+                ROW_MAKE(NOTE_D3, 0, 0),
+                ROW_MAKE(NOTE_G2, 0, 0),
+                ROW_MAKE(NOTE_D3, 0, 0),
                 //
-                ROW_MAKE(NOTE_C2, EffectPWM, 60),
-                ROW_MAKE(0, EffectPWM, 32),
-                ROW_MAKE(0, EffectPWM, 12),
+                ROW_MAKE(NOTE_E4, 0, 0),
+                ROW_MAKE(NOTE_D3, 0, 0),
+                ROW_MAKE(NOTE_E4, EffectPWM, 50),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                // 4/4
-                ROW_MAKE(NOTE_C3, EffectSlideDown, 0x20),
-                ROW_MAKE(0, EffectSlideDown, 0x20),
-                ROW_MAKE(0, EffectSlideDown, 0x20),
+                ROW_MAKE(NOTE_A4, 0, 0),
+                ROW_MAKE(0, EffectPWM, 55),
+                ROW_MAKE(0, EffectPWM, 45),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
+                ROW_MAKE(NOTE_E5, 0, 0),
+                ROW_MAKE(0, EffectPWM, 55),
+                ROW_MAKE(0, EffectPWM, 45),
+                ROW_MAKE(NOTE_OFF, 0, 0),
                 //
-                ROW_MAKE(NOTE_C2, EffectPWM, 60),
-                ROW_MAKE(0, EffectPWM, 32),
-                ROW_MAKE(0, EffectPWM, 12),
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(NOTE_D3, EffectSlideDown, 0x3F),
+                ROW_MAKE(NOTE_G2, 0, 0),
+                ROW_MAKE(NOTE_D3, 0, 0),
+                //
+                ROW_MAKE(NOTE_C5, 0, 0),
+                ROW_MAKE(NOTE_D3, 0, 0),
+                ROW_MAKE(NOTE_C5, 0, 0),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
+                ROW_MAKE(NOTE_A4, 0, 0),
                 ROW_MAKE(0, 0, 0),
                 ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+                //
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
+                ROW_MAKE(NOTE_OFF, 0, 0),
             },
     },
 };
@@ -95,111 +183,288 @@ Channel p_1_channels[] = {
         .rows =
             {
                 //
-                ROW_MAKE(NOTE_A4, 0, 0),
-                ROW_MAKE(NOTE_C3, 0, 0),
-                ROW_MAKE(NOTE_F2, 0, 0),
-                ROW_MAKE(NOTE_C3, 0, 0),
+                ROW_MAKE(NOTE_C5, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_A2, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
                 //
-                ROW_MAKE(NOTE_E4, 0, 0),
-                ROW_MAKE(NOTE_C3, 0, 0),
-                ROW_MAKE(NOTE_E4, 0, 0),
+                ROW_MAKE(NOTE_B4, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_B4, EffectPWM, 50),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
-                ROW_MAKE(NOTE_A4, 0, 0),
-                ROW_MAKE(NOTE_A4, 0, 0),
-                ROW_MAKE(NOTE_A4, 0, 0),
+                ROW_MAKE(NOTE_G4, 0, 0),
+                ROW_MAKE(0, EffectPWM, 55),
+                ROW_MAKE(0, EffectPWM, 45),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
-                ROW_MAKE(NOTE_E5, 0, 0),
-                ROW_MAKE(NOTE_E5, 0, 0),
-                ROW_MAKE(NOTE_E5, 0, 0),
+                ROW_MAKE(NOTE_C5, 0, 0),
+                ROW_MAKE(0, EffectPWM, 55),
+                ROW_MAKE(0, EffectPWM, 45),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
-                ROW_MAKE(NOTE_D5, 0, 0),
-                ROW_MAKE(NOTE_C3, 0, 0),
-                ROW_MAKE(NOTE_F2, 0, 0),
-                ROW_MAKE(NOTE_C3, 0, 0),
+                ROW_MAKE(NOTE_C6, 0, 0),
+                ROW_MAKE(NOTE_E3, EffectSlideDown, 0x30),
+                ROW_MAKE(NOTE_A2, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
                 //
-                ROW_MAKE(NOTE_C5, 0, 0),
-                ROW_MAKE(NOTE_C3, 0, 0),
-                ROW_MAKE(NOTE_C5, 0, 0),
+                ROW_MAKE(NOTE_B4, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_B4, EffectPWM, 50),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
-                ROW_MAKE(NOTE_A4, 0, 0),
-                ROW_MAKE(0, 0, 0),
+                ROW_MAKE(NOTE_G4, 0, 0),
                 ROW_MAKE(0, 0, 0),
                 ROW_MAKE(0, 0, 0),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
                 //
-                ROW_MAKE(NOTE_A4, 0, 0),
-                ROW_MAKE(NOTE_A4, 0, 0),
-                ROW_MAKE(NOTE_A4, 0, 0),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
+                ROW_MAKE(NOTE_C5, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_A2, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                //
                 ROW_MAKE(NOTE_B4, 0, 0),
-                ROW_MAKE(NOTE_D3, 0, 0),
-                ROW_MAKE(NOTE_G2, 0, 0),
-                ROW_MAKE(NOTE_D3, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_B4, EffectPWM, 50),
+                ROW_MAKE(NOTE_OFF, 0, 0),
                 //
-                ROW_MAKE(NOTE_E4, 0, 0),
-                ROW_MAKE(NOTE_D3, 0, 0),
-                ROW_MAKE(NOTE_E4, 0, 0),
+                ROW_MAKE(NOTE_G4, 0, 0),
+                ROW_MAKE(0, EffectPWM, 55),
+                ROW_MAKE(0, EffectPWM, 45),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(0, EffectPWM, 55),
+                ROW_MAKE(0, EffectPWM, 45),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_C6, 0, 0),
+                ROW_MAKE(NOTE_E3, EffectSlideDown, 0x30),
+                ROW_MAKE(NOTE_A2, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                //
+                ROW_MAKE(NOTE_B4, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_B4, EffectPWM, 50),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_G4, 0, 0),
+                ROW_MAKE(0, 0, 0),
+                ROW_MAKE(0, 0, 0),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+                //
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(1, 1)),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
+                ROW_MAKE(0, EffectVibrato, EFFECT_DATA_2(2, 2)),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+            },
+    },
+};
+
+Channel p_2_channels[] = {
+    {
+        .rows =
+            {
+                //
+                ROW_MAKE(NOTE_C5, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_A2, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                //
+                ROW_MAKE(NOTE_C5, 0, 0),
                 ROW_MAKE(NOTE_A4, 0, 0),
+                ROW_MAKE(NOTE_C5, 0, 0),
                 ROW_MAKE(NOTE_A4, 0, 0),
+                //
+                ROW_MAKE(NOTE_C5, EffectPWM, 55),
+                ROW_MAKE(NOTE_A4, EffectPWM, 45),
+                ROW_MAKE(NOTE_C5, EffectPWM, 35),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_C5, 0, 0),
                 ROW_MAKE(NOTE_A4, 0, 0),
+                ROW_MAKE(NOTE_C5, EffectPWM, 55),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(NOTE_E3, EffectSlideDown, 0x30),
+                ROW_MAKE(NOTE_A2, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                //
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_B4, EffectPWM, 55),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(NOTE_B4, 0, 0),
+                ROW_MAKE(NOTE_D5, EffectPWM, 55),
+                ROW_MAKE(NOTE_B4, EffectPWM, 55),
+                //
+                ROW_MAKE(NOTE_D5, EffectPWM, 45),
+                ROW_MAKE(NOTE_B4, EffectPWM, 45),
+                ROW_MAKE(NOTE_D5, EffectPWM, 35),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_D5, EffectArpeggio, EFFECT_DATA_2(4, 7)),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_A2, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                //
                 ROW_MAKE(NOTE_E5, 0, 0),
+                ROW_MAKE(NOTE_C5, 0, 0),
                 ROW_MAKE(NOTE_E5, 0, 0),
+                ROW_MAKE(NOTE_C5, 0, 0),
+                //
+                ROW_MAKE(NOTE_E5, EffectPWM, 55),
+                ROW_MAKE(NOTE_C5, EffectPWM, 45),
+                ROW_MAKE(NOTE_E5, EffectPWM, 35),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
                 ROW_MAKE(NOTE_E5, 0, 0),
+                ROW_MAKE(NOTE_C5, 0, 0),
+                ROW_MAKE(NOTE_E5, EffectPWM, 55),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
                 ROW_MAKE(NOTE_D5, 0, 0),
-                ROW_MAKE(NOTE_D3, 0, 0),
-                ROW_MAKE(NOTE_G2, 0, 0),
-                ROW_MAKE(NOTE_D3, 0, 0),
+                ROW_MAKE(NOTE_E3, EffectSlideDown, 0x30),
+                ROW_MAKE(NOTE_A2, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
                 //
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                ROW_MAKE(NOTE_E3, 0, 0),
+                ROW_MAKE(NOTE_B4, EffectPWM, 55),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(NOTE_B4, 0, 0),
+                ROW_MAKE(NOTE_D5, EffectPWM, 55),
+                ROW_MAKE(NOTE_B4, EffectPWM, 55),
+                //
+                ROW_MAKE(NOTE_D5, EffectPWM, 45),
+                ROW_MAKE(NOTE_B4, EffectPWM, 45),
+                ROW_MAKE(NOTE_D5, EffectPWM, 35),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+            },
+    },
+};
+
+Channel p_3_channels[] = {
+    {
+        .rows =
+            {
+                //
+                ROW_MAKE(NOTE_Ds5, EffectArpeggio, EFFECT_DATA_2(4, 6)),
                 ROW_MAKE(NOTE_C5, 0, 0),
-                ROW_MAKE(NOTE_D3, 0, 0),
-                ROW_MAKE(NOTE_C5, 0, 0),
+                ROW_MAKE(NOTE_Ds5, 0, 0),
+                ROW_MAKE(NOTE_C5, EffectPWM, 55),
+                //
+                ROW_MAKE(NOTE_Ds5, EffectPWM, 45),
+                ROW_MAKE(NOTE_C5, EffectPWM, 35),
+                ROW_MAKE(NOTE_Ds5, EffectPWM, 30),
                 ROW_MAKE(NOTE_OFF, 0, 0),
                 //
-                ROW_MAKE(NOTE_A4, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
-                ROW_MAKE(0, 0, 0),
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(NOTE_B4, 0, 0),
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(NOTE_B4, EffectPWM, 55),
                 //
+                ROW_MAKE(NOTE_D5, EffectPWM, 45),
+                ROW_MAKE(NOTE_B4, EffectPWM, 35),
+                ROW_MAKE(NOTE_D5, EffectPWM, 30),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_Cs5, EffectArpeggio, EFFECT_DATA_2(4, 6)),
+                ROW_MAKE(NOTE_As4, 0, 0),
+                ROW_MAKE(NOTE_Cs5, 0, 0),
+                ROW_MAKE(NOTE_As4, EffectPWM, 55),
+                //
+                ROW_MAKE(NOTE_Cs5, EffectPWM, 45),
+                ROW_MAKE(NOTE_As4, EffectPWM, 35),
+                ROW_MAKE(NOTE_Cs5, EffectPWM, 30),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_C5, 0, 0),
                 ROW_MAKE(NOTE_A4, 0, 0),
+                ROW_MAKE(NOTE_C5, 0, 0),
+                ROW_MAKE(NOTE_A4, EffectPWM, 55),
+                //
+                ROW_MAKE(NOTE_C5, EffectPWM, 45),
+                ROW_MAKE(NOTE_A4, EffectPWM, 35),
+                ROW_MAKE(NOTE_C5, EffectPWM, 30),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_B4, EffectArpeggio, EFFECT_DATA_2(4, 6)),
+                ROW_MAKE(NOTE_Gs4, 0, 0),
+                ROW_MAKE(NOTE_B4, 0, 0),
+                ROW_MAKE(NOTE_Gs4, EffectPWM, 55),
+                //
+                ROW_MAKE(NOTE_B4, EffectPWM, 45),
+                ROW_MAKE(NOTE_Gs4, EffectPWM, 35),
+                ROW_MAKE(NOTE_B4, EffectPWM, 30),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_C5, 0, 0),
                 ROW_MAKE(NOTE_A4, 0, 0),
-                ROW_MAKE(NOTE_A4, 0, 0),
+                ROW_MAKE(NOTE_C5, 0, 0),
+                ROW_MAKE(NOTE_A4, EffectPWM, 55),
+                //
+                ROW_MAKE(NOTE_C5, EffectPWM, 45),
+                ROW_MAKE(NOTE_A4, EffectPWM, 35),
+                ROW_MAKE(NOTE_C5, EffectPWM, 30),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_Cs5, EffectArpeggio, EFFECT_DATA_2(4, 6)),
+                ROW_MAKE(NOTE_As4, 0, 0),
+                ROW_MAKE(NOTE_Cs5, 0, 0),
+                ROW_MAKE(NOTE_As4, EffectPWM, 55),
+                //
+                ROW_MAKE(NOTE_Cs5, EffectPWM, 45),
+                ROW_MAKE(NOTE_As4, EffectPWM, 35),
+                ROW_MAKE(NOTE_Cs5, EffectPWM, 30),
+                ROW_MAKE(NOTE_OFF, 0, 0),
+                //
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(NOTE_B4, 0, 0),
+                ROW_MAKE(NOTE_D5, 0, 0),
+                ROW_MAKE(NOTE_B4, EffectPWM, 55),
+                //
+                ROW_MAKE(NOTE_D5, EffectPWM, 45),
+                ROW_MAKE(NOTE_B4, EffectPWM, 35),
+                ROW_MAKE(NOTE_D5, EffectPWM, 30),
                 ROW_MAKE(NOTE_OFF, 0, 0),
             },
     },
 };
-
 Pattern patterns[] = {
-    {
-        .channels = p_0_channels,
-    },
-    {
-        .channels = p_1_channels,
-    },
+    {.channels = p_0_channels},
+    {.channels = p_1_channels},
+    {.channels = p_2_channels},
+    {.channels = p_3_channels},
 };
 
 uint8_t order_list[] = {
     0,
+    1,
+    0,
+    2,
     0,
     1,
     0,
+    3,
 };
 
 Song song = {
     .channels_count = 1,
-    .patterns_count = 2,
+    .patterns_count = sizeof(patterns) / sizeof(patterns[0]),
     .patterns = patterns,
 
-    .order_list_size = 4,
+    .order_list_size = sizeof(order_list) / sizeof(order_list[0]),
     .order_list = order_list,
 
     .ticks_per_second = 60,