尝试以持续时间和频率发出哔声时出现 ioctl 错误

Posted

技术标签:

【中文标题】尝试以持续时间和频率发出哔声时出现 ioctl 错误【英文标题】:ioctl error when trying to beep with a duration and frequency 【发布时间】: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? 【参考方案1】:

我不知道这是否能解决您的问题,但给出的“oflag”参数 到open() 应该是O_WRONLY 或者O_RDWR,但不是字符'w'

【讨论】:

是的,我知道,我已经更改了它,但正如预期的那样,它仍然不起作用。【参考方案2】:

问题出在我的操作系统上,我在VMWare Workstation中执行Debian 6,端口映射没有做好,所以我做不到。

【讨论】:

以上是关于尝试以持续时间和频率发出哔声时出现 ioctl 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在(期间)鼠标单击时发出 Console.Beep?

在 Vaadin 应用程序中发出哔声

尝试在 python 中使用 ioctl 读取驱动器属性时出现溢出错误

如何使用 SDL 制作哔声功能?

Javas Audio Clips 在频繁播放哔声时出现问题

使用多线程获得连续的哔声