file:
Widget/audio.py
from PyQt4 import QtCore, QtGuifrom PyQt4.phonon import Phononfrom globals import ospathbasename
class Audio(QtGui.QDialog): def __init__(self,parent,nfile): QtGui.QDialog.__init__(self,parent) self.resize(300, 250) 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)
self.setupActions() self.setupUi() self.timeLcd.display("00:00") self.finished.connect(self.stop) if nfile == "": return self.title.setText("<b><big>"+ospathbasename(nfile)+"</big></b>") self.mediaObject.enqueue(Phonon.MediaSource(nfile)) self.mediaObject.play()
def stop(self): #print "stopping" #self.mediaObject.stop() #self.mediaObject.clearQueue() self.mediaObject.deleteLater()
def stateChanged(self, newState, oldState): if newState == Phonon.ErrorState: if self.mediaObject.errorType() == Phonon.FatalError: QtGui.QMessageBox.warning(self, "Fatal Error", self.mediaObject.errorString()) else: QtGui.QMessageBox.warning(self, "Error", self.mediaObject.errorString())
elif newState == Phonon.PlayingState: self.playAction.setEnabled(False) self.pauseAction.setEnabled(True) self.stopAction.setEnabled(True)
elif newState == Phonon.StoppedState: self.stopAction.setEnabled(False) self.playAction.setEnabled(True) self.pauseAction.setEnabled(False) self.timeLcd.display("00:00")
elif newState == Phonon.PausedState: self.pauseAction.setEnabled(False) self.stopAction.setEnabled(True) self.playAction.setEnabled(True)
def tick(self, time): displayTime = QtCore.QTime(0, (time / 60000) % 60, (time / 1000) % 60) self.timeLcd.display(displayTime.toString('mm:ss'))
def setupActions(self): self.playAction = QtGui.QAction( self.style().standardIcon(QtGui.QStyle.SP_MediaPlay), "Play", self, shortcut="Ctrl+P", enabled=False, triggered=self.mediaObject.play)
self.pauseAction = QtGui.QAction( self.style().standardIcon(QtGui.QStyle.SP_MediaPause), "Pause", self, shortcut="Ctrl+A", enabled=False, triggered=self.mediaObject.pause)
self.stopAction = QtGui.QAction( self.style().standardIcon(QtGui.QStyle.SP_MediaStop), "Stop", self, shortcut="Ctrl+S", enabled=False, triggered=self.mediaObject.stop)
def setupUi(self): bar = QtGui.QToolBar()
bar.addAction(self.playAction) bar.addAction(self.pauseAction) bar.addAction(self.stopAction)
self.seekSlider = Phonon.SeekSlider(self) self.seekSlider.setMediaObject(self.mediaObject)
self.volumeSlider = Phonon.VolumeSlider(self) self.volumeSlider.setAudioOutput(self.audioOutput) self.volumeSlider.setSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Maximum)
volumeLabel = QtGui.QLabel() #volumeLabel.setPixmap(QtGui.QPixmap('images/volume.png'))
self.title = QtGui.QLabel() self.title.setAlignment(QtCore.Qt.AlignCenter)
palette = QtGui.QPalette() palette.setBrush(QtGui.QPalette.Light, QtCore.Qt.darkGray)
self.timeLcd = QtGui.QLCDNumber() #self.timeLcd.setFixedSize(35,35) self.timeLcd.setPalette(palette)
seekerLayout = QtGui.QVBoxLayout() seekerLayout.addWidget(self.title) seekerLayout.addWidget(self.seekSlider)
playbackLayout = QtGui.QHBoxLayout() playbackLayout.addWidget(bar) playbackLayout.addStretch() playbackLayout.addWidget(volumeLabel) playbackLayout.addWidget(self.volumeSlider)
mainLayout = QtGui.QVBoxLayout() mainLayout.addLayout(seekerLayout) mainLayout.addLayout(playbackLayout) mainLayout.addWidget(self.timeLcd)
widget = QtGui.QWidget() widget.setLayout(mainLayout) self.setLayout(mainLayout) self.setWindowTitle("Audio Player")