Sonido Python ("Bell")


Me gustaría que un programa python me avise cuando haya completado su tarea haciendo un ruido de pitido. Actualmente, uso import os y luego uso un programa de voz de línea de comandos para decir "Proceso completo."Yo mucho más bien que sea un simple" campana."

Sé que hay una función que se puede utilizar en aplicaciones Cocoa, NSBeep, pero no creo que tenga mucho que ver con esto.

También he intentado print(\a) pero eso no funcionó.

Estoy usando un Mac, si no se podía decir por mi Cacao comentario, para que pueda ayudar.

Gracias!

Author: Brant Bobby, 2008-08-18

5 answers

¿Has intentado:

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

Eso funciona para mí aquí en Mac OS 10.5

En realidad, creo que su intento original funciona también con una pequeña modificación:

print('\a')

(Solo necesita las comillas simples alrededor de la secuencia de caracteres).

 64
Author: gbc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-17 21:46:02

Si tiene PyObjC (el puente Python - Objective-C) instalado o se está ejecutando en el sistema python de OS X 10.5 (que viene con PyObjC), puede hacer

from AppKit import NSBeep
NSBeep()

Para reproducir la alerta del sistema.

 10
Author: Barry Wark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-29 15:47:05

Probé el mezclador del módulo pygame, y funciona bien. Primero instale el módulo:

$ sudo apt-get install python-pygame

Luego en el programa, escribe esto:

from pygame import mixer
mixer.init() #you must initialize the mixer
alert=mixer.Sound('bell.wav')
alert.play()

Con pygame tienes muchas opciones de personalización, con las que además puedes experimentar.

 7
Author: Abhranil Das,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-24 12:14:54

Tuve que desactivar la opción "Silence terminal bell" en mi Perfil de Terminal activo en iTerm para que print('\a') funcionara. Parecía funcionar bien por defecto en la Terminal.

También puede usar el módulo Mac Carbon.Snd para reproducir el pitido del sistema:

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

Los módulos de carbono no tienen documentación, así que tuve que usar help(Carbon.Snd) para ver qué funciones estaban disponibles. Parece ser una interfaz directa en Carbono, por lo que los documentos de Apple Developer Connection probablemente ayudan.

 5
Author: markpasc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-17 21:56:10

Basado en la respuesta de Barry Wark... NSBeep() desde AppKit funciona bien, pero también hace que el icono de terminal/aplicación en la barra de tareas salte. Unas pocas líneas adicionales con NSSound() evita eso y da la oportunidad de usar otro sonido:

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

Los archivos de sonido estándar se pueden encontrar a través de la línea de comandos locate /System/Library/Sounds/*.aiff El archivo utilizado por NSBeep() parece ser '/System/Library/Sounds/Funk.aiff'

 1
Author: Martin Müller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-14 09:46:37