Python: создание звукового сигнала
Я пытаюсь заставить программу подавать звуковой сигнал. Я нахожусь на оконной машине. Я посмотрел на 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()
ОБНОВЛЕНИЕ: Поскольку я раздражаю своих сотрудников звуковым сигналом. Могу ли я получить его через аудиоразъем для наушников?
Ответы
Ответ 1
В 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()
может использоваться везде, где вы хотите получить звуковой сигнал.
Ответ 2
Кросс-платформенный способ сделать это - print '\a'
. Это отправит символ ASCII Bell в stdout и, мы надеемся, будет генерировать звуковой сигнал (a для "alert" ). Обратите внимание, что многие современные терминальные эмуляторы предоставляют возможность игнорировать символы колокола.
Поскольку вы находитесь в Windows, вы будете счастливы услышать, что Windows имеет свой собственный (привязать себя) Beep API, который позволяет отправлять звуковые сигналы произвольной длины и высоты тона. Обратите внимание, что это решение только для Windows, поэтому вам, вероятно, следует предпочесть print '\a'
, если вы действительно не заботитесь о Герцах и миллисекундах.
Доступ к API Beep осуществляется через модуль winsound: http://docs.python.org/library/winsound.html
Ответ 3
Linux.
$ apt-get install beep
$ python
>>> os.system("beep -f 555 -l 460")
ИЛИ
$ 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
Ответ 4
Я искал то же самое, но для оболочки Linux.
Тема привела меня к ответу, -thanks -
Возможно, более питоническая манера:
import os
beep = lambda x: os.system("echo -n '\a';sleep 0.2;" * x)
beep(3)
Примечания:
- значение sleep (здесь 0.2), зависит от длины (секунд) вашего звукового сигнала по умолчанию
- Я решил использовать
os.system
, а не subprocess.Popen
для простоты (это может быть плохо)
- '-n' для
echo
не должен больше отображаться
- последний ';' после
sleep
необходимо для полученной текстовой последовательности (* x)
- также проверяется через ssh на X-члене
Ответ 5
Я сделал пакет для этой цели.
Вы можете использовать его следующим образом:
from pybeep.pybeep import PyVibrate, PyBeep
PyVibrate().beep()
PyVibrate().beepn(3)
PyBeep().beep()
PyBeep().beepn(3)
Это зависит от sox и поддерживает только python3.
Ответ 6
Кросс-платформенный способ:
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')
Ответ 7
Там есть ответ Windows и ответ Debian, так что вот Mac :
Это предполагает, что вы просто ищете быстрый способ создания настраиваемого звукового сигнала, а не пьезоэлектрический звуковой сигнал, который вы получаете в Windows:
os.system( "say beep" )
Отказ от ответственности: Вы можете заменить os.system
вызовом модуля subprocess
, если вы беспокоитесь о том, что кто-то взломает ваш звуковой код.
См.: Как сделать аппаратный звуковой сигнал в Mac OS X 10.6
Ответ 8
Использование pygame
на любой платформе
Преимущество использования pygame
заключается в том, что его можно заставить работать на любой платформе ОС. Ниже приведен пример кода для GNU/Linux.
Сначала установите модуль pygame
для python3
, как подробно описано здесь.
$ sudo pip3 install pygame
Модуль pygame
может воспроизводить файлы .wav
и .ogg
из любого местоположения файла. Вот пример:
#!/usr/bin/env python3
import pygame
pygame.mixer.init()
sound = pygame.mixer.Sound('/usr/share/sounds/freedesktop/stereo/phone-incoming-call.oga')
sound.play()