2012-06-05 74 views
1

我正在嘗試在PyQt4中編寫一個小型音頻播放器。這是代碼的一部分,我已經寫了:如何獲得在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秒)。

此外,我可能需要從課堂外訪問總持續時間的值。我怎樣才能做到這一點?

在此先感謝。

回答

0

你可以連接pauseplay,並stop行動與其它功能:

班上 __init__

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

,並以類似的方式定義動作的其餘部分,connect荷蘭國際集團的triggered每個QAction的字段爲函數

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) 

Basi cally,它是關於當影響時間流逝的操作被觸發時保存一些程序狀態。

要獲得的總時間在課堂之外,寫的訪問器類:

def get_total_time(self): 
    return self.total_time 
+0

這並不在獲得該文件的時間幫助*當前正在播放*,不是嗎? – Junuxx

相關問題