'Starts or updates the metronome with the given arguments.
Args:
qpm: The quarter notes per minute to use.
start_time: The wall time in seconds that the metronome is started on for
synchronization and beat alignment. May be in the past.
signals: An ordered collection of MidiSignals whose underlying messages
are to be output on the metronome\'s tick, cyclically. A None value can
be used in place of a MidiSignal to output nothing on a given tick.
channel: The MIDI channel to output ticks on.'

@concurrency.serialized
def start_metronome(self, qpm, start_time, signals=None, channel=None):

    if ((self._metronome is not None) and self._metronome.is_alive()):
        self._metronome.update(qpm, start_time, signals=signals, channel=channel)
    else:
        self._metronome = Metronome(self._outport, qpm, start_time, signals=signals, channel=channel)
        self._metronome.start()
