Python:发出哔哔声


97

我正在尝试使该程序发出哔哔声。我在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()

更新:因为我用哔哔声打扰了我的同事。我可以让它穿过耳机的音频插孔吗?


4
您想让条形码扫描仪发出噪音还是它连接的Windows机器?
Setheron 2011年

Windows机器。我认为条形码扫描仪将自行完成
Marc Brigham

9
回复“更新”:是的,这是一个众所周知的哔哔声很烦人的事实:)
jforberg 2011年

是否有适用于OS X的功能?我似乎找不到Winsound模块。
查理·帕克

2
@CharlieParker,因为获胜声音适用于Windows。改为打印“ \ a”。
noɥʇʎԀʎzɐɹƆ

Answers:


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

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

1
在Windows winsound.beep跨Windows声音进行。
雅各布·鲍耶

我在Mac上,无法在pip repo上找到它?
Volatil3 '16

有趣的是,它在我的anaconda环境中不存在...这很奇怪吗?
查理·帕克

127

跨平台的方法是print '\a'。这会将ASCII Bell字符发送到stdout,并有望产生提示音(“ alert”(警告))。请注意,许多现代的终端仿真器都提供了忽略响铃字符的选项。

由于您使用的是Windows,因此您会很高兴听到Windows拥有自己的Beep API(您自己可以使用),该API允许您发送任意长度和音高的蜂鸣声。请注意,这是仅Windows的解决方案,因此,print '\a'除非您真的关心赫兹和毫秒,否则您应该选择它。

可通过winsound模块访问Beep API :http : //docs.python.org/library/winsound.html


1
尽管他专门针对Windows提出了要求,但我认为这是更好的解决方案,除非WinSound API将恢复为\ a以与操作系统无关。也有很多音频API
Setheron 2011年

2
坦白说,我会避免在认真的编程工作中完全播放PC扬声器的哔哔声。如果确实在Windows上,那么他可能应该尝试播放系统主题的默认“警报”信号。运气好的话,可以通过他使用的任何GUI软件包访问该信号。
jforberg 2011年

1
如果在控制台应用程序中使用打印,请考虑在每次哔声时添加end =“”以防止换行。
托尼

1
@jforberg的api是winsound.MessageBeep,它可以使用MB_ICONASTERISK,MB_ICONEXCLAMATION,MB_ICONHAND,MB_ICONQUESTION和MB_OK。
彼得·伍德

1
如果您使用的是Python 3,请不要忘记使用括号,否则会出现语法错误。使用print('\ a')
ZorroDeLaArena 2015年

27

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

12
被拒绝的原因有两个:首先,GNU / Linux!= Debian和apt-get并不通用。其次,您不应使用os.system,而应使用subprocess模块​​。

1
作为一个Linux用户,当长代码完成时,它试图发出一种简单而廉价的提示音,这是迄今为止最简单的解决方案。我特别喜欢小叮当!请注意,根据askubuntu.com/questions/19906/beep-in-shell-script-not-working
John Haberstroh

4
os.system很好,特别是具有硬编码的值,不是每个人都在编写Web服务器。
cz

错字-f 1047-l,应该是-f 1047 -l空格缺失
bartekbrak

@Ben老问题,但是一票否决似乎很苛刻。据我所知,这个问题与一个没有跨平台解决方案的领域有关。接受140个赞的答案是Windows特定的。而且您也没有解释为什么合法模块是“不良”做法。
geotheory,

17

我在寻找相同的东西,但在寻找Linux shell。

这个话题给我一个答案,-谢谢-

也许更pythonic方式:

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术语上进行了测试

3
Python具有echoprint)和的等效项sleep,因此实际上进行外部调用并不是pythonic,尤其是当它们是(不可移植的)Unix调用时。
Eric O Lebigot

(3)是什么意思?
bumbumpaw

9

有一个Windows答案和一个Debian答案,所以这是Mac版本

假设您只是在这里寻找一种快速的方法来制作可自定义的警报声音,而不是专门在Windows上获得的压电蜂鸣声:

os.system( "say beep" )

免责声明:如果您担心有人对您的蜂鸣代码进行黑客攻击,则可以用os.systemsubprocess模块的调用代替。

请参阅:如何在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 '18

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。
2016年

1
只是知道您必须安装袜子。跑步:酿造安装袜
Jam M. Hernandez Q.19年

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()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.