哔哔声不工作(linux)



我试着按,但我就是不能。我已经试过了:

#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
    cout << 'a' << flush;
    return 0;
}

我也试过使用这个:http://www.johnath.com/beep/但就是不响。

(如果我在终端上运行$ speaker-test -t sine -f 500 -l 2 2>&1,它会发出哔哔声,但我想用c++发出哔哔声来学习低级声音编程)

我希望能够控制频率和持续时间

除非您从控制台登录,否则cout不会引用系统控制台。您需要打开/dev/console并将a送到那里。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
    int s = open ("/dev/console", O_WRONLY);
    if (s < 0)
        perror ("unable to open console");
    else
    {
        if (write (s, "a", 1) != 1)
            perror ("unable to beep");
    }
}

这取决于您使用的终端模拟器。例如,KDE的控制台根本不支持蜂鸣器发出蜂鸣声。首先检查echo -e \a在您的shell中是否有效。如果没有,您的c++代码也将无法工作。你可以使用xterm -它支持这个

但即使在xterm中,如果你没有pcspkr(或snd_pcsp)内核模块加载,它也可能无法工作。这通常是发行版默认将其列入黑名单的情况。在这种情况下,您的押注是寻找一个终端使用您的声卡发出蜂鸣声,而不是PC扬声器AKA蜂鸣器。

你问的是"低水平的声音产生",通常情况下,最低水平的声音产生将涉及构建一个波形,并将其以适当的格式传递给音频设备。当然,它是从你的声卡而不是PC扬声器发出的。我能给出的最好建议是仔细阅读与脉冲音频、sa甚至内核声音驱动程序相关的api。上次我玩这个(~1996),它基本上意味着分配一个样本数组,然后计算值,把近似的正弦波与适当的频率和幅度,然后写入缓冲区到输出设备。甚至可能有一些调用ioctl来设置设备上的参数(采样率,立体声vs单声道,比特率等)。如果你的音频设备支持midi命令,它可能更容易发送那些在某种形式,更接近于"播放这些音符这么长时间使用这个乐器"。

你可能会发现这些文章很有帮助:

  • https://jan.newmarch.name/LinuxSound/
  • http://www.linuxjournal.com/article/6735

您在应用程序中尝试过系统调用吗?

system("echo -e 'a'");

最新更新