【发布时间】:2014-01-12 12:10:44
【问题描述】:
我正在尝试发出具有频率和持续时间的哔声,我正在使用 ioctl 和带有控制台路径的文件(我认为这是正确的,顺便说一下,我使用的是 debian 6)但是我不知道为什么它不起作用。代码到达 ioctl 行,但没有发出哔哔声。我在虚拟机中工作。驱动程序应该不是问题,因为我已经安装了自己的驱动程序来控制键盘 LED 并且没有问题。
(我已经按照这个例子:http://linuxplayer.org/2010/04/beep-your-pc-speaker-in-linux)
#include <sys/ioctl.h>
#include <linux/kd.h>
int bip;
#define consolepath "/dev/console"
//#define consolepath "/dev/tty0"
void beep (int freq, int dur){
int aux;
if ( (bip = open(consolepath, 'w')) == -1 ) {
printf ("console unreachable/dev/console!\n" );
}else{
//fprintf(bip, "%c[10;%d]%c[11;%d]\a", ESC, freq, ESC, dur); //Another different try
ioctl(bip, KDMKTONE, (dur<<16 | 1193180/freq));
close(bip);
}
}
【问题讨论】:
-
检查失败的 ioctl 调用中的
errno值。 -
ioctl 调用,返回 0,所以看起来它会做得很好
-
打开扬声器并将音量调到零以上:)
-
我的扬声器已打开,但谢谢 :) 是否有其他途径可以让我发出具有频率和持续时间的声音?
-
频率是否在可听范围内? 10 到 10-20kHx?