在20.04下python3中安装beep的求助!

软件和网站开发以及相关技术探讨
回复
头像
男菜鸟
帖子: 1365
注册时间: 2008-12-16 14:01
来自: 漂在江湖

在20.04下python3中安装beep的求助!

#1

帖子 男菜鸟 » 2021-09-01 12:43

原来在win下。python3执行:
import winsound
winsound.Beep(400,1000)
没有问题,可以正常发声。

但是在linux(UBT20.04)下,因为无法调用winsound,无法运行程序。于是想到安装beep,

代码: 全选

sudo apt-get install beep
顺利安装。

代码: 全选

beep -f 400 -l 1000
无法发声!!

代码: 全选

gu@gu-Spin-SP513-51:~$ python3
Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> beep -f 400 -l 1000
  File "<stdin>", line 1
    beep -f 400 -l 1000
            ^
SyntaxError: invalid syntax
>>> beep -f 1000 -l 1000
  File "<stdin>", line 1
    beep -f 1000 -l 1000

代码: 全选

gu@gu-Spin-SP513-51:~$ beep -f 400 -l 1000
beep: Error: Could not open any device
不知道错在哪里? :Cry
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 在20.04下python3中安装beep的求助!

#2

帖子 lilydjwg » 2021-09-01 13:15

权限问题。
另外不建议搞这么奇怪。你有什么特别的需求一定要用蜂鸣器吗?用扬声器播放音频不可以吗?
播放提示音的话,可以使用 libcanberra 这个库。
头像
男菜鸟
帖子: 1365
注册时间: 2008-12-16 14:01
来自: 漂在江湖

Re: 在20.04下python3中安装beep的求助!

#3

帖子 男菜鸟 » 2021-09-01 18:29

lilydjwg 写了: 2021-09-01 13:15 权限问题。
另外不建议搞这么奇怪。你有什么特别的需求一定要用蜂鸣器吗?用扬声器播放音频不可以吗?
播放提示音的话,可以使用 libcanberra 这个库。

不好意思,没有特别需求!初学者孤陋寡闻不知道怎么解决而已。你能指导一下,怎么用扬声器发声吗?
我的要求是程序输出某字符时,电脑发一个提示音(频率、时常可调)。
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 在20.04下python3中安装beep的求助!

#4

帖子 lilydjwg » 2021-09-01 18:58

既然是初学者,你可以调用外部命令, mpv / mplayer 啥的,或者 canberra-gtk-play(这个支持 freedesktop 的声音主题)。
头像
astolia
论坛版主
帖子: 6451
注册时间: 2008-09-18 13:11

Re: 在20.04下python3中安装beep的求助!

#5

帖子 astolia » 2021-09-03 10:38

男菜鸟 写了: 2021-09-01 18:29
lilydjwg 写了: 2021-09-01 13:15 权限问题。
另外不建议搞这么奇怪。你有什么特别的需求一定要用蜂鸣器吗?用扬声器播放音频不可以吗?
播放提示音的话,可以使用 libcanberra 这个库。

不好意思,没有特别需求!初学者孤陋寡闻不知道怎么解决而已。你能指导一下,怎么用扬声器发声吗?
我的要求是程序输出某字符时,电脑发一个提示音(频率、时常可调)。
他第一行就跟你说了,beep运行出错是权限问题。有兴趣可以自行查看man beep,里面专门有提到权限相关的话题。
beep默认会对3个设备路径尝试写入操作,分别是 /dev/input/by-path/platform-pcspkr-event-spkr、/dev/tty0 和 /dev/vc/0,只有路径存在且当前用户有权写入时才能成功。
第一个路径需要加载了pcspkr模块才会有。如果lsmod pcspkr没有列出,就用sudo modprobe pcspkr加载
后两个路径需要你是root权限(不能用sudo,beep会检测SUDO_*环境变量)或者加入了tty组才能写入
男菜鸟 写了: 2021-09-01 12:43

代码: 全选

gu@gu-Spin-SP513-51:~$ python3
Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> beep -f 400 -l 1000
  File "<stdin>", line 1
    beep -f 400 -l 1000
            ^
SyntaxError: invalid syntax
>>> beep -f 1000 -l 1000
  File "<stdin>", line 1
    beep -f 1000 -l 1000
不知道错在哪里? :Cry
beep是个外部程序,python里调用外部程序不是这么干的。简单点可以用

代码: 全选

import os
os.system('beep -f 400 -l 1000')
另外,安装了sox的话,也可以直接从声卡发声,而不走蜂鸣器了

代码: 全选

sudo apt install sox
play -q -n synth 1 sin 400
头像
男菜鸟
帖子: 1365
注册时间: 2008-12-16 14:01
来自: 漂在江湖

Re: 在20.04下python3中安装beep的求助!

#6

帖子 男菜鸟 » 2021-09-03 13:13

谢谢二位的详细指导,我试试。
我是在试验把自己70年代用qbasic编写的程序,用python来改写。因为前者在DOS下运行,
现在使用太不方便了。本人又不是程序员,一面学,一面改。 :Hehe 谢谢你们的帮助。
回复