def noteoff(self, channel, note, velocity, timestamp):
        """
        Remove note from chord.
        If the attribute `sustain` is `True` then we do not
        call callback with the updated chord.

        Note that channel, velocity and timestamp arguments are ignored.
        """
        debug('noteoff channel=%s note=%s velocity=%s t=%s' % (
                        channel, note, velocity, timestamp))
        if note in self._chord:
            self._chord.remove(note)
            if not self.sustain:
                debug('calling %s' % self.callback)
                self.callback(list(self._chord))