mciSendString是否必须具有“ wait”才能听到声音?

Dav*_*vid 3 c++ audio mp3 mci audio-player

我正在尝试使用mci函数编写mp3播放器。(win 7 64bit,vs2010,c ++)

当我尝试播放带有“等待”标志的mp3文件时,我可以听到该文件,但其他所有内容都会卡住,直到文件结束播放为止,如果我删除了“等待”标志,我可以继续工作但听不到任何声音。

这是代码示例:

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;
}
Run Code Online (Sandbox Code Playgroud)

我删除了对mci推荐返回值的检查,但是我已经对其进行了仔细检查,在两种情况下都可以。

难道我做错了什么?

Dar*_*rse 5

如果删除wait标记,则close myFile由于没有给播放时间留出时间,因此下一行不能关闭文件()。

启用此标志后,您实际上可以等待被调用函数完成。您实际上可以播放文件的原因。如果您删除了它,它将开始播放并在关闭后立即播放。

要在使用后关闭文件,您需要以某种方式等待或测试媒体播放完毕。您可以status通过执行以下定期测试来实现此目的mciSendString("status myFile mode")。可能的值为状态文档中所述的“未准备好”,“已暂停”,“正在播放”和“已停止” 。

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

快乐的编码。