# Module `redvox.api900.sensors.microphone_sensor`

This module contains classes and methods for working with microphone sensors.

Expand source code

    """
    This module contains classes and methods for working with microphone sensors.
    """

    import typing

    import numpy

    import redvox.api900.constants as constants
    import redvox.api900.exceptions as exceptions
    import redvox.api900.lib.api900_pb2 as api900_pb2
    import redvox.api900.migrations as migrations
    from redvox.api900.sensors.evenly_sampled_channel import EvenlySampledChannel
    from redvox.api900.sensors.evenly_sampled_sensor import EvenlySampledSensor

    class MicrophoneSensor(EvenlySampledSensor):
        """
        High-level wrapper around microphone channels.
        """

        def __init__(self, evenly_sampled_channel: typing.Optional[EvenlySampledChannel] = None):
            """
            Initialized this channel.
            :param evenly_sampled_channel: An instance of an EvenlySampledChannel with microphone data.
            """
            if evenly_sampled_channel is None:
                evenly_sampled_channel = EvenlySampledChannel()

            super().__init__(evenly_sampled_channel)
            self._evenly_sampled_channel.set_channel_types([api900_pb2.MICROPHONE])

        def set_payload_values(self,
                               microphone_payload: typing.Union[typing.List[int], numpy.ndarray]) -> 'MicrophoneSensor':
            """
            Sets the microphone channels payload values.
            :param microphone_payload: Payload values.
            :return: An instance of the sensor.
            """
            self._evenly_sampled_channel.set_payload(migrations.maybe_set_int(microphone_payload),
                                                     constants.PayloadType.INT32_PAYLOAD)
            return self

        def payload_values(self) -> numpy.ndarray:
            """
            Returns the microphone payload as a numpy ndarray of integers.
            :return: The microphone payload as a numpy ndarray of integers.
            """
            return self._evenly_sampled_channel.get_payload(api900_pb2.MICROPHONE)

        def payload_mean(self) -> float:
            """Returns the mean of this channel's payload.
            :return: The mean of this channel's payload.
            """
            return self._evenly_sampled_channel.get_value_mean(api900_pb2.MICROPHONE)

        # Currently, our Android and iOS devices don't calculate a median value, so we calculate it here
        # If the payload is set manually, the median value is calculated by the API
        def payload_median(self) -> numpy.float64:
            """Returns the median of this channel's payload.
            :return: The median of this channel's payload.
            """
            payload_values = self.payload_values()

            if len(payload_values) <= 0:
                raise exceptions.ReaderException("Can't obtain median value of empty array")

            median = numpy.median(self.payload_values())

            if isinstance(median, numpy.ndarray):
                return median[0]
            elif isinstance(median, numpy.float64):
                return median
            else:
                raise exceptions.ReaderException("Unknown type %s" % str(type(median)))

        def payload_std(self) -> float:
            """Returns the standard deviation of this channel's payload.
            :return: The standard deviation of this channel's payload.
            """
            return self._evenly_sampled_channel.get_value_std(api900_pb2.MICROPHONE)

## Classes

