def add_condition(self, conkey, cond):
        """Add a condition, one of the addable ones.

        conkey: str
            One of 'cond', startcond' or 'stopcond'. 'start' or 'stop'
            is accepted as shorts for 'startcond' or 'stopcond'. If the
            conkey is given with an explicit number (like 'stopcond3')
            and already exist, it will be over-written, else created.

            When the trailing number is implicit, the first condition
            with a value of None is taken. If no None value is found, a
            new condition is added.

        cond: str
            The condition string. See ...

        .. note::
           Updates the mask if not no_auto.

        .. seealso::
           :meth:`~channelpack.ChannelPack.set_duration`
           :meth:`~channelpack.ChannelPack.set_samplerate`
           :meth:`~channelpack.ChannelPack.set_stopextend`
           :meth:`~channelpack.ChannelPack.clear_conditions`

        """

        # Audit:
        if conkey == 'start' or conkey == 'stop':
            conkey += 'cond'
        if not any(conkey.startswith(addable) for addable in _ADDABLES):
            raise KeyError(conkey)
        if not self.conconf.valid_conkey(conkey):
            raise KeyError(conkey)

        self._parse_cond(cond)  # Checking

        conkey = self.conconf.next_conkey(conkey)
        self.conconf.set_condition(conkey, cond)

        if not self.no_auto:
            self.make_mask()