按键时的低延迟声音

Posted

技术标签:

【中文标题】按键时的低延迟声音【英文标题】:low latency sounds on key presses 【发布时间】:2012-02-23 13:07:43 【问题描述】:

我正在尝试为我的儿子编写一个应用程序(我是一名 gui 初学者),他患有自闭症。上半部分有一个视频播放器,下半部分有一个文本输入区域。输入字母时会发出声音来模仿视频中的单词。

本网站上还有其他关于在按键上播放声音的帖子,使用 gstreamer 作为系统调用。我也尝试过 libcanberra,但两者似乎在声音之间都有明显的延迟。我可以用 python 或 C 编写应用程序,但可能至少会用 C 编写其中的一部分。

我还想提一下视频部分正在由 gstreamer 播放。我尝试创建两个 gstreamer 实例,以避免昂贵的系统调用,但音频实例在调用时似乎会杀死应用程序。

如果有人对创建更快响应的声音有任何提示,我将不胜感激。

【问题讨论】:

快速评论以回答您已关闭的另一个问题:终端发送和接收字符。通常,终端只显示它们接收到的字符。当终端打印到纸卷上时,这就是他们所能做的。不显示称为控制字符的特殊字符:相反,它们导致终端打印机回车返回到行首,或者送纸,或者退格。显示终端定义了特殊的字符序列,称为“转义序列”,因为它们通常以“Esc”字符开头。 当他们收到转义序列时,终端会将其解释为其他功能的命令,例如将光标移动到屏幕上的特定位置,或更改屏幕部分中显示的文本反向视频。每个终端品牌都会定义自己的一组转义序列。 【参考方案1】:

您可以将原始音频样本直接上传到 PulseAudio,这样就不会使用堪培拉的以下功能进行解码和(可能保存)额外的切换:

http://developer.gnome.org/libcanberra/unstable/libcanberra-canberra.html#ca-context-cache

下一个 ca_context_play() 会用到它。

但是,在这种情况下(同时播放视频)您会遇到的最大问题是音频设备可能配置有 PulseAudio 的较大延迟(正常播放时延迟高达 1/2 秒或更多)。向 libcanberra 提交错误以支持 LOW_LATENCY 标志可能是合理的,因为它目前并未尝试将声音事件的延迟最小化 afaik。要是能拥有那就太好了。

GStreamer pulsesink 也可能获得低延迟(它具有一些特性),但我担心它不会像 libcanberra 那样轻量级,并且您将无法缓存示例。理想情况下,GStreamer 还可以学习缓存样本,或预填充 PulseAudio...

【讨论】:

我只想提一些事情,以防其他人稍后偶然发现这个线程。首先,你可以有两个 gstreamer 实例,我的代码中有一个大错误。其次,我能够通过将它们全部记录在一个录音中来产生低延迟的声音,然后来回寻找它们并将 gstreamer 设置为在每个声音之后暂停。再次感谢 elmarco 发帖。

以上是关于按键时的低延迟声音的主要内容,如果未能解决你的问题,请参考以下文章

XNA 声音开始或停止播放时的小噪音

捕获 KeyCode 时的键盘错误声音

适用于 Android 的低延迟音频 API?

按键时播放声音

iPhone:如何为自定义键盘制作按键声音?

无延迟播放声音 iOS