   if(Time.hour() == 0 && Time.minute() == 0) Particle.syncTime();
 }
 
-/*void play() {
+void play() {
   if(playerRuntime.check(parser->getDuration())) {
     if(parser->next()) {
-      parser->isRest() ? noTone(speakerPin) : tone(speakerPin, parser->getNote(), parser->getDuration());
+      parser->isRest() ? noTone(SPEAKER) : tone(SPEAKER, parser->getNote(), parser->getDuration());
+    } else {
+      parser->rewind();
     }
   }
-}*/
+}
 
 int handleAlarm(String value) {
   bool result = false;

  Display.begin(SSD1306_SWITCHCAPVCC);
  #endif

  Particle.variable("freeMemory", freeMemory);
  Particle.variable("rssi", rssi);
  
  Particle.function("alarm", handleAlarm);

  #if defined COLOR_SCREEN
  Display.fillScreen(BLACK);
  #else
  Display.display();
  #endif

  Time.zone(-6); // TODO: EEPROM/flash and configure

  alarms.load();
}

void loop() {
  if(!Particle.connected()) Particle.connect();
  stateMachine.update();
}

void updateStart() {

void exitStart() {
  renderer.start();
  syncer.start();

  RGB.control(true);
}

void updateClock() {
