2015-08-27 2 views
0

Я использую GStreamer для воспроизведения аудио и регулярно требую отметки времени, где я нахожусь в файле.Вопрос GStreamer со временем

Если я отрегулирую скорость воспроизведения, используйте команду поиска, указав новую скорость воспроизведения, или если я использую плагин как «шаг» для настройки компонента «темп». Все тайминги выходят из окна, так как 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 заключалась в том, что плагин основного тона отслеживает компонент темпа, но если я не могу получить точные и согласованные временные метки, проект мертв в воде.

Мой вопрос, есть кто-нибудь а) сталкивалась с этим вопросом и б) освоил его

ответ

0

Ответ, для тех, кто считает себя в подобном затруднительном положении, как представляется, лежит с фундаментальной драке между soundtouch pitch плагином и GStreamer-х скорость игры.

Audacity даже делает это в своем руководстве пользователя.

Единственный способ, которым я в конечном итоге нашел способ обойти проблему, состоял в том, чтобы полностью отключить плагин pitch от трубопровода, так как его просто было достаточно, чтобы все испортить.
Вместо этого я использовал плагин ladspa-am-pitchshift-1433-so-ampitchshift, чтобы отрегулировать высоту звука и левый GStreamer, чтобы изменить скорость, используя обычные команды seek, изменяя скорость, чтобы дать более медленные и быстрые темпы игры.
Таким образом, метки времени остаются неизменными, но шаг необходимо отрегулировать вручную. Хотя он может быть полуавтоматизирован, выбирая из списка предопределенных значений основного тона для заданных темпов игры.
Я надеюсь, что это спасет кого-то еще 2 дня царапин на голове.

Дополнительное примечание:
Даже если GStreamer работает в наносекунд и можно было бы подумать, что не используется флаг Gst.SeekFlags.ACCURATE, при выполнении поиска, было бы не сделать такой большой разницы, один будет очень много ошибочно.
Я заметил, что не используя флаг ACCURATE может иметь значение до 10 секунд, когда GStreamer попросят сообщить о его текущей позиции, если поиск не использовал флаг ACCURATE.
Таким образом, предупрежденный вооружен. (обратите внимание, что использование этого флага приведет к увеличению времени поиска, но по крайней мере, если дает согласованные результаты)

Смежные вопросы