title: Play mp3 using Python, PyQt, and Phonon
body: <p>I been trying all day to figure out the Qt's Phonon library with Python. </p>
  
  <p>My long term goal is to see if I could get it to play a mms:// stream, but since I can't find an implementation of this done anywhere, I will figure that part out myself. (figured I'd put it out there if anyone knew more about this specifically, if not no big deal.)</p>
  
  <p>Anyway, I figured I'd work backwards from a working example I found online. This launches a file browser and will play the mp3 file specified. I wanted to strip out the file browser stuff and get it down to the essentials of executing the script and having it play an Mp3 file with a hardcoded path.</p>
  
  <p>I'm assuming my problem is a misunderstanding of setCurrentSource() and specifying the data types. (see: <a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/phonon-mediasource.html#fileName" rel="noreferrer">http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/phonon-mediasource.html#fileName</a>)</p>
  
  <p>I'm keeping my question kind of broad because ANY help with understanding Phonon would be greatly appreciated.       </p>
  
  <pre><code>import sys
  
  from PyQt4.QtGui import QApplication, QMainWindow, QDirModel, QColumnView
  from PyQt4.QtGui import QFrame
  from PyQt4.QtCore import SIGNAL
  from PyQt4.phonon import Phonon
  
  class MainWindow(QMainWindow):
  
      m_model = QDirModel()
  
      def __init__(self):
          QMainWindow.__init__(self)
          self.m_fileView = QColumnView(self)
          self.m_media = None
  
          self.setCentralWidget(self.m_fileView)
          self.m_fileView.setModel(self.m_model)
          self.m_fileView.setFrameStyle(QFrame.NoFrame)
  
          self.connect(self.m_fileView,
              SIGNAL("updatePreviewWidget(const QModelIndex &amp;)"), self.play)
  
      def play(self, index):
          self.delayedInit()
          self.m_media.setCurrentSource(
              Phonon.MediaSource(self.m_model.filePath(index)))
          self.m_media.play()
  
      def delayedInit(self):
          if not self.m_media:
              self.m_media = Phonon.MediaObject(self)
              audioOutput = Phonon.AudioOutput(Phonon.MusicCategory, self)
              Phonon.createPath(self.m_media, audioOutput)
  
  def main():
      app = QApplication(sys.argv)
      QApplication.setApplicationName("Phonon Tutorial 2 (Python)")
      mw = MainWindow()
      mw.show()
      sys.exit(app.exec_())
  
  if __name__ == '__main__':
      main()
  </code></pre>