我正在为我的儿子写一个应用程序(我是一个gui第一个计时器),他有自闭症。上半部分有一个视频播放器,底部有一个文本输入区域。当输入字母时,会产生声音来模仿视频中的单词。
本网站上有关于在按键上播放声音的其他帖子,使用gstreamer作为系统调用。我也尝试过libcanberra,但两者似乎都有明显的声音延迟。我可以用python或C编写应用程序,但很可能在C中至少完成一些。
我还想提一下,gstreamer正在播放视频部分。我试图创建两个gstreamer实例,以避免昂贵的系统调用,但音频实例似乎在调用时会杀死应用程序。
如果有人有关于创建更快响应声音的任何提示,我会非常感激。
答案 0 :(得分:4)
您可以将原始音频样本直接上传到PulseAudio,因此使用堪培拉的以下功能将无法解码和(可能保存)额外的开关:
http://developer.gnome.org/libcanberra/unstable/libcanberra-canberra.html#ca-context-cache
下一个ca_context_play()将使用它。
但是,您在这种情况下遇到的最大问题(同步视频播放)是音频设备可能配置了PulseAudio的大延迟(正常播放时最多为1 / 2s或更多)。向libcanberra提交错误以支持LOW_LATENCY标志可能是合理的,因为它目前不会尝试最小化声音事件的延迟。那会很棒。
GStreamer pulseink也可能获得低延迟(它具有一些属性),但我担心它不会像libcanberra一样轻量级,并且你将无法缓存样本。理想情况下,GStreamer还可以学习缓存样本,或预先填充PulseAudio ......