我使用 GStreamer 播放音频,并且经常需要我在文件中的位置的时间戳。
如果我调整播放速率,无论是使用指定新播放速率的 seek 命令,还是使用诸如“pitch”之类的插件来调整“tempo”组件。当 GStreamer 调整音频的长度及其当前位置以考虑其播放速度时,所有时间都会超出窗口。例如,原来的 18 秒现在是 14 秒。
我还尝试停止音频并重新开始传递新设置,并以 1.00 的速率发出搜索,而且节奏速率也没有奏效。我暂时没有想法,因此向SO提出了这个请求。
示例代码
#Slow down rate of file play
def OnSlow(self, evt):
media_state = self.media_get_state()
self.rate = Gpitch.get_property("tempo")
if self.rate > 0.2:
self.rate = self.rate - 0.10
Gpitch.set_property("tempo", self.rate)
r = "%.2f" % (self.rate)
self.ma3.SetLabel("Speed: "+r)
if media_state == Gst.State.PLAYING or media_state == Gst.State.PAUSED:
self.timer.Stop() #momentarily stop updating the screen
seek_event = Gst.Event.new_seek(self.rate, Gst.Format.TIME,
(Gst.SeekFlags.FLUSH),#NONE),
Gst.SeekType.NONE, 0, Gst.SeekType.NONE, -1)
Gplayer.send_event(seek_event)
time.sleep(0.1)
self.timer.Start() #Restart updating the screen
我尝试将持续时间和当前位置乘以调整,试图将时间戳拉回或推回其位置,就好像它以正常速度播放但无济于事。
我一直在努力解决这个问题,真正让我大吃一惊的是,如果我使用 Vlc 作为我的音频引擎执行相同的任务,它可以工作,但我必须单独改变音高。转移到 GStreamer 的全部原因是音高插件跟踪“节奏”组件,但如果我无法获得准确和一致的时间戳,该项目就死定了。
我的问题,有没有人 a) 遇到这个问题 b) 掌握了它