c ++ - beep not working(linux)

时间:2016-11-05 21:29:34

标签: c++ linux beep

我试图发出嘟嘟声,但我根本无法做到。我已经尝试过了:

#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 ++发出嘟嘟声来研究低级声音编程)

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

4 个答案:

答案 0 :(得分:2)

除非您从控制台登录,否则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");
    }
}

答案 1 :(得分:2)

这取决于你使用的终端模拟器。例如,KDE的Konsole不支持在所有AFAICT使用蜂鸣器发出哔哔声。首先检查echo -e \\a是否适用于您的shell。如果没有,您的C ++代码也不会起作用。您可以使用xterm - 它支持此功能。

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

答案 2 :(得分:0)

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

system(“echo -e'\ a'”);

答案 3 :(得分:0)

您正在询问&#34;低级声音生成&#34;通常,最低级别的声音生成将涉及构建波形并以适当的格式将其传递给音频设备。当然,它来自你的声卡而不是PC扬声器。我能给出的最好建议是阅读与脉冲音频,alsa甚至内核声音驱动程序相关的API。上次我玩这个(~1996)时,它基本上意味着分配一个样本数组,然后计算值,以便用适当的频率和幅度近似正弦波,然后将该缓冲区写入输出设备。甚至可能有一些调用ioctl来设置设备上的参数(采样率,立体声与单声道,比特率等)。如果您的音频设备支持midi命令,则可能更容易以某种形式发送更接近&#34;使用此乐器播放这些音符的那些&#34;。

您可能会发现这些文章很有用: