mciSendString必须“等待”才能听到声音吗?

时间:2013-06-06 12:53:01

标签: c++ audio mp3 audio-player mci

我正在尝试使用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;
}

我删除了mci表彰的返回值的检查,但我已经把它们弄得很糟糕,两种情况都没问题。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

如果您删除wait标记,则无法关闭文件的下一行(close myFile),因为您没有给出播放时间。< / p>

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

要在使用后关闭文件,您需要以某种方式等待或测试您的媒体播放完毕。您可以通过执行以下status定期测试mciSendString("status myFile mode")来实现此目的。可能的值是&#34;未准备好&#34;,&#34;暂停&#34;,&#34;播放&#34;,&#34;停止&#34;如status documentation

中所述

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

快乐的编码。