【问题标题】:Does mciSendString must have "wait" in order to hear sound?mciSendString 是否必须“等待”才能听到声音?
【发布时间】:2013-06-06 12:53:00
【问题描述】:

我正在尝试使用 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 推荐的返回值的检查,但我已经检查了它们,它们在两种情况下都很好。

我做错了吗?

【问题讨论】:

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


    【解决方案1】:

    如果您删除 wait 标志,则不能让下一行关闭您的文件 (close myFile),因为您没有给播放时间。

    打开这个标志,确实可以让你等到被调用的函数完成。您实际上可以播放文件的原因。如果您将其移除,它将开始播放并在关闭后立即。

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

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

    编码愉快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多