***

title: play
slug: /reference/python/agents/swml-builder/play
description: Add a play verb to play audio or text-to-speech.
max-toc-depth: 3
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

Add a `play` verb to the main section. Plays audio from a URL or a list of URLs.

<Warning>
  Exactly one of `url` or `urls` must be provided. Calling `play()` without either
  raises a `ValueError`.
</Warning>

## **Parameters**

<ParamField path="url" type="Optional[str]" toc={true}>
  Single URL to play. Supports audio file URLs and the `say:` prefix for
  text-to-speech (e.g., `"say:Hello world"`). Mutually exclusive with `urls`.
</ParamField>

<ParamField path="urls" type="Optional[list[str]]" toc={true}>
  List of URLs to play in sequence. Mutually exclusive with `url`.
</ParamField>

<ParamField path="volume" type="Optional[float]" toc={true}>
  Volume adjustment level, from `-40` to `40` dB.
</ParamField>

<ParamField path="say_voice" type="Optional[str]" toc={true}>
  Voice name for text-to-speech playback.
</ParamField>

<ParamField path="say_language" type="Optional[str]" toc={true}>
  Language code for text-to-speech (e.g., `"en-US"`).
</ParamField>

<ParamField path="say_gender" type="Optional[str]" toc={true}>
  Gender for text-to-speech voice selection.
</ParamField>

<ParamField path="auto_answer" type="Optional[bool]" toc={true}>
  Whether to automatically answer the call before playing audio.
</ParamField>

## **Returns**

`Self` -- The builder instance for method chaining.

## **Example**

```python {10,20,33}
from signalwire import SWMLService, SWMLBuilder

service = SWMLService(name="player")
builder = SWMLBuilder(service)

# Single audio file
doc = (
    builder
    .answer()
    .play(url="https://example.com/welcome.mp3")
    .build()
)
print(doc)

# Multiple files in sequence
builder.reset()
doc = (
    builder
    .answer()
    .play(urls=[
        "https://example.com/greeting.mp3",
        "https://example.com/menu.mp3"
    ])
    .build()
)
print(doc)

# Text-to-speech via say: prefix
builder.reset()
doc = (
    builder
    .answer()
    .play(url="say:Welcome to our service.", say_voice="rime.spore")
    .build()
)
print(doc)
```