2012-06-05 3 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')) 

내 문제는 : 이것은 내가 작성한 코드의 일부이다. () 끝에 mediObject.totalTime()의 출력을 인쇄 해 보았습니다. 그러나 모든 동영상에 대해 -1이 반환되었습니다. tick() 안의 mediObject.totalTime()이 잘못된 지속 시간 (실제 지속 시간보다 10 - 15 초 더 긴)을 반환합니다.

또한 클래스 외부에서 총 재생 시간 값에 액세스해야 할 수도 있습니다. 어떻게해야합니까? 사전에

감사합니다.

답변

0

당신은 다른 기능과 pause, playstop 작업을 연결할 수 있습니다 : 클래스 __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) 

와 유사한 방식으로 행동의 나머지 부분을 정의 connecttriggered을 보내고 필드 각각 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) 

바시 cally는 경과 된 시간에 영향을주는 동작이 트리거 될 때 일부 프로그램 상태를 저장하는 것입니다.

클래스에 대한 접근을 쓰기 클래스의 외부의 총 시간을 얻으려면 : * 파일의 지속 시간을 얻는 데 도움이되지 않습니다

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

현재 재생중인 *, 그것은 무엇입니까? – Junuxx