it-swarm.cn

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

使用bash,如何使PC扬声器发出蜂鸣声?

就像是 echo 'beepsound' > /dev/pcspkr 会好的。

185
Stefan

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

通过beep联机帮助页创建声音的方法有3种:

  1. 在Shell脚本中产生蜂鸣声的传统方法是编写ASCII BEL\007)字符通过Shell命令(例如,

    echo -ne '\007'
    

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

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

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

beep将仅尝试这3种方法。

133
echox

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

$ echo -e "\a"

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

更新

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

$ echo -en "\a" > /dev/tty5
78
Shawn Chin

注意:此解决方案会从扬声器,而不是主板

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脚本

76
Ryne Everett
tput bel

因为terminfobel定义为

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)
32
Winston Smith

如果已安装sox,而未安装PC扬声器,则要使用声卡:

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

sox适用于大多数发行版。

19
Alexander

一些发行版具有命令行实用程序来实现此目的。也许您可以告诉我们您正在发行的发行版,或进行搜索(例如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
13
wormintrude

只有当您的PC带有扬声器时,蜂鸣器才能工作。许多现代笔记本电脑/小型设备都没有。 tredegar

尝试播放声音:

$ play xxxxx.wav

当其他所有方法都失败时,为我工作。

参考文献

4
Elliptical view

尝试

回声-n Ctrl+VCtrl+G

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

2
codehead

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

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

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

2
MvG

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

0
Hitesh Chechani