声音在部署时无法播放QSoundEffect

时间:2014-06-12 19:27:00

标签: windows qt audio qt5

我遇到了一个我很难调试的问题。我的程序需要不时播放声音(通常一次重叠多个声音文件)。我主要在mac上开发,并且mac版本工作正常(使用Qt附带的macdeployqt实用程序打包),但是windows build只会在编译它的机器上播放声音。我把它运到测试中的每个人都没有得到任何声音(虽然我已经确认它正确地找到声音文件,所以它绝对不是那样)。

在启动时(从主窗口构造函数调用)我像这样加载每个文件:

QSoundEffect *tmpSfx = new QSoundEffect();
QUrl pathAsURL;
pathAsURL = pathAsURL.fromLocalFile(fileList.at(i).absoluteFilePath());
if (tmpSfx)
{
    qDebug() << "path" << pathAsURL;
    tmpSfx->setSource(pathAsURL);
    tmpSfx->setLoopCount(1);
    tmpSfx->setVolume(0.4);
 // tmpSfx->play();
    qDebug() << "is loaded" << tmpSfx->isLoaded();
    SoundsList.append(tmpSfx)

SoundsList是QList<QSoundEffect *>

然后当我需要播放声音时,我打电话给:

SoundsList.at(SoundIndex)->play();

在Windows上,我将应用程序作为zip文件分发,并附带所有必需的Qt DLL。至少,我认为的所有Qt DLL都是必需的。

Qt5Core.dll
Qt5Gui.dll
Qt5Multimedia.dll
Qt5Network.dll
Qt5Widgets.dll
icudt52.dll
icuin52.dll
icuuc52.dll
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
platforms\qwindows.dll

我错过了什么明显的东西吗?

在我用来构建它的机器上运行时,它工作正常。当在没有DLL在同一文件夹中的同一台机器上运行时,它会失败,除非我从Qt Creator运行它,这就是我如何计算出大多数DLL的依赖关系。当它从任何其他Windows机器运行时,它运行得很好,没有错误,但也没有声音输出。

它是用Qt 5.2编写的,使用Creator和MinGW构建。

2 个答案:

答案 0 :(得分:1)

很可能你错过了位于plugins \ audio \ qtaudio_windows.dll中的qtaudio_windows.dll。部署后,它应该位于名为&#34; audio&#34;的子文件夹中的应用程序目录中。

答案 1 :(得分:0)

问题很可能在于您处理文件的方式。你可以在设置之后打印pathAsURL的值,看看它的设置是什么,但是解决这样的文件通常是一个坏习惯,因为文件的路径很可能被硬编码到你计算机上的位置。而是将程序中使用的文件作为资源导入。