C++ 如何从一组双声道扬声器中产生声音并在扬声器上播放

C++ 如何从一组双声道扬声器中产生声音并在扬声器上播放,c++,c,linux,audio,C++,C,Linux,Audio,我有一个双数组(大小超过60k个条目),我有频率值。现在我想用C/C++创建一个声音,我可以在扬声器上播放。我的操作系统是linux 谢谢。我希望我足够清楚。 这是Linux杂志上一篇关于使用ALSA(AdvanceLinux声音体系结构)编程的文章的链接。它包含一些示例代码。对于您想要做的事情,Qt库可能有些过火,可能有一个更简单的选项,但它是一个选项:) 您应该能够使用该类执行您想要的操作。另外两个api是SDL和SFML。以下信息来自Debian中提供的名为beep的命令行程序。源代码可以

我有一个双数组(大小超过60k个条目),我有频率值。现在我想用C/C++创建一个声音,我可以在扬声器上播放。我的操作系统是linux

谢谢。我希望我足够清楚。


这是Linux杂志上一篇关于使用ALSA(AdvanceLinux声音体系结构)编程的文章的链接。它包含一些示例代码。

对于您想要做的事情,Qt库可能有些过火,可能有一个更简单的选项,但它是一个选项:)


您应该能够使用该类执行您想要的操作。

另外两个api是SDL和SFML。

以下信息来自Debian中提供的名为
beep
的命令行程序。源代码可以通过存储库获得,也可以使用

有一个
ioctl()
调用,向控制台设备发出KIOCSOUND请求,您可以使用它通过PC扬声器播放声音。该片段是:

ioctl(fd, KIOCSOUND, CLOCK_TICK_RATE/(int)frequency);
要播放频率为
的声音,请执行以下操作:

ioctl(fd, KIOCSOUND, 0);

停止嘟嘟声
fd
是对
/dev/console
具有写入权限的文件描述符,
frequency
是以赫兹为单位的声音频率。恒定的时钟滴答频率与用于产生蜂鸣音的计时器芯片有关,在
beep
中,源代码的值为1193180(赫兹)。虽然这可能与您的系统不同,但如果我的想法是正确的,我确实记得在使用PC扬声器的旧DOS程序上看到过相同的常数。

我假设
值只是振幅,而不是一些压缩(类似MP3)表示?