Звук Питона («Колокол») - PullRequest
51 голосов
/ 18 августа 2008

Я бы хотел, чтобы программа на python предупредила меня, когда она выполнила свою задачу, издав звуковой сигнал. В настоящее время я использую import os, а затем использую речевую программу командной строки, чтобы сказать «Процесс завершен». Я бы предпочел, чтобы это был простой «колокол».

Я знаю, что есть функция, которую можно использовать в Какао приложениях, NSBeep, но я не думаю, что это как-то связано с этим.

Я тоже пробовал

print('\a')

но это не сработало.

Я использую Mac, если вы не можете сказать по моему Какао комментарию, так что это может помочь.

Ответы [ 5 ]

67 голосов
/ 18 августа 2008

Вы пробовали:

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

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

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

print('\a')

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

10 голосов
/ 29 августа 2008

Если у вас установлен PyObjC (мост Python - Objective-C) или вы работаете на системном питоне OS X 10.5 (который поставляется с PyObjC), вы можете сделать

from AppKit import NSBeep
NSBeep()

для воспроизведения системного оповещения.

8 голосов
/ 24 мая 2011

Я попробовал микшер из модуля 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 у вас есть много опций настройки, с которыми вы можете дополнительно поэкспериментировать.

5 голосов
/ 18 августа 2008

Мне пришлось отключить опцию «Silence Terminal Bell» в моем активном профиле терминала в iTerm, чтобы print('\a') заработал. Похоже, что он работает нормально по умолчанию в терминале.

Вы также можете использовать модуль Mac Carbon.Snd для воспроизведения системного звукового сигнала:

>>> import Carbon.Snd
>>> Carbon.Snd.SysBeep(1)
>>> 

Модули Carbon не имеют никакой документации, поэтому мне пришлось использовать help(Carbon.Snd), чтобы увидеть, какие функции были доступны. Похоже, это прямой интерфейс к Carbon, поэтому, вероятно, помогут документы по Apple Developer Connection.

2 голосов
/ 14 октября 2017

Опираясь на ответ Барри Уорка ... 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'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...