Python: издает звуковой сигнал - PullRequest
72 голосов
/ 30 июня 2011

Я пытаюсь заставить программу издавать звуковой сигнал.Я на машине с Windows.Я посмотрел на http://docs.python.org/library/winsound.html

Но не уверен, как я могу запрограммировать это с помощью сканера штрих-кода.

Вот мой код для серийного сканера штрих-кода.

ser = serial.Serial()
ser.baudrate = 9600

#for windows
ser.port = 2 #for COM3

ser.open()
ser.write('hello')
ser.close()

ОБНОВЛЕНИЕ: Так как я раздражаю своих коллег звуковым сигналом.Можно ли заставить его пройти через аудиоразъем для наушников?

Ответы [ 7 ]

114 голосов
/ 30 июня 2011

Кроссплатформенный способ сделать это - print '\a'. Это отправит символ ASCII Bell в stdout и, как мы надеемся, сгенерирует звуковой сигнал (a для 'alert'). Обратите внимание, что многие современные эмуляторы терминала предоставляют возможность игнорировать символы звонка.

Поскольку вы работаете в Windows, вы будете рады узнать, что у Windows есть свой собственный (готовьтесь) Beep API , который позволяет отправлять звуковые сигналы произвольной длины и высоты тона. Обратите внимание, что это решение только для Windows, поэтому вам, вероятно, следует предпочесть print '\a', если вы действительно не заботитесь о герцах и миллисекундах.

Доступ к API Beep осуществляется через модуль winsound : http://docs.python.org/library/winsound.html

109 голосов
/ 30 июня 2011

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

import winsound
frequency = 2500  # Set Frequency To 2500 Hertz
duration = 1000  # Set Duration To 1000 ms == 1 second
winsound.Beep(frequency, duration)

winsound.Beep() можно использовать везде, где вы хотите, чтобы прозвучал звуковой сигнал.

18 голосов
/ 24 сентября 2013

Linux.

$ apt-get install beep

$ python
>>> os.system("beep -f 555 -l 460")

OR

$ beep -f 659 -l 460 -n -f 784 -l 340 -n -f 659 -l 230 -n -f 659 -l 110 -n -f 880 -l 230 -n -f 659 -l 230 -n -f 587 -l 230 -n -f 659 -l 460 -n -f 988 -l 340 -n -f 659 -l 230 -n -f 659 -l 110 -n -f 1047-l 230 -n -f 988 -l 230 -n -f 784 -l 230 -n -f 659 -l 230 -n -f 988 -l 230 -n -f 1318 -l 230 -n -f 659 -l 110 -n -f 587 -l 230 -n -f 587 -l 110 -n -f 494 -l 230 -n -f 740 -l 230 -n -f 659 -l 460
11 голосов
/ 03 ноября 2015

Я искал то же самое, но для оболочки Linux.

Тема привела меня к ответу, - спасибо -

Может быть, более питоническая манера:

import os
beep = lambda x: os.system("echo -n '\a';sleep 0.2;" * x)
beep(3)

Примечания:

  • значение сна (здесь 0,2), зависит от длины (секунд) вашего звукового сигнала по умолчанию
  • Я решил использовать os.system вместо subprocess.Popen для простоты (это может быть плохо)
  • '-n' для echo не должен отображать больше
  • последний ';' после sleep необходимо для результирующей текстовой последовательности (* x)
  • также тестируется через ssh на X-терминах
4 голосов
/ 22 декабря 2014

Я сделал пакет для этой цели.

Вы можете использовать его так:

from pybeep.pybeep import PyVibrate, PyBeep
PyVibrate().beep()
PyVibrate().beepn(3)
PyBeep().beep()
PyBeep().beepn(3)

Это зависит от sox и поддерживает только python3.

2 голосов
/ 05 декабря 2018

Есть ответ Windows и ответ Debian, так что вот Mac один:

Предполагается, что вы просто ищете быстрый способ создания настраиваемого звукового сигнала, а не пьезоэлектрический звуковой сигнал, который вы получаете в Windows:

os.system( "say beep" )

Отказ от ответственности: Вы можете заменить os.system вызовом модуля subprocess, если вы беспокоитесь о том, что кто-то взломает ваш звуковой код.

См .: Как сделать аппаратный звуковой сигнал в Mac OS X 10.6

2 голосов
/ 13 июля 2017

Кроссплатформенный путь:

import time
import sys
for i in range(1,6):
    sys.stdout.write('\r\a{i}'.format(i=i))
    sys.stdout.flush()
    time.sleep(1)
sys.stdout.write('\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...