首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++ -蜂鸣音无法正常工作(linux)

c++ -蜂鸣音无法正常工作(linux)
EN

Stack Overflow用户
提问于 2016-11-06 05:29:34
回答 4查看 1.7K关注 0票数 1

我试过了,但我就是做不到。我已经试过了:

代码语言:javascript
运行
复制
#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++发出蜂鸣声,以研究低级声音编程)

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

EN

回答 4

Stack Overflow用户

发布于 2016-11-06 05:35:53

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

代码语言:javascript
运行
复制
#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");
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-11-06 05:56:44

这取决于您使用的终端仿真器。例如,KDE的Konsole在所有AFAICT中都不支持带有蜂鸣器的蜂鸣声。首先,检查echo -e \\a在您的shell中是否正常工作。如果不这样做,您的C++代码也将无法工作。您可以使用xterm -它确实支持这一点。

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

票数 2
EN

Stack Overflow用户

发布于 2016-11-07 12:34:34

你问的是“低级声音生成”,通常,最低级别的声音生成包括构造一个波形,并以适当的格式将其传递给音频设备。当然,它是从你的声卡而不是电脑扬声器里发出的。我能给出的最好的建议是阅读与pulse音频相关的API,alsa,甚至内核声音驱动程序。上一次我使用这个(~1996),它基本上意味着分配一个样本数组,然后计算放入其中的值,该值近似于具有适当频率和振幅的正弦波,然后将该缓冲区写入输出设备。甚至可能有一些调用ioctl来设置设备上的参数(采样率、立体声与单声道、比特率等)。如果您的音频设备支持midi命令,则以某种形式发送这些命令可能会更容易一些,这些格式更接近于“使用此乐器长时间演奏这些音符”。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40443410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档