如何在linux中使用PC扬声器?

1.6*_*618 12 c++ linux audio

如何在linux中使用PC扬声器进行c/c ++编程?我能控制嘟嘟声时间和频率吗?

lio*_*rda 9

取自这里:

#include <sys/ioctl.h>
#include <unistd.h>
#include <linux/kd.h>
int main(void)
{
    int freq[] = { /* C   D    E    F    G    A    B    C */
                    523, 587, 659, 698, 784, 880, 988, 1046 };
    int i;

    for (i=0; i<8; i++)
    {
            ioctl(STDOUT_FILENO, KIOCSOUND, 1193180/freq[i]);
            usleep(500000);
    }
    ioctl(STDOUT_FILENO, KIOCSOUND, 0); /*Stop silly sound*/
    return 0;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*rkR 5

是的,打开控制台设备(例如 /dev/console 或 /dev/tty0),然后向其发出 KIOCSOUND ioctl,如 console_ioctl(4) 手册页中所述。

它很恶心并且是 Linux 特有的,但我认为它回答了你的问题。


编辑:令人难以置信的是,ALSA 内核中有一个 PC 扬声器驱动程序,它可以让您在 PC 扬声器中播放数字声音。它的音质会很差,而且会占用大量 CPU :)


Chr*_*ton 2

据推测,如果芯片组中仍然有一个与类似扬声器连接的 8253 等效器件,您可以根据数据表寄存器或古老的 PC 指南访问它(我很欣慰地承认我脑子里不再有这些信息)内核模块或以 root 身份调用 ioperm() 之后。

曾几何时,还有一个用于 PC 扬声器的内核 PWM“模拟”音频驱动程序。我相信那是我第一次编译内核。那是在内核模块出现之前,或者至少在它们进入流行发行版之前。