纠正错误 添加实例

beep

用于控制 PC 扬声器发出蜂鸣声的命令行工具。

介绍

beep 是一个用于精确控制 PC 扬声器发出蜂鸣声的命令行工具。它可以生成不同频率、时长、重复次数和延迟的蜂鸣音,支持将多个音调组合成序列,或根据标准输入(stdin)的换行符/字符触发蜂鸣。该工具常用于 shell 或 Perl 脚本中,在特定事件发生时向用户发出音频提示。

注意beep 需要 PC 扬声器硬件支持,通常需要加载 pcspkr 内核模块,并且对输出设备具有写入权限。

安装

Debian/Ubuntu:

sudo apt install beep

RedHel/Centos/Fedora:

sudo yum install beep

语法

beep [全局选项] [音调选项] [-n|--new 音调选项...]...
beep [-h|--help]
beep [-v|-V|--version]

选项说明

信息选项

选项 描述
-h, --help 显示帮助信息并退出。
-v, -V, --version 显示版本信息并退出。

全局选项

选项 描述
-e, --device=DEVICE 显式指定用于输出蜂鸣的设备。若不指定,beep 会依次尝试内部设备列表直到成功。
--debug, --verbose 启用详细输出,显示调试信息。

音调选项

每个音调可以由以下选项组合定义。若未指定,使用默认值。

选项 描述
-f FREQ 设置蜂鸣频率(单位:Hz)。必须满足 0 < FREQ < 20000。可接受浮点数,但内核 API 会取整为整数。默认值:440 Hz。
-l LEN 设置蜂鸣时长(单位:ms)。默认值:200 ms。
-r REPEATS 设置当前音调的重复次数(包括延迟)。默认值:1(仅一次,无重复)。
-d DELAY 设置重复之间的延迟(单位:ms),在最后一次重复后添加延迟。默认值:100 ms。
-D DELAY 设置重复之间的延迟(单位:ms),在最后一次重复后也添加该延迟。默认无延迟。
-n, --new 开始定义一个新的音调。每个 -n 之后可以跟一组新的音调选项,新音调继承所有默认值,直到被显式选项覆盖。
-s beep 置于输入处理模式:从标准输入读取数据,每遇到一个换行符就发出当前定义的音调一次,同时将输入数据原样复制到标准输出。
-c -s 类似,但每遇到一个字符就触发一次蜂鸣。

注意

环境变量

变量名 描述
BEEP_LOG_LEVEL 设置日志级别(取值范围 -999 到 999)。若未在命令行使用 --debug,则以此值为默认日志级别。

文件

beep 默认依次尝试打开以下设备,直到成功为止:

退出状态

状态码 含义
0 成功执行
非0 发生错误(如设备无法打开、无效参数等)

注意事项

设备和权限

API 说明

并发调用

beep 不支持并发运行。PC 扬声器硬件只有一个发声器,多个 beep 进程会相互干扰。例如,一个长蜂鸣进程正在运行时,另一个短蜂鸣进程会中断前者,且前者之后会静默关闭扬声器,导致预期外的静音。

音量控制

频率参考表

以下是音乐音符与频率的对应关系。

音符 八度 3 八度 4 八度 5 八度 6
C 131 262 523 1047
C# 139 277 554 1109
D 147 294 587 1175
D# 156 311 622 1245
E 165 330 659 1319
F 175 349 698 1397
F# 185 370 740 1480
G 196 392 784 1568
G# 208 415 831 1661
A 220 440 880 1760
A# 233 466 932 1865
B 247 494 988 1976
C 262 523 1047 2093

实例

1. 简单蜂鸣

beep

发出默认蜂鸣(440 Hz,200 ms)。

2. 指定频率和时长

beep -f 800 -l 500

发出 800 Hz 的蜂鸣,持续 500 毫秒。

3. 重复蜂鸣

beep -f 600 -l 100 -r 3 -d 50

重复 3 次,每次 100 毫秒,间隔 50 毫秒,最后一次后无延迟。

beep -f 600 -l 100 -r 3 -D 50

重复 3 次,每次 100 毫秒,间隔 50 毫秒,且最后一次后也有 50 毫秒延迟。

4. 两个不同音调

beep -f 400 -l 200 -n -f 800 -l 200

先发 400 Hz 音(200 ms),紧接着发 800 Hz 音(200 ms),音调间无额外延迟。

5. 音调间加入延迟(通过前一个音调的 -D)

beep -f 400 -l 200 -D 100 -n -f 800 -l 200

先发 400 Hz 音,然后延迟 100 ms(因为 -D 使该音调最后附加了延迟),再发 800 Hz 音。

6. 每次换行蜂鸣

tail -f /var/log/syslog | beep -s

每当日志有新行写入,就发出当前定义的音调(默认 440 Hz)。

7. 每输入一个字符蜂鸣(打字机效果)

cat /dev/stdin | beep -c

在终端输入字符,每按一个键(包括回车)就会蜂鸣一次,输入内容同时显示。

8. 使用自定义设备

beep -e /dev/input/by-path/platform-pcspkr-event-spkr -f 1000

通过指定 evdev 设备发出 1000 Hz 蜂鸣。

9. 复杂序列:先奏一段音调,然后根据输入重复某个音调,最后收尾

beep -f 523 -l 200 -n -f 659 -l 200 -n -f 784 -l 200 -n -s -f 440 -l 100 -r 3 -n -f 523 -l 400

先播放 C5(523 Hz)、E5(659 Hz)、G5(784 Hz)各 200 ms(音调间无延迟);然后进入输入处理模式,每遇到一个换行符就播放 A4(440 Hz)三次(每次 100 ms,间隔默认 100 ms);输入结束后(Ctrl+D),最后播放一个长的 C5(523 Hz,400 ms)。

相关文档

更详细的信息可以参考man

man beep