Home » Python » Python: Sound alarm when code finishes

Python: Sound alarm when code finishes

Posted by: admin November 30, 2017 Leave a comment

Questions:

I am in a situation where my code takes extremely long to run and I don’t want to be staring at it all the time but want to know when it is done.

How can I make the (Python) code sort of sound an “alarm” when it is done? I was contemplating making it play a .wav file when it reaches the end of the code…

Is this even a feasible idea?
If so, how could I do it?

Answers:

On Windows

import winsound
duration = 1000  # millisecond
freq = 440  # Hz
winsound.Beep(freq, duration)

Where freq is the frequency in Hz and the duration is in milliseconds.

On Linux (and Mac)

import os
duration = 1  # second
freq = 440  # Hz
os.system('play --no-show-progress --null --channels 1 synth %s sine %f' % (duration, freq))

In order to use this example, you must install sox.

On Debian/Ubuntu/LinuxMint you need to run in your terminal:

sudo apt install sox

Here is the macports way of doing that…run this is your terminal:

sudo port install sox

Speech on Mac

And something really cool if you’re using a mac in terminal, maybe can do the same in windows, but I only know for sure for mac, this will tell you it’s done:

import os
os.system('say "your program has finished"')

Speech on Linux

import os
os.system('spd-say "your program has finished"')

You need to install the speech-dispatcher package in Ubuntu (or the corresponding package on other distributions):

sudo apt install speech-dispatcher

Questions:
Answers:

This one seems to work on both Windows and Linux* (from this question):

def beep():
    print "\a"
beep()

In Windows, can put at the end:

import winsound
winsound.Beep(500,1000)

where 500 is the frequency in Herz
      1000 is the duration in miliseconds

*: to work on Linux, you may need to do the following (from QO’s comment):

  • in a terminal, type ‘cd /etc/modprobe.d’ then ‘gksudo gedit blacklist.conf’
  • comment the line that says ‘blacklist pcspkr’, then reboot
  • check also that the terminal preferences has the ‘Terminal Bell’ checked.
Questions:
Answers:

ubuntu speech dispatcher can be used:

import subprocess
subprocess.call(['speech-dispatcher'])        #start speech dispatcher
subprocess.call(['spd-say', '"your process has finished"'])

Questions:
Answers:
 print('
 print('\007') 
7')

plays the bell sound

Questions:
Answers:

Kuchi’s answer didn’t work for me on OS X Yosemite (10.10.1). I did find a command that works, which you can just call from Python. This works regardless of whether the Terminal audible bell is enabled and without a third-party library.

os.system('afplay /System/Library/Sounds/Sosumi.aiff')

Questions:
Answers:

See: Python Sound ("Bell")
This helped me when i wanted to do the same.
All credits go to gbc

Quote:

Have you tried :

import sys
sys.stdout.write('\a')
sys.stdout.flush()

That works for me here on Mac OS 10.5

Actually, I think your original attempt works also with a little modification:

print('\a')

(You just need the single quotes around the character sequence).

Questions:
Answers:

It can be done by code as follows:

import time
time.sleep(10)   #Set the time
for x in range(60):  
    time.sleep(1)
    print('\a')

Questions:
Answers:
import subprocess

subprocess.call(['D:\greensoft\TTPlayer\TTPlayer.exe', "E:\stridevampaclip.mp3"])

Questions:
Answers:

Why use python at all? You might forget to remove it and check it into a repository. Just run your python command with && and another command to run to do the alerting.

python myscript.py && 
    notify-send 'Alert' 'Your task is complete' && 
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga

or drop a function into your .bashrc. I use apython here but you could override ‘python’

function apython() {
    /usr/bin/python $*
    notify-send 'Alert' "python $* is complete"
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}

Questions:
Answers:

I’m assuming you want the standard system bell, and don’t want to concern yourself with frequencies and durations etc., you just want the standard windows bell.

import winsound
winsound.MessageBeep()