@@ -982,6 +982,33 @@ void Note::ArpConfigMenu() {
982982 });
983983 arpConfigMenu.AddUIComponent (bpmNumberModifier, Point (0 , 7 ));
984984
985+ UIButton clockOutBtn;
986+ clockOutBtn.SetSize (Dimension (1 , 1 ));
987+ clockOutBtn.SetColorFunc ([&]() -> Color {
988+ if (clockMode == CLOCK_EXTERNAL)
989+ {
990+ return Color (0xFF00FF );
991+ }
992+ else if (clockMode == CLOCK_INTERNAL_CLOCKOUT)
993+ {
994+ return Color (0xFFFFFF );
995+ }
996+ else if (clockMode == CLOCK_INTERNAL)
997+ {
998+ return Color (0xFFFFFF ).Dim ();
999+ }
1000+ return Color (0xFF0000 );
1001+ });
1002+ clockOutBtn.SetEnableFunc ([&]() -> bool { return page == ARP_BPM; });
1003+ clockOutBtn.OnPress ([&]() -> void {;
1004+ if (clockMode == CLOCK_INTERNAL) {
1005+ clockMode = CLOCK_INTERNAL_CLOCKOUT;
1006+ } else {
1007+ clockMode = CLOCK_INTERNAL;
1008+ }
1009+ });
1010+ arpConfigMenu.AddUIComponent (clockOutBtn, Point (7 , 6 ));
1011+
9851012 // Swing selector
9861013 TimedDisplay swingTextDisplay (500 );
9871014 swingTextDisplay.SetDimension (Dimension (8 , 4 ));
@@ -1384,9 +1411,13 @@ void Note::ArpConfigMenu() {
13841411 arpConfigMenu.Start ();
13851412}
13861413
1387- void Note::Tick () {
1414+ void Note::Tick () {
13881415 if (midiClock.Tick ())
13891416 {
1417+ if (clockMode == CLOCK_INTERNAL_CLOCKOUT && midiClock.TickCount () % (EFFECT_TPQN / 24 ) == 0 )
1418+ {
1419+ MatrixOS::MIDI::Send (MidiPacket::Clock (), MIDI_PORT_ALL);
1420+ }
13901421 runtimes[0 ].Tick ();
13911422 runtimes[1 ].Tick ();
13921423 }
0 commit comments