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

Posted 邗影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 

以上是关于MciSendCommand无法播放(打开)同一个文件两次的主要内容,如果未能解决你的问题,请参考以下文章

如何用mciSendCommand()/mciSendString() 函数指定声卡播放音乐

mciSendCommand函数每次都调用失败

用c或c++播放wav文件,怎么实现

播放音频文件

用MCI处置WAV视频时,怎样才能让视频在当前窗口播放

mp4的视频打开可以播放在页面上无法打开