# Audio

`PM.Audio` attaches stock audio presets to a part. The game ships a library of audio presets (engine sounds, mechanical sounds, and so on), and this module binds one to a part without you having to build the audio module by hand. It is the smallest typed module: one helper.

## Ensuring a preset

`PM.Audio:EnsurePreset(part, presetId, targetTransformPath, overrideExistingAudio)` makes sure the part has the hidden audio-preset module and that it carries a binding for the given preset.

```lua
PM.Parts:Patch("GiveEngineSound")
        :Named("engine_1v_methalox_terrier")
        :Do(function(part)
            PM.Audio:EnsurePreset(part, "SomeStockEnginePreset")
        end)
```

The arguments:

* `**part**` is the part you are patching, the value from your `Do` callback.
* `**presetId**` is the stock preset to bind.
* `**targetTransformPath**` is optional. It points the audio at a specific transform on the part when the sound should come from a particular spot rather than the part as a whole.
* `**overrideExistingAudio**` is optional. Set it `true` to replace audio the part already has rather than leaving existing bindings in place.

## When to use it

Use this when a part is missing a sound it should have, or when you want to swap in a different stock preset. Because it is an `Ensure`, it is safe to run on a part that may or may not already have the audio module: it adds the module if needed and binds the preset either way. The set of preset ids comes from the game's audio library.