Подтвердить что ты не робот

Звук Python ( "Колокол" )

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

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

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

print('\a')

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

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

4b9b3361

Ответ 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'