2009-07-04 10 views
7

J'ai essayé toute la journée de trouver la bibliothèque Phonon de Qt avec Python. Mon but à long terme est de voir si je pourrais l'obtenir pour jouer un flux mms: //, mais puisque je ne trouve pas une implémentation de ceci faite n'importe où, je vais comprendre cette partie moi-même. (Je pensais que je l'avais mis dehors si quelqu'un en savait plus à ce sujet spécifiquement, sinon pas grand-chose.)Jouer du mp3 avec Python, PyQt et Phonon

De toute façon, je me suis dit que je travaillerais en arrière à partir d'un exemple de travail que j'ai trouvé en ligne. Cela lance un navigateur de fichiers et jouera le fichier mp3 spécifié. Je voulais effacer les choses du navigateur de fichiers et l'amener à l'essentiel de l'exécution du script et de le faire lire un fichier MP3 avec un chemin codé en dur.

Je suppose que mon problème est un malentendu de setCurrentSource() et en spécifiant les types de données. (Voir: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/phonon-mediasource.html#fileName)

Je garde ma question un peu large parce que toute aide avec la compréhension de Phonon serait grandement appréciée.

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 &)"), 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() 

Répondre

2

Phonon prend en charge différents formats de fichiers audio sur différentes plates-formes, en utilisant le propre support pour les formats de médias du système, il est possible que votre système ne fournit pas les bibliothèques pour la lecture de fichiers MP3. Certes, le format MP3 n'est pas pris en charge dès sa sortie sur certaines distributions Linux. Si vous utilisez Linux, s'il vous plaît jeter un oeil à la page suivante pour des informations sur l'activation du support MP3:

http://doc.qt.io/qt-4.8/phonon-overview.html#linux

Une autre façon de diagnostiquer les problèmes avec les formats de médias de Phonon est d'exécuter l'exemple des capacités fourni avec Qt:

http://doc.qt.io/qt-4.8///qt-phonon-capabilities-example.html

Cela devrait vous dire quels sont les formats de médias sont pris en charge par votre système.

1

Dans la méthode delayedInit; créer MediaObject comme suit:

def delayedInit(self): 
    if not self.m_media: 
     self.m_media = Phonon.createPlayer(Phonon.MusicCategory) 
0

Si Phonon n'émet pas audio ou vidéo, mais pas jeter des erreurs. Vous devrez peut-être sudo apt-get install phonon-backend-gstreamer et peut-être sudo apt-get install libphonon-dev

Phonon utilise un backend de gstreamer ou vlc silencieusement, donc quand il n'est pas là, pas d'erreurs mais pas de fonctionnalité non plus. après avoir exécuté ces commandes, j'ai pu entendre le son de phonon sur mon framboise pi

Espérons que cela aidera quelqu'un dans le futur.

Questions connexes