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