Processing API Architecture

The Processing APIs can be divided into five main components:

Processing API Architecture

MimiProcessingController

Root entry point and context for Processing API access.

Overview

MimiProcessingController is a controller owned and intialized by MimiCore. It owns activation/deactivation of processing sessions, and therefore can be used as the source of truth for the active processing session.

Responsibilities

  • Centralized location for access to Processing APIs.
  • Owner of active processing session including activation and deactivation.

MimiProcessingConfiguration

The top-level configuration for activating processing.

Overview

The MimiProcessingConfiguration is a DSL-style configuration which offers a declarative approach to configure Mimi Processing.

Responsibilities

  • A higher-level, opinionated API which provides sensible, overridable defaults for different types of integrations.
  • Wraps the lower-level Processing APIs which offer flexibility, but are more complex.

MimiProcessingSession

The provider of access to processing parameters when activated.

Overview

As described in the previous section, a MimiProcessingSession is owned by a MimiProcessingController, which is responsible for handling the session lifecycle in terms of activation/deactivation.

MimiProcessingSession itself owns the processing parameters, and therefore is the gateway to parameter access.

Responsibilities

  • Owner of all processing parameters, providing access to isEnabled, intensity and preset.
  • Source of truth for fitting which provides required fitting information for preset acquisition.
  • Provides the ability for processing to be “interrupted” and automatically disabled due to external events (such as the hearing test launching).

MimiProcessingParameter

The focal point for state, application and data.

Overview

A MimiProcessingParameter represents an individual parameter that can be used to control Mimi processing functionality. It encompasses a value that can be mutated and applied asynchronously with the help of MimiProcessingParameterApplicator(s).

The MimiProcessingSession defines the following processing parameters to provide access and control of the Mimi processing:

  • isEnabled - Whether Mimi processing is enabled or disabled.
  • intensity - Intensity of Mimi processing.
  • preset - Preset data model for use with a Mimi processor.

Responsibilities

  • Providing access to the current parameter value.
  • Applying values to a collection of associated applicators using the value application sequence.
  • Fetching values from remote data sources asynchronously (such as preset data).
  • Providing state and value updates to a collection of registered subscribers.

MimiProcessingParameterApplicator

Responsible for applying the processing parameter values to external systems.

Overview

Arguably the most relevant Processing API component for most integrators is the MimiProcessingParameterApplicator.

An applicator is an accessory of a MimiProcessingParameter that is capable of performing the value application logic for its associated parameter. It is roughly equivalent to the previous MimiProcessingHandler concept.

In simple terms, its role is to apply processing parameter values to an external system. When there is a request to update a processing parameter value, its applicators are requested to apply this value. The result of this request in turn influences the MimiProcessingParameter state.

Responsibilities

  • Provides an apply method which will allow the applicator to asynchronously apply a value to an external system.
  • Ability to set a timeout to specify a time duration which if exceeded is considered erroneous and will cause a value application sequence to fail.

Integrating Processing

The Integrating Processing guide explains how to add a custom Processing component to provide your users with Mimified audio.