Звуковой сигнал при завершении кода

156

Я нахожусь в ситуации, когда мой код запускается очень долго, и я не хочу смотреть на него все время, но хочу знать, когда он будет выполнен.

Как я могу сделать так, чтобы код (Python) издавал «сигнал тревоги», когда это сделано? Я собирался заставить его воспроизводить файл .wav, когда он достигнет конца кода ...

Это вообще осуществимая идея? Если да, то как я мог это сделать?

mtigger
источник
Какую операционную систему ты используешь?
Thomas Fenzl
Ubuntu 12.04, а код написан на Python.
mtigger
4
Мне было бы интересно узнать, как это сделать и в Windows.
Джаред Нильсен
1
Возможный дубликат воспроизведения звука с помощью Python Ubuntu bash: askubuntu.com/questions/277215/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Ответы:

251

В Windows

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

Где freq - частота в Гц, а продолжительность - в миллисекундах.

В Linux и Mac

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

Чтобы использовать этот пример, вы должны установить sox .

В Debian / Ubuntu / Linux Mint запустите это в своем терминале:

sudo apt install sox

На Mac запустите это в своем терминале (используя macports):

sudo port install sox

Речь на Mac

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

Выступление по Linux

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

Вам необходимо установить speech-dispatcherпакет в Ubuntu (или соответствующий пакет в других дистрибутивах):

sudo apt install speech-dispatcher
Райан Сакс
источник
1
right Вы должны загрузить его, я дам вам ссылку, позвольте мне найти его ... Я только что опубликовал еще один для Mac, который действительно будет говорить с вами, чтобы он мог сказать вам, когда он будет готов
Ryan Saxe
Благодарность! Вы случайно не знаете, есть ли в Linux тот, который тоже с вами разговаривает?
mtigger
2
мой говорит, что say is not found, хотя я установил sox и play работает. но я нашел альтернативу. import os os.system ('espeak "ваша программа завершена"')
mtigger
winsound не найден. Это не доступно для OS X?
Чарли Паркер
1
@CharlieParker, если вы посмотрите полный ответ, первый вариант предназначен только для пользователей Windows. В других рассказывается, как это сделать в других средах, включая OSX
Райан Сакс,
31
 print('\007')

играет звук колокола

Джош Аллемон
источник
6
Похоже, что это не работает через ipython / Jupyter
Кайл Бэррон
28

Кажется, это работает как в Windows, так и в Linux * ( из этого вопроса ):

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

beep()

В Windows можно поставить в конце:

import winsound
winsound.Beep(500, 1000)

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

Для работы в Linux вам может потребоваться следующее (из комментария QO):

  • в терминале введите cd /etc/modprobe.d, затем gksudo gedit blacklist.conf
  • прокомментируйте строку с надписью 'blacklist pcspkr', затем перезагрузитесь
  • также проверьте, что в настройках терминала установлен флажок «Терминальный звонок».
Саулло Г. П. Кастро
источник
1
Благодарность! просто чтобы добавить, может потребоваться включить звук звонка терминала в ubuntu gnome, чтобы он работал.
mtigger
@mtigger Не могли бы вы объяснить, как это сделать, чтобы мы могли обновить ответ ... (или вы могли обновить)
Saullo GP Castro
1
в терминале введите cd /etc/modprobe.d, затем gksudo gedit blacklist.conf. раскомментируйте строку с надписью «blacklist pcspkr», затем перезагрузитесь. также проверьте, что в настройках терминала установлен флажок «Терминальный звонок».
mtigger
как проверить, "что в настройках терминала установлен флажок" Terminal Bell "в ubuntu 13?
user2384994 06
"\ a" работал у меня в подсистеме Ubuntu для Windows, спасибо !!
Райан
17

Диспетчер речи ubuntu может использоваться:

import subprocess
subprocess.call(['speech-dispatcher'])        #start speech dispatcher
subprocess.call(['spd-say', '"your process has finished"'])
Ишан Харе
источник
но, начиная играть, когда процесс закончен.
cengizkrbck
вот что такое предполагаемое поведение, вам нужен звук, когда процесс завершится
Ишан Кхаре
вы можете добавить -wаргумент, чтобы дождаться, пока spd-say закончит фразу
ruX
10

Ответ Кучи не сработал для меня в OS X Yosemite (10.10.1). Я нашел afplayкоманду ( здесь ), которую вы можете просто вызвать из Python. Это работает независимо от того, включен ли звуковой сигнал терминала и без сторонней библиотеки.

import os
os.system('afplay /System/Library/Sounds/Sosumi.aiff')
зекель
источник
9

Я предполагаю, что вам нужен стандартный системный звонок и вы не хотите беспокоиться о частотах, длительности и т. Д., Вам просто нужен стандартный звонок Windows.

import winsound
winsound.MessageBeep()
птица7
источник
6

См .: Python Sound ("Bell")
Это помогло мне, когда я хотел сделать то же самое.
Все кредиты переходят на gbc

Цитата:

Попытался ли ты :

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

Это работает для меня здесь, в Mac OS 10.5

На самом деле, я думаю, что ваша первоначальная попытка также работает с небольшой модификацией:

print('\a')

(Вам просто нужны одинарные кавычки вокруг последовательности символов).

Кучи
источник
6

Зачем вообще использовать Python? Вы можете забыть удалить его и вернуть в репозиторий. Просто запустите свою команду python с помощью && и еще одну команду для запуска, чтобы сделать предупреждение.

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

или поместите функцию в свой .bashrc. Я использую здесь apython, но вы можете переопределить python

function apython() {
    /usr/bin/python $*
    notify-send 'Alert' "python $* is complete"
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
rtaft
источник
отлично, работает. также сos.system("paplay sound-alarm.oga")
fsevenm
4

Это можно сделать с помощью кода следующим образом:

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
Вы должны добавить некоторые комментарии или другие пояснения к этому коду, чтобы объяснить, как он работает и почему отвечает на вопрос.
skrrgwasme
0

Еще немного о вашем вопросе.

Я использовал пакет gTTS для создания звука из текста, а затем воспроизвел этот звук с помощью Playsound, когда изучал веб-сканирование и создавал загрузчик coursera (только бесплатные курсы).

text2speech = gTTS("Your course " + course_name +
                                " is downloaded to " + downloads + ". Check it fast.")
text2speech.save("temp.mp3")
winsound.Beep(2500, 1000)
playsound("temp.mp3")
Вишеш Мангла
источник