Skip to content

Commit a0a6cdb

Browse files
authored
Add: Documentation for using the beep command (#682)
Refer to the beep --help and the beep documentation in the man pages for writing.
1 parent 2f61d86 commit a0a6cdb

File tree

1 file changed

+188
-0
lines changed

1 file changed

+188
-0
lines changed

command/beep.md

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
beep
2+
===
3+
4+
用于控制 PC 扬声器发出蜂鸣声的命令行工具。
5+
6+
## 介绍
7+
8+
`beep` 是一个用于精确控制 PC 扬声器发出蜂鸣声的命令行工具。它可以生成不同频率、时长、重复次数和延迟的蜂鸣音,支持将多个音调组合成序列,或根据标准输入(stdin)的换行符/字符触发蜂鸣。该工具常用于 shell 或 Perl 脚本中,在特定事件发生时向用户发出音频提示。
9+
10+
**注意**`beep` 需要 PC 扬声器硬件支持,通常需要加载 `pcspkr` 内核模块,并且对输出设备具有写入权限。
11+
12+
## 安装
13+
Debian/Ubuntu:
14+
```bash
15+
sudo apt install beep
16+
```
17+
18+
RedHel/Centos/Fedora:
19+
```bash
20+
sudo yum install beep
21+
```
22+
23+
## 语法
24+
```bash
25+
beep [全局选项] [音调选项] [-n|--new 音调选项...]...
26+
beep [-h|--help]
27+
beep [-v|-V|--version]
28+
```
29+
30+
## 选项说明
31+
32+
### 信息选项
33+
| 选项 | 描述 |
34+
|----------------|-----------------------------------|
35+
| `-h, --help` | 显示帮助信息并退出。 |
36+
| `-v, -V, --version` | 显示版本信息并退出。 |
37+
38+
### 全局选项
39+
| 选项 | 描述 |
40+
|---------------------------|-------------------------------------------------------------|
41+
| `-e, --device=DEVICE` | 显式指定用于输出蜂鸣的设备。若不指定,`beep` 会依次尝试内部设备列表直到成功。 |
42+
| `--debug, --verbose` | 启用详细输出,显示调试信息。 |
43+
44+
### 音调选项
45+
每个音调可以由以下选项组合定义。若未指定,使用默认值。
46+
47+
| 选项 | 描述 |
48+
|--------------------|---------------------------------------------------------------------|
49+
| `-f FREQ` | 设置蜂鸣频率(单位:Hz)。必须满足 0 < FREQ < 20000。可接受浮点数,但内核 API 会取整为整数。默认值:440 Hz。 |
50+
| `-l LEN` | 设置蜂鸣时长(单位:ms)。默认值:200 ms。 |
51+
| `-r REPEATS` | 设置当前音调的重复次数(包括延迟)。默认值:1(仅一次,无重复)。 |
52+
| `-d DELAY` | 设置重复之间的延迟(单位:ms),****在最后一次重复后添加延迟。默认值:100 ms。 |
53+
| `-D DELAY` | 设置重复之间的延迟(单位:ms),****在最后一次重复后也添加该延迟。默认无延迟。 |
54+
| `-n, --new` | 开始定义一个新的音调。每个 `-n` 之后可以跟一组新的音调选项,新音调继承所有默认值,直到被显式选项覆盖。 |
55+
| `-s` |`beep` 置于输入处理模式:从标准输入读取数据,每遇到一个**换行符**就发出当前定义的音调一次,同时将输入数据原样复制到标准输出。 |
56+
| `-c` |`-s` 类似,但每遇到一个**字符**就触发一次蜂鸣。 |
57+
58+
**注意**
59+
- `-d``-D` 的区别:`-r 3 -d 100` 产生:蜂鸣、延迟、蜂鸣、延迟、蜂鸣(结束);`-r 3 -D 100` 产生:蜂鸣、延迟、蜂鸣、延迟、蜂鸣、延迟(结束)。
60+
- 在一个由 `-n` 连接的多个音调序列中,**只能有一个音调**带有 `-s``-c``beep` 会先播放该音调之前的所有音调,然后进入输入处理模式,根据输入重复该音调,直到输入结束(EOF),最后再播放剩余的音调(如果有)。
61+
- 如果某个选项在命令行中重复出现,后面的选项会覆盖前面的。
62+
63+
64+
## 环境变量
65+
| 变量名 | 描述 |
66+
|------------------|---------------------------------------------------------------------|
67+
| `BEEP_LOG_LEVEL` | 设置日志级别(取值范围 -999 到 999)。若未在命令行使用 `--debug`,则以此值为默认日志级别。 |
68+
69+
70+
## 文件
71+
`beep` 默认依次尝试打开以下设备,直到成功为止:
72+
- `/dev/input/by-path/platform-pcspkr-event-spkr`(使用 evdev API)
73+
- `/dev/tty0`(使用 console API)
74+
- `/dev/vc/0`(使用 console API)
75+
76+
77+
## 退出状态
78+
| 状态码 | 含义 |
79+
|--------|--------------------------|
80+
| 0 | 成功执行 |
81+
| 非0 | 发生错误(如设备无法打开、无效参数等) |
82+
83+
84+
## 注意事项
85+
86+
### 设备和权限
87+
- **非 root 用户**:默认情况下,`/dev/tty0``/dev/vc/0` 需要 root 权限或拥有当前 TTY。推荐使用 evdev 设备 `/dev/input/by-path/platform-pcspkr-event-spkr`,可以通过 udev 规则为该设备设置适当的权限,使普通用户也能使用 `beep`
88+
- `beep` **不支持**以 setuid root 或通过 `sudo` 运行。请通过文件权限或 udev 规则授权。
89+
- 如果命令不能正常执行,请检查 `pcspkr` 模块是否加载。
90+
91+
### API 说明
92+
- **evdev**:使用输入事件设备驱动,通过 `write()` 操作。打开设备耗时约 20ms,因此若要演奏旋律,建议在单个 `beep` 命令中使用多个音调(通过 `-n`),而不是多次调用 `beep`
93+
- **console**:使用古老的 `KIOCSOUND ioctl` 接口,仅当用户登录到虚拟控制台(如 `/dev/tty4`)且拥有该终端时才可无 root 使用。对通过 SSH 或图形界面登录的用户不适用。
94+
95+
### 并发调用
96+
`beep` 不支持并发运行。PC 扬声器硬件只有一个发声器,多个 `beep` 进程会相互干扰。例如,一个长蜂鸣进程正在运行时,另一个短蜂鸣进程会中断前者,且前者之后会静默关闭扬声器,导致预期外的静音。
97+
98+
### 音量控制
99+
- 独立 PC 通常使用压电蜂鸣器,其音量与频率相关,接近共振频率(约 2000 Hz)时最响。可尝试 2050 Hz 左右获得最大音量。
100+
- 笔记本电脑可能将 PC 扬声器输出路由到内置扬声器,此时可通过声卡混音器调节“Beeper”或“PC Speaker”通道的音量。
101+
102+
### 频率参考表
103+
以下是音乐音符与频率的对应关系。
104+
105+
| 音符 | 八度 3 | 八度 4 | 八度 5 | 八度 6 |
106+
|------|--------|--------|--------|--------|
107+
| C | 131 | 262 | 523 | 1047 |
108+
| C# | 139 | 277 | 554 | 1109 |
109+
| D | 147 | 294 | 587 | 1175 |
110+
| D# | 156 | 311 | 622 | 1245 |
111+
| E | 165 | 330 | 659 | 1319 |
112+
| F | 175 | 349 | 698 | 1397 |
113+
| F# | 185 | 370 | 740 | 1480 |
114+
| G | 196 | 392 | 784 | 1568 |
115+
| G# | 208 | 415 | 831 | 1661 |
116+
| A | 220 | 440 | 880 | 1760 |
117+
| A# | 233 | 466 | 932 | 1865 |
118+
| B | 247 | 494 | 988 | 1976 |
119+
| C | 262 | 523 | 1047 | 2093 |
120+
121+
122+
## 实例
123+
124+
### 1. 简单蜂鸣
125+
```bash
126+
beep
127+
```
128+
发出默认蜂鸣(440 Hz,200 ms)。
129+
130+
### 2. 指定频率和时长
131+
```bash
132+
beep -f 800 -l 500
133+
```
134+
发出 800 Hz 的蜂鸣,持续 500 毫秒。
135+
136+
### 3. 重复蜂鸣
137+
```bash
138+
beep -f 600 -l 100 -r 3 -d 50
139+
```
140+
重复 3 次,每次 100 毫秒,间隔 50 毫秒,最后一次后无延迟。
141+
142+
```bash
143+
beep -f 600 -l 100 -r 3 -D 50
144+
```
145+
重复 3 次,每次 100 毫秒,间隔 50 毫秒,且最后一次后也有 50 毫秒延迟。
146+
147+
### 4. 两个不同音调
148+
```bash
149+
beep -f 400 -l 200 -n -f 800 -l 200
150+
```
151+
先发 400 Hz 音(200 ms),紧接着发 800 Hz 音(200 ms),音调间无额外延迟。
152+
153+
### 5. 音调间加入延迟(通过前一个音调的 -D)
154+
```bash
155+
beep -f 400 -l 200 -D 100 -n -f 800 -l 200
156+
```
157+
先发 400 Hz 音,然后延迟 100 ms(因为 -D 使该音调最后附加了延迟),再发 800 Hz 音。
158+
159+
### 6. 每次换行蜂鸣
160+
```bash
161+
tail -f /var/log/syslog | beep -s
162+
```
163+
每当日志有新行写入,就发出当前定义的音调(默认 440 Hz)。
164+
165+
### 7. 每输入一个字符蜂鸣(打字机效果)
166+
```bash
167+
cat /dev/stdin | beep -c
168+
```
169+
在终端输入字符,每按一个键(包括回车)就会蜂鸣一次,输入内容同时显示。
170+
171+
### 8. 使用自定义设备
172+
```bash
173+
beep -e /dev/input/by-path/platform-pcspkr-event-spkr -f 1000
174+
```
175+
通过指定 evdev 设备发出 1000 Hz 蜂鸣。
176+
177+
### 9. 复杂序列:先奏一段音调,然后根据输入重复某个音调,最后收尾
178+
```bash
179+
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
180+
```
181+
先播放 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)。
182+
183+
184+
## 相关文档
185+
更详细的信息可以参考`man`
186+
```bash
187+
man beep
188+
```

0 commit comments

Comments
 (0)