Russian Qt Forum
Ноябрь 22, 2024, 22:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Phonon + очередь  (Прочитано 3475 раз)
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;

    }...
В лейбле отображается статус паузы и всё, воспроизведение не продолжается! Почему ?
Записан
Bepec
Гость
« Ответ #1 : Август 01, 2012, 12:00 »

Попробуй между pause и play поставить qApp->processEvents();
Записан
bez_glaz
Гость
« Ответ #2 : Август 01, 2012, 12:12 »

Попробуй между pause и play поставить qApp->processEvents();
спс помогло, а в кратце можно пояснить что сие есть ?
И остался открытым вопрос с очередью!!??
Записан
Bepec
Гость
« Ответ #3 : Август 01, 2012, 12:24 »

Про очередь не читал. А у вас всё просто - эти функции ставят в очередь сообщений действия пауза и плей. У вас пауза не успевала отработать походу и плей впустую отрабатывал.
processEvents принудительно заставляет обработать сообщения в очереди. И пауза у тебя сейчас нормально отрабатывает.
 

PS c фононом не работал. Цимуса твоего вопроса тоже не понял. Извиняй.
Записан
bez_glaz
Гость
« Ответ #4 : Август 01, 2012, 12:35 »

спс ещё раз
жду ещё ответов по поводу очереди.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 21.