如何从一组双重创建声音并在扬声器上播放
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。
【讨论】:
以上是关于如何从一组双重创建声音并在扬声器上播放的主要内容,如果未能解决你的问题,请参考以下文章