2012-02-23 105 views
3

我想为我的儿子编写一个应用程序(我是gui第一次计时器),他患有自闭症。上半部分有一个视频播放器,底部有一个文本输入区域。当输入字母时,会产生声音以模仿视频中的单词。按键上的低延迟声音

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

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

如果任何人有创造更快响应的声音,我真的很感激任何提示。

+0

快速回应回答您的另一个已关闭的问题:终端发送和接收字符。 通常情况下,终端只显示他们收到的字符。当终端打印到纸卷时,这是他们所能做的。没有显示称为控制字符的特殊字符:相反,它们导致终端打印机托架返回到行首,或者送入一些纸张或退回。 显示终端定义特殊的字符序列,称为'转义序列',因为它们通常以'Esc'字符开头。 – antlersoft 2013-06-12 17:01:33

+0

当他们收到转义序列时,终端将其解释为其他功能的命令,例如将光标移动到屏幕上的特定位置,或者将屏幕部分中显示的文本更改为反转视频。 每个终端品牌都会定义自己的一组转义序列。 – antlersoft 2013-06-12 17:02:11

回答

4

您可以上传原始音频采样直接的PulseAudio所以不会有解码(也许保存)额外的交换机通过使用下面的函数从堪培拉:

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

下ca_context_play()将用它。

但是,此场景(同时播放视频)遇到的最大问题是音频设备可能配置了PulseAudio的较大延迟(正常播放时最多为1/2秒或更多)。向libcanberra提交缺陷以支持LOW_LATENCY标志是合理的,因为它目前不会尽量减少声音事件延迟。那太棒了。

GStreamer pulsesink也可能会得到低延迟(它有一些属性),但恐怕它不会像libcanberra那样轻巧,并且您将无法缓存示例。理想情况下,GStreamer也可以学习缓存样本,或预先填写PulseAudio ...

+0

谢谢!我给它一个尝试:) – Patrick 2012-02-24 03:59:12

+1

我只想提及一些事情,以防其他人在此线程后发生绊倒。首先,你可以有两个gstreamer实例,在我的代码中有一个巨大的错误。其次,我能够通过将它们全部记录在一个录音中,然后为它们来回寻找并设置gstreamer在每个声音之后暂停而产生低延迟声音。再次感谢elmarco发布。 – Patrick 2012-02-25 16:56:02