Russian Qt Forum

Qt => Мультимедиа => Тема начата: bez_glaz от Август 01, 2012, 11:11



Название: Phonon + очередь
Отправлено: bez_glaz от Август 01, 2012, 11:11
Добрый день.
Собственно есть проект, где по определённому событию должны воспроизводиться звуки, но в большом проекте косяк - воспроизводиться только одна аудиозапись, далее на события от колонок нет реакции.
Решил накидать простенькую прогу дабы прощупать Phonon.
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this);
    m_mediaObject = new Phonon::MediaObject(this);
    Phonon::createPath(m_mediaObject, m_audioOutput);
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(Bla()));
}

......
......
......

void MainWindow::Bla()
{
    QString str;
    str = "qwe.wav";
    switch (m_mediaObject->state())
    {
    case 0: //begin
    {
        m_mediaObject->enqueue(str);
        m_mediaObject->play();
        break;
    }
    case 2: //play
    {
        m_mediaObject->enqueue(str);
        m_mediaObject->play();
        break;
    }
    case 4: //pause
    {
      m_mediaObject->stop();
      m_mediaObject->enqueue(str);
      m_mediaObject->play();
      break;
    }
    }
}
Создал форму где 1 кнопка и 1 лейбл. Кнопка отвечает за вызов слота Bla(), лейбл показывает текущее состояние m_mediaObject->state().
И получается следущая картина маслом. При загрузке программы в лейбле вижу "0" - "LoadingState".
При нажатии кнопки лейбл показывает "PlayingState" - звук воспроизводиться. Жду пока закончится дорожка, лейбл показывает "PausedState". Жму ещё раз кнопку - аналогичная ситуация. Всё отрабатывается идеально.
Но... Если я жму кнопку когда дорожка ещё  не закончила вопроизведение - ничего не происходит, очередь не изменяется. Могу добиться повторного вопроизведения только после окончания дорожки и повторного нажатии клавиши. В чём косяк ? И ещё если я изменяю
Код:
   ...
 case 2: //play
    {
        m_mediaObject->pause();
        m_mediaObject->play();
        break;

    }...
В лейбле отображается статус паузы и всё, воспроизведение не продолжается! Почему ?


Название: Re: Phonon + очередь
Отправлено: Bepec от Август 01, 2012, 12:00
Попробуй между pause и play поставить qApp->processEvents();


Название: Re: Phonon + очередь
Отправлено: bez_glaz от Август 01, 2012, 12:12
Попробуй между pause и play поставить qApp->processEvents();
спс помогло, а в кратце можно пояснить что сие есть ?
И остался открытым вопрос с очередью!!??


Название: Re: Phonon + очередь
Отправлено: Bepec от Август 01, 2012, 12:24
Про очередь не читал. А у вас всё просто - эти функции ставят в очередь сообщений действия пауза и плей. У вас пауза не успевала отработать походу и плей впустую отрабатывал.
processEvents принудительно заставляет обработать сообщения в очереди. И пауза у тебя сейчас нормально отрабатывает.
 

PS c фононом не работал. Цимуса твоего вопроса тоже не понял. Извиняй.


Название: Re: Phonon + очередь
Отправлено: bez_glaz от Август 01, 2012, 12:35
спс ещё раз
жду ещё ответов по поводу очереди.