2009-07-04 36 views
7

He intentado todo el día descubrir la biblioteca Phonon de Qt con Python.Reproduzca mp3 utilizando Python, PyQt y Phonon

Mi objetivo a largo plazo es ver si puedo hacer que reproduzca una secuencia de mms: //, pero como no puedo encontrar una implementación de esto en ningún lado, me haré una idea de esa parte. (Pensé en ponerlo ahí si alguien sabía más sobre esto específicamente, si no es nada del otro mundo.)

De todos modos, pensé que había que trabajar hacia atrás a partir de un ejemplo de trabajo he encontrado en Internet. Esto inicia un buscador de archivos y reproducirá el archivo mp3 especificado. Quería quitar las cosas del navegador de archivos y llevarlo a lo esencial de ejecutar el script y hacer que reproduzca un archivo Mp3 con una ruta de acceso codificada.

Supongo que mi problema es un malentendido de setCurrentSource() y especificando los tipos de datos. (ver: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/phonon-mediasource.html#fileName)

Estoy manteniendo mi pregunta como algo amplio porque CUALQUIER ayuda para entender a Phonon sería muy apreciada.

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() 

Respuesta

2

Phonon es compatible con diferentes formatos de archivo de audio en diferentes plataformas, utilizando el propio soporte del sistema para formatos de medios, por lo que podría ser que su sistema no proporciona bibliotecas para la reproducción de archivos MP3. Ciertamente, el MP3 no se admite de forma inmediata en algunas distribuciones de Linux. Si está utilizando Linux, por favor, eche un vistazo a la página siguiente para obtener información sobre cómo activar el soporte para MP3:

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

Otra forma de diagnosticar problemas con los formatos de medios de Phonon es ejecutar el ejemplo capacidades proporcionadas con Qt:

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

Esto debe decirle qué formatos de los medios de comunicación son compatibles con su sistema.

1

En delayedInit método; crear MediaObject como siguiente:

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

Si Phonon no envía audio o video, pero no tirar ningún error. Puede que solo tenga que sudo apt-get install phonon-backend-gstreamer y también sudo apt-get install libphonon-dev

Phonon utiliza un servidor de gstreamer o vlc en silencio, por lo que cuando no está allí, no hay errores pero tampoco funciona. después de ejecutar esos comandos, pude escuchar el sonido de phonon en mi raspberry pi

Espero que esto ayude a alguien en el futuro.