MciSendCommand无法播放(打开)同一个文件两次

 1 使用MCI API,源文件中需要包含头文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入库 Winmm.lib。 

2  MciSendCommand 初始化->打开->播放 一个文件后,停止->关闭->析构;二次创建,开启播放同名的这个文件的时候,是播放不了的,当你再次打开这个文件的时候会报错;

当你使用文件名作为启动标志的时候,他只允许一个文件OPEN一次;如果想要让这个文件在开关(构造析构)之间多次播放,需要借助一个唯一标识符

MCI_OPEN_PARMS ->lpstrAlias ->(唯一的标识,即便是两次播放用的同一个文件,但是文件标识也要不一样,并且每次播放一个文件都要一个独立不重复的标识“01123456”,诸如此类;

如果你每次播放一个文件都是重启动程序,就不需要唯一标识,但是在程序进行中,多次播放(多次OPEN)不同的文件或者相同的文件,则需要唯一标识,这里尤其是同名文件多次open;异名文件如果每个文件只播放一次,由于文件名可以作为open的标识,所以不需要GUID这种唯一标识,因为名字本来就不重复)

mciSendCommand OPEN的时候,使用 :MCI_OPEN_ELEMENT | MCI_OPEN_ALIAS

构造-open【file】-playsound【MCI_PLAY】-pause-stopplay【MCI_STOP】-close -析构

可以在网上找到一些相关GUID的代码。

 3 MciSendCommand这个命令可以播放,暂停,定位,甚至是播放视频;但是年代过于久远。不太推荐使用。因为你会发现当你播放一些网络音频时候,有的MP3它能播放,但是有些他却播放不了。尤其是帧头含有大量丰富信息的那种;

4 https://docs.microsoft.com/zh-cn/windows/win32/multimedia/about-mci  官网

5 如果你想连续多次播放,可以选择循环播放的命令,也可以“停止”后继续playsound 

原文地址:https://www.cnblogs.com/8335IT/p/14794076.html