Python:发出哔哔声

Mar*_*ham 78 python audio serial-port

我正试图让程序给我一个哔哔声.我在一台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()
Run Code Online (Sandbox Code Playgroud)

更新:因为我用哔哔声扰乱了我的同事.我可以通过耳机的音频插孔来获取它吗?

Cya*_*ook 115

在Windows上,如果您只想让计算机发出哔声:

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

winsound.Beep()无论你希望发生蜂鸣可以使用.

  • 这个很整洁:`def annoy():我在范围内(1,10):winsound.Beep(i*100,200) (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 (7认同)
  • 打败我3秒钟. (2认同)
  • 我使用的是 Mac,在 pip repo 上找不到这个? (2认同)

jfo*_*erg 115

这种跨平台的方式是print '\a'.这会将ASCII Bell字符发送到stdout,并希望生成一个蜂鸣声(一个'警报').请注意,许多现代终端仿真器提供忽略铃声字符的选项.

因为你在Windows上,你会很高兴听到Windows有自己的(支持自己)Beep API,它允许你发出任意长度和音高的嘟嘟声.请注意,这是一个仅限Windows的解决方案,因此print '\a'除非您真的关心Hertz和毫秒,否则您应该更喜欢它.

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

  • 如果您在控制台应用程序中使用 print,请考虑添加 end="" 以防止每次发出蜂鸣声时出现换行符。 (3认同)
  • 尽管他专门针对 Windows 提出了要求,但我认为这是全面更好的解决方案,除非 WinSound API 将恢复为 \a 以独立于操作系统。还有很多音频 API (2认同)
  • 坦率地说,我会避免在严肃的编程工作中完全发挥PC扬声器的哔哔声.如果他确实在Windows上,他可能应该尝试播放系统主题的默认"警报"信号.运气好的话,可以通过他正在使用的任何GUI包访问该信号. (2认同)
  • @jforberg 的 api 是 [winsound.MessageBeep](https://docs.python.org/2/library/winsound.html#winsound.MessageBeep),它可以采用 MB_ICONASTERISK、MB_ICONEXCLAMATION、MB_ICONHAND、MB_ICONQUESTION 和 MB_OK。 (2认同)
  • 如果您使用的是 Python 3,请不要忘记使用括号,否则会出现语法错误。使用打印('\a') (2认同)
  • '\a' 在 Windows 上不为我播放任何内容。 (2认同)

c z*_*c z 21

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

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

os.system( "say beep" )
Run Code Online (Sandbox Code Playgroud)

免责声明:如果您担心有人窃取您的哔声代码,您可以os.system通过调用subprocess模块来替换。

请参阅:如何在 Mac OS X 10.6 中发出硬件哔声


小智 20

Linux操作系统.

$ apt-get install beep

$ python
>>> os.system("beep -f 555 -l 460")
Run Code Online (Sandbox Code Playgroud)

要么

$ 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
Run Code Online (Sandbox Code Playgroud)

  • `os.system` 很好,尤其是硬编码的值,并不是每个人都在编写网络服务器。 (12认同)
  • Downvoted有两个原因:第一,GNU/Linux!= Debian和apt-get不是通用的; 第二,你不应该使用os.system,而是使用子进程模块. (11认同)
  • @Ben 老问题,但是 fwiw 否决这个似乎非常严厉。据我了解,这个问题涉及一个没有跨平台解决方案的领域。获得 140 个赞的已接受答案是 Windows 特定的。而且您没有解释为什么合法模块是“坏”做法。 (4认同)

s4m*_*0o1 13

我正在寻找相同的但是对于Linux shell.

这个话题让我得到了答案 - 谢谢 -

也许更pythonic方式:

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

备注:

  • 睡眠值(此处为0.2)取决于默认哔声的长度(秒)
  • 我选择使用os.system而不是subprocess.Popen为了简单(可能是坏的)
  • '-n'表示echo没有更多的显示
  • 最后 ';' 之后sleep是生成的文本序列所必需的(*x)
  • 也在X术语上通过ssh进行了测试

  • Python有一个等效的`echo`(`print`)和`sleep`,因此通过外部调用实际上并不是pythonic,特别是当它们是(非可移植的)Unix调用时. (2认同)

Gui*_*abs 12

如果您想要塞尔达或马里奥主题的蜂鸣声:

!pip install chime
import chime
chime.theme('zelda')

chime.success()
chime.warning()
chime.error()
chime.info()
chime.notify_exceptions()

1/0
Run Code Online (Sandbox Code Playgroud)


Foo*_*167 10

跨平台方式:

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')
Run Code Online (Sandbox Code Playgroud)

感谢cz

print(end='\a')
Run Code Online (Sandbox Code Playgroud)

  • 唯一重要的部分是`sys.stdout.write('\a')` (7认同)
  • `打印(结束='\a')` (3认同)
  • @jstrieb——这是一个很小的独立程序。它的重要性在于完整性本身。 (2认同)
  • 使用“pythonw”时不适用于 Windows,仅适用于“python” (2认同)

Bra*_*123 9

我发现这个库很有帮助:安装 beepy,

pip install beepy
Run Code Online (Sandbox Code Playgroud)

有 6 种不同的声音选项,您可以在此处查看详细信息:https : //pypi.org/project/beepy/

代码片段以收听所有声音:

import beepy as beep
for ii in range(1,7): 
    beep.beep(ii)
Run Code Online (Sandbox Code Playgroud)


小智 6

在linux上: print('\007')将使系统铃声响起。


Ser*_*ndt 5

使用pygame任何平台上

使用的好处pygame是它可以在任何操作系统平台上工作。下面的示例代码适用于 GNU/Linux

首先按照此处的详细说明安装pygame模块。python3

$ sudo pip3 install pygame
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)