信不信由你,你的 PC 扬声器是 Linux 控制台的一部分,因此是一个字符设备。因此,存在 ioctl() 请求来操作它。对于内部扬声器,存在以下 2 个请求
使用内核定时器在指定时间内生成哔声。
示例ioctl (fd, KDMKTONE,(long) argument).
生成无限的哔声或停止当前正在发出的哔声。
示例ioctl(fd,KIOCSOUND,(int) tone).
这个argument由tone低字中的值和高字中的持续时间组成。这个tone值不是频率。PC 主板定时器 8254 的时钟频率为 1.19 MHz,因此它是 1190000/频率。持续时间以定时器滴答声为单位测量。两个 ioctl 调用都会立即返回,因此您可以通过这种方式生成哔声而不会阻塞程序。
KDMKTONE 应该用于警告信号,因为您不必担心停止声音。
KIOCSOUND 可以用于播放旋律,如示例程序 splay 所示(请向我发送更多 .sng 文件)。 要停止哔声,您必须使用tone值 0。