> For the complete documentation index, see [llms.txt](https://docs.moxha.dev/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.moxha.dev/documentation/paid-scripts/surround-spatial-audio/api/client.md).

# Client

### Play

{% code fullWidth="false" %}

```lua
local soundId = exports['mx-surround']:Play(soundId, url, coords, loop, volume, panner)
```

{% endcode %}

{% hint style="info" %}
This export is a synchronous function, which means that this code returns a soundId to you. And if sound is not created, it returns false
{% endhint %}

{% hint style="danger" %}
With 1.8.5 players who are far away from the song will not be able to get the `maxDuration` and `timeStamp`of the song! If you want the far away player to get the maxDuration, you must use server side export
{% endhint %}

#### Parameters

* > **soundId?**: `string`
  >
  > * If not provided, will be created automatically
* > **url**: `string`
* > **coords?**: `vector3`
  >
  > * If not provided, its means that the sound is not dynamic. So player can hear it from everywhere
* > **loop?:** `boolean`
* > **volume?:** `number`
  >
  > * Override default volume (even if sound profile is enabled) (0.0 | 1.0)
* > **panner?:** `PannerNode`
  >
  > * [See how to use](https://developer.mozilla.org/en-US/docs/Web/API/PannerNode?retiredLocale=tr)

#### Returns

* > **`soundId | false`**

***

### Play Async

```lua
exports['mx-surround']:PlayAsync(soundId, url, coords, loop, volume, panner)
```

{% hint style="info" %}
This is the same as a normal play export. The only difference is that it is async. So there is no return value
{% endhint %}

***

### Attach To Entity

```lua
exports['mx-surround']:attachEntity(soundId, networkId)
```

#### Parameters

* > **soundId:** `string`
* > **networkId:** `number`

***

### Detach From Entity

```lua
exports['mx-surround']:detachEntity(soundId)
```

#### Parameters

* > **soundId:** `string`

***

### Attach To Player

{% hint style="info" %}
If you are going to attach to a player, you can of course use the `attachEntity`. **But you should definitely use this**. Because if the player gets in the car, the script detects it with this export and filters the sound.
{% endhint %}

```lua
exports['mx-surround']:attachPlayer(soundId, playerId)
```

#### Parameters

* > **soundId:** `string`
* > **playerId:** `number`

***

### Detach From Player

```lua
exports['mx-surround']:detachPlayer(soundId)
```

#### Parameters

* > **soundId:** `string`

***

### Stop

{% hint style="info" %}
The difference from Pause export is this: If you are playing a song on spotify or youtube, it completely deletes the player so that there is no player in the dom. This is very important for optimization
{% endhint %}

```lua
exports['mx-surround']:Stop(soundId)
```

#### Parameters

* > **soundId:** `string`

***

### Pause

```lua
exports['mx-surround']:Pause(soundId)
```

#### Parameters

* > **soundId:** `string`

***

### Resume

```lua
exports['mx-surround']:Resume(soundId)
```

#### Parameters

* > **soundId:** `string`

***

### Destroy

```lua
exports['mx-surround']:Destroy(soundId)
```

#### Parameters

* > **soundId:** `string`

***

### Destroy All

```lua
exports['mx-surround']:destroyAllSounds()
```

***

### Repeat

```lua
exports['mx-surround']:repeatSound(soundId)
```

#### Parameters

* > **soundId:** `string`

***

### Add Filter

```lua
exports['mx-surround']:addFilter(soundId, type, filter)
```

#### Parameters

* > **soundId:** `string`
* > **type:** `string`
* > **filter**: `{frequency: number, Q: number, gain:number}`

***

### Remove Filter

```lua
exports['mx-surround']:removeFilter(soundId)
```

#### Parameters

* > **soundId:** `string`

***

## To better manage sounds, see these three section

{% content-ref url="/pages/3FhbxCK08vAuYWnEVNJ7" %}
[Set](/documentation/paid-scripts/surround-spatial-audio/api/client/set.md)
{% endcontent-ref %}

{% content-ref url="/pages/A26l9BCj6cLzstyTEn8j" %}
[Get](/documentation/paid-scripts/surround-spatial-audio/api/client/get.md)
{% endcontent-ref %}

{% content-ref url="/pages/JSXJx3QdwjoBEwxLOzFd" %}
[Handlers](/documentation/paid-scripts/surround-spatial-audio/api/client/handlers.md)
{% endcontent-ref %}
