Звук Python ( "Колокол" )
Я хотел бы, чтобы программа python предупреждала меня, когда она выполнила свою задачу, создав звуковой сигнал. В настоящее время я использую import os
а затем использую речевую программу командной строки, чтобы сказать "Процесс завершен". Скорее всего, это простой "звонок".
Я знаю, что есть функция, которая может использоваться в приложениях Cocoa, NSBeep
, но я не думаю, что это имеет какое-то отношение к этому.
Я тоже пробовал
print('\a')
но это не сработало.
Я использую Mac, если вы не можете сказать по моему cocoa-комментарию, чтобы это могло помочь.
Ответы
Ответ 1
Вы пробовали:
import sys
sys.stdout.write('\a')
sys.stdout.flush()
Это работает для меня здесь, в Mac OS 10.5
Собственно, я думаю, что твоя оригинальная попытка работает и с небольшой модификацией:
print('\a')
(Вам просто нужны одиночные кавычки вокруг последовательности символов).
Ответ 2
Если у вас есть PyObjC (мост Python - Objective-C), установленный или запущенный на системном Python OS X 10.5 (который поставляется с PyObjC), вы можете сделать
from AppKit import NSBeep
NSBeep()
чтобы воспроизвести системное предупреждение.
Ответ 3
Я попробовал микшер из модуля pygame, и он отлично работает. Сначала установите модуль:
$ sudo apt-get install python-pygame
Затем в программе напишите следующее:
from pygame import mixer
mixer.init() #you must initialize the mixer
alert=mixer.Sound('bell.wav')
alert.play()
С pygame у вас есть много вариантов настройки, с которыми вы можете дополнительно экспериментировать.
Ответ 4
Мне пришлось отключить опцию "Silence terminal bell" в моем активном профиле терминала в iTerm для print('\a')
. По-видимому, он отлично работал по умолчанию в терминале.
Вы также можете использовать модуль Mac Carbon.Snd
для воспроизведения звукового сигнала системы:
>>> import Carbon.Snd
>>> Carbon.Snd.SysBeep(1)
>>>
У модулей Carbon нет документации, поэтому мне пришлось использовать help(Carbon.Snd)
, чтобы узнать, какие функции доступны. Кажется, это прямой интерфейс на Carbon, поэтому, вероятно, помогут документы в Apple Developer Connection.
Ответ 5
Основываясь на ответе Барри Варк...
NSBeep()
из AppKit отлично работает, но также делает значок терминала/приложения в панели задач прыжком.
Несколько дополнительных строк с NSSound()
позволяют избежать этого и дают возможность использовать другой звук:
from AppKit import NSSound
#prepare sound:
sound = NSSound.alloc()
sound.initWithContentsOfFile_byReference_('/System/Library/Sounds/Ping.aiff', True)
#rewind and play whenever you need it:
sound.stop() #rewind
sound.play()
Стандартные звуковые файлы можно найти через командную строку locate /System/Library/Sounds/*.aiff
Файл, используемый NSBeep()
, кажется '/System/Library/Sounds/Funk.aiff'