Skip to content

MimiSDK 12.0.0 Migration Guide

This document outlines the various changes required to migrate from MSDK 11.x.x to MSDK 12.0.0.

If you have further questions then please don't hesitate to get in touch with us via our Mimi Support Portal.

What is new?

MSDK 12.0.0 focuses on changes the Processing API to help bring more Mimi features into your apps.

Required Migrations

Mimi Logging changes

The Mimi Logging class has been moved from io.mimi.sdk.core.util.Log to io.mimi.sdk.common.logging.MimiLog. You should update your imports accordingly.

For details on usage refer to Troubleshooting.

Processing APIs

Although the Processing APIs have changed, the good news is they fundamentally work in the same way as previous releases, so the vast majority of your app's code will be unaffected. Also, all previously supported processing devices are still supported.

The primary changes are:

  • How ProcessingSession is configured and activated.
  • How MimiProcessingParameters are accessed from the ProcessingSession.
  • Package changes for related components, such as models.

Refer to the Processing section for more detailed view of the APIs.

Migration Example

We have provided an example migration in our Integration Sample App.

Activating a ProcessingSession

The MimiProcessingConfiguration class has changed to support a broader feature set, additionally the activateSession function returns a Result<ProcessingSession>.

Also, the Applicator functions can now only be provided as part of the MimiProcessingConfiguration. The lifecycle of the Applicator now matches the ProcessingSession lifecycle.

Before

// Define configuration
val processingConfiguration = MimiProcessingConfiguration(
        personalization = PersonalizationConfiguration(
            mode = PersonalizationModeConfiguration.FineTuning(fitting = TODO("Tech level is defined by your Processing System"))
        )
    )

// Activate ProcessingSession 
val processingSession : ProcessingSession = MimiCore.processingController.activateSession(processingConfiguration)

// Add Applicators
val isEnabledApplicator = processingSession.isEnabled.addApplicator(APPLY_TIMEOUT, { TODO("IsEnabled Applicator implementation") })
val intensityApplicator = processingSession.intensity.addApplicator(APPLY_TIMEOUT, { TODO("Intensity Applicator implementation") })
val presetApplicator = processingSession.isEnabled.addApplicator(APPLY_TIMEOUT, { TODO("Preset Applicator implementation") })

After

// Applicator configuration is supplied when activating the ProcessingSession.
val processingConfiguration = MimiProcessingConfiguration.Basic(
        soundPersonalization = SoundPersonalizationFeatureConfiguration(
            mode = PersonalizationModeConfiguration.FineTuning(fitting = TODO("Tech level is defined by your Processing System"),
            parameterConfiguration = SoundPersonalizationParametersConfiguration(
                isEnabled = ProcessingParameterConfiguration(
                    APPLY_TIMEOUT,
                    { TODO("IsEnabled Applicator implementation") }
                ),
                intensity = ProcessingParameterConfiguration(
                    APPLY_TIMEOUT,
                    { TODO("Intensity Applicator implementation") }
                ),
                preset = ProcessingParameterConfiguration(
                    APPLY_TIMEOUT,
                    { TODO("Preset Applicator implementation") }
                ),
            )
        )
    )
)

val activationResult : Result<ProcessingSession> = MimiCore.processingController.activateSession(processingConfiguration)

Your application should also handle the possibility of activateSession() returning a Result.Failure instance, potentially by informing the user.

Accessing the active ProcessingSession

The ProcessingSession instance is now wrapped in an AsyncState instance.

This means that the ProcessingSession instance must now be retrieved from the value property.

Before

val processingSession : ProcessingSession? = MimiCore.processingController.activeSession.state

After

val processingSession : ProcessingSession? = MimiCore.processingController.activeSession.state.value

Warning

You should also check your code to see if you previously compared MimiCore.processingController.activeSession.state != null to determine if there was an active ProcessingSession. If so, then you should change it to MimiCore.processingController.activeSession.state.value != null.

Accessing Sound Personalization Processing Parameters

The ProcessingSession new structure affects the way your app references the MimiProcessingParameters:

Before

// isEnabled
session.isEnabled

// intensity
session.intensity

// preset
session.preset

After

// isEnabled 
session.soundPersonalization?.media?.isEnabled

// intensity 
session.soundPersonalization?.media?.intensity

// preset 
session.soundPersonalization?.media?.preset

Parameter to Device Synchronization

As a ProcessingSession now only supports a single Applicator per MimiProcessingParameter, the call to synchronize the Applicator has changed:

Before

session.preset.synchronizeApplicators()

After

session.soundPersonalization?.media?.preset?.synchronizeApplicator()

Package Change Summary

In this release we've defined two new modules which are automatically included in the main MSDK artefact:

  • libProcessing (io.mimi.sdk:processing)
  • libCommon (io.mimi.sdk:common)

These modules contain some components extracted from libCore for which you should update your imports accordingly.

Changes for libCommon:

MSDK 11.x.x MSDK 12.0.0
io.mimi.sdk.core.util.Log io.mimi.sdk.common.logging.MimiLog
io.mimi.sdk.core.common.MimiObservable io.mimi.sdk.common.observable.MimiObservable
io.mimi.sdk.core.internal.MsdkInternalApi io.mimi.sdk.common.annotations.MsdkInternalApi
io.mimi.sdk.core.internal.MsdkExperimentalApi io.mimi.sdk.common.annotations.MsdkExperimentalApi

Changes for libProcessing:

MSDK 11.x.x MSDK 12.0.0
io.mimi.sdk.core.controller.processing.MimiApplicatorResult io.mimi.sdk.processing.MimiApplicatorResult
io.mimi.sdk.core.controller.processing.Fitting io.mimi.sdk.processing.model.Fitting
io.mimi.sdk.core.controller.processing.Personalization io.mimi.sdk.processing.model.Personalization
io.mimi.sdk.core.controller.processing.MimiParameterApplicator Removed
io.mimi.sdk.core.controller.processing.MimiProcessingParameter io.mimi.sdk.processing.MimiProcessingParameter
io.mimi.sdk.core.controller.processing.ProcessingParameterResult io.mimi.sdk.processing.ProcessingParameterResult
io.mimi.sdk.core.controller.processing.ProcessingSession io.mimi.sdk.processing.ProcessingSession
io.mimi.sdk.core.controller.processing.MimiPresetParameterDataSource io.mimi.sdk.processing.MimiPresetParameterDataSource
io.mimi.sdk.core.controller.processing.MimiProcessingParameterDataSource io.mimi.sdk.processing.MimiProcessingParameterDataSource
io.mimi.sdk.core.controller.processing.ProcessingParameterState io.mimi.sdk.processing.ProcessingParameterState
io.mimi.sdk.core.controller.processing.ProcessingParameterExceptions io.mimi.sdk.processing.ProcessingParameterExceptions