public void play(LinkedBlockingQueue<MyMessage> input) {
    // this.input = input;

    // System.out.println(Thread.currentThread().getName());

    while (!done) {
      MyMessage message = null;
      try {
        message = input.poll(1, TimeUnit.MICROSECONDS);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }

      // check timing
      // long time = System.currentTimeMillis() % 1000;

      if (message != null) {
        // System.out.println("GOT MESSAGE");
        // check message type
        switch (message.getType()) {
          case TIME_UPDATE:
            songTime = (double) message.getData1();

            sendIfReady();
            break;
          default:
            System.err.println(message.toString() + " not implemented yet in output part!");
            break;
        }
        // System.out.println("GOT MESSAGE");
        // double partTime = (Double) message.getData1();
        // double nextTime = (Double) message.getData1();
        // int partChannel = message.getChannel();
        //
        // currentInputTimes[partChannel] = partTime;
        // nextInputTimes[partChannel] = nextTime;
        //
        // // check if we should listen to this part for now
        // double timeDiff = nextTime - partTime;
        // if (timeDiff > 0 && timeDiff > 5) {
        // // 5 for temporary fixing with changing types
        // listen[partChannel] = false;
        // }

      }
    }
  }