QThread и Фонон

Я пишу приложение с графическим интерфейсом C++, используя Qt Creator (на основе 32-разрядной версии QT 4.8.0). Моя цель — создать приложение, которое воспроизводит звуки природы случайным образом, с различными атрибутами для каждого звука. Я пытаюсь использовать библиотеку Phonon для воспроизведения этих звуков.

У меня есть класс ZooKeeper, который наследуется от общедоступного QThread. У этого класса есть основная работающая функция, которая зацикливается:

while(true)
{
   ManageCritters();
   QThread::msleep(10);
}

Внутри функции ManageCritters(); я проигрываю звуковые файлы на основе имени файла, характерного для конкретного животного в данный момент времени. Вот как я его выполняю:

// create our media objects and an audio-output
Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
Phonon::AudioOutput *autioOut = new Phonon::AudioOutput(Phonon::MusicCategory, this);

// link the two together
Phonon::createPath(mediaObject, audioOut);

// set our audio source to the filename we want to play
mediaObject->setCurrentSource(filename);

// play the audio file
mediaObject->play();

Все это компилируется просто отлично, однако я получаю ошибку времени выполнения:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QThread(0x82c7e48), parent's thread is QThread(0x8166ee8), current thread is QThread(0x82c7e48)
WARNING: Phonon needs QCoreApplication::applicationName to be set to export audio output names through the DBUS interface 
KGlobal::locale() must be called from the main thread before using i18n() in threads. KApplication takes care of this. If not using KApplication, call KGlobal::locale() during initialization.
The program has unexpectedly finished.

Похоже, я не понимаю, как настроить воспроизведение звука в QThreads, но я не вижу, где возникает ошибка и как ее исправить.

Должен ли я иметь другую настройку для обработки аудиовоспроизведения? Это все ООП. У меня есть еще один класс под названием Critter(), который представляет отдельное существо (жука, птицу и т. д.). В идеале я хотел бы, чтобы каждый «тварь» обрабатывал собственное воспроизведение звука (сделайте воспроизведение звука функцией класса Critter()). Но я не уверен, как заставить этот класс Critter() ссылаться на библиотеку Phonon и воспроизводить аудиофайлы.

Есть ли какие-либо предложения или пример кода?


person lightningmanic    schedule 30.01.2013    source источник
comment
Возможно, вы захотите держаться подальше от фонона, если это новая сборка, поскольку в Qt5 нет фонона.   -  person Phil Hannent    schedule 30.01.2013
comment
Полезно знать — есть ли другая аудиобиблиотека, которая поддерживает регулировку баланса и регулировку высоты тона?   -  person lightningmanic    schedule 30.01.2013
comment
Я не знаю, я играю только основные звуковые файлы. Я планирую перейти на QtMultiMedia QAudioOutput qt-project.org/doc/qt- 4.8/qaudiooutput.html   -  person Phil Hannent    schedule 31.01.2013


Ответы (1)


положи это

QCoreApplication::setApplicationName( "phonon" );

в приведенном выше коде, прежде чем создавать медиа-объект

person fadli    schedule 02.04.2013