🎵 Python sound notifications made easy

Overview

chime

Python sound notifications made easy.


Table of contents

Motivation

I made this because I wanted a simple auditory cue system to tell me when a long-running number crunching script had finished. I didn't want to have to fiddle with the command-line, and also wanted a cross-platform solution. Thus was born chime!

Installation

pip install chime

This library has no dependencies. The IPython/Jupyter functionality is only imported if you've installed the ipython library. It should work for any Python version above or equal to 3.6.

Basic usage

chime puts four functions at your disposal:

>>> import chime

>>> chime.success()
>>> chime.warning()
>>> chime.error()
>>> chime.info()

Calling any of the above functions will play a sound. Note that the sounds are played in asynchronous processes, and are thus non-blocking. Each function should take around 2ms to execute, regardless of the sound length. You're free to use each sound notification in any way you see fit. I'm not your mama.

Theming

The sounds that are played depend on which theme is being used.

>>> chime.theme()  # return the current theme
'chime'

Several themes are available:

>>> chime.themes()
['big-sur', 'chime', 'mario', 'material', 'zelda']

The theme can be changed by passing a theme name to the theme function:

>>> chime.theme('zelda')

A couple of things to note:

  • You can listen to the sounds interactively via this soundboard, which is made with Streamlit.
  • A random theme will be picked each time you play a sound if you set the theme to 'random'.

IPython/Jupyter magic

Load the extension as so:

%load_ext chime

You can wrap a line:

%chime print("I'm a line")

You can also wrap an entire cell:

%%chime

print("I'm a cell")

The magic command will call chime.success when the line/cell finishes successfully. Otherwise, chime.error is called whenever an exception is raised.

Exception notifications

If you run chime.notify_exceptions, then chime.error will be called whenever an exception is raised.

chime.notify_exceptions()

raise ValueError("I'm going to make some noise")

Command-line usage

You can run chime from the command-line:

$ chime

By default, this will play the success sound. You can also choose which sound to play, like so:

$ chime info

You can also choose which theme to use:

$ chime info --theme zelda

If you're using bash, then you can use chime to notify you when a program finishes:

$ echo "Hello world!"; chime

This will play the sound regardless of the fact that the first command succeeded or not. If you're running on Windows, then you can run the following equivalent:

> echo "Hello world!" & chime

Platform support

Under the hood, chime runs a command in the shell to play a .wav file. The command-line program that is used depends on the platform that you're using. Platform information is available in the sys.platform variable as well as the platform module from the standard library. Currently, the supported platforms are:

  • Darwin
  • Linux
  • Windows

A UserWarning is raised if you run a chime sound on an unsupported platform. Feel free to get in touch or issue a pull request if you want to add support for a specific platform. Likewise, don't hesitate if you're encountering trouble with one of the above platforms. I won't bite.

I can't hear anything 🙉

Did you check if you turned your sound on? Just kidding. 😜

This library is designed to be non-invasive. By default, sounds are played asynchronously in unchecked processes. Therefore, if something goes wrong, the process dies silently. If you can't hear anything and you think that the issue is coming from chime, then set the sync parameter when you play a sound:

>>> chime.info(sync=True)

This will play the sound synchronously and issue a warning if something goes wrong, which should allow you to debug the issue. You can also raise an exception instead of sending a warning by setting the raise_error parameter:

>>> chime.info(sync=True, raise_error=True)

Note that setting raise_error won't do anything if sync is set to False.

Setting a default theme

To change the default theme a configuration file may be created in ~/.config/chime/chime.conf on Unix or %APPDATA%\chime\chime.ini on Windows.

For example, to change the default theme to 'zelda' the configuration file would contain:

[chime]
theme = zelda

Adding a new theme

I have toyed with the idea of allowing users to add their own theme(s), but at the moment I rather keep things minimal. However, I'm happy to integrate new themes into the library. You can propose a new theme by opening a pull request that adds the necessary .wav files to the themes directory. A theme is made up of four files: success.wav, warning.wav, error.wav, and info.wav. Be creative! 👩‍🎨

Things to do

  • Some mechanism to automatically call chime.warning when a warning occurs.
  • Make it work with a remote machine. For instance a Jupyter Notebook hosted on a remote machine.
  • More themes!

Acknowledgements

  • Special thanks to Michael Vlah for being a gentleman by giving up the "chime" name on PyPI.
  • Thanks to u/Pajke on reddit for helping me debug Windows support.
  • Thanks to David Chen for adding Linux support by suggesting the use of aplay.
  • Thanks to Vincent Warmerdam for suggesting a command-line interface.
  • Calmcode made a video introduction to chime ❤️
  • Thanks to Paulo S. Costa for contributing in many different ways.
  • Thanks to d34d_m8 for adding OpenBSD support.

