Alarm dźwiękowy po zakończeniu kodu


143

Jestem w sytuacji, w której mój kod trwa bardzo długo i nie chcę się w niego gapić, ale chcę wiedzieć, kiedy jest gotowy.

Jak mogę sprawić, aby kod (Python) brzmiał jak „alarm” po zakończeniu? Zastanawiałem się, czy nie odtworzyć pliku .wav, gdy osiągnie koniec kodu ...

Czy to w ogóle możliwy pomysł? Jeśli tak, jak mogłem to zrobić?


Jakiego systemu operacyjnego używasz?
Thomas Fenzl

Ubuntu 12.04, a kod jest w języku Python.
mtigger

4
Chciałbym wiedzieć, jak to zrobić również w systemie Windows.
Jared Nielsen


Odpowiedzi:


235

W systemie Windows

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

Gdzie freq to częstotliwość w Hz, a czas trwania w milisekundach.

W systemie Linux i Mac

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

Aby skorzystać z tego przykładu, musisz zainstalować sox.

W systemie Debian / Ubuntu / Linux Mint uruchom to w swoim terminalu:

sudo apt install sox

Na Macu uruchom to w swoim terminalu (używając macports):

sudo port install sox

Mowa na Macu

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

Mowa o Linuksie

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

Musisz zainstalować speech-dispatcherpakiet w Ubuntu (lub odpowiedni pakiet w innych dystrybucjach):

sudo apt install speech-dispatcher

1
racja Musisz go pobrać, dam ci link, pozwól mi go znaleźć ... Właśnie opublikowałem kolejny dla Maców, który faktycznie z tobą porozmawia, więc może ci powiedzieć, kiedy to się skończy
Ryan Saxe

dzięki! czy wiesz, czy linux ma taki, który również z tobą porozmawia?
mtigger

2
mój mówi, że powiedz nie został znaleziony, mimo że zainstalowałem sox i gra działa. ale znalazłem alternatywę. import os os.system ('espeak "twój program się zakończył"')
mtigger

winsound nie został znaleziony. Czy nie jest dostępny dla OS X?
Charlie Parker,

1
@CharlieParker, jeśli spojrzysz na pełną odpowiedź, pierwsza opcja jest tylko dla użytkowników systemu Windows. Inni podają, jak to zrobić w innych środowiskach, w tym OSX
Ryan Saxe,


26

Ten wydaje się działać zarówno w systemie Windows, jak i Linux * ( z tego pytania ):

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

beep()

W systemie Windows można na koniec umieścić:

import winsound
winsound.Beep(500, 1000)

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

Aby pracować w systemie Linux, może być konieczne wykonanie następujących czynności (z komentarza QO):

  • w terminalu wpisz „cd /etc/modprobe.d”, a następnie „gksudo gedit blacklist.conf”
  • skomentuj wiersz z napisem „czarna lista pcspkr”, a następnie uruchom ponownie
  • sprawdź również, czy w preferencjach terminala jest zaznaczona opcja „Dzwonek terminala”.

1
dzięki! aby dodać, może być konieczne włączenie dźwięku dzwonka terminala w gnome ubuntu, aby działał.
mtigger

@mtigger Czy mógłbyś wyjaśnić, jak to zrobić, abyśmy mogli zaktualizować odpowiedź ... (lub możesz zaktualizować)
Saullo GP Castro

1
w terminalu wpisz „cd /etc/modprobe.d”, a następnie „gksudo gedit blacklist.conf”. odkomentuj wiersz z napisem „czarna lista pcspkr”, a następnie uruchom ponownie. sprawdź również, czy w preferencjach terminala jest zaznaczona opcja „Dzwonek terminala”.
mtigger

jak sprawdzić, „czy w preferencjach terminala jest zaznaczona opcja„ Dzwonek terminala ”w systemie Ubuntu 13?
user2384994

"\ a" działał dla mnie w podsystemie Ubuntu dla Windows, dzięki !!
Ryan

17

Dyspozytor mowy Ubuntu może być używany:

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

ale zaczyna grać po zakończeniu procesu.
cengizkrbck

takie jest zamierzone zachowanie, chcesz dźwięk po zakończeniu procesu
Ishan Khare,

możesz dodać -wargument czekać, podczas gdy spd-say kończy frazę
ruX

8

Zakładam, że chcesz standardowego dzwonka systemowego i nie chcesz zajmować się częstotliwościami, czasem trwania itp., Po prostu chcesz standardowego dzwonka systemu Windows.

import winsound
winsound.MessageBeep()

8

Odpowiedź Kuchi nie działa dla mnie na OS X Yosemite (10.10.1). Znalazłem afplaypolecenie ( tutaj ), które możesz po prostu wywołać z Pythona. Działa to niezależnie od tego, czy dzwonek dźwiękowy terminala jest włączony i bez biblioteki innej firmy.

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

6

Zobacz: Dźwięk w Pythonie („dzwonek”)
Pomogło mi to, gdy chciałem zrobić to samo.
Wszystkie kredyty trafiają do GBC

Zacytować:

Czy próbowałeś :

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

To działa dla mnie w systemie Mac OS 10.5

Właściwie myślę, że twoja oryginalna próba działa również z małą modyfikacją:

print('\a')

(Potrzebujesz tylko pojedynczych cudzysłowów wokół sekwencji znaków).


6

Po co w ogóle używać Pythona? Możesz zapomnieć o jego usunięciu i wpisaniu do repozytorium. Po prostu uruchom polecenie Pythona za pomocą && i innego polecenia, aby uruchomić alert.

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

lub upuść funkcję do swojego .bashrc. Używam tutaj apythona, ale możesz zastąpić „python”

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

świetnie, to działa. również zos.system("paplay sound-alarm.oga")
fsevenm

4

Można to zrobić za pomocą kodu w następujący sposób:

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
Powinieneś dodać kilka komentarzy lub innych wyjaśnień do tego kodu, aby wyjaśnić, jak to działa i dlaczego odpowiada na pytanie.
skrrgwasme
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.