Domanda

Voglio il supporto aggiuntivo per la riproduzione di file mp3 nella mia app Qt per Linux embedded.

Non sono in grado di utilizzare fononi in Qt. Dopo aver aggiunto QT + = fononi in .pro file, mi dà l'errore seguente durante la compilazione: /usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/libphonon.so: undefined reference to `QWidget :: x11Event (_XEvent *) '

/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / libphonon.so: undefined reference to `QDataStream :: QDataStream (QByteArray *, int) '

collect2: ld returned 1 exit status

Così ora sto pensando di utilizzare il lib mpg123 per decodificare i file mp3.

I bisogno di aiuto integrando la libreria in Qt. Non ho mai usato un c biblioteca pura ++ in Qt prima quindi non ho molto idea su come integrarla.

È stato utile?

Soluzione

Ciao a tutti !! Finalmente ho capito !!

int MP3Player::Init(const char *pFileName)

{

    mpg123_init();

    m_mpgHandle = mpg123_new(0, 0);
    if(mpg123_open(m_mpgHandle, pFileName) != MPG123_OK)
    {
        qFatal("Cannot open %s: %s", pFileName, mpg123_strerror(m_mpgHandle));
        return 0;
    }
}

int MP3Player::Play()

{

    unsigned char *audio;
    int mc;
    size_t bytes;
    qWarning("play_frame");


    static unsigned char* arr = 0;

    /* The first call will not decode anything but return MPG123_NEW_FORMAT! */

    mc = mpg123_decode_frame(m_mpgHandle, &m_framenum, &audio, &bytes);

    if(bytes)
    {

        /* Normal flushing of data, includes buffer decoding. */

        /*This function is my already implemented audio class which uses ALSA to output decoded audio to Sound Card*/
        if (m_audioPlayer.Play(arr,bytes) < (int)bytes) 
        {
            qFatal("Deep trouble! Cannot flush to my output anymore!");
        }

    }
    /* Special actions and errors. */
    if(mc != MPG123_OK)
    {
        if(mc == MPG123_ERR)
        {
            qFatal("...in decoding next frame: %s", mpg123_strerror(m_mpgHandle));
            return CSoundDecoder::EOFStream;

        }
        if(mc == MPG123_DONE)
        {
            return CSoundDecoder::EOFStream;
        }
        if(mc == MPG123_NO_SPACE)
        {
            qFatal("I have not enough output space? I didn't plan for this.");
            return CSoundDecoder::EOFStream;
        }
        if(mc == MPG123_NEW_FORMAT)
        {
            long iFrameRate;
            int encoding;
            mpg123_getformat(m_mpgHandle, &iFrameRate, &m_iChannels, &encoding);

            m_iBytesPerChannel = mpg123_encsize(encoding);

            if (m_iBytesPerChannel == 0)
                qFatal("bytes per channel is 0 !!");

            m_audioPlayer.Init(m_iChannels , iFrameRate , m_iBytesPerChannel);

        }
    }
}

Altri suggerimenti

Al fine di ottenere mpg123 di lavoro con il progetto QT si tenta seguenti operazioni:

1.download ed installare mpg123: dalla cartella in cui è stato estratto a (es /home/mpg123-1.13.0/) ./configure run e poi "sudo make install"

2.if non ci sono errori mettere questa riga al file * .pro

LIBS += /usr/local/lib/libmpg123.so

3.Then codice qui sotto dovrebbe funzionare bene per voi:

#include "mpg123.h"
#include <QDebug>

void MainWindow::on_pushButton_2_clicked()
{
    const char **decoders = mpg123_decoders();
    while (*decoders != NULL)
    {
        qDebug() << *decoders;
        decoders++;
    }
}

In alternativa è possibile chiamare mpg123 tramite chiamata di sistema:

system("mpg123 /home/test.mp3"); 

Spero che questo aiuti, saluti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top