如何从一组双重创建声音并在扬声器上播放

Posted

技术标签:

【中文标题】如何从一组双重创建声音并在扬声器上播放【英文标题】:How to create sound from an array of double and play it on speaker 【发布时间】:2010-10-14 21:33:09 【问题描述】:

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

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

【问题讨论】:

我假设 double 值只是幅度,而不是一些压缩(类似 MP3)的表示? 【参考方案1】:

http://www.linuxjournal.com/article/6735

这是 Linux Journal 中一篇关于使用 ALSA(Advance Linux Sound Architecture)编程的文章的链接。它包含一些示例代码。

【讨论】:

【参考方案2】:

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

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

ioctl(fd, KIOCSOUND, CLOCK_TICK_RATE/(int)frequency);

播放频率为frequency的声音,并且:

ioctl(fd, KIOCSOUND, 0);

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

【讨论】:

【参考方案3】:

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

您应该能够使用QAudioOutput 类来做您想做的事。

【讨论】:

【参考方案4】:

另外两个要查看的 api 是 SDL 和 SFML。

【讨论】:

以上是关于如何从一组双重创建声音并在扬声器上播放的主要内容,如果未能解决你的问题,请参考以下文章

在某些扬声器上播放声音-c ++ [关闭]

如何在通话期间以编程方式在 iPhone 的两个扬声器上播放声音

如何在 vb.Net 中通过外部扬声器播放声音?

如何在 iPhone 扬声器上强制播放音频?

如何在 C++ 中只用一个扬声器播放声音?

ubuntu中的多个扬声器多个声音[关闭]