【问题标题】:How to get the total duration of media being played in PyQt4?如何获取在 PyQt4 中播放的媒体的总时长?
【发布时间】:2012-06-05 10:51:38
【问题描述】:

我正在尝试用 PyQt4 编写一个小型音频播放器。这是我编写的代码的一部分:

class Player(QMainWindow):

    def __init__(self, fileLoc, parent = None):
        super(QMainWindow, self).__init__()
        self.totTime = 0
        self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory, self)
        self.mediaObject = Phonon.MediaObject(self)

        self.mediaObject.setTickInterval(1000)

        self.mediaObject.tick.connect(self.tick)
        self.mediaObject.stateChanged.connect(self.stateChanged)

        Phonon.createPath(self.mediaObject, self.audioOutput)

        #Define Play, Pause and Stop actions
        self.playAction = QAction(self.style().standardIcon(QStyle.SP_MediaPlay),
                            "Play", self, enabled = False, triggered = self.mediaObject.play)

        self.pauseAction = QAction(self.style().standardIcon(QStyle.SP_MediaPause),
                            "Pause", self, enabled = False, triggered = self.mediaObject.pause)

        self.stopAction = QAction(self.style().standardIcon(QStyle.SP_MediaStop),
                            "Stop", self, enabled = False, triggered = self.mediaObject.stop)

        #Initiate User Interface
        self.userInterface()
        self.timeDisp.display('00:00')

        self.mediaObject.setCurrentSource(Phonon.MediaSource(fileLoc))
        self.mediaObject.play()

    def tick(self, time):
        self.displayTime = QTime(0, (time / 60000) % 60, (time / 1000) % 60)
        self.timeDisp.display(self.displayTime.toString('mm:ss'))

我的问题是,我无法弄清楚如何获取当前正在播放的文件的总时长。我尝试在 init() 的末尾打印 mediObject.totalTime() 的输出。但它为所有视频返回 -1。 tick() 内的 mediObject.totalTime() 返回不正确的持续时间(比实际持续时间长 10 - 15 秒)。

另外,我可能必须从课堂外访问总持续时间的值。我该怎么做?

提前致谢。

【问题讨论】:

    标签: python pyqt pyqt4 phonon audio-player


    【解决方案1】:

    您可以将pauseplaystop 操作与其他功能连接:

    在班级__init__

    self.total_time = 0
    self.playing = 假
    self.play_action = QAction(self.style().standardIcon((QStyle.SP_MediaPlay),"play",self)
    self.play_action.triggered.connect(self.play_triggered_event)
    

    并以类似的方式定义其余操作,connect将每个QActiontriggered 字段添加到一个函数

    def play_triggered_event(self):
        if not self.playing:
            self.mediaObject.play
            self.playing = True
            self.start_time = time.clock()
    
    def pause_triggered_event(self):
        if self.playing:
            self.mediaObject.pause
            self.playing = False
            self.total_time += (time.clock() - self.start_time)
    
    def stop_triggered_event(self):
        if self.playing:
           self.mediaObject.stop
           self.playing = False
           print "Total time elapsed: " + str(self.total_time)
    

    基本上,它是在触发影响已用时间的操作时保存一些程序状态。

    要获取类外的总时间,请为该类编写一个访问器:

    def get_total_time(self):
        return self.total_time
    

    【讨论】:

    • 这对获取当前正在播放的文件的持续时间没有帮助,是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多