Библиотека mpg123 с Qt - PullRequest
       28

Библиотека mpg123 с Qt

1 голос
/ 24 декабря 2010

Я хочу добавить поддержку воспроизведения mp3-файлов в моем приложении Qt для встроенного Linux.

Я не могу использовать фонон в Qt. После добавления QT + = phonon в .pro-файл выдает следующую ошибку при компиляции: /usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/libphonon.so: неопределенная ссылка на `QWidget :: x11Event (_XEvent *) '

/ usr / lib / gcc / i486-linux-gnu / 4.4.1 /../../../../ lib / libphonon.so: неопределенная ссылка на `QDataStream :: QDataStream (QByteArray *, ИНТ) '

collect2: ld вернул 1 статус выхода

Так что теперь я думаю об использовании библиотеки mpg123 для декодирования mp3-файлов.

Мне нужна помощь по интеграции библиотеки в Qt. Я никогда раньше не использовал чистую библиотеку c ++ в Qt, поэтому у меня нет особых идей о том, как ее интегрировать.

Ответы [ 2 ]

1 голос
/ 28 декабря 2010

Привет всем !!Наконец-то я понял это !!

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

        }
    }
}
0 голосов
/ 24 декабря 2010

Чтобы заставить mpg123 работать с вашим проектом QT, попробуйте выполнить следующие шаги:

1. Загрузите и установите mpg123: из папки, в которую вы его распаковали, (например, /home/mpg123-1.13.0/) запустите ./configure и затем "sudo make install"

2.Если нет ошибок, поместите эту строку в ваш * .pro файл

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

3. затем приведенный ниже код должен работать нормально:

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

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

в качестве альтернативы вы можете вызвать mpg123 через системный вызов:

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

надеюсь, это поможет, с уважением

...