Skip to main content

🔊 Play sounds in Python scripts

play_sounds provides a simple cross-platform API to play sounds in Python scripts. It includes a synchronous API and an equivalent asynchronous API that is compatible with asyncio and trio.

For code examples, you can check out onhold and ding, or scroll down to the Usage section.

Why play_sounds?

boombox is great and 90% of the way there, however it is limited to only playing WAV files on Windows. playsound will play other formats than WAV on Windows, but it requires GStreamer and PyGObject bindings on Linux, while boombox has several playback backends for Linux other than, and including, GStreamer.

Neither boombox or playsound provide asyncio and async/await compatible APIs, but play_sounds does.

If you're targeting multiple desktop platforms and don't want to get mired down in the details of when and where to use playsound or boombox, or if your project uses async/await, you can just reach for play_sounds and call it a day.

Installation

$ python3 -m pip install play_sounds

Usage

This library uses pathlib.Path objects when pointing to filenames and paths. It can use aiopath.AsyncPath objects, too.

There's a synchronous API and an asynchronous API that you can use with the async/await syntax and asyncio.

Synchronous API

Play a file

from play_sounds import play_file, DEFAULT_SONG


play_file(DEFAULT_SONG)  # blocks by default

# play without blocking
play_file(DEFAULT_SONG, block=False) 

Play while work completes

from time import sleep
from play_sounds import play_while_running, DEFAULT_SONG


WAIT: int = 60


with play_while_running(DEFAULT_SONG):
  sleep(WAIT)

Play a file after work completes

from time import sleep
from play_sounds import play_after, DEFAULT_SOUND


with play_after(DEFAULT_SOUND):  # blocks by default
  sleep(WAIT)

# play without blocking
with play_after(DEFAULT_SOUND, block=False):
  sleep(WAIT)

Ring the terminal bell

from play_sounds import bell, bell_after


# play bell
bell()

# ensure the bell is played even if an exception is thrown
with bell_after():
  raise Exception("Bye")

Asynchronous API

To run the following examples with top-level await expressions, launch an asynchronous Python REPL using python3 -m asyncio or an IPython shell.

Play a file

from play_sounds import play_file_async, DEFAULT_SONG


await play_file_async(DEFAULT_SONG)  # blocks by default

# play without blocking
await play_file_async(DEFAULT_SONG, block=False) 

Play while work completes

from asyncio import sleep
from play_sounds import play_while_running_async, DEFAULT_SONG


async with play_while_running_async(DEFAULT_SONG):
  await sleep(WAIT)

Play a file after work completes

from asyncio import sleep
from play_sounds import play_after_async, DEFAULT_SOUND


async with play_after_async(DEFAULT_SOUND):  # blocks by default
  await sleep(WAIT)

# play without blocking
async with play_after_async(DEFAULT_SOUND, block=False):
  await sleep(WAIT)

Support

Want to support this project and other open-source projects like it?

Buy Me A Coffee

Copyright

See CREDIT.md.

License

See LICENSE.

Metadata

Release files for play-sounds 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for play-sounds 0.6.0
File Size Uploaded
play_sounds-0.6.0.tar.gz 8.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for play-sounds 0.6.0
File Interpreter ABI Platform
play_sounds-0.6.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 17.2 kB

Release files / play_sounds-0.6.0.tar.gz

Download URL play_sounds-0.6.0.tar.gz
Size 8.2 kB
Tags Source
SHA-256 checksum
How to use checksums
814f920ff5776a5cb5aa18b537491a78ad835312bd7dc3b2366c4bcc7176d6dc
BLAKE2b-256 checksum
How to use checksums
35f62f07208726d6246e4171431134d2b292d8b48a971867cfe7b76ce49a9232
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.1

Release files / play_sounds-0.6.0-py2.py3-none-any.whl

Download URL play_sounds-0.6.0-py2.py3-none-any.whl
Size 8.9 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
20bce95cb24e2d3e8ae84b8a4f0a92ae7a34e5d59d9c50ea571f72ed42733ab2
BLAKE2b-256 checksum
How to use checksums
2aa1a8f5e46e6036a99ae9d25f4d848eeb8bf66119d82f98f257b7d051809fae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.12.1

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5.0

3 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.5

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page