Akustischer Alarm, wenn der Code beendet ist

143

Ich bin in einer Situation, in der die Ausführung meines Codes extrem lange dauert und ich nicht die ganze Zeit darauf starren möchte, sondern wissen möchte, wann er fertig ist.

Wie kann ich den (Python-) Code-Sound zu einem "Alarm" machen, wenn er fertig ist? Ich habe darüber nachgedacht, eine WAV-Datei abzuspielen, wenn das Ende des Codes erreicht ist ...

Ist das überhaupt eine machbare Idee? Wenn ja, wie könnte ich das machen?

mtigger
quelle
Welches Betriebssystem verwenden Sie?
Thomas Fenzl
Ubuntu 12.04 und der Code ist in Python.
Mtigger
4
Mich würde interessieren, wie das auch unter Windows geht.
Jared Nielsen
1
Mögliches Duplikat von Audio abspielen
Ciro Santilli 28 冠状 病 六四 事件 法轮功

Antworten:

235

Unter Windows

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

Dabei ist freq die Frequenz in Hz und die Dauer in Millisekunden.

Unter Linux und Mac

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

Um dieses Beispiel verwenden zu können, müssen Sie installieren sox.

Führen Sie dies unter Debian / Ubuntu / Linux Mint in Ihrem Terminal aus:

sudo apt install sox

Führen Sie dies auf einem Mac in Ihrem Terminal aus (mithilfe von Macports):

sudo port install sox

Rede auf dem Mac

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

Rede unter Linux

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

Sie müssen das speech-dispatcherPaket in Ubuntu installieren (oder das entsprechende Paket auf anderen Distributionen):

sudo apt install speech-dispatcher
Ryan Saxe
quelle
1
richtig Du musst es herunterladen, ich gebe dir den Link, lass es mich finden ... Ich habe gerade einen anderen für Macs gepostet, der tatsächlich mit dir spricht, damit er dir sagen kann, wann er fertig ist
Ryan Saxe
Vielen Dank! Weißt du zufällig, ob Linux eines hat, das auch zu dir spricht?
Mtigger
2
meins sagt, dass say nicht gefunden wird, obwohl ich sox installiert habe und funktioniert. aber ich habe eine alternative gefunden. import os os.system ('espeak "Ihr Programm ist beendet"')
mtigger
Winsound wird nicht gefunden. Ist es nicht für OS X verfügbar?
Charlie Parker
1
@CharlieParker, wenn Sie sich die vollständige Antwort ansehen, ist die erste Option nur für Windows-Benutzer. Die anderen geben an, wie in anderen Umgebungen, einschließlich OSX
Ryan Saxe
30
 print('\007')

spielt den Glockenton

Josh Allemon
quelle
3
Dies scheint nicht durch Ipython / Jupyter
Kyle Barron
26

Dieser scheint sowohl unter Windows als auch unter Linux * zu funktionieren ( aus dieser Frage ):

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

beep()

In Windows kann am Ende gesetzt werden:

import winsound
winsound.Beep(500, 1000)

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

Um unter Linux zu arbeiten, müssen Sie möglicherweise Folgendes tun (aus dem Kommentar von QO):

  • Geben Sie in einem Terminal 'cd /etc/modprobe.d' und dann 'gksudo gedit blacklist.conf' ein.
  • Kommentieren Sie die Zeile "Blacklist pcspkr" und starten Sie den Computer neu
  • Überprüfen Sie auch, ob in den Terminaleinstellungen die Option "Terminalglocke" aktiviert ist.
Saullo GP Castro
quelle
1
Vielen Dank! Nur um hinzuzufügen, muss möglicherweise die Klingel des Terminals im Ubuntu-Gnom eingeschaltet werden, damit sie funktioniert.
Mtigger
@mtigger Könnten Sie bitte erklären, wie das geht, damit wir die Antwort aktualisieren können ... (oder Sie können aktualisieren)
Saullo GP Castro
1
Geben Sie in einem Terminal 'cd /etc/modprobe.d' und dann 'gksudo gedit blacklist.conf' ein. Kommentieren Sie die Zeile "blacklist pcspkr" aus und starten Sie sie neu. Überprüfen Sie auch, ob in den Terminaleinstellungen die Option "Terminalglocke" aktiviert ist.
Mtigger
Wie kann ich in Ubuntu 13 überprüfen, ob in den Terminaleinstellungen die 'Terminalglocke' aktiviert ist?
user2384994
"\ a" hat für mich auf dem Ubuntu-Subsystem für Windows funktioniert, danke !!
Ryan
17

Ubuntu Speech Dispatcher kann verwendet werden:

import subprocess
subprocess.call(['speech-dispatcher'])        #start speech dispatcher
subprocess.call(['spd-say', '"your process has finished"'])
Ishan Khare
quelle
Aber beginnt zu spielen, wenn der Prozess beendet ist.
Cengizkrbck
das ist, was das beabsichtigte Verhalten ist, Sie wollen den Ton, wenn der Prozess beendet ist
Ishan Khare
Sie können -wArgumente hinzufügen , um zu warten, während spd-say die Phrase beendet
ruX
8

Ich gehe davon aus, dass Sie die Standard-Systemglocke möchten und sich nicht mit Frequenzen und Dauern usw. befassen möchten. Sie möchten nur die Standard-Fensterglocke.

import winsound
winsound.MessageBeep()
Geflügel7
quelle
8

Kuchis Antwort hat unter OS X Yosemite (10.10.1) bei mir nicht funktioniert. Ich habe den afplayBefehl ( hier ) gefunden, den Sie einfach von Python aus aufrufen können. Dies funktioniert unabhängig davon, ob die akustische Klingel des Terminals aktiviert ist und ohne eine Bibliothek eines Drittanbieters.

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

Siehe: Python Sound ("Bell")
Das hat mir geholfen, als ich das Gleiche tun wollte.
Alle Credits gehen an gbc

Zitat:

Hast du es versucht :

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

Das funktioniert bei mir hier unter Mac OS 10.5

Eigentlich denke ich, dass Ihr ursprünglicher Versuch auch mit einer kleinen Modifikation funktioniert:

print('\a')

(Sie brauchen nur die einfachen Anführungszeichen um die Zeichenfolge).

Kuchi
quelle
6

Warum überhaupt Python verwenden? Möglicherweise vergessen Sie, es zu entfernen und in ein Repository einzuchecken. Führen Sie einfach Ihren Python-Befehl mit && und einem anderen Befehl aus, um die Warnung auszuführen.

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

oder legen Sie eine Funktion in Ihrer .bashrc ab. Ich benutze hier Apython, aber Sie könnten 'Python' überschreiben.

function apython() {
    /usr/bin/python $*
    notify-send 'Alert' "python $* is complete"
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
rtaft
quelle
toll, es funktioniert. auch mitos.system("paplay sound-alarm.oga")
fsevenm
4

Dies kann per Code wie folgt erfolgen:

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

subprocess.call(['D:\greensoft\TTPlayer\TTPlayer.exe', "E:\stridevampaclip.mp3"])
Du Peng
quelle
2
Sie sollten einige Kommentare oder andere Erklärungen für diesen Code hinzufügen, um zu erklären, wie er funktioniert und warum er die Frage beantwortet.
skrrgwasme