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?


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


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

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


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.

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"'])

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()

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')

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).


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
}

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')

2
import subprocess

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.