如何在不切断之前播放的情况下在gstreamer中执行retrigger/restart样本

How to perform retrigger/restart sample in gstreamer without cutting the previous playback

所以我正在尝试用 gstreamer 制作鼓机。不熟悉鼓机的可以看看:

https://www.youtube.com/watch?v=KC7UaUD5rEA

基本上你有一个特定的样本加载到轨道。每个轨道有 16 个步骤,您可以启用或禁用这些步骤。当您按下播放键时,鼓机将循环播放步进,当启用一个步进时,它将播放该声音。

我在当前设置下使用它: 8 x (filesrc | wavparse | audioconvert | volume) |混音器 |阿尔萨斯克

我将管道置于播放状态,并且我执行每个步骤 seek_simple 回到管道的起点。为了触发声音,我根据想要的 rhythm/pattern.

每一步对 wav 进行静音和静音处理

问题: 通过执行搜索回到开头,wav sample/sound 的尾部被切断,这会产生断断续续的声音。理想情况下,我想 re-trigger 一个 wav 样本,但前一个应该继续播放直到完成。

问题: 如何在不切断声音尾巴的情况下重新触发声音?

Ps:我试过使用搜索标志“flush”、“keep_unit”……但没有成功。

我的循环:

    def run(self):
        startTime = time.time()
        while True:
            if self.running:
                self.player.set_state(Gst.State.NULL)
                self.player.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH, 0)
                for track in self.tracks:
                    track.step()
                self.player.set_state(Gst.State.PLAYING)

            time.sleep(self.delayBmp -
                       ((time.time() - startTime) % self.delayBmp))

提前致谢

我设法通过使用这个 C 库实现了我的目标: https://soundprogramming.net/programming/tutorial-using-sdl2-and-sdl_mixer-to-play-samples/

这个例子提供了一种同时播放多个声音的方法。 然后我在它周围制作了一个 python 包装器并将一个 wav 文件推送到它。 按照本教程进行操作:

https://docs.python.org/3/extending/index.html

欢迎使用 post gstreamer 解决方案。

感谢