# LoudnessCodecController

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Summary:[Nested Classes](https://developer.android.com/reference/android/media/LoudnessCodecController#nestedclasses)\|[Methods](https://developer.android.com/reference/android/media/LoudnessCodecController#pubmethods)\|[Inherited Methods](https://developer.android.com/reference/android/media/LoudnessCodecController#inhmethods)  

# LoudnessCodecController

*** ** * ** ***

[Kotlin](https://developer.android.com/reference/kotlin/android/media/LoudnessCodecController "View this page in Kotlin")\|Java

`
public


class
LoudnessCodecController
`  
`

extends `[Object](https://developer.android.com/reference/java/lang/Object)`


``


implements

`[AutoCloseable](https://developer.android.com/reference/java/lang/AutoCloseable)`


`

|---|---------------------------------------|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.media.LoudnessCodecController |

<br />

*** ** * ** ***

Class for getting recommended loudness parameter updates for audio decoders as they are used to play back media content according to the encoded format and current audio routing. These audio decoder updates leverage loudness metadata present in compressed audio streams. They ensure the loudness and dynamic range of the content is optimized to the physical characteristics of the audio output device (e.g. phone microspeakers vs headphones vs TV speakers).Those updates can be automatically applied to the[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)instance(s), or be provided to the user. The codec loudness management parameter updates are computed in accordance to the CTA-2075 standard.

A new object should be instantiated for each audio session (see[AudioManager.generateAudioSessionId()](https://developer.android.com/reference/android/media/AudioManager#generateAudioSessionId())) using creator methods[create(int)](https://developer.android.com/reference/android/media/LoudnessCodecController#create(int))or[create(int, java.util.concurrent.Executor, android.media.LoudnessCodecController.OnLoudnessCodecUpdateListener)](https://developer.android.com/reference/android/media/LoudnessCodecController#create(int,%20java.util.concurrent.Executor,%20android.media.LoudnessCodecController.OnLoudnessCodecUpdateListener)).

## Summary

|                                                                                                                   ### Nested classes                                                                                                                   ||
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` interface` | [LoudnessCodecController.OnLoudnessCodecUpdateListener](https://developer.android.com/reference/android/media/LoudnessCodecController.OnLoudnessCodecUpdateListener) Listener used for receiving asynchronous loudness metadata updates. |

|                                                                                                                                                                                                                                                                                                                                                                                                                                              ### Public methods                                                                                                                                                                                                                                                                                                                                                                                                                                              ||
|--------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` boolean`                                                                                                         | ` `[addMediaCodec](https://developer.android.com/reference/android/media/LoudnessCodecController#addMediaCodec(android.media.MediaCodec))`(`[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)` mediaCodec) ` Adds a new[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)that will stream data to a player which uses[ERROR(/#mSessionId)](https://developer.android.com/).                                                                                                                                                                                                                                                                                                                                                     |
| ` void`                                                                                                            | ` `[close](https://developer.android.com/reference/android/media/LoudnessCodecController#close())`() ` Stops any loudness updates and frees up the resources.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ` static `[LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController) | ` `[create](https://developer.android.com/reference/android/media/LoudnessCodecController#create(int,%20java.util.concurrent.Executor,%20android.media.LoudnessCodecController.OnLoudnessCodecUpdateListener))`(int sessionId, `[Executor](https://developer.android.com/reference/java/util/concurrent/Executor)` executor, `[LoudnessCodecController.OnLoudnessCodecUpdateListener](https://developer.android.com/reference/android/media/LoudnessCodecController.OnLoudnessCodecUpdateListener)` listener) ` Creates a new instance of[LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController) This method should be used when the client wants to alter the codec loudness parameters before they are applied to the audio decoders. |
| ` static `[LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController) | ` `[create](https://developer.android.com/reference/android/media/LoudnessCodecController#create(int))`(int sessionId) ` Creates a new instance of[LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController) This method should be used when the client does not need to alter the codec loudness parameters before they are applied to the audio decoders.                                                                                                                                                                                                                                                                                                                                                                                |
| ` `[Bundle](https://developer.android.com/reference/android/os/Bundle)                                             | ` `[getLoudnessCodecParams](https://developer.android.com/reference/android/media/LoudnessCodecController#getLoudnessCodecParams(android.media.MediaCodec))`(`[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)` mediaCodec) ` Returns the loudness parameters of the registered audio decoders Those parameters may have been automatically applied if the`LoudnessCodecController`was created with[create(int)](https://developer.android.com/reference/android/media/LoudnessCodecController#create(int)), or they are the parameters that have been sent to the[OnLoudnessCodecUpdateListener](https://developer.android.com/reference/android/media/LoudnessCodecController.OnLoudnessCodecUpdateListener)if using a codec update listener.            |
| ` void`                                                                                                            | ` `[removeMediaCodec](https://developer.android.com/reference/android/media/LoudnessCodecController#removeMediaCodec(android.media.MediaCodec))`(`[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)` mediaCodec) ` Removes the[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)from receiving loudness updates.                                                                                                                                                                                                                                                                                                                                                                                                                |

| ### Inherited methods |
|-----------------------|---|
| From class` `[java.lang.Object](https://developer.android.com/reference/java/lang/Object)` ` |--------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` `[Object](https://developer.android.com/reference/java/lang/Object)          | ` `[clone](https://developer.android.com/reference/java/lang/Object#clone())`() ` Creates and returns a copy of this object.                                                                                                                                                      | | ` boolean`                                                                     | ` `[equals](https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object))`(`[Object](https://developer.android.com/reference/java/lang/Object)` obj) ` Indicates whether some other object is "equal to" this one.                                           | | ` void`                                                                        | ` `[finalize](https://developer.android.com/reference/java/lang/Object#finalize())`() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.                                                          | | ` final `[Class](https://developer.android.com/reference/java/lang/Class)`<?>` | ` `[getClass](https://developer.android.com/reference/java/lang/Object#getClass())`() ` Returns the runtime class of this`Object`.                                                                                                                                                | | ` int`                                                                         | ` `[hashCode](https://developer.android.com/reference/java/lang/Object#hashCode())`() ` Returns a hash code value for the object.                                                                                                                                                 | | ` final void`                                                                  | ` `[notify](https://developer.android.com/reference/java/lang/Object#notify())`() ` Wakes up a single thread that is waiting on this object's monitor.                                                                                                                            | | ` final void`                                                                  | ` `[notifyAll](https://developer.android.com/reference/java/lang/Object#notifyAll())`() ` Wakes up all threads that are waiting on this object's monitor.                                                                                                                         | | ` `[String](https://developer.android.com/reference/java/lang/String)          | ` `[toString](https://developer.android.com/reference/java/lang/Object#toString())`() ` Returns a string representation of the object.                                                                                                                                            | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long,%20int))`(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed. | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long))`(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed.                   | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait())`() ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*.                                                                                             | ||
| From interface` `[java.lang.AutoCloseable](https://developer.android.com/reference/java/lang/AutoCloseable)` ` |------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| | ` abstract void` | ` `[close](https://developer.android.com/reference/java/lang/AutoCloseable#close())`() ` Closes this resource, relinquishing any underlying resources. | ||

## Public methods

### addMediaCodec

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public boolean addMediaCodec (MediaCodec mediaCodec)
```

Adds a new[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)that will stream data to a player which uses[ERROR(/#mSessionId)](https://developer.android.com/).

No new element will be added if the passed`mediaCodec`was previously added.

<br />

|                                                                                          Parameters                                                                                          ||
|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `mediaCodec` | `MediaCodec`: the codec to start receiving asynchronous loudness updates. The codec has to be in a configured or started state in order to add it for loudness updates. <br /> |

|                                                       Returns                                                        ||
|-----------|-----------------------------------------------------------------------------------------------------------|
| `boolean` | `false`if the`mediaCodec`was not configured or does not contain loudness metadata,`true`otherwise. <br /> |

|                                                                          Throws                                                                          ||
|--------------------------------------------------------------------------------------------------------|--------------------------------------------------|
| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException) | if the same`mediaCodec`was already added before. |

### close

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public void close ()
```

Stops any loudness updates and frees up the resources.

<br />

### create

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static LoudnessCodecController create (int sessionId, 
                Executor executor, 
                LoudnessCodecController.OnLoudnessCodecUpdateListener listener)
```

Creates a new instance of[LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController)

This method should be used when the client wants to alter the codec loudness parameters before they are applied to the audio decoders. Otherwise, use[create(int)](https://developer.android.com/reference/android/media/LoudnessCodecController#create(int)).

<br />

|                                                                                                                                                                                                                                                                                                                                      Parameters                                                                                                                                                                                                                                                                                                                                      ||
|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `sessionId` | `int`: the session ID of the track that will receive data from the added[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)'s <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `executor`  | `Executor`:[Executor](https://developer.android.com/reference/java/util/concurrent/Executor)to handle the callbacks Callback and listener events are dispatched through this[Executor](https://developer.android.com/reference/java/util/concurrent/Executor), providing an easy way to control which thread is used. To dispatch events through the main thread of your application, you can use[Context.getMainExecutor()](https://developer.android.com/reference/android/content/Context#getMainExecutor()). Otherwise, provide an[Executor](https://developer.android.com/reference/java/util/concurrent/Executor)that dispatches to an appropriate thread. <br /> |
| `listener`  | `LoudnessCodecController.OnLoudnessCodecUpdateListener`: used for receiving updates <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |

|                                                                                                               Returns                                                                                                                ||
|----------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
| [LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController) | the[LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController)instance <br /> |

### create

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static LoudnessCodecController create (int sessionId)
```

Creates a new instance of[LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController)

This method should be used when the client does not need to alter the codec loudness parameters before they are applied to the audio decoders. Otherwise, use[create(int, java.util.concurrent.Executor, android.media.LoudnessCodecController.OnLoudnessCodecUpdateListener)](https://developer.android.com/reference/android/media/LoudnessCodecController#create(int,%20java.util.concurrent.Executor,%20android.media.LoudnessCodecController.OnLoudnessCodecUpdateListener)).

<br />

|                                                                                  Parameters                                                                                  ||
|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `sessionId` | `int`: the session ID of the track that will receive data from the added[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)'s <br /> |

|                                                                                                               Returns                                                                                                                ||
|----------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
| [LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController) | the[LoudnessCodecController](https://developer.android.com/reference/android/media/LoudnessCodecController)instance <br /> |

### getLoudnessCodecParams

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Bundle getLoudnessCodecParams (MediaCodec mediaCodec)
```

Returns the loudness parameters of the registered audio decoders

Those parameters may have been automatically applied if the`LoudnessCodecController`was created with[create(int)](https://developer.android.com/reference/android/media/LoudnessCodecController#create(int)), or they are the parameters that have been sent to the[OnLoudnessCodecUpdateListener](https://developer.android.com/reference/android/media/LoudnessCodecController.OnLoudnessCodecUpdateListener)if using a codec update listener.

<br />

|                                                                                                                                          Parameters                                                                                                                                           ||
|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `mediaCodec` | `MediaCodec`: codec that decodes loudness annotated data. Has to be added with[addMediaCodec(android.media.MediaCodec)](https://developer.android.com/reference/android/media/LoudnessCodecController#addMediaCodec(android.media.MediaCodec))before calling this method <br /> |

|                                                                                            Returns                                                                                            ||
|---------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
| [Bundle](https://developer.android.com/reference/android/os/Bundle) | the[Bundle](https://developer.android.com/reference/android/os/Bundle)containing the current loudness parameters. <br /> |

|                                                                                                                   Throws                                                                                                                    ||
|--------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|
| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException) | if the passed[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)was not added before calling this method |

### removeMediaCodec

Added in[API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public void removeMediaCodec (MediaCodec mediaCodec)
```

Removes the[MediaCodec](https://developer.android.com/reference/android/media/MediaCodec)from receiving loudness updates.

This method can be called while asynchronous updates are live.

No elements will be removed if the passed mediaCodec was not added before.

<br />

|                                         Parameters                                          ||
|--------------|-------------------------------------------------------------------------------|
| `mediaCodec` | `MediaCodec`: the element to remove for receiving asynchronous updates <br /> |

|                                                                                                     Throws                                                                                                     ||
|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|
| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException) | if the`mediaCodec`was not configured, does not contain loudness metadata or if it was not added before |