Exemple #1
0
    def set_tonecontrol_filters(self,
                                lowshelf=None,
                                highshelf=None,
                                mode=MODE_BOTH):
        (addr_left, length_left) = datatools.parse_int_length(
            self.sigmatcp.request_metadata(ATTRIBUTE_TONECONTROL_FILTER_LEFT))
        (addr_right, length_right) = datatools.parse_int_length(
            self.sigmatcp.request_metadata(ATTRIBUTE_TONECONTROL_FILTER_RIGHT))

        if mode == MODE_LEFT:
            maxlen = length_left
        elif mode == MODE_RIGHT:
            maxlen = length_right
        else:
            maxlen = min(length_left, length_right)

        assert maxlen % 5 == 0
        maxlen = maxlen / 5

        if maxlen < 2:
            raise (
                DSPError("DSPprofile doesn't have tone controls or too short"))

        if lowshelf is not None:
            if mode == MODE_LEFT or mode == MODE_BOTH:
                self.sigmatcp.write_biquad(addr_left, lowshelf)
            if mode == MODE_RIGHT or mode == MODE_BOTH:
                self.sigmatcp.write_biquad(addr_right, lowshelf)

        if highshelf is not None:
            if mode == MODE_LEFT or mode == MODE_BOTH:
                self.sigmatcp.write_biquad(addr_left + 5, highshelf)
            if mode == MODE_RIGHT or mode == MODE_BOTH:
                self.sigmatcp.write_biquad(addr_right + 5, highshelf)
Exemple #2
0
    def write_fir(self, coefficients, mode=MODE_BOTH):

        (firleft, len_left) = datatools.parse_int_length(
            self.sigmatcp.request_metadata(ATTRIBUTE_FIR_FILTER_LEFT))
        (firright, len_right) = datatools.parse_int_length(
            self.sigmatcp.request_metadata(ATTRIBUTE_FIR_FILTER_RIGHT))

        if mode == MODE_BOTH or mode == MODE_LEFT:
            result = self.write_coefficients(firleft, len_left, coefficients)

        if mode == MODE_BOTH or mode == MODE_RIGHT:
            result = self.write_coefficients(firright, len_right, coefficients)

        return result
Exemple #3
0
    def set_filters(self, filters, mode=MODE_BOTH, cutoff_long=False):

        (addr_left, length_left) = datatools.parse_int_length(
            self.sigmatcp.request_metadata(ATTRIBUTE_IIR_FILTER_LEFT))
        # Beocreate profiles use different naming
        if length_left <= 0:
            (addr_left, length_left) = datatools.parse_int_length(
                self.sigmatcp.request_metadata(ATTRIBUTE_CUSTOM_FILTER_LEFT))

        (addr_right, length_right) = datatools.parse_int_length(
            self.sigmatcp.request_metadata(ATTRIBUTE_IIR_FILTER_RIGHT))
        # Beocreate profiles use different naming
        if length_right <= 0:
            (addr_right, length_right) = datatools.parse_int_length(
                self.sigmatcp.request_metadata(ATTRIBUTE_CUSTOM_FILTER_RIGHT))

        if mode == MODE_LEFT:
            maxlen = length_left
        elif mode == MODE_RIGHT:
            maxlen = length_right
        else:
            maxlen = min(length_left, length_right)

        assert maxlen % 5 == 0

        maxlen = maxlen / 5

        if len(filters) > maxlen and (cutoff_long == False):
            raise (DSPError(
                "{} filters given, but filter bank has only {:.0f} slots".
                format(len(filters), maxlen)))

        self.hibernate(True)

        logging.debug("deploying filters %s", filters)

        i = 0
        for f in filters:
            logging.debug(f)
            if mode == MODE_LEFT or mode == MODE_BOTH:
                if i < length_left:
                    self.sigmatcp.write_biquad(addr_left + i * 5, f)
            if mode == MODE_RIGHT or mode == MODE_BOTH:
                if i < length_right:
                    self.sigmatcp.write_biquad(addr_right + i * 5, f)
            i += 1
            if i >= maxlen:
                break

        self.hibernate(False)
Exemple #4
0
 def get_addr_length(self, attribute):
     addr = self.get_meta(attribute)
     return parse_int_length(addr)