我正在使用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库并播放音频文件。
是否有任何建议或示例代码?
把这个
QCoreApplication::setApplicationName( "phonon" );
在你创建媒体对象之前的代码的上面