License

As you would probably expect, this is MIT licensed.

Owner
Max Halford
Going where the wind blows 🍃 🦔
Max Halford
SomaFM Plugin for Kodi

SomaFM XBMC Plugin This description is a bit outdated. You can simply install this addon by browsing the official repositories from within Kodi. Insta

7 Jan 21, 2022
Audio book player for senior visually impaired.

PI Zero W Audio Book Motivation and requirements My dad is practically blind and at 80 years has trouble hearing and operating tiny or more complicate

Andrej Hosna 29 Dec 25, 2022
Audio2midi - Automatic Audio-to-symbolic Arrangement

Automatic Audio-to-symbolic Arrangement This is the repository of the project "A

Ziyu Wang 24 Dec 05, 2022
Music generation using ml / dl

Data analysis Document here the project: deep_music Description: Project Description Data Source: Type of analysis: Please document the project the be

0 Jul 03, 2022
A Music Player Bot for Discord Servers

A Music Player Bot for Discord Servers

Halil Acar 2 Oct 25, 2021
This is a realtime voice translator program which gets input from user at any language and converts it to the desired language that the user asks

This is a realtime voice translator program which gets input from user at any language and converts it to the desired language that the user asks ...

Mohan Ram S 1 Dec 30, 2021
Speech recognition module for Python, supporting several engines and APIs, online and offline.

SpeechRecognition Library for performing speech recognition, with support for several engines and APIs, online and offline. Speech recognition engine/

Anthony Zhang 6.7k Jan 08, 2023
Basically Play Pauses the song when it is safe to do so. when you die in a round

Basically Play Pauses the song when it is safe to do so. when you die in a round

AG_1436 1 Feb 13, 2022
Music player - endlessly plays your music

Music player First, if you wonder about what is supposed to be a music player or what makes a music player different from a simple media player, read

Albert Zeyer 482 Dec 19, 2022
Port Hitsuboku Kumi Chinese CVVC voicebank to deepvocal. / 筆墨クミDeepvocal中文音源

Hitsuboku Kumi (筆墨クミ) is a UTAU virtual singer developed by Cubialpha. This project ports Hitsuboku Kumi Chinese CVVC voicebank to deepvocal. This is the first open-source deepvocal voicebank on Gith

8 Apr 26, 2022
Muzic: Music Understanding and Generation with Artificial Intelligence

Muzic is a research project on AI music that empowers music understanding and generation with deep learning and artificial intelligence.

Microsoft 2.6k Dec 30, 2022
Sparse Beta-Divergence Tensor Factorization Library

NTFLib Sparse Beta-Divergence Tensor Factorization Library Based off of this beta-NTF project this library is specially-built to handle tensors where

Stitch Fix Technology 46 Jan 08, 2022
:notes: Cross-platform music player

Exaile Exaile is a music player with a simple interface and powerful music management capabilities. Features include automatic fetching of album art,

Exaile 327 Dec 19, 2022
Linear Prediction Coefficients estimation from mel-spectrogram implemented in Python based on Levinson-Durbin algorithm.

LPC_for_TTS Linear Prediction Coefficients estimation from mel-spectrogram implemented in Python based on Levinson-Durbin algorithm. 基于Levinson-Durbin

Zewang ZHANG 58 Nov 17, 2022
L-SpEx: Localized Target Speaker Extraction

L-SpEx: Localized Target Speaker Extraction The data configuration and simulation of L-SpEx. The code scripts will be released in the future. Data Gen

Meng Ge 20 Jan 02, 2023
PianoPlayer - Automatic fingering generator for piano scores

PianoPlayer - Automatic fingering generator for piano scores

Marco Musy 571 Jan 02, 2023
Synchronize a local directory of songs' (MP3, MP4) metadata (genre, ratings) and playlists with a Plex server.

PlexMusicSync Synchronize a local directory of songs' (MP3, MP4) metadata (genre, ratings) and playlists (m3u, m3u8) with a Plex server. The song file

Tom Goetz 9 Jul 07, 2022
Xbot-Music - Bot Play Music and Video in Voice Chat Group Telegram

XBOT-MUSIC A Telegram Music+video Bot written in Python using Pyrogram and Py-Tg

Fariz 2 Jan 20, 2022
A Quick Music Player Made Fully in Python

Quick Music Player Made Fully In Python. Pure Python, cross platform, single function module with no dependencies for playing sounds. Installation & S

1 Dec 24, 2021
Improved Python UI to convert Youtube URL to .mp3 file.

YT-MP3 Improved Python UI to convert Youtube URL to .mp3 file. How to use? Just run python3 main.py Enter the URL of the video Enter the PATH of where

8 Jun 19, 2022