Added in [API level 9](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Nested Classes](https://developer.android.com/reference/android/media/audiofx/PresetReverb#nestedclasses) \| [Constants](https://developer.android.com/reference/android/media/audiofx/PresetReverb#constants) \| [Inherited Constants](https://developer.android.com/reference/android/media/audiofx/PresetReverb#inhconstants) \| [Inherited Fields](https://developer.android.com/reference/android/media/audiofx/PresetReverb#inhfields) \| [Ctors](https://developer.android.com/reference/android/media/audiofx/PresetReverb#pubctors) \| [Methods](https://developer.android.com/reference/android/media/audiofx/PresetReverb#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/media/audiofx/PresetReverb#inhmethods)

# PresetReverb

*** ** * ** ***


`
public


class
PresetReverb
`


`


`

`

extends https://developer.android.com/reference/android/media/audiofx/AudioEffect


`

`


`

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

<br />

*** ** * ** ***

A sound generated within a room travels in many directions. The listener first hears the
direct sound from the source itself. Later, he or she hears discrete echoes caused by sound
bouncing off nearby walls, the ceiling and the floor. As sound waves arrive after
undergoing more and more reflections, individual reflections become indistinguishable and
the listener hears continuous reverberation that decays over time.
Reverb is vital for modeling a listener's environment. It can be used in music applications
to simulate music being played back in various environments, or in games to immerse the
listener within the game's environment.
The PresetReverb class allows an application to configure the global reverb using a reverb preset.
This is primarily used for adding some reverb in a music playback context. Applications
requiring control over a more advanced environmental reverb are advised to use the
`https://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb` class.

An application creates a PresetReverb object to instantiate and control a reverb engine in the
audio framework.

The methods, parameter types and units exposed by the PresetReverb implementation are
directly mapping those defined by the OpenSL ES 1.0.1 Specification
(http://www.khronos.org/opensles/) for the SLPresetReverbItf interface.
Please refer to this specification for more details.

The PresetReverb is an output mix auxiliary effect and should be created on
Audio session 0. In order for a MediaPlayer or AudioTrack to be fed into this effect,
they must be explicitely attached to it and a send level must be specified. Use the effect ID
returned by getId() method to designate this particular effect when attaching it to the
MediaPlayer or AudioTrack.

Creating a reverb on the output mix (audio session 0) requires permission
`https://developer.android.com/reference/android/Manifest.permission#MODIFY_AUDIO_SETTINGS`

See `https://developer.android.com/reference/android/media/audiofx/AudioEffect` class for more details on controlling
audio effects.

## Summary

| ### Nested classes ||
|---|---|
| ` interface` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb.OnParameterChangeListener` The OnParameterChangeListener interface defines a method called by the PresetReverb when a parameter value has changed. |
| ` class` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb.Settings` The Settings class regroups all preset reverb parameters. |

| ### Constants ||
|---|---|
| `int` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb#PARAM_PRESET` Preset. |
| `short` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb#PRESET_LARGEHALL` Reverb preset representing a large-sized hall suitable for a full orchestra |
| `short` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb#PRESET_LARGEROOM` Reverb preset representing a large-sized room suitable for live performances |
| `short` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb#PRESET_MEDIUMHALL` Reverb preset representing a medium-sized hall |
| `short` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb#PRESET_MEDIUMROOM` Reverb preset representing a medium room with a length of ten meters or less |
| `short` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb#PRESET_NONE` No reverb or reflections |
| `short` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb#PRESET_PLATE` Reverb preset representing a synthesis of the traditional plate reverb |
| `short` | `https://developer.android.com/reference/android/media/audiofx/PresetReverb#PRESET_SMALLROOM` Reverb preset representing a small room less than five meters in length |

| ### Inherited constants |
|---|
| From class `https://developer.android.com/reference/android/media/audiofx/AudioEffect` |---|---| | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION` Intent to signal to the effect control application or service that an audio session is closed and that effects should not be applied anymore. | | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL` Intent to launch an audio effect control panel UI. | | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION` Intent to signal to the effect control application or service that a new audio session is opened and requires audio effects to be applied. | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ALREADY_EXISTS` Internal operation status. | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#CONTENT_TYPE_GAME` Value for `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EXTRA_CONTENT_TYPE` when the type of content played is game audio | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#CONTENT_TYPE_MOVIE` Value for `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EXTRA_CONTENT_TYPE` when the type of content played is video or movie | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#CONTENT_TYPE_MUSIC` Value for `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EXTRA_CONTENT_TYPE` when the type of content played is music | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#CONTENT_TYPE_VOICE` Value for `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EXTRA_CONTENT_TYPE` when the type of content played is voice audio | | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_AUXILIARY` Effect connection mode is auxiliary. | | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_INSERT` Effect connection mode is insert. | | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_POST_PROCESSING` Effect connection mode is post processing. | | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_PRE_PROCESSING` Effect connection mode is pre processing. | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ERROR` Unspecified error. | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ERROR_BAD_VALUE` Operation failed due to bad parameter value. | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ERROR_DEAD_OBJECT` Operation failed due to dead remote object. | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ERROR_INVALID_OPERATION` Operation failed because it was requested in wrong state. | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ERROR_NO_INIT` Operation failed due to bad object initialization. | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#ERROR_NO_MEMORY` Operation failed due to lack of memory. | | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EXTRA_AUDIO_SESSION` Contains the ID of the audio session the effects should be applied to. | | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EXTRA_CONTENT_TYPE` Indicates which type of content is played by the application. | | `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EXTRA_PACKAGE_NAME` Contains the package name of the calling application. | | `int` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#SUCCESS` Successful operation. | |

| ### Inherited fields |
|---|
| From class `https://developer.android.com/reference/android/media/audiofx/AudioEffect` |---|---| | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_AEC` UUID for Acoustic Echo Canceler (AEC) | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_AGC` UUID for Automatic Gain Control (AGC) | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_BASS_BOOST` UUID for bass boost effect | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_DYNAMICS_PROCESSING` UUID for Dynamics Processing | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_ENV_REVERB` UUID for environmental reverberation effect | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_EQUALIZER` UUID for equalizer effect | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_HAPTIC_GENERATOR` UUID for Haptic Generator. | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_LOUDNESS_ENHANCER` UUID for Loudness Enhancer | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_NS` UUID for Noise Suppressor (NS) | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_PRESET_REVERB` UUID for preset reverberation effect | | ` public static final https://developer.android.com/reference/java/util/UUID` | `https://developer.android.com/reference/android/media/audiofx/AudioEffect#EFFECT_TYPE_VIRTUALIZER` UUID for virtualizer effect | |

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/media/audiofx/PresetReverb#PresetReverb(int,%20int)(int priority, int audioSession) ` Class constructor. |

| ### Public methods ||
|---|---|
| ` short` | ` https://developer.android.com/reference/android/media/audiofx/PresetReverb#getPreset()() ` Gets current reverb preset. |
| ` https://developer.android.com/reference/android/media/audiofx/PresetReverb.Settings` | ` https://developer.android.com/reference/android/media/audiofx/PresetReverb#getProperties()() ` Gets the preset reverb properties. |
| ` void` | ` https://developer.android.com/reference/android/media/audiofx/PresetReverb#setParameterListener(android.media.audiofx.PresetReverb.OnParameterChangeListener)(https://developer.android.com/reference/android/media/audiofx/PresetReverb.OnParameterChangeListener listener) ` Registers an OnParameterChangeListener interface. |
| ` void` | ` https://developer.android.com/reference/android/media/audiofx/PresetReverb#setPreset(short)(short preset) ` Enables a preset on the reverb. |
| ` void` | ` https://developer.android.com/reference/android/media/audiofx/PresetReverb#setProperties(android.media.audiofx.PresetReverb.Settings)(https://developer.android.com/reference/android/media/audiofx/PresetReverb.Settings settings) ` Sets the preset reverb properties. |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/android/media/audiofx/AudioEffect ` |---|---| | ` void` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect.Descriptor` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#getDescriptor()() ` Get the effect descriptor. | | ` boolean` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#getEnabled()() ` Returns effect enabled state | | ` int` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#getId()() ` Returns effect unique identifier. | | ` boolean` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#hasControl()() ` Checks if this AudioEffect object is controlling the effect engine. | | ` static https://developer.android.com/reference/android/media/audiofx/AudioEffect.Descriptor` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#queryEffects()() ` Query all effects available on the platform. | | ` void` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#release()() ` Releases the native AudioEffect resources. | | ` void` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#setControlStatusListener(android.media.audiofx.AudioEffect.OnControlStatusChangeListener)(https://developer.android.com/reference/android/media/audiofx/AudioEffect.OnControlStatusChangeListener listener) ` Sets the listener AudioEffect notifies when the effect engine control is taken or returned. | | ` void` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#setEnableStatusListener(android.media.audiofx.AudioEffect.OnEnableStatusChangeListener)(https://developer.android.com/reference/android/media/audiofx/AudioEffect.OnEnableStatusChangeListener listener) ` Sets the listener AudioEffect notifies when the effect engine is enabled or disabled. | | ` int` | ` https://developer.android.com/reference/android/media/audiofx/AudioEffect#setEnabled(boolean)(boolean enabled) ` Enable or disable the effect. | ||
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` 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 https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` 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` | ` 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` | ` 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*. | ||

## Constants

### PARAM_PRESET

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

```
public static final int PARAM_PRESET
```

Preset. Parameter ID for
`https://developer.android.com/reference/android/media/audiofx/PresetReverb.OnParameterChangeListener`

<br />

Constant Value:

0
(0x00000000)


### PRESET_LARGEHALL

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

```
public static final short PRESET_LARGEHALL
```

Reverb preset representing a large-sized hall suitable for a full orchestra

<br />

Constant Value:

5
(0x00000005)


### PRESET_LARGEROOM

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

```
public static final short PRESET_LARGEROOM
```

Reverb preset representing a large-sized room suitable for live performances

<br />

Constant Value:

3
(0x00000003)


### PRESET_MEDIUMHALL

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

```
public static final short PRESET_MEDIUMHALL
```

Reverb preset representing a medium-sized hall

<br />

Constant Value:

4
(0x00000004)


### PRESET_MEDIUMROOM

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

```
public static final short PRESET_MEDIUMROOM
```

Reverb preset representing a medium room with a length of ten meters or less

<br />

Constant Value:

2
(0x00000002)


### PRESET_NONE

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

```
public static final short PRESET_NONE
```

No reverb or reflections

<br />

Constant Value:

0
(0x00000000)


### PRESET_PLATE

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

```
public static final short PRESET_PLATE
```

Reverb preset representing a synthesis of the traditional plate reverb

<br />

Constant Value:

6
(0x00000006)


### PRESET_SMALLROOM

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

```
public static final short PRESET_SMALLROOM
```

Reverb preset representing a small room less than five meters in length

<br />

Constant Value:

1
(0x00000001)


## Public constructors

### PresetReverb

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

```
public PresetReverb (int priority, 
                int audioSession)
```

Class constructor.

<br />

| Parameters ||
|---|---|
| `priority` | `int`: the priority level requested by the application for controlling the PresetReverb engine. As the same engine can be shared by several applications, this parameter indicates how much the requesting application needs control of effect parameters. The normal priority is 0, above normal is a positive number, below normal a negative number. <br /> |
| `audioSession` | `int`: system wide unique audio session identifier. If audioSession is not 0, the PresetReverb will be attached to the MediaPlayer or AudioTrack in the same audio session. Otherwise, the PresetReverb will apply to the output mix. As the PresetReverb is an auxiliary effect it is recommended to instantiate it on audio session 0 and to attach it to the MediaPLayer auxiliary output. <br /> |

| Throws ||
|---|---|
|   | java.lang.IllegalArgumentException |
|   | java.lang.RuntimeException |
|   | java.lang.UnsupportedOperationException |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` |   |
| `https://developer.android.com/reference/java/lang/RuntimeException` |   |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` |   |

## Public methods

### getPreset

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

```
public short getPreset ()
```

Gets current reverb preset.

<br />

| Returns ||
|---|---|
| `short` | the preset that is set at the moment. <br /> |

| Throws ||
|---|---|
|   | java.lang.IllegalArgumentException |
|   | java.lang.IllegalStateException |
|   | java.lang.UnsupportedOperationException |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` |   |
| `https://developer.android.com/reference/java/lang/IllegalStateException` |   |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` |   |

### getProperties

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

```
public PresetReverb.Settings getProperties ()
```

Gets the preset reverb properties. This method is useful when a snapshot of current
preset reverb settings must be saved by the application.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/media/audiofx/PresetReverb.Settings` | a PresetReverb.Settings object containing all current parameters values <br /> |

| Throws ||
|---|---|
|   | java.lang.IllegalArgumentException |
|   | java.lang.IllegalStateException |
|   | java.lang.UnsupportedOperationException |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` |   |
| `https://developer.android.com/reference/java/lang/IllegalStateException` |   |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` |   |

### setParameterListener

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

```
public void setParameterListener (PresetReverb.OnParameterChangeListener listener)
```

Registers an OnParameterChangeListener interface.

<br />

| Parameters ||
|---|---|
| `listener` | `PresetReverb.OnParameterChangeListener`: OnParameterChangeListener interface registered <br /> |

### setPreset

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

```
public void setPreset (short preset)
```

Enables a preset on the reverb.

The reverb PRESET_NONE disables any reverb from the current output but does not free the
resources associated with the reverb. For an application to signal to the implementation
to free the resources, it must call the release() method.

<br />

| Parameters ||
|---|---|
| `preset` | `short`: this must be one of the the preset constants defined in this class. e.g. `https://developer.android.com/reference/android/media/audiofx/PresetReverb#PRESET_SMALLROOM` <br /> |

| Throws ||
|---|---|
|   | java.lang.IllegalArgumentException |
|   | java.lang.IllegalStateException |
|   | java.lang.UnsupportedOperationException |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` |   |
| `https://developer.android.com/reference/java/lang/IllegalStateException` |   |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` |   |

### setProperties

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

```
public void setProperties (PresetReverb.Settings settings)
```

Sets the preset reverb properties. This method is useful when preset reverb settings have to
be applied from a previous backup.

<br />

| Parameters ||
|---|---|
| `settings` | `PresetReverb.Settings`: a PresetReverb.Settings object containing the properties to apply <br /> |

| Throws ||
|---|---|
|   | java.lang.IllegalArgumentException |
|   | java.lang.IllegalStateException |
|   | java.lang.UnsupportedOperationException |
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` |   |
| `https://developer.android.com/reference/java/lang/IllegalStateException` |   |
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` |   |