无法在 C++ 控制台应用程序中使用 mciSendString 播放 mp3

Cannot play mp3 with mciSendString in C++ console application

我正在尝试从 win32 C++ 控制台应用程序播放 mp3 文件。根据我在网上阅读的内容,mciSendString 是我正在寻找的 API,我希望以下内容能够工作,但事实并非如此。

#include <cstdio>
#include <array>

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <mmsystem.h>
using namespace std;

#pragma comment(lib, "Winmm.lib")

int main() {
    std::array<char, MAXERRORLENGTH> errorString;
    mciGetErrorStringA(
        mciSendStringA(
            "open \"C:\path\to\1_.mp3\" type mpegvideo alias click1",
            nullptr,
            0,
            nullptr),
        errorString.data(),
        MAXERRORLENGTH);
    std::printf("%s\n", errorString.data());
    mciGetErrorStringA(
        mciSendStringA("play click1", nullptr, 0, nullptr),
        errorString.data(),
        MAXERRORLENGTH);
    std::printf("%s\n", errorString.data());
}

我在 Visual Studio 2019 年创建了一个新的 C++ 控制台应用程序,构建了这段代码,然后 运行 它来自控制台。它打印:

The specified command was carried out.
The specified command was carried out.

我在耳机中听到了短暂的爆破声,仅此而已。会发生什么?我是否需要先配置音频设备?设置音量?

您的程序将在您调用 mci 命令后结束。进程退出时音乐将停止播放。

只需在程序末尾添加一些内容以防止其退出。

而不是这个:

    std::printf("%s\n", errorString.data());
}

这个:

    std::printf("%s\n", errorString.data());
    
    printf("press ctrl-c to exit");
    while (1) {
        Sleep(1000);
    }
}