0

我正在使用 Qt Creator(基于 32 位 QT 4.8.0)编写 C++ GUI 应用程序。我的目标是创建一个随机播放自然声音的应用程序,每种声音都有不同的属性。我正在尝试使用 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 库并播放音频文件。

有什么建议或示例代码吗?

4

1 回答 1

1

把这个

QCoreApplication::setApplicationName( "phonon" );

在你创建媒体对象之前的上面的代码

于 2013-04-02T02:55:18.973 回答