我用 C 语言开发了一个依赖混音器插件的应用程序。我的目标是触发事件的声音。由于反应性至关重要,我希望保持 gstreamer 管道处于活动状态,并在 audiomixer 元素上动态插入新声音(在混音器的新接收器上应用偏移后)。
它工作得很好,除了每次我插入一个新声音时,声音的前 200 毫秒(或多或少)都会被截断。
我一直在研究代码,就我所见,一切看起来都很好(声音插件没有错误,运行时间/偏移也没有应用)。
因此,我尝试了一个带有 gst-launch 的简单管道,并在混音器接收器上应用了偏移量:
gst-launch-1.0 filesrc location=/etc/pa/doublclick_aigu_grave.wav ! wavparse ! audiomixer sink_0::offset=1000000000 ! alsasink
事实证明,这条管道也会截断声音的开头。当我使用 --gst-debug=alsa:5 激活日志时,在声音开始之前我得到了一堆日志:
alsa gstalsasink.c:1054:gst_alsasink_write:<alsasink0> written 441 frames out of 441
这里发生了什么 ?