如何使PC扬声器发出哔哔声


Answers:


124

我通常会使用beep安装在许多系统上的小实用程序。该命令将尝试其他方法来创建系统声音。

从手册beep页创建声音的方法有3种:

  1. 在shell脚本中产生提示音的传统方法是通过shell命令(例如)将ASCII BEL\007)字符写入标准输出。

    echo -ne '\007'
    

    仅当当前调用外壳程序的标准输出定向到某种终端设备时,此方法才有效。如果不是,则蜂鸣声将不会发出声音,甚至可能在输出定向到的任何文件中引起不必要的损坏。

  2. 还有其他方法可以引起蜂鸣声。一种更可靠的方法是在其中打开/dev/tty并发送您的BEL字符。这对于I / O重定向是可靠的,但是在希望生成蜂鸣声的shell脚本没有控制终端的情况下仍然失败,例如,因为它是从X窗口管理器运行的。

  3. 第三种方法是连接到X显示器并向其发送铃声命令。这不依赖于Unix终端设备,但是(当然)需要X显示。

beep 只需尝试这3种方法。


9
beep命令的主页为:johnath.com/beep 在Ubuntu / Debian上,您可以使用进行安装apt-get install beep
Riccardo Murri 2010年

14
在linux上,还有第四个badass蜂鸣方法:卸载pcspkr模块,加载snd-pcsp,现在您有了alsa声卡,该声卡使用老式的技巧将数字声音实际馈送到内部扬声器。压电内置扬声器的效果令人gives舌,但在传统内置扬声器上,其质量相当不错。这样,您的哔哔声就可以变得更有创意;)
BatchyX

8
@isomorphismes:pcspkrsnd-pcsp都是模块,而不是包装。使用modprobe/ modprobe -r/ lsmod操纵它们。对于您的信息,它们位于linux-image-something软件包中,希望已安装(否则您将没有linux内核)。
BatchyX

3
哔声通常可以解决debian的问题,但是我需要加载模块才能在ubuntu上工作
mchid 2015年

4
正如mchid所说,添加模块后:modprobe snd-pcsp,哔声现在起作用了!
lepe 2015年

72

只是回声\a\07为我工作。

$ echo -e "\a"

这可能需要pcspkr加载内核模块。我只在RHEL上测试过,所以是YMMV。

更新

正如沃伦在评论中指出的那样,当通过SSH远程登录时,这可能无法正常工作。一种快速的解决方法是将输出重定向到任何TTY设备(最好是未使用的设备)。例如:

$ echo -en "\a" > /dev/tty5

5
如果您使用X终端或将ssh插入机器,则可能会导致终端闪烁,因为许多xterm / vt100类型的程序都配置为对BEL字符执行此操作。
沃伦·杨

2
这很有意义,但是在Ubuntu 12.04上对我不起作用。
同构

2
@isomorphismes:用于控制台,而不是X11终端。对于X下的哔哔声,您可以尝试以下操作:askubuntu.com/a/587311/11015
MestreLion,2015年

1
@isomorphismes:我也正在使用Ubuntu 12.04,对我来说sudo modprobe pcspkr足以通过printf "\a"beep实用程序在VT下启用蜂鸣声。
MestreLion

3
这些方法都不适合我。Ubuntu 16.04.1 LTS
AR2015年

67

注意:此解决方案会从扬声器(而不是主板)发出蜂鸣声。

ALSA附带了Speaker-test,这是一个命令行扬声器测试音调生成器,可用于生成提示音:

$ speaker-test -t sine -f 1000 -l 1

看到这个arch linux论坛线程

但是,哔声持续时间将是任意的,但可以按以下方式控制:

$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid

我们可以更进一步,并使用此功能输出提示音:

_alarm() {
  ( \speaker-test --frequency $1 --test sine )&
  pid=$!
  \sleep 0.${2}s
  \kill -9 $pid
}

通过频率和持续时间参数调用:

$ _alarm 400 200

考虑到这一点,可以使用创建简单的音乐speaker-test。请参阅此shell脚本


1
您的timeout ${2} speaker-test --frequency ${1} --test sine
单线

1
不需要真正保存pid,只需speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! 执行相同的操作即可。无论如何,@ user569825的方法更好。
erm3nda

27
tput bel

因为terminfo定义bel

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)

17

要使用声卡(如果sox已安装)和PC扬声器(如果未安装):

$ play -q -n synth 0.1 sin 880 || echo -e "\a"

sox 适用于大多数发行版。


2
+1我不知道该游戏具有此功能。我最终在满足一定条件的情况下在一个then块中使用此watch通知我。甚至让我戴上耳机。这对我非常有用。
andyortlieb

从bash sh戏剧可能需要sudo -u USER play...
intika '18 -10-2

在我的系统上,play使用pulseaudio作为用户。我猜这取决于系统配置。
亚历山大

13

一些发行版具有命令行实用程序来实现此目的。也许您可以告诉我们您正在发行的发行版,或进行搜索(例如emerge -s beep在gentoo中)。

除了“可用”的utils,您还可以制作一个发出蜂鸣声的Perl脚本,您需要做的就是:

<SomeCodeBefore>
print "\007";
<SomeCodeAfter>  

如果您确实收到“哔哔声”,请尝试以下操作:

#! /bin/sh 

beep -f 500 -l 700 
beep -f 480 -l 400 
beep -f 470 -l 250 
beep -f 530 -l 300 -D 100 
beep -f 500 -l 300 -D 100 
beep -f 500 -l 300 
beep -f 400 -l 600 
beep -f 300 -l 500 
beep -f 350 -l 700 
beep -f 250 -l 600

我希望我的问题保持不可知论性,是否echo -e "\007"可以在bash而不是print "\007perl中使用?
Stefan 2010年

1
@Stefan-哔哔声几乎是“通用的”。但是,可以通过使用'echo -e“ \ a”'或'echo -e“ \ 07”'来保持不可知论。干杯!
wormintrude 2010年

2
printf '\007'代替使用会更方便echo
丹尼斯·威廉姆森


2

尝试

回声-n Ctrl+ V Ctrl+G

缺点是,这仅在输出设备是终端时才有效,因此例如在cron作业中可能不起作用。(但是,如果您是root用户,则可以重定向到/dev/console立即发出哔哔声。)


1

在Linux上,类似的工具beep可以在控制台设备上使用ioctl发出给定的声音。更具体地说,beep将使用KIOCSOUNDioctl,但是还有一个KDMKTONEioctl可用于生成声音。

据我了解,前者会发出声音,直到被明确取消为止,而后者会发出预定持续时间的蜂鸣声。见console_ioctl(4)手册页了解详情。

因此,如果您对所做的beep操作不满意,则可以编写几行代码直接访问这些ioctl。假设您具有的完全访问权限/dev/console,则可能需要root特权。


-1

在终端中,按Ctrl+ G,然后按Enter


1
在我的终端(gnome-terminal)中,它无需输入即可工作。就像对PC扬声器的测试一样,这对我来说很好。但是,它在脚本中完全没有用。
Palec

令人惊讶的投票。这确实可以在某些PC上使用,但可能无法全部使用。
Zzzach ...

它在rxvt,urxvt,xterm,lxterm或lxterminal上不起作用,如果我的终端有可见的钟声,至少不应该闪烁吗?
威廉

它在xterm上确实有效
克里斯,
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.