Python : 경고음 만들기


97

삐 소리를 내도록 프로그램을 얻으려고합니다. 나는 윈도우 머신에있다. 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()

업데이트 : 나는 경고음으로 동료를 짜증나게하고 있기 때문에. 헤드폰 용 오디오 잭을 통해받을 수 있습니까?


4
바코드 스캐너가 소음을 내거나 연결된 Windows 기계를 원하십니까?
Setheron 2011-06-30

Windows 기계. 바코드 스캐너가 저절로 할 것이라고 생각합니다
Marc Brigham

9
"업데이트"다시 : 그래, 그것은 비프 음 : 짜증나는 것을 잘 알려진 사실이다
jforberg

OS X에서 작동하는 것이 있습니까? winsound 모듈을 찾을 수없는 것 같습니다.
Charlie Parker

2
윈 사운드는 윈도우 용이기 때문에 @CharlieParker. 대신 "\ a"를 인쇄하십시오.
noɥʇʎԀʎzɐɹƆ

답변:


145

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()당신이 경고음이 발생하여 원하는 목적지까지 사용할 수 있습니다.


12
이것은 깔끔합니다 :def annoy(): for i in range(1, 10): winsound.Beep(i * 100, 200)
Skurmedel 2011-06-30

8
또는 def sos(): for i in range(0, 3): winsound.Beep(2000, 100) for i in range(0, 3): winsound.Beep(2000, 400) for i in range(0, 3): winsound.Beep(2000, 100). 나는 아마 지금 일하러 가야한다 : D
Skurmedel 2011 년

1
Windows에서 winsound. 경고음이 Windows Sounds를 통해 전달됩니다.
Jakob Bowyer

나는 Mac에 있는데 pip repo에서 찾을 수 없습니까?
Volatil3

흥미 롭습니다. 제 아나콘다 환경에 존재하지 않습니다 ... 이상한가요?
Charlie Parker

127

이를 수행하는 크로스 플랫폼 방법은 print '\a'. 그러면 ASCII Bell 문자가 stdout으로 전송되고 경고음이 발생합니다 ( '경고'). 많은 최신 터미널 에뮬레이터는 벨 문자를 무시하는 옵션을 제공합니다.

Windows를 사용하고 있기 때문에 Windows 에 임의의 길이와 피치의 경고음을 보낼 수 있는 자체 Beep API 가 있다는 사실에 기뻐할 것 입니다. 이것은 Windows 전용 솔루션이므로 print '\a'Hertz 및 밀리 초에 대해 정말로 신경 쓰지 않는 한 선호 할 것입니다 .

Beep API는 winsound 모듈을 통해 액세스됩니다 . http://docs.python.org/library/winsound.html


1
그가 특별히 Windows를 요청했지만 WinSound API가 OS 독립형으로 \ a로 돌아 가지 않는 한 이것이 더 나은 솔루션이라고 생각합니다. 오디오 API도 많이 있습니다
Setheron 2011-06-30

2
솔직히 저는 심각한 프로그래밍 노력으로 PC 스피커 비프 음을 아예 재생하지 않을 것입니다. 실제로 Windows를 사용하는 경우 시스템 테마의 기본 "경고"신호를 대신 재생해야합니다. 운이 좋으면 그 신호는 그가 사용하는 GUI 패키지를 통해 액세스 할 수 있습니다.
jforberg 2011-06-30

1
콘솔 앱에서 print를 사용하는 경우 경고음이 울릴 때마다 줄 바꿈을 방지하려면 end = ""를 추가하는 것이 좋습니다.
Tony

1
@jforberg 그 API는 winsound.MessageBeep 이며 MB_ICONASTERISK, MB_ICONEXCLAMATION, MB_ICONHAND, MB_ICONQUESTION 및 MB_OK를 사용할 수 있습니다.
Peter Wood

1
Python 3을 사용하는 경우 괄호를 사용하는 것을 잊지 마십시오. 그렇지 않으면 구문 오류가 발생합니다. print ( '\ a') 사용
ZorroDeLaArena

27

리눅스.

$ 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

12
두 가지 이유로 비추천 : 첫째, GNU / Linux! = 데비안과 apt-get은 보편적이지 않습니다. 둘째, os.system을 사용하지 말고 대신 subprocess 모듈을 사용하십시오.
Ben

1
긴 코드가 끝났을 때 간단하고 저렴한 경고음을 받으려는 리눅스 사용자로서 이것이 가장 쉬운 해결책이었습니다. 나는 특히 작은 징글을 좋아했습니다! askubuntu.com/questions/19906/beep-in-shell-script-not-working
John Haberstroh

4
os.system모든 사람이 웹 서버를 작성하는 것은 아닙니다.
cz

오타 -f 1047-l,이어야 함 -f 1047 -l, 공백 누락
bartekbrak

@Ben Old 질문이지만, 이것을 반대 투표하는 것은 꽤 가혹한 것 같습니다. 질문은 내가 이해하는 크로스 플랫폼 솔루션이없는 영역과 관련이 있습니다. 140 개의 좋아요에 대한 대답은 Windows에 따라 다릅니다. 그리고 합법적 인 모듈이 왜 "나쁜"관행인지 설명하지 않습니다.
지구 이론

17

나는 동일하지만 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)에 after 가 필요합니다.
  • 또한 X 용어에서 ssh를 통해 테스트되었습니다.

3
파이썬은 echo( print) 및 sleep, 둘 다에 해당 하므로, 특히 (이동 불가능한) Unix 호출 인 경우 외부 호출을 거치는 것은 실제로 파이썬 적이 지 않습니다.
Eric O Lebigot

(3)은 무엇을 의미합니까?
bumbumpaw

9

Windows 답변과 Debian 답변이 있으므로 여기에 Mac이 있습니다 .

여기에서는 Windows에서 발생하는 압전 경고음이 아니라 사용자 지정 가능한 경고음을 빠르게 만드는 방법을 찾고 있다고 가정합니다.

os.system( "say beep" )

면책 조항 : 누군가가 당신의 비프 음 코드를 해킹하는 것이 걱정된다면 모듈에 os.system대한 호출로 대체 할 수 있습니다 subprocess.

참조 : Mac OS X 10.6에서 하드웨어 경고음을내는 방법


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

5
이것의 유일한 중요한 부분은sys.stdout.write('\a')
jstrieb

1
@jstrieb-이것은 작은 독립형 프로그램입니다. 완전성 자체에서의 중요성.
FooBar167

4

나는 그 목적을 위해 패키지 를 만들었습니다 .

다음과 같이 사용할 수 있습니다.

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

sox에 따라 다르며 python3 만 지원합니다.


1
pip3 install pybeep을 시도하십시오.
qed

1
Sox를 설치해야한다는 것만 알아 두세요. 실행 : brew install sox
Jam M. Hernandez Q.

3

사용하여 pygame모든 플랫폼에

사용의 장점은 pygame모든 OS 플랫폼에서 작동하도록 만들 수 있다는 것입니다. 아래 예제 코드는 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()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.