`class MicrophoneSensor (evenly_sampled_channel: Optional[EvenlySampledChannel] = None)`

  High-level wrapper around microphone channels.

  Initialized this channel. :param evenly_sampled_channel: An instance of an EvenlySampledChannel with microphone data.

  Expand source code

      class MicrophoneSensor(EvenlySampledSensor):
          """
          High-level wrapper around microphone channels.
          """

          def __init__(self, evenly_sampled_channel: typing.Optional[EvenlySampledChannel] = None):
              """
              Initialized this channel.
              :param evenly_sampled_channel: An instance of an EvenlySampledChannel with microphone data.
              """
              if evenly_sampled_channel is None:
                  evenly_sampled_channel = EvenlySampledChannel()

              super().__init__(evenly_sampled_channel)
              self._evenly_sampled_channel.set_channel_types([api900_pb2.MICROPHONE])

          def set_payload_values(self,
                                 microphone_payload: typing.Union[typing.List[int], numpy.ndarray]) -> 'MicrophoneSensor':
              """
              Sets the microphone channels payload values.
              :param microphone_payload: Payload values.
              :return: An instance of the sensor.
              """
              self._evenly_sampled_channel.set_payload(migrations.maybe_set_int(microphone_payload),
                                                       constants.PayloadType.INT32_PAYLOAD)
              return self

          def payload_values(self) -> numpy.ndarray:
              """
              Returns the microphone payload as a numpy ndarray of integers.
              :return: The microphone payload as a numpy ndarray of integers.
              """
              return self._evenly_sampled_channel.get_payload(api900_pb2.MICROPHONE)

          def payload_mean(self) -> float:
              """Returns the mean of this channel's payload.
              :return: The mean of this channel's payload.
              """
              return self._evenly_sampled_channel.get_value_mean(api900_pb2.MICROPHONE)

          # Currently, our Android and iOS devices don't calculate a median value, so we calculate it here
          # If the payload is set manually, the median value is calculated by the API
          def payload_median(self) -> numpy.float64:
              """Returns the median of this channel's payload.
              :return: The median of this channel's payload.
              """
              payload_values = self.payload_values()

              if len(payload_values) <= 0:
                  raise exceptions.ReaderException("Can't obtain median value of empty array")

              median = numpy.median(self.payload_values())

              if isinstance(median, numpy.ndarray):
                  return median[0]
              elif isinstance(median, numpy.float64):
                  return median
              else:
                  raise exceptions.ReaderException("Unknown type %s" % str(type(median)))

          def payload_std(self) -> float:
              """Returns the standard deviation of this channel's payload.
              :return: The standard deviation of this channel's payload.
              """
              return self._evenly_sampled_channel.get_value_std(api900_pb2.MICROPHONE)

  ### Ancestors

  - EvenlySampledSensor

  ### Methods

  `def payload_mean(self) ‑> float`

    Returns the mean of this channel's payload. :return: The mean of this channel's payload.

    Expand source code

        def payload_mean(self) -> float:
            """Returns the mean of this channel's payload.
            :return: The mean of this channel's payload.
            """
            return self._evenly_sampled_channel.get_value_mean(api900_pb2.MICROPHONE)

  `def payload_median(self) ‑> numpy.float64`

    Returns the median of this channel's payload. :return: The median of this channel's payload.

    Expand source code

        def payload_median(self) -> numpy.float64:
            """Returns the median of this channel's payload.
            :return: The median of this channel's payload.
            """
            payload_values = self.payload_values()

            if len(payload_values) <= 0:
                raise exceptions.ReaderException("Can't obtain median value of empty array")

            median = numpy.median(self.payload_values())

            if isinstance(median, numpy.ndarray):
                return median[0]
            elif isinstance(median, numpy.float64):
                return median
            else:
                raise exceptions.ReaderException("Unknown type %s" % str(type(median)))

  `def payload_std(self) ‑> float`

    Returns the standard deviation of this channel's payload. :return: The standard deviation of this channel's payload.

    Expand source code

        def payload_std(self) -> float:
            """Returns the standard deviation of this channel's payload.
            :return: The standard deviation of this channel's payload.
            """
            return self._evenly_sampled_channel.get_value_std(api900_pb2.MICROPHONE)

  `def payload_values(self) ‑> numpy.ndarray`

    Returns the microphone payload as a numpy ndarray of integers. :return: The microphone payload as a numpy ndarray of integers.

    Expand source code

        def payload_values(self) -> numpy.ndarray:
            """
            Returns the microphone payload as a numpy ndarray of integers.
            :return: The microphone payload as a numpy ndarray of integers.
            """
            return self._evenly_sampled_channel.get_payload(api900_pb2.MICROPHONE)

  `def set_payload_values(self, microphone_payload: Union[List[int], numpy.ndarray]) ‑> MicrophoneSensor`

    Sets the microphone channels payload values. :param microphone_payload: Payload values. :return: An instance of the sensor.

    Expand source code

        def set_payload_values(self,
                               microphone_payload: typing.Union[typing.List[int], numpy.ndarray]) -> 'MicrophoneSensor':
            """
            Sets the microphone channels payload values.
            :param microphone_payload: Payload values.
            :return: An instance of the sensor.
            """
            self._evenly_sampled_channel.set_payload(migrations.maybe_set_int(microphone_payload),
                                                     constants.PayloadType.INT32_PAYLOAD)
            return self

  ### Inherited members

  - `EvenlySampledSensor`:
    - `diff`
    - `first_sample_timestamp_epoch_microseconds_utc`
    - `metadata`
    - `metadata_as_dict`
    - `payload_type`
    - `sample_rate_hz`
    - `sensor_name`
    - `set_first_sample_timestamp_epoch_microseconds_utc`
    - `set_metadata`
    - `set_metadata_as_dict`
    - `set_sample_rate_hz`
    - `set_sensor_name`