C++ mciSendString是否必须有;“等等”;为了听到声音?

C++ mciSendString是否必须有;“等等”;为了听到声音?,c++,audio,mp3,audio-player,mci,C++,Audio,Mp3,Audio Player,Mci,我正在尝试使用mci函数编写一个mp3播放器 当我尝试播放带有“wait”标志的mp3文件时,我可以听到该文件,但其他所有内容都会被卡住,直到文件播放结束。如果我删除“wait”标志,我可以继续工作,但什么也听不见 以下是代码示例: unsigned long __stdcall PlayThread(void *myParam) { char* nameOfMp3 = (char*)myParam; char* cmd = new char[MAX_PATH]; sp

我正在尝试使用mci函数编写一个mp3播放器

当我尝试播放带有“wait”标志的mp3文件时,我可以听到该文件,但其他所有内容都会被卡住,直到文件播放结束。如果我删除“wait”标志,我可以继续工作,但什么也听不见

以下是代码示例:

unsigned long __stdcall PlayThread(void *myParam)
{

    char* nameOfMp3 = (char*)myParam;
    char* cmd = new char[MAX_PATH];
    sprintf(cmd,"open \"%s\" type MPEGvideo alias myFile",nameOfMp3);

    mciSendString(cmd,NULL,0,0);
    mciSendString("play myFile wait",NULL,0,0);//here is the "wait" flag
    mciSendString("close myFile",NULL,0,0);

    return 0;
}
我删除了对mci的返回值的检查,但是我已经检查了它们,并且在这两种情况下它们都很好


我做错什么了吗?

如果您删除
等待
标志,您就不能让下一行关闭您的文件(
关闭我的文件
),因为您没有给播放留出时间

启用此标志确实允许您等待调用的函数完成。您可以实际播放文件的原因。如果您将其移除,它将启动播放,并在关闭后立即

要在使用后关闭文件,您需要等待或测试媒体是否已播放完毕。您可以通过定期测试
状态
来实现这一点,方法是执行以下
mciSendString(“状态myFile模式”)
。可能的值为“未准备就绪”、“暂停”、“播放”和“停止”,如中所述

我认为你有足够的信息来完成它;)

快乐编码