Alarme sonoro quando o código termina


143

Estou em uma situação em que meu código demora muito para ser executado e não quero ficar olhando para ele o tempo todo, mas quero saber quando isso é feito.

Como faço para que o código (Python) pareça um "alarme" quando ele é feito? Eu estava pensando em fazê-lo reproduzir um arquivo .wav quando chegar ao final do código ...

É mesmo uma ideia viável? Se sim, como eu poderia fazer isso?


Qual sistema operacional você está usando?
Thomas Fenzl 15/05

Ubuntu 12.04, e o código está em python.
Mtgger 15/05

4
Eu também estaria interessado em saber como fazer isso no Windows.
Jared Nielsen


Respostas:


235

No Windows

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

Onde freq é a frequência em Hz e a duração em milissegundos.

No Linux e Mac

import os
duration = 1  # seconds
freq = 440  # Hz
os.system('play -nq -t alsa synth {} sine {}'.format(duration, freq))

Para usar este exemplo, você deve instalar sox.

No Debian / Ubuntu / Linux Mint, execute isto no seu terminal:

sudo apt install sox

No Mac, execute isso no seu terminal (usando macports):

sudo port install sox

Discurso no Mac

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

Discurso no Linux

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

Você precisa instalar o speech-dispatcherpacote no Ubuntu (ou o pacote correspondente em outras distribuições):

sudo apt install speech-dispatcher

1
right Você precisa fazer o download, eu darei o link, deixe-me encontrá-lo ... Acabei de publicar outro para macs que realmente fala com você, para que ele possa dizer quando terminar
Ryan Saxe

obrigado! você sabe se o linux tem um que também fale com você?
mtigger

2
o meu diz que o dizer não foi encontrado, apesar de eu ter instalado o sox e o play funciona. mas eu encontrei uma alternativa. import os os.system ('espeak "seu programa terminou"')
mtigger

winsound não foi encontrado. Não está disponível para o OS X?
Charlie Parker

1
@CharlieParker, se você olhar a resposta completa, a primeira opção é apenas para usuários do Windows. O estado aos outros como em outros ambientes, que inclui OSX
Ryan Saxe


26

Este parece funcionar no Windows e Linux * ( desta pergunta ):

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

beep()

No Windows, pode colocar no final:

import winsound
winsound.Beep(500, 1000)

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

Para trabalhar no Linux, você pode precisar fazer o seguinte (no comentário do QO):

  • em um terminal, digite 'cd /etc/modprobe.d' e depois 'gksudo gedit blacklist.conf'
  • comente a linha que diz 'lista negra pcspkr' e reinicie
  • verifique também se as preferências do terminal estão com o 'Terminal Bell' marcado.

1
obrigado! só para adicionar, pode ser necessário ativar o som da campainha do terminal no ubuntu gnome para que ele funcione.
mtigger

@mtigger Poderia explicar como fazer isso, para que possamos atualizar a resposta ... (ou você pode atualizar)
Saullo GP Castro

1
em um terminal, digite 'cd /etc/modprobe.d' e depois 'gksudo gedit blacklist.conf'. descomente a linha que diz 'lista negra pcspkr' e, em seguida, reinicie. verifique também se as preferências do terminal estão com o 'Terminal Bell' marcado.
mtigger

como verificar "se as preferências do terminal marcaram o 'Terminal Bell'" no ubuntu 13?
user2384994

"\ a" funcionou para mim no subsistema Ubuntu para Windows, obrigado !!
Ryan

17

O dispatcher de fala do ubuntu pode ser usado:

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

mas, começando a tocar quando o processo terminar.
cengizkrbck

isso é o que o comportamento desejado é que você deseja que o som quando o processo acabamentos
Ishan Khare

você pode adicionar -wargumento para esperar enquanto SPD-digamos termina a frase
Rux

8

Suponho que você queira a campainha padrão do sistema e não queira se preocupar com frequências e durações, etc., você só quer a campainha padrão do Windows.

import winsound
winsound.MessageBeep()

8

A resposta de Kuchi não funcionou para mim no OS X Yosemite (10.10.1). Eu encontrei o afplaycomando ( aqui ), que você pode chamar apenas de Python. Isso funciona independentemente de a campainha audível do Terminal estar ativada e sem uma biblioteca de terceiros.

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

6

Veja: Python Sound ("Bell")
Isso me ajudou quando eu queria fazer o mesmo.
Todos os créditos vão para gbc

Citar:

Você tentou :

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

Isso funciona para mim aqui no Mac OS 10.5

Na verdade, acho que sua tentativa original também funciona com uma pequena modificação:

print('\a')

(Você só precisa de aspas simples na sequência de caracteres).


6

Por que usar python? Você pode esquecer de removê-lo e fazer o check-in em um repositório. Basta executar seu comando python com && e outro comando para executar o alerta.

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

ou solte uma função no seu .bashrc. Eu uso apython aqui, mas você pode substituir 'python'

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

ótimo, funciona. também comos.system("paplay sound-alarm.oga")
fsevenm

4

Isso pode ser feito pelo código da seguinte maneira:

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

2
import subprocess

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

2
Você deve adicionar alguns comentários ou outras explicações para este código para explicar como ele funciona e por que ele responde à pergunta.
Skrrgwasme
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.