C++ mciSendString播放音乐报错


#include <Windows.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")

int main()
{
    mciSendString("open E:\\VScode\\music.mp3", NULL, 0, NULL);
}

报错如图:

img

img

播放源的路径没有错,第一次用这个模块,求指教该怎么解决这个问题。

gcc不认#pragma,需要在task.json的配置args里加参数“-lwinmm”

新建个项目试试

根据您提供的信息,您在尝试使用mciSendString函数播放音乐文件时遇到了链接错误(ld returned 1 exitstatus)。这个错误通常是由于编译器无法找到指定的函数或库引起的。

在您的代码中,您使用了#pragma comment(lib, "winmm.lib")来链接winmm.lib库,该库包含了mciSendString函数的实现。然而,根据错误信息,链接器似乎无法找到这个库。

要解决这个问题,您可以尝试以下几个步骤:

确保您在编译时选择了正确的平台和编译器。winmm.lib库是Windows多媒体库的一部分,它通常在Windows平台下使用Visual Studio编译器进行编译。请确保您使用的编译器和平台与代码兼容。

检查是否正确链接了winmm.lib库。在Visual Studio中,您可以通过以下步骤来添加库文件:

打开项目属性页面(右键点击项目 -> 属性 或通过解决方案资源管理器中的右键菜单打开)
导航到 "链接器" -> "输入"
在 "附加依赖项" 下添加 "winmm.lib"(不包括引号)
在 "链接器" -> "常规" -> "附加库目录" 中添加 "winmm.lib" 的路径(通常是C:\Windows\System32\winmm.lib)
确保您的代码中正确引用了mmsystem.h头文件,并且没有其他的编译错误。

尝试在项目设置中添加-lwinmm标志来明确指定链接到winmm库。在Visual Studio中,您可以在项目属性页的 "链接器" -> "常规" -> "附加链接器选项" 中添加该标志。

在完成上述步骤后,重新编译并运行您的代码,看看是否解决了链接错误。如果问题仍然存在,请提供更多的错误信息和编译器设置,以便我能够更进一步地帮助您。

以下是一个示例代码,演示了如何使用mciSendString函数播放音乐文件:

#include <Windows.h>  
#include <mmsystem.h>  
#pragma comment(lib, "winmm.lib")  
  
int main()  
{  
    // 打开音乐文件路径  
    mciSendString("open \"E:\\VScode\\music.mp3\" type MPEGVideo alias music", NULL, 0, NULL);  
  
    // 播放音乐  
    mciSendString("music play", NULL, 0, NULL);  
  
    // 等待音乐播放结束  
    while (mciSendString("status music mode", NULL, 0, NULL) == MCI_MODE_STOP) {  
        Sleep(100);  
    }  
  
    return 0;  
}

请注意,上述代码中的音乐文件路径需要使用双反斜杠("E:\VScode\music.mp3")或者单斜杠("E:/VScode/music.mp3")来表示,以避免由于转义字符引起的问题。

希望这可以帮助您成功播放音乐文件。如果您有任何其他问题或需要进一步的帮助,请随时询问。

【相关推荐】



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/1063548
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:[c++] mciSendString 执行成功 没有声音
  • 除此之外, 这篇博客: mciSendString函数简介(播放音乐以及录音相关操作)中的  1.播放功能 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    这里我的当前音乐文件相对路径 kk.mp3 , 如果想要播放这个音乐,我们可以通过open与play这两个指令进行播放。

    	mciSendString("open kk.mp3 alias music", 0, 0, 0);//alias是别名的意思,下面就可以去直接用music来代替kk.mp3
    	mciSendString("play music", 0, 0, 0);//播放音乐

     在打开文件时我以及给这个mp3文件取了别名,下面我是直接用music来表示这个文件的名字.

    如果我们想重复播放音乐,那么就直接在play music后面加上repeat 就行了

    mciSendString("open kk.mp3 alias music", 0, 0, 0);
    mciSendString("play music repeat", 0, 0, 0);

    如果我们想等播放完了音乐在接着执行下面的语句,那就在play music后面加上wait

    mciSendString("open kk.mp3 alias music", 0, 0, 0);
    mciSendString("play music wait", 0, 0, 0);

    如果想播放视频,全屏播放加上fullscreen就OK

    mciSendString("play music fullscreen", 0, 0, 0);

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^